@campxdev/react-native-blueprint 0.1.23 → 0.1.24
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/global.css +3 -3
- package/lib/global.css +1 -1
- package/lib/module/assets/icons/Image.png +0 -0
- package/lib/module/components/DataDisplay/Avatar/Avatar.js +1 -1
- package/lib/module/components/DataDisplay/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/DataDisplay/Banner/Banner.figma.js +17 -3
- package/lib/module/components/DataDisplay/Banner/Banner.figma.js.map +1 -1
- package/lib/module/components/DataDisplay/Banner/Banner.js +138 -34
- package/lib/module/components/DataDisplay/Banner/Banner.js.map +1 -1
- package/lib/module/components/DataDisplay/CalendarItem/CalendarItem.js +2 -2
- package/lib/module/components/DataDisplay/CalendarItem/CalendarItem.js.map +1 -1
- package/lib/module/components/DataDisplay/Card/Card.figma.js +11 -4
- package/lib/module/components/DataDisplay/Card/Card.figma.js.map +1 -1
- package/lib/module/components/DataDisplay/Card/Card.js +119 -65
- package/lib/module/components/DataDisplay/Card/Card.js.map +1 -1
- package/lib/module/components/DataDisplay/ChatBubble/ChatBubble.figma.js +54 -0
- package/lib/module/components/DataDisplay/ChatBubble/ChatBubble.figma.js.map +1 -0
- package/lib/module/components/DataDisplay/ChatBubble/ChatBubble.js +318 -0
- package/lib/module/components/DataDisplay/ChatBubble/ChatBubble.js.map +1 -0
- package/lib/module/components/DataDisplay/ChatBubble/index.js +4 -0
- package/lib/module/components/DataDisplay/ChatBubble/index.js.map +1 -0
- package/lib/module/components/DataDisplay/FeedCard/AttachmentDetails.js +69 -0
- package/lib/module/components/DataDisplay/FeedCard/AttachmentDetails.js.map +1 -0
- package/lib/module/components/DataDisplay/FeedCard/FeedCard.figma.js +19 -17
- package/lib/module/components/DataDisplay/FeedCard/FeedCard.figma.js.map +1 -1
- package/lib/module/components/DataDisplay/FeedCard/FeedCard.js +30 -19
- package/lib/module/components/DataDisplay/FeedCard/FeedCard.js.map +1 -1
- package/lib/module/components/DataDisplay/Greeting/Greeting.figma.js +5 -5
- package/lib/module/components/DataDisplay/Greeting/Greeting.figma.js.map +1 -1
- package/lib/module/components/DataDisplay/Greeting/Greeting.js +46 -70
- package/lib/module/components/DataDisplay/Greeting/Greeting.js.map +1 -1
- package/lib/module/components/DataDisplay/ProfileCard/ProfileCard.figma.js +16 -0
- package/lib/module/components/DataDisplay/ProfileCard/ProfileCard.figma.js.map +1 -0
- package/lib/module/components/DataDisplay/ProfileCard/ProfileCard.js +111 -0
- package/lib/module/components/DataDisplay/ProfileCard/ProfileCard.js.map +1 -0
- package/lib/module/components/DataDisplay/ProfileCard/index.js +4 -0
- package/lib/module/components/DataDisplay/ProfileCard/index.js.map +1 -0
- package/lib/module/components/Input/Button/Button.js +77 -129
- package/lib/module/components/Input/Button/Button.js.map +1 -1
- package/lib/module/components/Navigation/Appbar/AppBar.figma.js +18 -6
- package/lib/module/components/Navigation/Appbar/AppBar.figma.js.map +1 -1
- package/lib/module/components/Navigation/Appbar/AppBar.js +36 -9
- package/lib/module/components/Navigation/Appbar/AppBar.js.map +1 -1
- package/lib/module/components/Navigation/Popover/Popover.js +1 -1
- package/lib/module/components/Navigation/Popover/Popover.js.map +1 -1
- package/lib/module/components/ui/index.js +2 -0
- package/lib/module/components/ui/index.js.map +1 -1
- package/lib/module/lib/theme.js +2 -2
- package/lib/module/patterns/pattern-components/AccountPattern/AccountPattern.figma.js +196 -0
- package/lib/module/patterns/pattern-components/AccountPattern/AccountPattern.figma.js.map +1 -0
- package/lib/module/patterns/pattern-components/AccountPattern/AccountPattern.js +255 -0
- package/lib/module/patterns/pattern-components/AccountPattern/AccountPattern.js.map +1 -0
- package/lib/module/patterns/pattern-components/AccountPattern/index.js +4 -0
- package/lib/module/patterns/pattern-components/AccountPattern/index.js.map +1 -0
- package/lib/module/patterns/pattern-components/CalendarPattern/CalendarPattern.figma.js +1 -1
- package/lib/module/patterns/pattern-components/CardListPattern/CardListPattern.js +2 -4
- package/lib/module/patterns/pattern-components/CardListPattern/CardListPattern.js.map +1 -1
- package/lib/module/patterns/pattern-components/FeedPattern/FeedPattern.figma.js +144 -0
- package/lib/module/patterns/pattern-components/FeedPattern/FeedPattern.figma.js.map +1 -0
- package/lib/module/patterns/pattern-components/FeedPattern/FeedPattern.js +213 -0
- package/lib/module/patterns/pattern-components/FeedPattern/FeedPattern.js.map +1 -0
- package/lib/module/patterns/pattern-components/FeedPattern/index.js +4 -0
- package/lib/module/patterns/pattern-components/FeedPattern/index.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.figma.js +70 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.figma.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.js +260 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/index.js +4 -0
- package/lib/module/patterns/pattern-components/HomeFacultyPattern/index.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/HomeParentPattern.figma.js +82 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/HomeParentPattern.figma.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/HomeParentPattern.js +256 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/HomeParentPattern.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/index.js +4 -0
- package/lib/module/patterns/pattern-components/HomeParentPattern/index.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.figma.js +73 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.figma.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.js +283 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.js.map +1 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/index.js +4 -0
- package/lib/module/patterns/pattern-components/HomeStudentPattern/index.js.map +1 -0
- package/lib/module/patterns/pattern-components/index.js +5 -0
- package/lib/module/patterns/pattern-components/index.js.map +1 -1
- package/package.json +27 -1
- package/src/assets/icons/Image.png +0 -0
- package/src/components/DataDisplay/Avatar/Avatar.tsx +24 -21
- package/src/components/DataDisplay/Banner/Banner.figma.tsx +18 -3
- package/src/components/DataDisplay/Banner/Banner.tsx +153 -26
- package/src/components/DataDisplay/CalendarItem/CalendarItem.tsx +2 -2
- package/src/components/DataDisplay/Card/Card.figma.tsx +7 -3
- package/src/components/DataDisplay/Card/Card.tsx +152 -101
- package/src/components/DataDisplay/ChatBubble/ChatBubble.figma.tsx +54 -0
- package/src/components/DataDisplay/ChatBubble/ChatBubble.tsx +404 -0
- package/src/components/DataDisplay/ChatBubble/index.ts +8 -0
- package/src/components/DataDisplay/FeedCard/AttachmentDetails.tsx +96 -0
- package/src/components/DataDisplay/FeedCard/FeedCard.figma.tsx +17 -15
- package/src/components/DataDisplay/FeedCard/FeedCard.tsx +66 -35
- package/src/components/DataDisplay/Greeting/Greeting.figma.tsx +5 -5
- package/src/components/DataDisplay/Greeting/Greeting.tsx +58 -96
- package/src/components/DataDisplay/ProfileCard/ProfileCard.figma.tsx +17 -0
- package/src/components/DataDisplay/ProfileCard/ProfileCard.tsx +173 -0
- package/src/components/DataDisplay/ProfileCard/index.ts +1 -0
- package/src/components/Input/Button/Button.tsx +71 -157
- package/src/components/Navigation/Appbar/AppBar.figma.tsx +18 -6
- package/src/components/Navigation/Appbar/AppBar.tsx +58 -13
- package/src/components/Navigation/Popover/Popover.tsx +3 -3
- package/src/components/ui/index.ts +2 -0
- package/src/lib/theme.ts +2 -2
- package/src/patterns/pattern-components/AccountPattern/AccountPattern.figma.tsx +193 -0
- package/src/patterns/pattern-components/AccountPattern/AccountPattern.tsx +301 -0
- package/src/patterns/pattern-components/AccountPattern/index.ts +1 -0
- package/src/patterns/pattern-components/CalendarPattern/CalendarPattern.figma.tsx +1 -1
- package/src/patterns/pattern-components/CardListPattern/CardListPattern.tsx +4 -9
- package/src/patterns/pattern-components/FeedPattern/FeedPattern.figma.tsx +146 -0
- package/src/patterns/pattern-components/FeedPattern/FeedPattern.tsx +264 -0
- package/src/patterns/pattern-components/FeedPattern/index.ts +2 -0
- package/src/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.figma.tsx +66 -0
- package/src/patterns/pattern-components/HomeFacultyPattern/HomeFacultyPattern.tsx +326 -0
- package/src/patterns/pattern-components/HomeFacultyPattern/index.ts +2 -0
- package/src/patterns/pattern-components/HomeParentPattern/HomeParentPattern.figma.tsx +75 -0
- package/src/patterns/pattern-components/HomeParentPattern/HomeParentPattern.tsx +328 -0
- package/src/patterns/pattern-components/HomeParentPattern/index.ts +2 -0
- package/src/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.figma.tsx +66 -0
- package/src/patterns/pattern-components/HomeStudentPattern/HomeStudentPattern.tsx +355 -0
- package/src/patterns/pattern-components/HomeStudentPattern/index.ts +2 -0
- package/src/patterns/pattern-components/index.ts +5 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { AccountPattern } from './AccountPattern';
|
|
3
|
+
|
|
4
|
+
const FIGMA_URL =
|
|
5
|
+
'https://www.figma.com/design/YTb27Onq7Zk8OV16fHptxJ/Campx-App?node-id=417-194764';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* AccountPattern - Account/Profile screen layout pattern
|
|
9
|
+
*
|
|
10
|
+
* Use cases:
|
|
11
|
+
* - User account and profile management screens
|
|
12
|
+
* - Settings and preferences pages
|
|
13
|
+
* - Account information dashboards
|
|
14
|
+
* - Categorized account options (Academics, Finance, Utilities)
|
|
15
|
+
*
|
|
16
|
+
* Features:
|
|
17
|
+
* - User profile card at the top with name and ID
|
|
18
|
+
* - Multiple grouped sections with data list items
|
|
19
|
+
* - Support for custom sections (Academics, Finance, Utilities, etc.)
|
|
20
|
+
* - Full customization of section items and properties
|
|
21
|
+
* - Scrollable layout for long content
|
|
22
|
+
* - All sections independently configurable
|
|
23
|
+
*
|
|
24
|
+
* Customization:
|
|
25
|
+
* - Show/hide profile card
|
|
26
|
+
* - Customize user profile information
|
|
27
|
+
* - Add, remove, or customize sections
|
|
28
|
+
* - Configure each item's visibility toggles and actions
|
|
29
|
+
* - Set up callbacks for profile and item interactions
|
|
30
|
+
* - Adapt content based on user role or backend data
|
|
31
|
+
*/
|
|
32
|
+
figma.connect(AccountPattern, FIGMA_URL, {
|
|
33
|
+
example: () => (
|
|
34
|
+
<AccountPattern
|
|
35
|
+
showProfileCard={true}
|
|
36
|
+
userName="Marshall Mathers"
|
|
37
|
+
userID="3472732323"
|
|
38
|
+
avatarInitials="MM"
|
|
39
|
+
avatarType="image"
|
|
40
|
+
sections={[
|
|
41
|
+
{
|
|
42
|
+
id: 'academics',
|
|
43
|
+
title: 'Academics',
|
|
44
|
+
items: [
|
|
45
|
+
{
|
|
46
|
+
id: '1',
|
|
47
|
+
title: 'Data List Row Title',
|
|
48
|
+
subtitle: 'Data List Row Subtitle',
|
|
49
|
+
meta: 'Meta Content',
|
|
50
|
+
density: 'comfortable',
|
|
51
|
+
state: 'default',
|
|
52
|
+
showSubtitle: true,
|
|
53
|
+
showLeading: true,
|
|
54
|
+
showTrailing: true,
|
|
55
|
+
showDivider: true,
|
|
56
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: '2',
|
|
60
|
+
title: 'Data List Row Title',
|
|
61
|
+
subtitle: 'Data List Row Subtitle',
|
|
62
|
+
meta: 'Meta Content',
|
|
63
|
+
density: 'comfortable',
|
|
64
|
+
state: 'default',
|
|
65
|
+
showSubtitle: true,
|
|
66
|
+
showLeading: true,
|
|
67
|
+
showTrailing: true,
|
|
68
|
+
showDivider: true,
|
|
69
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: '3',
|
|
73
|
+
title: 'Data List Row Title',
|
|
74
|
+
subtitle: 'Data List Row Subtitle',
|
|
75
|
+
meta: 'Meta Content',
|
|
76
|
+
density: 'comfortable',
|
|
77
|
+
state: 'default',
|
|
78
|
+
showSubtitle: true,
|
|
79
|
+
showLeading: true,
|
|
80
|
+
showTrailing: true,
|
|
81
|
+
showDivider: true,
|
|
82
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: '4',
|
|
86
|
+
title: 'Data List Row Title',
|
|
87
|
+
subtitle: 'Data List Row Subtitle',
|
|
88
|
+
meta: 'Meta Content',
|
|
89
|
+
density: 'comfortable',
|
|
90
|
+
state: 'default',
|
|
91
|
+
showSubtitle: true,
|
|
92
|
+
showLeading: true,
|
|
93
|
+
showTrailing: true,
|
|
94
|
+
showDivider: true,
|
|
95
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'finance',
|
|
101
|
+
title: 'Finance',
|
|
102
|
+
items: [
|
|
103
|
+
{
|
|
104
|
+
id: '5',
|
|
105
|
+
title: 'Data List Row Title',
|
|
106
|
+
subtitle: 'Data List Row Subtitle',
|
|
107
|
+
meta: 'Meta Content',
|
|
108
|
+
density: 'comfortable',
|
|
109
|
+
state: 'default',
|
|
110
|
+
showSubtitle: true,
|
|
111
|
+
showLeading: true,
|
|
112
|
+
showTrailing: true,
|
|
113
|
+
showDivider: true,
|
|
114
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: '6',
|
|
118
|
+
title: 'Data List Row Title',
|
|
119
|
+
subtitle: 'Data List Row Subtitle',
|
|
120
|
+
meta: 'Meta Content',
|
|
121
|
+
density: 'comfortable',
|
|
122
|
+
state: 'default',
|
|
123
|
+
showSubtitle: true,
|
|
124
|
+
showLeading: true,
|
|
125
|
+
showTrailing: true,
|
|
126
|
+
showDivider: true,
|
|
127
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: '7',
|
|
131
|
+
title: 'Data List Row Title',
|
|
132
|
+
subtitle: 'Data List Row Subtitle',
|
|
133
|
+
meta: 'Meta Content',
|
|
134
|
+
density: 'comfortable',
|
|
135
|
+
state: 'default',
|
|
136
|
+
showSubtitle: true,
|
|
137
|
+
showLeading: true,
|
|
138
|
+
showTrailing: true,
|
|
139
|
+
showDivider: true,
|
|
140
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: 'utilities',
|
|
146
|
+
title: 'Utilities',
|
|
147
|
+
items: [
|
|
148
|
+
{
|
|
149
|
+
id: '8',
|
|
150
|
+
title: 'Data List Row Title',
|
|
151
|
+
subtitle: 'Data List Row Subtitle',
|
|
152
|
+
meta: 'Meta Content',
|
|
153
|
+
density: 'comfortable',
|
|
154
|
+
state: 'default',
|
|
155
|
+
showSubtitle: true,
|
|
156
|
+
showLeading: true,
|
|
157
|
+
showTrailing: true,
|
|
158
|
+
showDivider: true,
|
|
159
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: '9',
|
|
163
|
+
title: 'Data List Row Title',
|
|
164
|
+
subtitle: 'Data List Row Subtitle',
|
|
165
|
+
meta: 'Meta Content',
|
|
166
|
+
density: 'comfortable',
|
|
167
|
+
state: 'default',
|
|
168
|
+
showSubtitle: true,
|
|
169
|
+
showLeading: true,
|
|
170
|
+
showTrailing: true,
|
|
171
|
+
showDivider: true,
|
|
172
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: '10',
|
|
176
|
+
title: 'Data List Row Title',
|
|
177
|
+
subtitle: 'Data List Row Subtitle',
|
|
178
|
+
meta: 'Meta Content',
|
|
179
|
+
density: 'comfortable',
|
|
180
|
+
state: 'default',
|
|
181
|
+
showSubtitle: true,
|
|
182
|
+
showLeading: true,
|
|
183
|
+
showTrailing: true,
|
|
184
|
+
showDivider: true,
|
|
185
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
]}
|
|
190
|
+
onProfilePress={() => console.log('Profile pressed')}
|
|
191
|
+
/>
|
|
192
|
+
),
|
|
193
|
+
});
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { View, ScrollView, type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { ProfileCard } from '../../../components/DataDisplay/ProfileCard/ProfileCard';
|
|
5
|
+
import { DataListItem } from '../../../components/DataDisplay/DataListItem/DataListItem';
|
|
6
|
+
import { Text } from '../../../components/Input/Text/Text';
|
|
7
|
+
|
|
8
|
+
/* ============================================================================
|
|
9
|
+
* Types
|
|
10
|
+
* ============================================================================ */
|
|
11
|
+
|
|
12
|
+
export type AccountSectionItem = {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
subtitle: string;
|
|
16
|
+
meta?: string;
|
|
17
|
+
density?: 'comfortable' | 'compact';
|
|
18
|
+
state?: 'default' | 'pressed' | 'selected' | 'disabled';
|
|
19
|
+
showSubtitle?: boolean;
|
|
20
|
+
showLeading?: boolean;
|
|
21
|
+
showTrailing?: boolean;
|
|
22
|
+
showDivider?: boolean;
|
|
23
|
+
leadingImage?: { uri: string };
|
|
24
|
+
leadingIcon?: any;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type AccountSection = {
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
items: AccountSectionItem[];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type AccountPatternProps = {
|
|
34
|
+
// Profile section
|
|
35
|
+
showProfileCard?: boolean;
|
|
36
|
+
userName?: string;
|
|
37
|
+
userID?: string;
|
|
38
|
+
avatarInitials?: string;
|
|
39
|
+
avatarType?: 'image' | 'initials';
|
|
40
|
+
onProfilePress?: () => void;
|
|
41
|
+
|
|
42
|
+
// Sections
|
|
43
|
+
sections?: AccountSection[];
|
|
44
|
+
|
|
45
|
+
// Styling
|
|
46
|
+
style?: StyleProp<ViewStyle>;
|
|
47
|
+
testID?: string;
|
|
48
|
+
className?: never;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/* ============================================================================
|
|
52
|
+
* Component
|
|
53
|
+
* ============================================================================ */
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* AccountPattern Component
|
|
57
|
+
*
|
|
58
|
+
* A comprehensive account/profile layout pattern that displays:
|
|
59
|
+
* - User profile card at the top with name and ID
|
|
60
|
+
* - Multiple grouped sections with DataList items
|
|
61
|
+
* - Support for Academics, Finance, Utilities, and custom sections
|
|
62
|
+
* - Full customization of sections and items
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```tsx
|
|
66
|
+
* <AccountPattern
|
|
67
|
+
* showProfileCard={true}
|
|
68
|
+
* userName="Marshall Mathers"
|
|
69
|
+
* userID="3472732323"
|
|
70
|
+
* sections={[...]}
|
|
71
|
+
* />
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function AccountPattern({
|
|
75
|
+
// Profile section
|
|
76
|
+
showProfileCard = true,
|
|
77
|
+
userName = 'Marshall Mathers',
|
|
78
|
+
userID = '3472732323',
|
|
79
|
+
avatarInitials = 'MM',
|
|
80
|
+
avatarType = 'image',
|
|
81
|
+
onProfilePress,
|
|
82
|
+
|
|
83
|
+
// Sections
|
|
84
|
+
sections = [
|
|
85
|
+
{
|
|
86
|
+
id: 'academics',
|
|
87
|
+
title: 'Academics',
|
|
88
|
+
items: [
|
|
89
|
+
{
|
|
90
|
+
id: '1',
|
|
91
|
+
title: 'Data List Row Title',
|
|
92
|
+
subtitle: 'Data List Row Subtitle',
|
|
93
|
+
meta: 'Meta Content',
|
|
94
|
+
density: 'comfortable',
|
|
95
|
+
state: 'default',
|
|
96
|
+
showSubtitle: true,
|
|
97
|
+
showLeading: true,
|
|
98
|
+
showTrailing: true,
|
|
99
|
+
showDivider: true,
|
|
100
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: '2',
|
|
104
|
+
title: 'Data List Row Title',
|
|
105
|
+
subtitle: 'Data List Row Subtitle',
|
|
106
|
+
meta: 'Meta Content',
|
|
107
|
+
density: 'comfortable',
|
|
108
|
+
state: 'default',
|
|
109
|
+
showSubtitle: true,
|
|
110
|
+
showLeading: true,
|
|
111
|
+
showTrailing: true,
|
|
112
|
+
showDivider: true,
|
|
113
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: '3',
|
|
117
|
+
title: 'Data List Row Title',
|
|
118
|
+
subtitle: 'Data List Row Subtitle',
|
|
119
|
+
meta: 'Meta Content',
|
|
120
|
+
density: 'comfortable',
|
|
121
|
+
state: 'default',
|
|
122
|
+
showSubtitle: true,
|
|
123
|
+
showLeading: true,
|
|
124
|
+
showTrailing: true,
|
|
125
|
+
showDivider: true,
|
|
126
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: '4',
|
|
130
|
+
title: 'Data List Row Title',
|
|
131
|
+
subtitle: 'Data List Row Subtitle',
|
|
132
|
+
meta: 'Meta Content',
|
|
133
|
+
density: 'comfortable',
|
|
134
|
+
state: 'default',
|
|
135
|
+
showSubtitle: true,
|
|
136
|
+
showLeading: true,
|
|
137
|
+
showTrailing: true,
|
|
138
|
+
showDivider: true,
|
|
139
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
id: 'finance',
|
|
145
|
+
title: 'Finance',
|
|
146
|
+
items: [
|
|
147
|
+
{
|
|
148
|
+
id: '5',
|
|
149
|
+
title: 'Data List Row Title',
|
|
150
|
+
subtitle: 'Data List Row Subtitle',
|
|
151
|
+
meta: 'Meta Content',
|
|
152
|
+
density: 'comfortable',
|
|
153
|
+
state: 'default',
|
|
154
|
+
showSubtitle: true,
|
|
155
|
+
showLeading: true,
|
|
156
|
+
showTrailing: true,
|
|
157
|
+
showDivider: true,
|
|
158
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: '6',
|
|
162
|
+
title: 'Data List Row Title',
|
|
163
|
+
subtitle: 'Data List Row Subtitle',
|
|
164
|
+
meta: 'Meta Content',
|
|
165
|
+
density: 'comfortable',
|
|
166
|
+
state: 'default',
|
|
167
|
+
showSubtitle: true,
|
|
168
|
+
showLeading: true,
|
|
169
|
+
showTrailing: true,
|
|
170
|
+
showDivider: true,
|
|
171
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: '7',
|
|
175
|
+
title: 'Data List Row Title',
|
|
176
|
+
subtitle: 'Data List Row Subtitle',
|
|
177
|
+
meta: 'Meta Content',
|
|
178
|
+
density: 'comfortable',
|
|
179
|
+
state: 'default',
|
|
180
|
+
showSubtitle: true,
|
|
181
|
+
showLeading: true,
|
|
182
|
+
showTrailing: true,
|
|
183
|
+
showDivider: true,
|
|
184
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'utilities',
|
|
190
|
+
title: 'Utilities',
|
|
191
|
+
items: [
|
|
192
|
+
{
|
|
193
|
+
id: '8',
|
|
194
|
+
title: 'Data List Row Title',
|
|
195
|
+
subtitle: 'Data List Row Subtitle',
|
|
196
|
+
meta: 'Meta Content',
|
|
197
|
+
density: 'comfortable',
|
|
198
|
+
state: 'default',
|
|
199
|
+
showSubtitle: true,
|
|
200
|
+
showLeading: true,
|
|
201
|
+
showTrailing: true,
|
|
202
|
+
showDivider: true,
|
|
203
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
id: '9',
|
|
207
|
+
title: 'Data List Row Title',
|
|
208
|
+
subtitle: 'Data List Row Subtitle',
|
|
209
|
+
meta: 'Meta Content',
|
|
210
|
+
density: 'comfortable',
|
|
211
|
+
state: 'default',
|
|
212
|
+
showSubtitle: true,
|
|
213
|
+
showLeading: true,
|
|
214
|
+
showTrailing: true,
|
|
215
|
+
showDivider: true,
|
|
216
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: '10',
|
|
220
|
+
title: 'Data List Row Title',
|
|
221
|
+
subtitle: 'Data List Row Subtitle',
|
|
222
|
+
meta: 'Meta Content',
|
|
223
|
+
density: 'comfortable',
|
|
224
|
+
state: 'default',
|
|
225
|
+
showSubtitle: true,
|
|
226
|
+
showLeading: true,
|
|
227
|
+
showTrailing: true,
|
|
228
|
+
showDivider: true,
|
|
229
|
+
leadingImage: { uri: 'https://example.com/avatar.png' },
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
|
|
235
|
+
// Styling
|
|
236
|
+
style,
|
|
237
|
+
testID,
|
|
238
|
+
}: AccountPatternProps) {
|
|
239
|
+
return (
|
|
240
|
+
<ScrollView
|
|
241
|
+
testID={testID ?? 'account-pattern'}
|
|
242
|
+
style={[{ flex: 1, backgroundColor: '#f7f8fa' }, style]}
|
|
243
|
+
showsVerticalScrollIndicator={false}
|
|
244
|
+
contentContainerStyle={{ paddingVertical: 20 }}
|
|
245
|
+
>
|
|
246
|
+
<View className="gap-8 px-5">
|
|
247
|
+
{/* Profile Card Section */}
|
|
248
|
+
{showProfileCard && (
|
|
249
|
+
<View>
|
|
250
|
+
<ProfileCard
|
|
251
|
+
userName={userName}
|
|
252
|
+
userID={userID}
|
|
253
|
+
avatarInitials={avatarInitials}
|
|
254
|
+
avatarType={avatarType}
|
|
255
|
+
onPress={onProfilePress}
|
|
256
|
+
/>
|
|
257
|
+
</View>
|
|
258
|
+
)}
|
|
259
|
+
|
|
260
|
+
{/* Sections */}
|
|
261
|
+
{sections.map((section) => (
|
|
262
|
+
<View key={section.id} className="gap-2">
|
|
263
|
+
{/* Section Title */}
|
|
264
|
+
<Text className="text-sm font-semibold text-text-secondary px-5">
|
|
265
|
+
{section.title}
|
|
266
|
+
</Text>
|
|
267
|
+
|
|
268
|
+
{/* Section Items */}
|
|
269
|
+
<View className="gap-3 px-5">
|
|
270
|
+
{section.items.map((item) => (
|
|
271
|
+
<View key={item.id}>
|
|
272
|
+
<DataListItem
|
|
273
|
+
title={item.title}
|
|
274
|
+
subtitle={item.subtitle}
|
|
275
|
+
meta={item.meta}
|
|
276
|
+
density={item.density || 'comfortable'}
|
|
277
|
+
state={item.state || 'default'}
|
|
278
|
+
showSubtitle={item.showSubtitle}
|
|
279
|
+
showLeading={item.showLeading}
|
|
280
|
+
showTrailing={item.showTrailing}
|
|
281
|
+
showDivider={item.showDivider}
|
|
282
|
+
leadingImage={item.leadingImage}
|
|
283
|
+
leadingIcon={item.leadingIcon}
|
|
284
|
+
onPress={() => {}}
|
|
285
|
+
/>
|
|
286
|
+
</View>
|
|
287
|
+
))}
|
|
288
|
+
</View>
|
|
289
|
+
</View>
|
|
290
|
+
))}
|
|
291
|
+
|
|
292
|
+
{/* Bottom Spacer */}
|
|
293
|
+
<View style={{ height: 150 }} />
|
|
294
|
+
</View>
|
|
295
|
+
</ScrollView>
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
AccountPattern.displayName = 'AccountPattern';
|
|
300
|
+
|
|
301
|
+
export type { AccountPatternProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AccountPattern';
|
|
@@ -3,7 +3,7 @@ import figma from '@figma/code-connect';
|
|
|
3
3
|
import { CalendarPattern } from './CalendarPattern';
|
|
4
4
|
|
|
5
5
|
const FIGMA_URL =
|
|
6
|
-
'https://www.figma.com/design/66WaqopqU3WXgwVtyQuTUf/React-Native-Blueprint-Library?node-id=
|
|
6
|
+
'https://www.figma.com/design/66WaqopqU3WXgwVtyQuTUf/React-Native-Blueprint-Library?node-id=416-3544';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* CalendarPattern - Daily schedule calendar view pattern
|
|
@@ -53,11 +53,8 @@ export interface CardListPatternProps {
|
|
|
53
53
|
/** Data for CardList */
|
|
54
54
|
data: CardItem[];
|
|
55
55
|
|
|
56
|
-
/** Card
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
/** Card tone variant */
|
|
60
|
-
cardTone?: CardProps['tone'];
|
|
56
|
+
/** Card size variant */
|
|
57
|
+
cardSize?: CardProps['size'];
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
/* -----------------------------------------------------
|
|
@@ -97,8 +94,7 @@ export const CardListPattern = ({
|
|
|
97
94
|
chips = [],
|
|
98
95
|
banners = [],
|
|
99
96
|
data,
|
|
100
|
-
|
|
101
|
-
cardTone = 'default',
|
|
97
|
+
cardSize = 'lg',
|
|
102
98
|
}: CardListPatternProps) => {
|
|
103
99
|
return (
|
|
104
100
|
<View style={{ flex: 1, gap: 16 }}>
|
|
@@ -111,6 +107,7 @@ export const CardListPattern = ({
|
|
|
111
107
|
{data.map((item) => (
|
|
112
108
|
<Card
|
|
113
109
|
key={item.id}
|
|
110
|
+
size={cardSize}
|
|
114
111
|
title={item.title}
|
|
115
112
|
subtitle={item.subtitle}
|
|
116
113
|
body={item.body}
|
|
@@ -124,8 +121,6 @@ export const CardListPattern = ({
|
|
|
124
121
|
showFooterActions={item.showFooterActions ?? true}
|
|
125
122
|
showLeading={item.showLeading ?? true}
|
|
126
123
|
showOverflowMenu={item.showOverflowMenu ?? true}
|
|
127
|
-
density={cardDensity}
|
|
128
|
-
tone={cardTone}
|
|
129
124
|
onPrimaryActionPress={item.onPrimaryActionPress}
|
|
130
125
|
onSecondaryActionPress={item.onSecondaryActionPress}
|
|
131
126
|
onOverflowPress={item.onOverflowPress}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { FeedPattern } from './FeedPattern';
|
|
3
|
+
|
|
4
|
+
const FIGMA_URL =
|
|
5
|
+
'https://www.figma.com/design/YTb27Onq7Zk8OV16fHptxJ/Campx-App?node-id=347-117374';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* FeedPattern - Social feed layout pattern
|
|
9
|
+
*
|
|
10
|
+
* Use cases:
|
|
11
|
+
* - Social media feeds (announcements, posts, updates)
|
|
12
|
+
* - News feeds and content discovery
|
|
13
|
+
* - Community boards and discussion forums
|
|
14
|
+
* - Activity feeds for notifications and updates
|
|
15
|
+
* - Multiple content type feeds (announcements, posts, events)
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Horizontal scrollable chips filter for content categories
|
|
19
|
+
* - Vertical scrollable feed with multiple content types
|
|
20
|
+
* - Multiple FeedCard variations (with/without media, badges, actions)
|
|
21
|
+
* - Support for both announcement and post types
|
|
22
|
+
* - Floating action button for creating new content
|
|
23
|
+
* - Fully customizable feed items and chip filters
|
|
24
|
+
* - All sections independently configurable
|
|
25
|
+
*
|
|
26
|
+
* Customization:
|
|
27
|
+
* - Show/hide chips filter and floating action button
|
|
28
|
+
* - Customize chip labels and selection state
|
|
29
|
+
* - Add, remove, or customize feed items
|
|
30
|
+
* - Configure each feed item's visibility toggles
|
|
31
|
+
* - Set up callbacks for chip selection and item interaction
|
|
32
|
+
* - Adapt content based on user selection or backend data
|
|
33
|
+
*/
|
|
34
|
+
figma.connect(FeedPattern, FIGMA_URL, {
|
|
35
|
+
example: () => (
|
|
36
|
+
<FeedPattern
|
|
37
|
+
showChipsFilter={true}
|
|
38
|
+
chips={[
|
|
39
|
+
{ id: '1', label: 'Announcements', state: 'selected' as const },
|
|
40
|
+
{ id: '2', label: 'Posts', state: 'default' as const },
|
|
41
|
+
{ id: '3', label: 'Events', state: 'default' as const },
|
|
42
|
+
{ id: '4', label: 'Updates', state: 'default' as const },
|
|
43
|
+
]}
|
|
44
|
+
showFloatingActionButton={true}
|
|
45
|
+
feedItems={[
|
|
46
|
+
{
|
|
47
|
+
id: '1',
|
|
48
|
+
type: 'announcement',
|
|
49
|
+
authorName: 'Author Name',
|
|
50
|
+
postTitle: 'Post Title',
|
|
51
|
+
subtitle: 'Subtitle of the card goes here',
|
|
52
|
+
postContent:
|
|
53
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
54
|
+
showHeader: true,
|
|
55
|
+
showPostContent: true,
|
|
56
|
+
showBody: true,
|
|
57
|
+
showBadges: true,
|
|
58
|
+
showFooterActions: true,
|
|
59
|
+
showLeading: true,
|
|
60
|
+
showSubtitle: true,
|
|
61
|
+
showSecondaryButton: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: '2',
|
|
65
|
+
type: 'post',
|
|
66
|
+
authorName: 'Author Name',
|
|
67
|
+
postTitle: 'Post Title',
|
|
68
|
+
subtitle: 'Subtitle of the card goes here',
|
|
69
|
+
postContent:
|
|
70
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
71
|
+
showMedia: true,
|
|
72
|
+
showHeader: true,
|
|
73
|
+
showPostContent: true,
|
|
74
|
+
showBadges: true,
|
|
75
|
+
showLeading: true,
|
|
76
|
+
showSubtitle: true,
|
|
77
|
+
showSecondaryButton: true,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: '3',
|
|
81
|
+
type: 'announcement',
|
|
82
|
+
authorName: 'Author Name',
|
|
83
|
+
postTitle: 'Post Title',
|
|
84
|
+
subtitle: 'Subtitle of the card goes here',
|
|
85
|
+
postContent:
|
|
86
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
87
|
+
showPostContent: true,
|
|
88
|
+
showBody: true,
|
|
89
|
+
showLeading: true,
|
|
90
|
+
showSubtitle: true,
|
|
91
|
+
showSecondaryButton: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: '4',
|
|
95
|
+
type: 'post',
|
|
96
|
+
authorName: 'Author Name',
|
|
97
|
+
postTitle: 'Post Title',
|
|
98
|
+
subtitle: 'Subtitle of the card goes here',
|
|
99
|
+
postContent:
|
|
100
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
101
|
+
showMedia: true,
|
|
102
|
+
showHeader: true,
|
|
103
|
+
showBadges: true,
|
|
104
|
+
showLeading: true,
|
|
105
|
+
showSubtitle: true,
|
|
106
|
+
showSecondaryButton: true,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: '5',
|
|
110
|
+
type: 'announcement',
|
|
111
|
+
authorName: 'Author Name',
|
|
112
|
+
postTitle: 'Post Title',
|
|
113
|
+
subtitle: 'Subtitle of the card goes here',
|
|
114
|
+
postContent:
|
|
115
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
116
|
+
showHeader: true,
|
|
117
|
+
showPostContent: true,
|
|
118
|
+
showBody: true,
|
|
119
|
+
showBadges: true,
|
|
120
|
+
showFooterActions: true,
|
|
121
|
+
showLeading: true,
|
|
122
|
+
showSubtitle: true,
|
|
123
|
+
showSecondaryButton: true,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: '6',
|
|
127
|
+
type: 'post',
|
|
128
|
+
authorName: 'Author Name',
|
|
129
|
+
postTitle: 'Post Title',
|
|
130
|
+
subtitle: 'Subtitle of the card goes here',
|
|
131
|
+
postContent:
|
|
132
|
+
'The card may contain body content which can be truncated to 1-2 lines. Swap Content in Props.',
|
|
133
|
+
showMedia: true,
|
|
134
|
+
showHeader: true,
|
|
135
|
+
showPostContent: true,
|
|
136
|
+
showBody: true,
|
|
137
|
+
showBadges: true,
|
|
138
|
+
showFooterActions: true,
|
|
139
|
+
showLeading: true,
|
|
140
|
+
showSubtitle: true,
|
|
141
|
+
showSecondaryButton: true,
|
|
142
|
+
},
|
|
143
|
+
]}
|
|
144
|
+
/>
|
|
145
|
+
),
|
|
146
|
+
});
|