react-native-elearn-ui 0.1.20 → 0.1.21

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.
@@ -2,4 +2,5 @@
2
2
 
3
3
  export { HomeScreen } from "./HomeScreen.js";
4
4
  export { QBankTopicScreen } from "./qbank/QBankTopicScreen.js";
5
+ export { QBankSubTopicScreen } from "./qbank/QBankSubTopicScreen.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HomeScreen","QBankTopicScreen"],"sourceRoot":"../../../src","sources":["screens/index.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,gBAAgB,QAAQ,6BAA0B","ignoreList":[]}
1
+ {"version":3,"names":["HomeScreen","QBankTopicScreen","QBankSubTopicScreen"],"sourceRoot":"../../../src","sources":["screens/index.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,gBAAgB,QAAQ,6BAA0B;AAC3D,SAASC,mBAAmB,QAAQ,gCAA6B","ignoreList":[]}
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+
3
+ import React, { useState } from 'react';
4
+ import { View, ScrollView, StyleSheet, TouchableOpacity, StatusBar, FlatList } from 'react-native';
5
+ import { SafeAreaView } from 'react-native-safe-area-context';
6
+ import { useTheme } from "../../context/ThemeContext.js";
7
+ import { Typography, Icon } from "../../components/index.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export const QBankSubTopicScreen = ({
10
+ params,
11
+ hideHeader = false,
12
+ onBack,
13
+ onPressModule,
14
+ onPressFilter
15
+ }) => {
16
+ const theme = useTheme();
17
+ const [activeFilter, setActiveFilter] = useState(params.activeFilter || params.filters[0]);
18
+ const handleFilterPress = filter => {
19
+ setActiveFilter(filter);
20
+ onPressFilter?.(filter);
21
+ };
22
+ const renderFilterChip = ({
23
+ item: filter
24
+ }) => {
25
+ const isActive = activeFilter === filter;
26
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
27
+ style: [styles.filterChip, isActive ? {
28
+ backgroundColor: theme.primary,
29
+ borderColor: theme.primary
30
+ } : {
31
+ borderColor: '#E2E8F0'
32
+ }],
33
+ onPress: () => handleFilterPress(filter),
34
+ children: /*#__PURE__*/_jsx(Typography, {
35
+ variant: "body",
36
+ color: isActive ? '#FFFFFF' : theme.textSecondary,
37
+ style: styles.filterChipText,
38
+ children: filter
39
+ })
40
+ });
41
+ };
42
+ return /*#__PURE__*/_jsxs(SafeAreaView, {
43
+ style: [styles.container, {
44
+ backgroundColor: '#F8FAFC'
45
+ }],
46
+ edges: ['top'],
47
+ children: [/*#__PURE__*/_jsx(StatusBar, {
48
+ barStyle: "dark-content",
49
+ backgroundColor: "#FFFFFF"
50
+ }), !hideHeader && /*#__PURE__*/_jsxs(View, {
51
+ style: styles.header,
52
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
53
+ onPress: onBack,
54
+ style: styles.headerIconBtnLeft,
55
+ children: /*#__PURE__*/_jsx(Icon, {
56
+ name: "chevron-left",
57
+ size: 24,
58
+ color: theme.textPrimary
59
+ })
60
+ }), /*#__PURE__*/_jsx(Typography, {
61
+ variant: "h3",
62
+ color: theme.textPrimary,
63
+ style: styles.headerTitle,
64
+ children: params.header.title
65
+ }), /*#__PURE__*/_jsx(View, {
66
+ style: styles.headerIconBtnRight
67
+ })]
68
+ }), /*#__PURE__*/_jsx(View, {
69
+ style: styles.filtersContainer,
70
+ children: /*#__PURE__*/_jsx(FlatList, {
71
+ horizontal: true,
72
+ showsHorizontalScrollIndicator: false,
73
+ data: params.filters,
74
+ keyExtractor: item => item,
75
+ renderItem: renderFilterChip,
76
+ contentContainerStyle: styles.filtersContent
77
+ })
78
+ }), /*#__PURE__*/_jsxs(ScrollView, {
79
+ contentContainerStyle: styles.scrollContent,
80
+ showsVerticalScrollIndicator: false,
81
+ children: [/*#__PURE__*/_jsxs(View, {
82
+ style: styles.overviewRow,
83
+ children: [/*#__PURE__*/_jsx(Typography, {
84
+ variant: "h3",
85
+ bold: true,
86
+ color: theme.textPrimary,
87
+ children: params.overview.title.toUpperCase()
88
+ }), /*#__PURE__*/_jsxs(Typography, {
89
+ variant: "body",
90
+ color: theme.textSecondary,
91
+ style: styles.overviewSub,
92
+ children: [' ', "\u2022 ", params.overview.totalModules, " Modules"]
93
+ })]
94
+ }), params.sections.map(section => {
95
+ return /*#__PURE__*/_jsxs(View, {
96
+ style: styles.sectionContainer,
97
+ children: [/*#__PURE__*/_jsxs(View, {
98
+ style: styles.sectionTitleRow,
99
+ children: [/*#__PURE__*/_jsx(View, {
100
+ style: [styles.sectionTitleDot, {
101
+ backgroundColor: theme.primary
102
+ }]
103
+ }), /*#__PURE__*/_jsx(Typography, {
104
+ variant: "caption",
105
+ color: theme.textSecondary,
106
+ style: styles.sectionTitleText,
107
+ children: section.title.toUpperCase()
108
+ })]
109
+ }), section.modules.map((moduleItem, mIdx) => {
110
+ const isLast = mIdx === section.modules.length - 1;
111
+ return /*#__PURE__*/_jsxs(View, {
112
+ style: styles.timelineRow,
113
+ children: [/*#__PURE__*/_jsxs(View, {
114
+ style: styles.timelineCol,
115
+ children: [!isLast && /*#__PURE__*/_jsx(View, {
116
+ style: styles.timelineLine
117
+ }), /*#__PURE__*/_jsx(View, {
118
+ style: styles.timelineNode,
119
+ children: /*#__PURE__*/_jsx(Typography, {
120
+ variant: "caption",
121
+ bold: true,
122
+ color: "#FFFFFF",
123
+ style: styles.timelineNodeText,
124
+ children: moduleItem.number
125
+ })
126
+ })]
127
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
128
+ style: styles.moduleCard,
129
+ onPress: () => onPressModule?.(moduleItem.id),
130
+ activeOpacity: 0.7,
131
+ children: [/*#__PURE__*/_jsxs(View, {
132
+ style: styles.moduleInfo,
133
+ children: [/*#__PURE__*/_jsx(Typography, {
134
+ variant: "body",
135
+ bold: true,
136
+ color: theme.textPrimary,
137
+ style: styles.moduleTitle,
138
+ children: moduleItem.title
139
+ }), /*#__PURE__*/_jsxs(View, {
140
+ style: styles.moduleStats,
141
+ children: [/*#__PURE__*/_jsx(Icon, {
142
+ name: "star",
143
+ size: 12,
144
+ color: "#FBBF24"
145
+ }), /*#__PURE__*/_jsx(Typography, {
146
+ variant: "caption",
147
+ color: theme.textPrimary,
148
+ style: styles.moduleStatText,
149
+ children: moduleItem.rating
150
+ }), /*#__PURE__*/_jsxs(Typography, {
151
+ variant: "caption",
152
+ color: theme.textSecondary,
153
+ style: styles.moduleStatSubtext,
154
+ children: [moduleItem.questionCount, " Questions"]
155
+ })]
156
+ })]
157
+ }), /*#__PURE__*/_jsxs(View, {
158
+ style: styles.moduleStatus,
159
+ children: [moduleItem.status === 'free' && /*#__PURE__*/_jsx(View, {
160
+ style: styles.freeBadge,
161
+ children: /*#__PURE__*/_jsx(Typography, {
162
+ variant: "caption",
163
+ bold: true,
164
+ color: theme.success,
165
+ style: {
166
+ fontSize: 10
167
+ },
168
+ children: "FREE"
169
+ })
170
+ }), moduleItem.status === 'locked' && /*#__PURE__*/_jsx(View, {
171
+ style: styles.lockedBadge,
172
+ children: /*#__PURE__*/_jsx(Icon, {
173
+ name: "lock",
174
+ size: 14,
175
+ color: "#64748B"
176
+ })
177
+ })]
178
+ })]
179
+ })]
180
+ }, moduleItem.id);
181
+ })]
182
+ }, section.id);
183
+ })]
184
+ })]
185
+ });
186
+ };
187
+ const styles = StyleSheet.create({
188
+ container: {
189
+ flex: 1
190
+ },
191
+ header: {
192
+ flexDirection: 'row',
193
+ alignItems: 'center',
194
+ paddingHorizontal: 16,
195
+ paddingVertical: 12,
196
+ backgroundColor: '#FFFFFF',
197
+ borderBottomWidth: 1,
198
+ borderBottomColor: '#F1F5F9'
199
+ },
200
+ headerIconBtnLeft: {
201
+ width: 40,
202
+ height: 40,
203
+ justifyContent: 'center',
204
+ alignItems: 'flex-start'
205
+ },
206
+ headerIconBtnRight: {
207
+ width: 40,
208
+ height: 40,
209
+ justifyContent: 'center',
210
+ alignItems: 'flex-end'
211
+ },
212
+ headerTitle: {
213
+ fontSize: 18,
214
+ fontWeight: '600',
215
+ flex: 1,
216
+ textAlign: 'center'
217
+ },
218
+ filtersContainer: {
219
+ backgroundColor: '#FFFFFF',
220
+ paddingVertical: 12,
221
+ borderBottomWidth: 1,
222
+ borderBottomColor: '#F1F5F9'
223
+ },
224
+ filtersContent: {
225
+ paddingHorizontal: 16,
226
+ gap: 8
227
+ },
228
+ filterChip: {
229
+ paddingHorizontal: 20,
230
+ paddingVertical: 8,
231
+ borderRadius: 20,
232
+ borderWidth: 1,
233
+ backgroundColor: '#FFFFFF',
234
+ marginRight: 8
235
+ },
236
+ filterChipText: {
237
+ fontSize: 14,
238
+ fontWeight: '500'
239
+ },
240
+ scrollContent: {
241
+ paddingVertical: 20,
242
+ paddingHorizontal: 16,
243
+ paddingBottom: 40
244
+ },
245
+ overviewRow: {
246
+ flexDirection: 'row',
247
+ alignItems: 'center',
248
+ marginBottom: 24
249
+ },
250
+ overviewSub: {
251
+ fontSize: 14
252
+ },
253
+ sectionContainer: {
254
+ marginBottom: 24
255
+ },
256
+ sectionTitleRow: {
257
+ flexDirection: 'row',
258
+ alignItems: 'center',
259
+ marginBottom: 16
260
+ },
261
+ sectionTitleDot: {
262
+ width: 6,
263
+ height: 6,
264
+ borderRadius: 3,
265
+ marginRight: 8
266
+ },
267
+ sectionTitleText: {
268
+ fontSize: 13,
269
+ fontWeight: '600',
270
+ letterSpacing: 0.5
271
+ },
272
+ timelineRow: {
273
+ flexDirection: 'row',
274
+ marginBottom: 12
275
+ },
276
+ timelineCol: {
277
+ width: 40,
278
+ alignItems: 'center',
279
+ marginRight: 12
280
+ },
281
+ timelineLine: {
282
+ position: 'absolute',
283
+ top: 24,
284
+ // starts from middle of circle
285
+ bottom: -36,
286
+ // reaches down to next node roughly
287
+ width: 1,
288
+ backgroundColor: '#E2E8F0',
289
+ zIndex: 0
290
+ },
291
+ timelineNode: {
292
+ width: 28,
293
+ height: 28,
294
+ borderRadius: 14,
295
+ backgroundColor: '#8E918E',
296
+ // Based on screenshot grey color
297
+ justifyContent: 'center',
298
+ alignItems: 'center',
299
+ marginTop: 16,
300
+ // to align with card title slightly
301
+ zIndex: 1,
302
+ borderWidth: 2,
303
+ borderColor: '#F8FAFC' // match background to cut line
304
+ },
305
+ timelineNodeText: {
306
+ fontSize: 12
307
+ },
308
+ moduleCard: {
309
+ flex: 1,
310
+ flexDirection: 'row',
311
+ alignItems: 'center',
312
+ backgroundColor: '#FFFFFF',
313
+ padding: 16,
314
+ borderRadius: 12,
315
+ shadowColor: '#000',
316
+ shadowOffset: {
317
+ width: 0,
318
+ height: 1
319
+ },
320
+ shadowOpacity: 0.05,
321
+ shadowRadius: 2,
322
+ elevation: 1
323
+ },
324
+ moduleInfo: {
325
+ flex: 1,
326
+ marginRight: 12
327
+ },
328
+ moduleTitle: {
329
+ fontSize: 14,
330
+ lineHeight: 20,
331
+ marginBottom: 8
332
+ },
333
+ moduleStats: {
334
+ flexDirection: 'row',
335
+ alignItems: 'center'
336
+ },
337
+ moduleStatText: {
338
+ fontSize: 12,
339
+ fontWeight: '600',
340
+ marginLeft: 4,
341
+ marginRight: 8
342
+ },
343
+ moduleStatSubtext: {
344
+ fontSize: 12
345
+ },
346
+ moduleStatus: {
347
+ justifyContent: 'center',
348
+ alignItems: 'center'
349
+ },
350
+ freeBadge: {
351
+ paddingHorizontal: 10,
352
+ paddingVertical: 4,
353
+ borderRadius: 4,
354
+ borderWidth: 1,
355
+ borderColor: '#10B981',
356
+ backgroundColor: '#FFFFFF'
357
+ },
358
+ lockedBadge: {
359
+ width: 32,
360
+ height: 32,
361
+ borderRadius: 16,
362
+ backgroundColor: '#F1F5F9',
363
+ justifyContent: 'center',
364
+ alignItems: 'center'
365
+ }
366
+ });
367
+ //# sourceMappingURL=QBankSubTopicScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","View","ScrollView","StyleSheet","TouchableOpacity","StatusBar","FlatList","SafeAreaView","useTheme","Typography","Icon","jsx","_jsx","jsxs","_jsxs","QBankSubTopicScreen","params","hideHeader","onBack","onPressModule","onPressFilter","theme","activeFilter","setActiveFilter","filters","handleFilterPress","filter","renderFilterChip","item","isActive","style","styles","filterChip","backgroundColor","primary","borderColor","onPress","children","variant","color","textSecondary","filterChipText","container","edges","barStyle","header","headerIconBtnLeft","name","size","textPrimary","headerTitle","title","headerIconBtnRight","filtersContainer","horizontal","showsHorizontalScrollIndicator","data","keyExtractor","renderItem","contentContainerStyle","filtersContent","scrollContent","showsVerticalScrollIndicator","overviewRow","bold","overview","toUpperCase","overviewSub","totalModules","sections","map","section","sectionContainer","sectionTitleRow","sectionTitleDot","sectionTitleText","modules","moduleItem","mIdx","isLast","length","timelineRow","timelineCol","timelineLine","timelineNode","timelineNodeText","number","moduleCard","id","activeOpacity","moduleInfo","moduleTitle","moduleStats","moduleStatText","rating","moduleStatSubtext","questionCount","moduleStatus","status","freeBadge","success","fontSize","lockedBadge","create","flex","flexDirection","alignItems","paddingHorizontal","paddingVertical","borderBottomWidth","borderBottomColor","width","height","justifyContent","fontWeight","textAlign","gap","borderRadius","borderWidth","marginRight","paddingBottom","marginBottom","letterSpacing","position","top","bottom","zIndex","marginTop","padding","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","lineHeight","marginLeft"],"sourceRoot":"../../../../src","sources":["screens/qbank/QBankSubTopicScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
1
  export { HomeScreen } from './HomeScreen.js';
2
2
  export { QBankTopicScreen } from './qbank/QBankTopicScreen.js';
3
+ export { QBankSubTopicScreen } from './qbank/QBankSubTopicScreen.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/screens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/screens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAA6B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { QBankSubTopicParams } from '../../types/index.js';
3
+ interface QBankSubTopicScreenProps {
4
+ params: QBankSubTopicParams;
5
+ hideHeader?: boolean;
6
+ onBack?: () => void;
7
+ onPressModule?: (moduleId: string) => void;
8
+ onPressFilter?: (filter: string) => void;
9
+ }
10
+ export declare const QBankSubTopicScreen: React.FC<QBankSubTopicScreenProps>;
11
+ export {};
12
+ //# sourceMappingURL=QBankSubTopicScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QBankSubTopicScreen.d.ts","sourceRoot":"","sources":["../../../../../src/screens/qbank/QBankSubTopicScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAYxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAa,CAAC;AAEvD,UAAU,wBAAwB;IAChC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA2JlE,CAAC"}
@@ -212,4 +212,29 @@ export interface QBankTopicParams {
212
212
  icon: string;
213
213
  }>;
214
214
  }
215
+ export interface QBankSubTopicModule {
216
+ id: string;
217
+ number: number;
218
+ title: string;
219
+ rating: number;
220
+ questionCount: number;
221
+ status: 'free' | 'locked' | 'completed';
222
+ }
223
+ export interface QBankSubTopicSection {
224
+ id: string;
225
+ title: string;
226
+ modules: QBankSubTopicModule[];
227
+ }
228
+ export interface QBankSubTopicParams {
229
+ header: {
230
+ title: string;
231
+ };
232
+ filters: string[];
233
+ activeFilter?: string;
234
+ overview: {
235
+ title: string;
236
+ totalModules: number;
237
+ };
238
+ sections: QBankSubTopicSection[];
239
+ }
215
240
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-elearn-ui",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Enterprise E-Learning UI library for React Native",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,2 +1,3 @@
1
1
  export { HomeScreen } from './HomeScreen';
2
2
  export { QBankTopicScreen } from './qbank/QBankTopicScreen';
3
+ export { QBankSubTopicScreen } from './qbank/QBankSubTopicScreen';
@@ -0,0 +1,352 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ View,
4
+ ScrollView,
5
+ StyleSheet,
6
+ TouchableOpacity,
7
+ StatusBar,
8
+ FlatList,
9
+ } from 'react-native';
10
+ import { SafeAreaView } from 'react-native-safe-area-context';
11
+ import { useTheme } from '../../context/ThemeContext';
12
+ import { Typography, Icon } from '../../components';
13
+ import type { QBankSubTopicParams } from '../../types';
14
+
15
+ interface QBankSubTopicScreenProps {
16
+ params: QBankSubTopicParams;
17
+ hideHeader?: boolean;
18
+ onBack?: () => void;
19
+ onPressModule?: (moduleId: string) => void;
20
+ onPressFilter?: (filter: string) => void;
21
+ }
22
+
23
+ export const QBankSubTopicScreen: React.FC<QBankSubTopicScreenProps> = ({
24
+ params,
25
+ hideHeader = false,
26
+ onBack,
27
+ onPressModule,
28
+ onPressFilter,
29
+ }) => {
30
+ const theme = useTheme();
31
+ const [activeFilter, setActiveFilter] = useState(params.activeFilter || params.filters[0]);
32
+
33
+ const handleFilterPress = (filter: string) => {
34
+ setActiveFilter(filter);
35
+ onPressFilter?.(filter);
36
+ };
37
+
38
+ const renderFilterChip = ({ item: filter }: { item: string }) => {
39
+ const isActive = activeFilter === filter;
40
+ return (
41
+ <TouchableOpacity
42
+ style={[
43
+ styles.filterChip,
44
+ isActive ? { backgroundColor: theme.primary, borderColor: theme.primary } : { borderColor: '#E2E8F0' }
45
+ ]}
46
+ onPress={() => handleFilterPress(filter)}
47
+ >
48
+ <Typography
49
+ variant="body"
50
+ color={isActive ? '#FFFFFF' : theme.textSecondary}
51
+ style={styles.filterChipText}
52
+ >
53
+ {filter}
54
+ </Typography>
55
+ </TouchableOpacity>
56
+ );
57
+ };
58
+
59
+ return (
60
+ <SafeAreaView style={[styles.container, { backgroundColor: '#F8FAFC' }]} edges={['top']}>
61
+ <StatusBar barStyle="dark-content" backgroundColor="#FFFFFF" />
62
+
63
+ {/* Header */}
64
+ {!hideHeader && (
65
+ <View style={styles.header}>
66
+ <TouchableOpacity onPress={onBack} style={styles.headerIconBtnLeft}>
67
+ <Icon name="chevron-left" size={24} color={theme.textPrimary} />
68
+ </TouchableOpacity>
69
+ <Typography variant="h3" color={theme.textPrimary} style={styles.headerTitle}>
70
+ {params.header.title}
71
+ </Typography>
72
+ <View style={styles.headerIconBtnRight} />
73
+ </View>
74
+ )}
75
+
76
+ {/* Filter Chips */}
77
+ <View style={styles.filtersContainer}>
78
+ <FlatList
79
+ horizontal
80
+ showsHorizontalScrollIndicator={false}
81
+ data={params.filters}
82
+ keyExtractor={(item) => item}
83
+ renderItem={renderFilterChip}
84
+ contentContainerStyle={styles.filtersContent}
85
+ />
86
+ </View>
87
+
88
+ <ScrollView contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
89
+ {/* Overview Title */}
90
+ <View style={styles.overviewRow}>
91
+ <Typography variant="h3" bold color={theme.textPrimary}>
92
+ {params.overview.title.toUpperCase()}
93
+ </Typography>
94
+ <Typography variant="body" color={theme.textSecondary} style={styles.overviewSub}>
95
+ {' '}• {params.overview.totalModules} Modules
96
+ </Typography>
97
+ </View>
98
+
99
+ {/* Sections & Timeline */}
100
+ {params.sections.map((section) => {
101
+ return (
102
+ <View key={section.id} style={styles.sectionContainer}>
103
+ {/* Section Title */}
104
+ <View style={styles.sectionTitleRow}>
105
+ <View style={[styles.sectionTitleDot, { backgroundColor: theme.primary }]} />
106
+ <Typography variant="caption" color={theme.textSecondary} style={styles.sectionTitleText}>
107
+ {section.title.toUpperCase()}
108
+ </Typography>
109
+ </View>
110
+
111
+ {/* Modules in this section */}
112
+ {section.modules.map((moduleItem, mIdx) => {
113
+ const isLast = mIdx === section.modules.length - 1;
114
+
115
+ return (
116
+ <View key={moduleItem.id} style={styles.timelineRow}>
117
+
118
+ {/* Timeline Column */}
119
+ <View style={styles.timelineCol}>
120
+ {/* Vertical line connecting nodes (dont show below last item) */}
121
+ {!isLast && <View style={styles.timelineLine} />}
122
+
123
+ {/* Number Node */}
124
+ <View style={styles.timelineNode}>
125
+ <Typography variant="caption" bold color="#FFFFFF" style={styles.timelineNodeText}>
126
+ {moduleItem.number}
127
+ </Typography>
128
+ </View>
129
+ </View>
130
+
131
+ {/* Module Card */}
132
+ <TouchableOpacity
133
+ style={styles.moduleCard}
134
+ onPress={() => onPressModule?.(moduleItem.id)}
135
+ activeOpacity={0.7}
136
+ >
137
+ <View style={styles.moduleInfo}>
138
+ <Typography variant="body" bold color={theme.textPrimary} style={styles.moduleTitle}>
139
+ {moduleItem.title}
140
+ </Typography>
141
+
142
+ <View style={styles.moduleStats}>
143
+ <Icon name="star" size={12} color="#FBBF24" />
144
+ <Typography variant="caption" color={theme.textPrimary} style={styles.moduleStatText}>
145
+ {moduleItem.rating}
146
+ </Typography>
147
+ <Typography variant="caption" color={theme.textSecondary} style={styles.moduleStatSubtext}>
148
+ {moduleItem.questionCount} Questions
149
+ </Typography>
150
+ </View>
151
+ </View>
152
+
153
+ {/* Trailing Status Badge */}
154
+ <View style={styles.moduleStatus}>
155
+ {moduleItem.status === 'free' && (
156
+ <View style={styles.freeBadge}>
157
+ <Typography variant="caption" bold color={theme.success} style={{fontSize: 10}}>
158
+ FREE
159
+ </Typography>
160
+ </View>
161
+ )}
162
+ {moduleItem.status === 'locked' && (
163
+ <View style={styles.lockedBadge}>
164
+ <Icon name="lock" size={14} color="#64748B" />
165
+ </View>
166
+ )}
167
+ </View>
168
+ </TouchableOpacity>
169
+ </View>
170
+ );
171
+ })}
172
+ </View>
173
+ );
174
+ })}
175
+ </ScrollView>
176
+ </SafeAreaView>
177
+ );
178
+ };
179
+
180
+ const styles = StyleSheet.create({
181
+ container: {
182
+ flex: 1,
183
+ },
184
+ header: {
185
+ flexDirection: 'row',
186
+ alignItems: 'center',
187
+ paddingHorizontal: 16,
188
+ paddingVertical: 12,
189
+ backgroundColor: '#FFFFFF',
190
+ borderBottomWidth: 1,
191
+ borderBottomColor: '#F1F5F9',
192
+ },
193
+ headerIconBtnLeft: {
194
+ width: 40,
195
+ height: 40,
196
+ justifyContent: 'center',
197
+ alignItems: 'flex-start',
198
+ },
199
+ headerIconBtnRight: {
200
+ width: 40,
201
+ height: 40,
202
+ justifyContent: 'center',
203
+ alignItems: 'flex-end',
204
+ },
205
+ headerTitle: {
206
+ fontSize: 18,
207
+ fontWeight: '600',
208
+ flex: 1,
209
+ textAlign: 'center',
210
+ },
211
+ filtersContainer: {
212
+ backgroundColor: '#FFFFFF',
213
+ paddingVertical: 12,
214
+ borderBottomWidth: 1,
215
+ borderBottomColor: '#F1F5F9',
216
+ },
217
+ filtersContent: {
218
+ paddingHorizontal: 16,
219
+ gap: 8,
220
+ },
221
+ filterChip: {
222
+ paddingHorizontal: 20,
223
+ paddingVertical: 8,
224
+ borderRadius: 20,
225
+ borderWidth: 1,
226
+ backgroundColor: '#FFFFFF',
227
+ marginRight: 8,
228
+ },
229
+ filterChipText: {
230
+ fontSize: 14,
231
+ fontWeight: '500',
232
+ },
233
+ scrollContent: {
234
+ paddingVertical: 20,
235
+ paddingHorizontal: 16,
236
+ paddingBottom: 40,
237
+ },
238
+ overviewRow: {
239
+ flexDirection: 'row',
240
+ alignItems: 'center',
241
+ marginBottom: 24,
242
+ },
243
+ overviewSub: {
244
+ fontSize: 14,
245
+ },
246
+ sectionContainer: {
247
+ marginBottom: 24,
248
+ },
249
+ sectionTitleRow: {
250
+ flexDirection: 'row',
251
+ alignItems: 'center',
252
+ marginBottom: 16,
253
+ },
254
+ sectionTitleDot: {
255
+ width: 6,
256
+ height: 6,
257
+ borderRadius: 3,
258
+ marginRight: 8,
259
+ },
260
+ sectionTitleText: {
261
+ fontSize: 13,
262
+ fontWeight: '600',
263
+ letterSpacing: 0.5,
264
+ },
265
+ timelineRow: {
266
+ flexDirection: 'row',
267
+ marginBottom: 12,
268
+ },
269
+ timelineCol: {
270
+ width: 40,
271
+ alignItems: 'center',
272
+ marginRight: 12,
273
+ },
274
+ timelineLine: {
275
+ position: 'absolute',
276
+ top: 24, // starts from middle of circle
277
+ bottom: -36, // reaches down to next node roughly
278
+ width: 1,
279
+ backgroundColor: '#E2E8F0',
280
+ zIndex: 0,
281
+ },
282
+ timelineNode: {
283
+ width: 28,
284
+ height: 28,
285
+ borderRadius: 14,
286
+ backgroundColor: '#8E918E', // Based on screenshot grey color
287
+ justifyContent: 'center',
288
+ alignItems: 'center',
289
+ marginTop: 16, // to align with card title slightly
290
+ zIndex: 1,
291
+ borderWidth: 2,
292
+ borderColor: '#F8FAFC', // match background to cut line
293
+ },
294
+ timelineNodeText: {
295
+ fontSize: 12,
296
+ },
297
+ moduleCard: {
298
+ flex: 1,
299
+ flexDirection: 'row',
300
+ alignItems: 'center',
301
+ backgroundColor: '#FFFFFF',
302
+ padding: 16,
303
+ borderRadius: 12,
304
+ shadowColor: '#000',
305
+ shadowOffset: { width: 0, height: 1 },
306
+ shadowOpacity: 0.05,
307
+ shadowRadius: 2,
308
+ elevation: 1,
309
+ },
310
+ moduleInfo: {
311
+ flex: 1,
312
+ marginRight: 12,
313
+ },
314
+ moduleTitle: {
315
+ fontSize: 14,
316
+ lineHeight: 20,
317
+ marginBottom: 8,
318
+ },
319
+ moduleStats: {
320
+ flexDirection: 'row',
321
+ alignItems: 'center',
322
+ },
323
+ moduleStatText: {
324
+ fontSize: 12,
325
+ fontWeight: '600',
326
+ marginLeft: 4,
327
+ marginRight: 8,
328
+ },
329
+ moduleStatSubtext: {
330
+ fontSize: 12,
331
+ },
332
+ moduleStatus: {
333
+ justifyContent: 'center',
334
+ alignItems: 'center',
335
+ },
336
+ freeBadge: {
337
+ paddingHorizontal: 10,
338
+ paddingVertical: 4,
339
+ borderRadius: 4,
340
+ borderWidth: 1,
341
+ borderColor: '#10B981',
342
+ backgroundColor: '#FFFFFF',
343
+ },
344
+ lockedBadge: {
345
+ width: 32,
346
+ height: 32,
347
+ borderRadius: 16,
348
+ backgroundColor: '#F1F5F9',
349
+ justifyContent: 'center',
350
+ alignItems: 'center',
351
+ },
352
+ });
@@ -221,3 +221,31 @@ export interface QBankTopicParams {
221
221
  icon: string;
222
222
  }>;
223
223
  }
224
+
225
+ export interface QBankSubTopicModule {
226
+ id: string;
227
+ number: number;
228
+ title: string;
229
+ rating: number;
230
+ questionCount: number;
231
+ status: 'free' | 'locked' | 'completed';
232
+ }
233
+
234
+ export interface QBankSubTopicSection {
235
+ id: string;
236
+ title: string;
237
+ modules: QBankSubTopicModule[];
238
+ }
239
+
240
+ export interface QBankSubTopicParams {
241
+ header: {
242
+ title: string;
243
+ };
244
+ filters: string[];
245
+ activeFilter?: string;
246
+ overview: {
247
+ title: string;
248
+ totalModules: number;
249
+ };
250
+ sections: QBankSubTopicSection[];
251
+ }