react-native-elearn-ui 0.1.7 → 0.1.9

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.
Files changed (46) hide show
  1. package/lib/module/components/Icon.js +27 -0
  2. package/lib/module/components/Icon.js.map +1 -1
  3. package/lib/module/index.js +1 -1
  4. package/lib/module/index.js.map +1 -1
  5. package/lib/module/screens/PearlsScreen.js +741 -0
  6. package/lib/module/screens/PearlsScreen.js.map +1 -0
  7. package/lib/module/screens/QbankScreen.js +18 -3
  8. package/lib/module/screens/QbankScreen.js.map +1 -1
  9. package/lib/module/screens/QuestionScreen.js +22 -10
  10. package/lib/module/screens/QuestionScreen.js.map +1 -1
  11. package/lib/module/screens/QuizStartScreen.js +55 -7
  12. package/lib/module/screens/QuizStartScreen.js.map +1 -1
  13. package/lib/module/screens/ResultScreen.js +10 -6
  14. package/lib/module/screens/ResultScreen.js.map +1 -1
  15. package/lib/module/screens/TopicListScreen.js +53 -6
  16. package/lib/module/screens/TopicListScreen.js.map +1 -1
  17. package/lib/module/screens/index.js +1 -0
  18. package/lib/module/screens/index.js.map +1 -1
  19. package/lib/typescript/src/components/Icon.d.ts +1 -1
  20. package/lib/typescript/src/components/Icon.d.ts.map +1 -1
  21. package/lib/typescript/src/index.d.ts +1 -1
  22. package/lib/typescript/src/index.d.ts.map +1 -1
  23. package/lib/typescript/src/screens/PearlsScreen.d.ts +8 -0
  24. package/lib/typescript/src/screens/PearlsScreen.d.ts.map +1 -0
  25. package/lib/typescript/src/screens/QbankScreen.d.ts +3 -0
  26. package/lib/typescript/src/screens/QbankScreen.d.ts.map +1 -1
  27. package/lib/typescript/src/screens/QuestionScreen.d.ts +6 -4
  28. package/lib/typescript/src/screens/QuestionScreen.d.ts.map +1 -1
  29. package/lib/typescript/src/screens/QuizStartScreen.d.ts +6 -3
  30. package/lib/typescript/src/screens/QuizStartScreen.d.ts.map +1 -1
  31. package/lib/typescript/src/screens/ResultScreen.d.ts +2 -1
  32. package/lib/typescript/src/screens/ResultScreen.d.ts.map +1 -1
  33. package/lib/typescript/src/screens/TopicListScreen.d.ts +4 -2
  34. package/lib/typescript/src/screens/TopicListScreen.d.ts.map +1 -1
  35. package/lib/typescript/src/screens/index.d.ts +1 -0
  36. package/lib/typescript/src/screens/index.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/src/components/Icon.tsx +35 -1
  39. package/src/index.tsx +1 -0
  40. package/src/screens/PearlsScreen.tsx +720 -0
  41. package/src/screens/QbankScreen.tsx +24 -3
  42. package/src/screens/QuestionScreen.tsx +28 -14
  43. package/src/screens/QuizStartScreen.tsx +45 -10
  44. package/src/screens/ResultScreen.tsx +13 -8
  45. package/src/screens/TopicListScreen.tsx +40 -7
  46. package/src/screens/index.ts +1 -0
@@ -0,0 +1,741 @@
1
+ "use strict";
2
+
3
+ import React, { useState } from 'react';
4
+ import { View, ScrollView, StyleSheet, TouchableOpacity, SafeAreaView, StatusBar, Modal, Dimensions } from 'react-native';
5
+ import { useElearnConfig } from "../context/ElearnConfigContext.js";
6
+ import { useTheme } from "../context/ThemeContext.js";
7
+ import { Typography, Card, Icon } from "../components/index.js";
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+ const {
10
+ height: SCREEN_HEIGHT
11
+ } = Dimensions.get('window');
12
+
13
+ // Mock Chapter detail shape
14
+
15
+ // Mock database matching user images
16
+ const MOCK_PEARLS_TOPICS = [{
17
+ id: 'topic_head_neck',
18
+ title: 'Head and neck',
19
+ sections: {
20
+ 'Head and Neck': [{
21
+ id: 'hn_c1',
22
+ number: 1,
23
+ title: 'Classify sino-nasal neoplasam. Discuss the newer entities',
24
+ isFree: true,
25
+ bullets: ['Benign Neoplasms: Benign sino-nasal tumors are generally slow-growing and less likely to invade surrounding structures. Common benign types include inverted papilloma, oncocytic Schneiderian papilloma, and fungiform papilloma, all of which originate from the Schneiderian mucosa. Inverted papilloma is notable for its local aggressiveness and high recurrence rate, sometimes exhibiting malignant transformation into squamous cell carcinoma.', 'Malignant Neoplasms: Malignant tumors of the sino-nasal tract are rare but clinically significant due to their aggressive behavior, late presentation, and complex anatomical constraints that limit surgical access. The most common malignant tumor is squamous cell carcinoma, often arising from dysplastic or papillomatous lesions.', 'Esthesioneuroblastoma: A notable entity originating from the olfactory epithelium and displaying variable degrees of malignancy. Additionally, melanoma, lymphoma, and undifferentiated carcinoma can also occur in the sino-nasal region, often presenting with nasal obstruction, epistaxis, and facial pain.']
26
+ }, {
27
+ id: 'hn_c2',
28
+ number: 2,
29
+ title: 'Histologic variants of ameloblastoma',
30
+ isLocked: true,
31
+ bullets: ['Ameloblastoma is a benign but locally aggressive odontogenic neoplasm.', 'Follicular and plexiform are the most common histologic patterns.', 'Unicystic variants have a better prognosis and lower recurrence rates.']
32
+ }, {
33
+ id: 'hn_c3',
34
+ number: 3,
35
+ title: 'Role of brush ctology in diagnosis of oral cancerous and precancerous lessions',
36
+ isLocked: true,
37
+ bullets: ['Oral brush cytology is a non-invasive screening aid.', 'High sensitivity for identifying cellular dysplasias.', 'Must be followed by scalpel biopsy for definitive diagnosis.']
38
+ }],
39
+ 'Eye': [{
40
+ id: 'eye_c1',
41
+ number: 1,
42
+ title: 'Classify sino-nasal neoplasam. Discuss the newer entities',
43
+ isLocked: true,
44
+ bullets: []
45
+ }, {
46
+ id: 'eye_c2',
47
+ number: 2,
48
+ title: 'Histologic variants of ameloblastoma',
49
+ isLocked: true,
50
+ bullets: []
51
+ }]
52
+ }
53
+ }, {
54
+ id: 'topic_brain_spine',
55
+ title: 'Brain, Spine and Meninges',
56
+ sections: {}
57
+ }, {
58
+ id: 'topic_breast',
59
+ title: 'Breast Pathology',
60
+ sections: {}
61
+ }, {
62
+ id: 'topic_skin',
63
+ title: 'Skin and Connective Tissue',
64
+ sections: {}
65
+ }, {
66
+ id: 'topic_kidney',
67
+ title: 'Kidney & Urinary Tract',
68
+ sections: {}
69
+ }, {
70
+ id: 'topic_gastro',
71
+ title: 'Gastro-Intestinal System',
72
+ sections: {}
73
+ }, {
74
+ id: 'topic_endocrine',
75
+ title: 'Endocrine Pathology',
76
+ sections: {}
77
+ }, {
78
+ id: 'topic_general',
79
+ title: 'General Pathology',
80
+ sections: {}
81
+ }, {
82
+ id: 'topic_male_genital',
83
+ title: 'Male Genital System',
84
+ sections: {}
85
+ }, {
86
+ id: 'topic_thoracic',
87
+ title: 'Thoracic Pathology',
88
+ sections: {}
89
+ }];
90
+ export const PearlsScreen = ({
91
+ onBack,
92
+ hideHeader = false
93
+ }) => {
94
+ const {
95
+ callbacks
96
+ } = useElearnConfig();
97
+ const theme = useTheme();
98
+
99
+ // Navigation State
100
+ const [currentView, setCurrentView] = useState('topics');
101
+ const [selectedTopic, setSelectedTopic] = useState(null);
102
+
103
+ // Flatten all chapters of a topic to easily paginate inside the reader view
104
+ const [flattenedChapters, setFlattenedChapters] = useState([]);
105
+ const [activeChapterIndex, setActiveChapterIndex] = useState(0);
106
+ const [isCompleted, setIsCompleted] = useState(false);
107
+ const [bottomSheetVisible, setBottomSheetVisible] = useState(false);
108
+ const handleBackPress = () => {
109
+ if (currentView === 'reader') {
110
+ setCurrentView('chapters');
111
+ } else if (currentView === 'chapters') {
112
+ setCurrentView('topics');
113
+ } else {
114
+ if (onBack) {
115
+ onBack();
116
+ } else {
117
+ callbacks.onBackToDashboard?.();
118
+ }
119
+ }
120
+ };
121
+ const handleSelectTopic = topic => {
122
+ setSelectedTopic(topic);
123
+
124
+ // Flatten chapters for reader mode navigation
125
+ const flat = [];
126
+ Object.keys(topic.sections || {}).forEach(sectionName => {
127
+ const sectionChapters = topic.sections[sectionName] || [];
128
+ flat.push(...sectionChapters);
129
+ });
130
+ setFlattenedChapters(flat);
131
+ setCurrentView('chapters');
132
+ };
133
+ const handleSelectChapter = chapter => {
134
+ if (chapter.isLocked) return;
135
+ const index = flattenedChapters.findIndex(c => c.id === chapter.id);
136
+ if (index !== -1) {
137
+ setActiveChapterIndex(index);
138
+ setIsCompleted(false);
139
+ setCurrentView('reader');
140
+ }
141
+ };
142
+ const handlePrevChapter = () => {
143
+ if (activeChapterIndex > 0) {
144
+ setActiveChapterIndex(activeChapterIndex - 1);
145
+ setIsCompleted(false);
146
+ }
147
+ };
148
+ const handleNextChapter = () => {
149
+ if (activeChapterIndex < flattenedChapters.length - 1) {
150
+ setActiveChapterIndex(activeChapterIndex + 1);
151
+ setIsCompleted(false);
152
+ }
153
+ };
154
+
155
+ // --- View Renderers ---
156
+
157
+ // 1. Topic index list view (Screenshot 1)
158
+ const renderTopicsView = () => {
159
+ return /*#__PURE__*/_jsxs(ScrollView, {
160
+ contentContainerStyle: styles.scrollContent,
161
+ showsVerticalScrollIndicator: false,
162
+ children: [/*#__PURE__*/_jsx(Typography, {
163
+ variant: "h2",
164
+ bold: true,
165
+ color: theme.textPrimary,
166
+ style: styles.sectionHeaderTitle,
167
+ children: "All Topics"
168
+ }), /*#__PURE__*/_jsx(View, {
169
+ style: styles.listContainer,
170
+ children: MOCK_PEARLS_TOPICS.map(topic => /*#__PURE__*/_jsx(TouchableOpacity, {
171
+ activeOpacity: 0.8,
172
+ onPress: () => handleSelectTopic(topic),
173
+ children: /*#__PURE__*/_jsx(Card, {
174
+ bordered: true,
175
+ style: styles.topicCard,
176
+ children: /*#__PURE__*/_jsxs(View, {
177
+ style: styles.topicRow,
178
+ children: [/*#__PURE__*/_jsx(View, {
179
+ style: [styles.iconCircle, {
180
+ backgroundColor: 'rgba(59, 130, 246, 0.08)'
181
+ }],
182
+ children: /*#__PURE__*/_jsx(Icon, {
183
+ name: "file-text",
184
+ size: 16,
185
+ color: "#3B82F6"
186
+ })
187
+ }), /*#__PURE__*/_jsx(Typography, {
188
+ variant: "body",
189
+ bold: true,
190
+ color: theme.textPrimary,
191
+ style: styles.topicLabelText,
192
+ children: topic.title
193
+ })]
194
+ })
195
+ })
196
+ }, topic.id))
197
+ })]
198
+ });
199
+ };
200
+
201
+ // 2. Chapters list grouped by sections (Screenshot 2)
202
+ const renderChaptersView = () => {
203
+ if (!selectedTopic) return null;
204
+ const sections = Object.keys(selectedTopic.sections || {});
205
+ return /*#__PURE__*/_jsx(ScrollView, {
206
+ contentContainerStyle: styles.scrollContent,
207
+ showsVerticalScrollIndicator: false,
208
+ children: sections.map(sectionName => {
209
+ const list = selectedTopic.sections[sectionName] || [];
210
+ return /*#__PURE__*/_jsxs(View, {
211
+ style: styles.sectionBlock,
212
+ children: [/*#__PURE__*/_jsx(Typography, {
213
+ variant: "h2",
214
+ bold: true,
215
+ color: theme.textPrimary,
216
+ style: styles.sectionHeading,
217
+ children: sectionName
218
+ }), /*#__PURE__*/_jsx(View, {
219
+ style: styles.chaptersList,
220
+ children: list.map(chapter => /*#__PURE__*/_jsx(TouchableOpacity, {
221
+ activeOpacity: 0.8,
222
+ onPress: () => handleSelectChapter(chapter),
223
+ disabled: chapter.isLocked,
224
+ children: /*#__PURE__*/_jsx(Card, {
225
+ bordered: true,
226
+ style: styles.chapterCard,
227
+ children: /*#__PURE__*/_jsxs(View, {
228
+ style: styles.chapterRow,
229
+ children: [/*#__PURE__*/_jsx(Typography, {
230
+ variant: "body",
231
+ bold: true,
232
+ color: theme.textSecondary,
233
+ style: styles.chapterNumber,
234
+ children: chapter.number
235
+ }), /*#__PURE__*/_jsx(Typography, {
236
+ variant: "body",
237
+ color: theme.textPrimary,
238
+ style: styles.chapterTitle,
239
+ children: chapter.title
240
+ }), /*#__PURE__*/_jsx(View, {
241
+ style: styles.chapterBadgeCol,
242
+ children: chapter.isFree ? /*#__PURE__*/_jsx(View, {
243
+ style: [styles.freeBadge, {
244
+ borderColor: theme.primary
245
+ }],
246
+ children: /*#__PURE__*/_jsx(Typography, {
247
+ variant: "caption",
248
+ bold: true,
249
+ color: theme.primary,
250
+ style: styles.freeText,
251
+ children: "FREE"
252
+ })
253
+ }) : chapter.isLocked ? /*#__PURE__*/_jsx(View, {
254
+ style: styles.lockCircle,
255
+ children: /*#__PURE__*/_jsx(Icon, {
256
+ name: "lock",
257
+ size: 12,
258
+ color: theme.textSecondary
259
+ })
260
+ }) : null
261
+ })]
262
+ })
263
+ })
264
+ }, chapter.id))
265
+ })]
266
+ }, sectionName);
267
+ })
268
+ });
269
+ };
270
+
271
+ // 3. Reader view for high-yield content points (Screenshot 4)
272
+ const renderReaderView = () => {
273
+ const activeChapter = flattenedChapters[activeChapterIndex];
274
+ if (!activeChapter) return null;
275
+ return /*#__PURE__*/_jsxs(View, {
276
+ style: styles.readerContainer,
277
+ children: [/*#__PURE__*/_jsxs(View, {
278
+ style: styles.readerSubHeader,
279
+ children: [/*#__PURE__*/_jsx(Typography, {
280
+ variant: "body",
281
+ bold: true,
282
+ color: theme.textPrimary,
283
+ style: styles.readerSubTitle,
284
+ children: activeChapter.title.split('.')[0] || activeChapter.title
285
+ }), /*#__PURE__*/_jsxs(Typography, {
286
+ variant: "body",
287
+ bold: true,
288
+ color: theme.textSecondary,
289
+ children: [activeChapterIndex + 1, "/", flattenedChapters.length]
290
+ })]
291
+ }), /*#__PURE__*/_jsx(ScrollView, {
292
+ contentContainerStyle: styles.readerScroll,
293
+ showsVerticalScrollIndicator: false,
294
+ children: activeChapter.bullets.map((bullet, idx) => {
295
+ // Find bold title separator in bullet text if exists
296
+ const parts = bullet.split(':');
297
+ const boldPart = parts[0];
298
+ const rest = parts.slice(1).join(':');
299
+ return /*#__PURE__*/_jsxs(View, {
300
+ style: styles.bulletRow,
301
+ children: [/*#__PURE__*/_jsx(Typography, {
302
+ variant: "body",
303
+ color: theme.textPrimary,
304
+ style: styles.bulletPointDot,
305
+ children: "\u2022"
306
+ }), /*#__PURE__*/_jsx(Typography, {
307
+ variant: "body",
308
+ color: theme.textPrimary,
309
+ style: styles.bulletText,
310
+ children: rest ? /*#__PURE__*/_jsxs(_Fragment, {
311
+ children: [/*#__PURE__*/_jsxs(Typography, {
312
+ variant: "body",
313
+ bold: true,
314
+ children: [boldPart, ":"]
315
+ }), rest]
316
+ }) : bullet
317
+ })]
318
+ }, idx);
319
+ })
320
+ }), /*#__PURE__*/_jsx(View, {
321
+ style: styles.checkboxBar,
322
+ children: /*#__PURE__*/_jsxs(TouchableOpacity, {
323
+ activeOpacity: 0.8,
324
+ onPress: () => setIsCompleted(!isCompleted),
325
+ style: styles.checkboxRow,
326
+ children: [/*#__PURE__*/_jsx(View, {
327
+ style: [styles.checkboxBox, {
328
+ borderColor: theme.border
329
+ }, isCompleted && {
330
+ backgroundColor: theme.primary,
331
+ borderColor: theme.primary
332
+ }],
333
+ children: isCompleted && /*#__PURE__*/_jsx(View, {
334
+ style: styles.checkboxInner
335
+ })
336
+ }), /*#__PURE__*/_jsx(Typography, {
337
+ variant: "body",
338
+ bold: true,
339
+ color: theme.textPrimary,
340
+ children: "Mark as Complete"
341
+ })]
342
+ })
343
+ }), /*#__PURE__*/_jsxs(View, {
344
+ style: styles.footerRow,
345
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
346
+ onPress: handlePrevChapter,
347
+ disabled: activeChapterIndex === 0,
348
+ style: [styles.footerBtn, activeChapterIndex === 0 && {
349
+ opacity: 0.4
350
+ }],
351
+ children: /*#__PURE__*/_jsx(Typography, {
352
+ variant: "body",
353
+ bold: true,
354
+ color: theme.textPrimary,
355
+ children: "Prev"
356
+ })
357
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
358
+ onPress: handleNextChapter,
359
+ disabled: activeChapterIndex === flattenedChapters.length - 1,
360
+ style: [styles.nextActionBtn, {
361
+ backgroundColor: theme.primary
362
+ }, activeChapterIndex === flattenedChapters.length - 1 && {
363
+ opacity: 0.4
364
+ }],
365
+ children: /*#__PURE__*/_jsx(Typography, {
366
+ variant: "body",
367
+ bold: true,
368
+ color: "#FFFFFF",
369
+ children: "Next"
370
+ })
371
+ })]
372
+ })]
373
+ });
374
+ };
375
+
376
+ // --- Render bottom sheet overlay for topics filter (Screenshot 3) ---
377
+ const renderBottomSheet = () => {
378
+ const list = [{
379
+ name: 'Vertebral Curves',
380
+ count: 25
381
+ }, {
382
+ name: 'Introduction',
383
+ count: 15
384
+ }, {
385
+ name: 'Definition and scope',
386
+ count: 15
387
+ }, {
388
+ name: 'Branches of anatomy',
389
+ count: 5
390
+ }, {
391
+ name: 'Anatomical terminology',
392
+ count: 23
393
+ }, {
394
+ name: 'Anatomical positions',
395
+ count: 25
396
+ }, {
397
+ name: 'CSF',
398
+ count: 15
399
+ }, {
400
+ name: 'Levels of structural organization',
401
+ count: 15
402
+ }, {
403
+ name: 'Systems of the human body overview',
404
+ count: 5
405
+ }, {
406
+ name: 'Tissue types',
407
+ count: 23
408
+ }];
409
+ return /*#__PURE__*/_jsx(Modal, {
410
+ visible: bottomSheetVisible,
411
+ transparent: true,
412
+ animationType: "slide",
413
+ onRequestClose: () => setBottomSheetVisible(false),
414
+ children: /*#__PURE__*/_jsxs(View, {
415
+ style: styles.sheetOverlay,
416
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
417
+ activeOpacity: 1,
418
+ style: styles.sheetBackdrop,
419
+ onPress: () => setBottomSheetVisible(false)
420
+ }), /*#__PURE__*/_jsxs(View, {
421
+ style: styles.sheetContent,
422
+ children: [/*#__PURE__*/_jsx(View, {
423
+ style: styles.sheetGrabber
424
+ }), /*#__PURE__*/_jsx(View, {
425
+ style: styles.sheetHeader,
426
+ children: /*#__PURE__*/_jsx(Typography, {
427
+ variant: "h2",
428
+ bold: true,
429
+ color: theme.textPrimary,
430
+ children: "Anatomy"
431
+ })
432
+ }), /*#__PURE__*/_jsx(ScrollView, {
433
+ contentContainerStyle: styles.sheetScroll,
434
+ children: list.map((item, idx) => /*#__PURE__*/_jsxs(TouchableOpacity, {
435
+ style: styles.sheetItemRow,
436
+ onPress: () => {
437
+ setBottomSheetVisible(false);
438
+ // Filter or change chapters list
439
+ },
440
+ children: [/*#__PURE__*/_jsx(Typography, {
441
+ variant: "body",
442
+ color: theme.textPrimary,
443
+ children: item.name
444
+ }), /*#__PURE__*/_jsxs(Typography, {
445
+ variant: "caption",
446
+ color: theme.textSecondary,
447
+ children: [item.count, " Modules"]
448
+ })]
449
+ }, idx))
450
+ })]
451
+ })]
452
+ })
453
+ });
454
+ };
455
+ return /*#__PURE__*/_jsxs(SafeAreaView, {
456
+ style: [styles.safeArea, {
457
+ backgroundColor: theme.background
458
+ }],
459
+ children: [/*#__PURE__*/_jsx(StatusBar, {
460
+ barStyle: "dark-content"
461
+ }), !hideHeader && /*#__PURE__*/_jsxs(View, {
462
+ style: styles.header,
463
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
464
+ onPress: handleBackPress,
465
+ style: styles.backButton,
466
+ children: /*#__PURE__*/_jsx(Icon, {
467
+ name: "arrow-left",
468
+ size: 20,
469
+ color: theme.textPrimary
470
+ })
471
+ }), /*#__PURE__*/_jsx(Typography, {
472
+ variant: "h2",
473
+ bold: true,
474
+ style: styles.headerTitle,
475
+ children: "Pearls"
476
+ }), currentView === 'chapters' ? /*#__PURE__*/_jsx(TouchableOpacity, {
477
+ onPress: () => setBottomSheetVisible(true),
478
+ style: styles.headerRightBtn,
479
+ children: /*#__PURE__*/_jsx(Icon, {
480
+ name: "list",
481
+ size: 20,
482
+ color: theme.textPrimary
483
+ })
484
+ }) : currentView === 'topics' ? /*#__PURE__*/_jsx(TouchableOpacity, {
485
+ style: styles.headerRightBtn,
486
+ children: /*#__PURE__*/_jsx(Icon, {
487
+ name: "search",
488
+ size: 20,
489
+ color: theme.textPrimary
490
+ })
491
+ }) : /*#__PURE__*/_jsx(View, {
492
+ style: styles.headerRightPlaceholder
493
+ })]
494
+ }), /*#__PURE__*/_jsxs(View, {
495
+ style: styles.mainViewContainer,
496
+ children: [currentView === 'topics' && renderTopicsView(), currentView === 'chapters' && renderChaptersView(), currentView === 'reader' && renderReaderView()]
497
+ }), renderBottomSheet()]
498
+ });
499
+ };
500
+ const styles = StyleSheet.create({
501
+ safeArea: {
502
+ flex: 1
503
+ },
504
+ header: {
505
+ flexDirection: 'row',
506
+ justifyContent: 'space-between',
507
+ alignItems: 'center',
508
+ paddingHorizontal: 16,
509
+ paddingVertical: 12
510
+ },
511
+ backButton: {
512
+ padding: 6
513
+ },
514
+ headerTitle: {
515
+ fontSize: 18,
516
+ fontWeight: '700'
517
+ },
518
+ headerRightBtn: {
519
+ padding: 6
520
+ },
521
+ headerRightPlaceholder: {
522
+ width: 32
523
+ },
524
+ mainViewContainer: {
525
+ flex: 1
526
+ },
527
+ scrollContent: {
528
+ paddingHorizontal: 16,
529
+ paddingTop: 8,
530
+ paddingBottom: 24
531
+ },
532
+ sectionHeaderTitle: {
533
+ fontSize: 16,
534
+ marginBottom: 16
535
+ },
536
+ listContainer: {
537
+ marginTop: 4
538
+ },
539
+ topicCard: {
540
+ padding: 14,
541
+ marginBottom: 10,
542
+ borderRadius: 12
543
+ },
544
+ topicRow: {
545
+ flexDirection: 'row',
546
+ alignItems: 'center'
547
+ },
548
+ iconCircle: {
549
+ width: 36,
550
+ height: 36,
551
+ borderRadius: 18,
552
+ justifyContent: 'center',
553
+ alignItems: 'center',
554
+ marginRight: 14
555
+ },
556
+ topicLabelText: {
557
+ fontSize: 14
558
+ },
559
+ // --- Chapters list design styles ---
560
+ sectionBlock: {
561
+ marginBottom: 20
562
+ },
563
+ sectionHeading: {
564
+ fontSize: 16,
565
+ marginBottom: 12
566
+ },
567
+ chaptersList: {
568
+ marginTop: 2
569
+ },
570
+ chapterCard: {
571
+ padding: 12,
572
+ marginBottom: 10,
573
+ borderRadius: 12
574
+ },
575
+ chapterRow: {
576
+ flexDirection: 'row',
577
+ alignItems: 'center'
578
+ },
579
+ chapterNumber: {
580
+ fontSize: 14,
581
+ width: 24,
582
+ textAlign: 'center',
583
+ marginRight: 8
584
+ },
585
+ chapterTitle: {
586
+ flex: 1,
587
+ fontSize: 14,
588
+ lineHeight: 18
589
+ },
590
+ chapterBadgeCol: {
591
+ justifyContent: 'center',
592
+ alignItems: 'flex-end',
593
+ marginLeft: 8
594
+ },
595
+ freeBadge: {
596
+ borderWidth: 1.5,
597
+ borderRadius: 6,
598
+ paddingHorizontal: 8,
599
+ paddingVertical: 3
600
+ },
601
+ freeText: {
602
+ fontSize: 9
603
+ },
604
+ lockCircle: {
605
+ width: 20,
606
+ height: 20,
607
+ borderRadius: 10,
608
+ backgroundColor: '#F1F5F9',
609
+ justifyContent: 'center',
610
+ alignItems: 'center'
611
+ },
612
+ // --- Reader view design styles ---
613
+ readerContainer: {
614
+ flex: 1
615
+ },
616
+ readerSubHeader: {
617
+ flexDirection: 'row',
618
+ justifyContent: 'space-between',
619
+ alignItems: 'center',
620
+ paddingHorizontal: 16,
621
+ paddingVertical: 12,
622
+ borderBottomWidth: 1,
623
+ borderBottomColor: '#E2E8F0'
624
+ },
625
+ readerSubTitle: {
626
+ flex: 1,
627
+ fontSize: 14,
628
+ marginRight: 16
629
+ },
630
+ readerScroll: {
631
+ paddingHorizontal: 16,
632
+ paddingVertical: 16
633
+ },
634
+ bulletRow: {
635
+ flexDirection: 'row',
636
+ alignItems: 'flex-start',
637
+ marginBottom: 16
638
+ },
639
+ bulletPointDot: {
640
+ fontSize: 18,
641
+ marginRight: 10,
642
+ lineHeight: 20
643
+ },
644
+ bulletText: {
645
+ flex: 1,
646
+ fontSize: 14,
647
+ lineHeight: 22
648
+ },
649
+ checkboxBar: {
650
+ paddingHorizontal: 16,
651
+ paddingVertical: 14,
652
+ borderTopWidth: 1,
653
+ borderTopColor: '#E2E8F0',
654
+ backgroundColor: '#F8FAFC'
655
+ },
656
+ checkboxRow: {
657
+ flexDirection: 'row',
658
+ alignItems: 'center'
659
+ },
660
+ checkboxBox: {
661
+ width: 20,
662
+ height: 20,
663
+ borderWidth: 2,
664
+ borderRadius: 4,
665
+ justifyContent: 'center',
666
+ alignItems: 'center',
667
+ marginRight: 10
668
+ },
669
+ checkboxInner: {
670
+ width: 10,
671
+ height: 10,
672
+ borderRadius: 2,
673
+ backgroundColor: '#FFFFFF'
674
+ },
675
+ footerRow: {
676
+ flexDirection: 'row',
677
+ alignItems: 'center',
678
+ paddingHorizontal: 16,
679
+ paddingVertical: 12,
680
+ backgroundColor: '#FFFFFF',
681
+ borderTopWidth: 1,
682
+ borderTopColor: '#E2E8F0',
683
+ justifyContent: 'space-between'
684
+ },
685
+ footerBtn: {
686
+ paddingVertical: 8,
687
+ paddingHorizontal: 12
688
+ },
689
+ nextActionBtn: {
690
+ paddingHorizontal: 24,
691
+ paddingVertical: 10,
692
+ borderRadius: 8,
693
+ minWidth: 80,
694
+ justifyContent: 'center',
695
+ alignItems: 'center'
696
+ },
697
+ // --- Slide-up Sheet styling details ---
698
+ sheetOverlay: {
699
+ flex: 1,
700
+ backgroundColor: 'rgba(0, 0, 0, 0.4)',
701
+ justifyContent: 'flex-end'
702
+ },
703
+ sheetBackdrop: {
704
+ ...StyleSheet.absoluteFillObject
705
+ },
706
+ sheetContent: {
707
+ backgroundColor: '#FFFFFF',
708
+ borderTopLeftRadius: 20,
709
+ borderTopRightRadius: 20,
710
+ maxHeight: SCREEN_HEIGHT * 0.7,
711
+ paddingBottom: 20
712
+ },
713
+ sheetGrabber: {
714
+ width: 40,
715
+ height: 4,
716
+ backgroundColor: '#E2E8F0',
717
+ borderRadius: 2,
718
+ alignSelf: 'center',
719
+ marginTop: 8,
720
+ marginBottom: 16
721
+ },
722
+ sheetHeader: {
723
+ paddingHorizontal: 20,
724
+ paddingBottom: 12,
725
+ borderBottomWidth: 1,
726
+ borderBottomColor: '#F1F5F9'
727
+ },
728
+ sheetScroll: {
729
+ paddingHorizontal: 20,
730
+ paddingVertical: 8
731
+ },
732
+ sheetItemRow: {
733
+ flexDirection: 'row',
734
+ justifyContent: 'space-between',
735
+ alignItems: 'center',
736
+ paddingVertical: 14,
737
+ borderBottomWidth: 1,
738
+ borderBottomColor: '#F8FAFC'
739
+ }
740
+ });
741
+ //# sourceMappingURL=PearlsScreen.js.map