@ankhorage/templates 9.1.4 → 9.2.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.
Files changed (20) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/templates/catalog.generated.d.ts.map +1 -1
  3. package/dist/templates/catalog.generated.js +9 -2
  4. package/dist/templates/catalog.generated.js.map +1 -1
  5. package/dist/templates/categories/education-learning/sharkprey/createAppManifest.d.ts +4 -0
  6. package/dist/templates/categories/education-learning/sharkprey/createAppManifest.d.ts.map +1 -0
  7. package/dist/templates/categories/education-learning/sharkprey/createAppManifest.js +1476 -0
  8. package/dist/templates/categories/education-learning/sharkprey/createAppManifest.js.map +1 -0
  9. package/package.json +4 -4
  10. package/src/templates/categories/education-learning/sharkprey/assets/images/sharkprey-logo.png +0 -0
  11. package/src/templates/categories/education-learning/sharkprey/assets/screens/01-splash.png +0 -0
  12. package/src/templates/categories/education-learning/sharkprey/assets/screens/02-onboarding.png +0 -0
  13. package/src/templates/categories/education-learning/sharkprey/assets/screens/03-training-setup.png +0 -0
  14. package/src/templates/categories/education-learning/sharkprey/assets/screens/04-decision-table.png +0 -0
  15. package/src/templates/categories/education-learning/sharkprey/assets/screens/05-answer-explanation.png +0 -0
  16. package/src/templates/categories/education-learning/sharkprey/assets/screens/06-session-summary.png +0 -0
  17. package/src/templates/categories/education-learning/sharkprey/assets/screens/07-hand-history.png +0 -0
  18. package/src/templates/categories/education-learning/sharkprey/assets/screens/08-stats.png +0 -0
  19. package/src/templates/categories/education-learning/sharkprey/assets/screens/09-learn.png +0 -0
  20. package/src/templates/categories/education-learning/sharkprey/assets/screens/10-settings.png +0 -0
@@ -0,0 +1,1476 @@
1
+ const manifest = {
2
+ metadata: {
3
+ name: 'SharkPrey',
4
+ slug: 'sharkprey',
5
+ version: '0.1.0',
6
+ category: 'education_learning',
7
+ themeId: 'sharkprey',
8
+ },
9
+ themes: [
10
+ {
11
+ id: 'sharkprey',
12
+ name: 'SharkPrey',
13
+ light: {
14
+ primaryColor: '#2563EB',
15
+ harmony: 'triadic',
16
+ },
17
+ dark: {
18
+ primaryColor: '#2563EB',
19
+ harmony: 'triadic',
20
+ },
21
+ tokens: {
22
+ spacing: {
23
+ none: 0,
24
+ xs: 4,
25
+ s: 8,
26
+ m: 16,
27
+ l: 24,
28
+ xl: 32,
29
+ xxl: 48,
30
+ },
31
+ radii: {
32
+ none: 0,
33
+ s: 8,
34
+ m: 12,
35
+ l: 24,
36
+ full: 9999,
37
+ },
38
+ },
39
+ },
40
+ ],
41
+ activeThemeId: 'sharkprey',
42
+ splashScreen: {
43
+ backgroundColor: '#060806',
44
+ image: './assets/images/sharkprey-logo.png',
45
+ imageWidth: 280,
46
+ resizeMode: 'contain',
47
+ dark: {
48
+ backgroundColor: '#060806',
49
+ image: './assets/images/sharkprey-logo.png',
50
+ imageWidth: 280,
51
+ resizeMode: 'contain',
52
+ },
53
+ },
54
+ infra: {
55
+ database: {
56
+ provider: 'supabase',
57
+ tier: 'dev',
58
+ },
59
+ storage: {
60
+ provider: 'auto',
61
+ buckets: ['media'],
62
+ },
63
+ secretStore: {
64
+ provider: 'supabase-vault',
65
+ },
66
+ deployment: {
67
+ target: 'minikube',
68
+ monitoring: false,
69
+ },
70
+ auth: {
71
+ provider: 'supabase',
72
+ scope: 'global',
73
+ flow: {
74
+ signInRoute: 'sign-in',
75
+ signUpRoute: 'sign-up',
76
+ signOutRoute: 'sign-out',
77
+ forgotPasswordRoute: 'forgot-password',
78
+ postSignInRoute: '/',
79
+ unauthorizedRoute: 'sign-in',
80
+ },
81
+ signIn: {
82
+ identifiers: ['email'],
83
+ },
84
+ signUp: {
85
+ requiredFields: ['email', 'password'],
86
+ optionalFields: ['firstName', 'lastName'],
87
+ signUpPolicy: 'autoSignIn',
88
+ },
89
+ profile: {
90
+ fields: ['email', 'firstName', 'lastName'],
91
+ },
92
+ },
93
+ networking: {
94
+ cdn: false,
95
+ },
96
+ modules: [],
97
+ state: {
98
+ provider: 'legend',
99
+ persistence: 'local',
100
+ },
101
+ },
102
+ settings: {
103
+ localization: {
104
+ defaultLocale: 'en',
105
+ locales: ['en'],
106
+ },
107
+ },
108
+ navigator: {
109
+ type: 'stack',
110
+ initialRouteName: 'onboarding',
111
+ routes: [
112
+ {
113
+ name: 'splash',
114
+ screenId: 'splash',
115
+ showInPrimaryNavigation: false,
116
+ },
117
+ {
118
+ name: 'onboarding',
119
+ screenId: 'onboarding',
120
+ showInPrimaryNavigation: false,
121
+ },
122
+ {
123
+ name: 'app',
124
+ showInPrimaryNavigation: false,
125
+ navigator: {
126
+ type: 'tabs',
127
+ initialRouteName: 'train',
128
+ routes: [
129
+ {
130
+ name: 'train',
131
+ label: 'Train',
132
+ icon: {
133
+ name: 'school-outline',
134
+ provider: 'Ionicons',
135
+ },
136
+ navigator: {
137
+ type: 'stack',
138
+ initialRouteName: 'training-setup',
139
+ routes: [
140
+ {
141
+ name: 'training-setup',
142
+ screenId: 'training-setup',
143
+ },
144
+ {
145
+ name: 'decision-table',
146
+ screenId: 'decision-table',
147
+ showInPrimaryNavigation: false,
148
+ },
149
+ {
150
+ name: 'answer-explanation',
151
+ screenId: 'answer-explanation',
152
+ showInPrimaryNavigation: false,
153
+ },
154
+ {
155
+ name: 'session-summary',
156
+ screenId: 'session-summary',
157
+ showInPrimaryNavigation: false,
158
+ },
159
+ ],
160
+ },
161
+ },
162
+ {
163
+ name: 'history',
164
+ label: 'History',
165
+ icon: {
166
+ name: 'time-outline',
167
+ provider: 'Ionicons',
168
+ },
169
+ screenId: 'hand-history',
170
+ },
171
+ {
172
+ name: 'stats',
173
+ label: 'Stats',
174
+ icon: {
175
+ name: 'stats-chart-outline',
176
+ provider: 'Ionicons',
177
+ },
178
+ screenId: 'stats',
179
+ },
180
+ {
181
+ name: 'learn',
182
+ label: 'Learn',
183
+ icon: {
184
+ name: 'book-outline',
185
+ provider: 'Ionicons',
186
+ },
187
+ screenId: 'learn',
188
+ },
189
+ {
190
+ name: 'settings',
191
+ label: 'Settings',
192
+ icon: {
193
+ name: 'settings-outline',
194
+ provider: 'Ionicons',
195
+ },
196
+ screenId: 'settings',
197
+ },
198
+ ],
199
+ },
200
+ },
201
+ ],
202
+ },
203
+ screens: {
204
+ splash: {
205
+ id: 'splash',
206
+ name: 'Splash',
207
+ title: 'SharkPrey',
208
+ description: 'Native splash evidence. The runtime begins at onboarding after the native splash completes.',
209
+ root: {
210
+ id: 'splash-root',
211
+ type: 'Screen',
212
+ props: {
213
+ width: 'narrow',
214
+ scroll: false,
215
+ },
216
+ style: {
217
+ padding: 24,
218
+ gap: 16,
219
+ },
220
+ children: [
221
+ {
222
+ id: 'splash-logo',
223
+ type: 'Image',
224
+ props: {
225
+ source: {
226
+ mediaId: 'sharkprey-logo',
227
+ },
228
+ alt: 'SharkPrey shark wearing a graduation cap',
229
+ },
230
+ style: {
231
+ width: '100%',
232
+ height: 320,
233
+ borderRadius: 24,
234
+ },
235
+ },
236
+ {
237
+ id: 'splash-tagline',
238
+ type: 'Text',
239
+ props: {
240
+ text: 'Improve your game. Become the shark.',
241
+ variant: 'lead',
242
+ align: 'center',
243
+ },
244
+ },
245
+ ],
246
+ },
247
+ },
248
+ onboarding: {
249
+ id: 'onboarding',
250
+ name: 'Onboarding',
251
+ title: 'Where are you starting?',
252
+ description: 'Initial skill-level choice. Selection persistence requires generated-app state wiring.',
253
+ root: {
254
+ id: 'onboarding-root',
255
+ type: 'Screen',
256
+ props: {
257
+ width: 'narrow',
258
+ scroll: true,
259
+ },
260
+ style: {
261
+ padding: 24,
262
+ gap: 16,
263
+ },
264
+ children: [
265
+ {
266
+ id: 'onboarding-title',
267
+ type: 'Heading',
268
+ props: {
269
+ text: 'Where are you starting?',
270
+ level: 1,
271
+ size: 'h1',
272
+ },
273
+ },
274
+ {
275
+ id: 'onboarding-tagline',
276
+ type: 'Text',
277
+ props: {
278
+ text: 'Improve your game. Become the shark.',
279
+ variant: 'lead',
280
+ weight: 'semiBold',
281
+ },
282
+ },
283
+ {
284
+ id: 'onboarding-copy',
285
+ type: 'Text',
286
+ props: {
287
+ text: 'Train one decision at a time—with feedback that explains why.',
288
+ variant: 'body',
289
+ emphasis: 'muted',
290
+ },
291
+ },
292
+ {
293
+ id: 'onboarding-new',
294
+ type: 'Card',
295
+ props: {
296
+ title: 'New to NLHE',
297
+ description: 'Learn the rules and build a solid foundation.',
298
+ tone: 'outline',
299
+ },
300
+ style: {
301
+ borderRadius: 24,
302
+ },
303
+ },
304
+ {
305
+ id: 'onboarding-ranges',
306
+ type: 'Card',
307
+ props: {
308
+ title: 'Learning the ranges · Selected',
309
+ description: 'Start with an adaptive baseline assessment.',
310
+ tone: 'outline',
311
+ },
312
+ style: {
313
+ borderRadius: 24,
314
+ },
315
+ },
316
+ {
317
+ id: 'onboarding-experienced',
318
+ type: 'Card',
319
+ props: {
320
+ title: 'Experienced player',
321
+ description: 'Focus on difficult decision categories.',
322
+ tone: 'outline',
323
+ },
324
+ style: {
325
+ borderRadius: 24,
326
+ },
327
+ },
328
+ {
329
+ id: 'onboarding-rules',
330
+ type: 'Button',
331
+ props: {
332
+ children: 'New to NLHE? Learn the rules',
333
+ color: 'primary',
334
+ variant: 'ghost',
335
+ size: 'm',
336
+ onPress: {
337
+ type: 'navigate',
338
+ payload: {
339
+ route: 'learn',
340
+ },
341
+ },
342
+ },
343
+ },
344
+ {
345
+ id: 'onboarding-start',
346
+ type: 'Button',
347
+ props: {
348
+ children: 'Start assessment',
349
+ color: 'primary',
350
+ variant: 'solid',
351
+ size: 'l',
352
+ onPress: {
353
+ type: 'navigate',
354
+ payload: {
355
+ route: 'app',
356
+ },
357
+ },
358
+ },
359
+ },
360
+ ],
361
+ },
362
+ },
363
+ 'training-setup': {
364
+ id: 'training-setup',
365
+ name: 'Training Setup',
366
+ title: 'Build your session',
367
+ description: 'Dark cards preserve the selected configuration visually; generated-app state owns editing and persistence.',
368
+ root: {
369
+ id: 'training-setup-root',
370
+ type: 'Screen',
371
+ props: {
372
+ width: 'narrow',
373
+ scroll: true,
374
+ },
375
+ style: {
376
+ padding: 24,
377
+ gap: 16,
378
+ },
379
+ children: [
380
+ {
381
+ id: 'setup-title',
382
+ type: 'Heading',
383
+ props: {
384
+ text: 'Build your session',
385
+ level: 1,
386
+ size: 'h1',
387
+ },
388
+ },
389
+ {
390
+ id: 'setup-game-heading',
391
+ type: 'Heading',
392
+ props: {
393
+ text: 'Game',
394
+ level: 2,
395
+ size: 'h3',
396
+ },
397
+ },
398
+ {
399
+ id: 'setup-ring',
400
+ type: 'Card',
401
+ props: {
402
+ title: 'Ring Game',
403
+ description: 'Available',
404
+ tone: 'outline',
405
+ },
406
+ style: {
407
+ borderRadius: 24,
408
+ },
409
+ },
410
+ {
411
+ id: 'setup-sng',
412
+ type: 'Card',
413
+ props: {
414
+ title: "Sit'n'Go",
415
+ description: 'Available',
416
+ tone: 'outline',
417
+ },
418
+ style: {
419
+ borderRadius: 24,
420
+ },
421
+ },
422
+ {
423
+ id: 'setup-mtt',
424
+ type: 'Card',
425
+ props: {
426
+ title: 'MTT · Selected',
427
+ description: 'Tournament decision practice',
428
+ tone: 'outline',
429
+ },
430
+ style: {
431
+ borderRadius: 24,
432
+ },
433
+ },
434
+ {
435
+ id: 'setup-table-heading',
436
+ type: 'Heading',
437
+ props: {
438
+ text: 'Table',
439
+ level: 2,
440
+ size: 'h3',
441
+ },
442
+ },
443
+ {
444
+ id: 'setup-six-max',
445
+ type: 'Card',
446
+ props: {
447
+ title: '6-max',
448
+ description: 'Available',
449
+ tone: 'outline',
450
+ },
451
+ style: {
452
+ borderRadius: 24,
453
+ },
454
+ },
455
+ {
456
+ id: 'setup-nine-max',
457
+ type: 'Card',
458
+ props: {
459
+ title: '9-max · Selected',
460
+ description: 'Full-ring scenario',
461
+ tone: 'outline',
462
+ },
463
+ style: {
464
+ borderRadius: 24,
465
+ },
466
+ },
467
+ {
468
+ id: 'setup-focus',
469
+ type: 'Card',
470
+ props: {
471
+ title: 'Adaptive mix · Selected',
472
+ description: 'Targets the spots that will improve your game fastest.',
473
+ tone: 'outline',
474
+ },
475
+ style: {
476
+ borderRadius: 24,
477
+ },
478
+ },
479
+ {
480
+ id: 'setup-session',
481
+ type: 'Card',
482
+ props: {
483
+ title: '10 hands · Selected',
484
+ description: 'About 5 minutes',
485
+ tone: 'outline',
486
+ },
487
+ style: {
488
+ borderRadius: 24,
489
+ },
490
+ },
491
+ {
492
+ id: 'setup-start',
493
+ type: 'Button',
494
+ props: {
495
+ children: 'Start training',
496
+ color: 'primary',
497
+ variant: 'solid',
498
+ size: 'l',
499
+ onPress: {
500
+ type: 'navigate',
501
+ payload: {
502
+ route: 'decision-table',
503
+ },
504
+ },
505
+ },
506
+ },
507
+ ],
508
+ },
509
+ },
510
+ 'decision-table': {
511
+ id: 'decision-table',
512
+ name: 'Decision Table',
513
+ title: 'Your decision',
514
+ description: 'The poker surface is a visible placeholder until @ankhorage/zora-tabletop is exposed by core manifest metadata.',
515
+ root: {
516
+ id: 'decision-table-root',
517
+ type: 'Screen',
518
+ props: {
519
+ width: 'narrow',
520
+ scroll: true,
521
+ },
522
+ style: {
523
+ padding: 24,
524
+ gap: 16,
525
+ },
526
+ children: [
527
+ {
528
+ id: 'decision-title',
529
+ type: 'Heading',
530
+ props: {
531
+ text: 'Your decision',
532
+ level: 1,
533
+ size: 'h1',
534
+ },
535
+ },
536
+ {
537
+ id: 'decision-category',
538
+ type: 'Text',
539
+ props: {
540
+ text: 'Flop · C-bet sizing',
541
+ variant: 'eyebrow',
542
+ color: 'primary',
543
+ },
544
+ },
545
+ {
546
+ id: 'decision-progress',
547
+ type: 'Text',
548
+ props: {
549
+ text: 'Hand 3 of 10 · Blinds 50 / 100 · Pot 650',
550
+ variant: 'label',
551
+ },
552
+ },
553
+ {
554
+ id: 'decision-table-placeholder',
555
+ type: 'Box',
556
+ style: {
557
+ padding: 16,
558
+ borderRadius: 24,
559
+ },
560
+ children: [
561
+ {
562
+ id: 'decision-table-label',
563
+ type: 'Heading',
564
+ props: {
565
+ text: '9-max MTT · CO vs BB',
566
+ level: 2,
567
+ size: 'h3',
568
+ },
569
+ },
570
+ {
571
+ id: 'decision-table-seats',
572
+ type: 'Text',
573
+ props: {
574
+ text: 'Seats: UTG · UTG+1 · MP · MP+1 · HJ · CO · BTN (D) · SB · BB',
575
+ variant: 'bodySmall',
576
+ emphasis: 'muted',
577
+ },
578
+ },
579
+ {
580
+ id: 'decision-table-cards',
581
+ type: 'Text',
582
+ props: {
583
+ text: 'Hero CO: A♠ Q♦ Board: Q♥ 7♣ 2♠ Pot: 650',
584
+ variant: 'body',
585
+ weight: 'semiBold',
586
+ },
587
+ },
588
+ ],
589
+ },
590
+ {
591
+ id: 'decision-action',
592
+ type: 'Text',
593
+ props: {
594
+ text: 'You raised from CO. BB called.',
595
+ variant: 'bodySmall',
596
+ emphasis: 'muted',
597
+ },
598
+ },
599
+ {
600
+ id: 'decision-question',
601
+ type: 'Heading',
602
+ props: {
603
+ text: "What's the best default continuation-bet size?",
604
+ level: 2,
605
+ size: 'h2',
606
+ },
607
+ },
608
+ {
609
+ id: 'decision-actions',
610
+ type: 'ButtonGroup',
611
+ props: {
612
+ align: 'stretch',
613
+ orientation: 'vertical',
614
+ gap: 's',
615
+ },
616
+ children: [
617
+ {
618
+ id: 'decision-check',
619
+ type: 'Button',
620
+ props: {
621
+ children: 'Check',
622
+ color: 'primary',
623
+ variant: 'outline',
624
+ size: 'm',
625
+ onPress: {
626
+ type: 'alert',
627
+ payload: {
628
+ message: 'The poker task runtime evaluates this choice.',
629
+ },
630
+ },
631
+ },
632
+ },
633
+ {
634
+ id: 'decision-small',
635
+ type: 'Button',
636
+ props: {
637
+ children: 'Bet ~33% pot',
638
+ color: 'primary',
639
+ variant: 'outline',
640
+ size: 'm',
641
+ onPress: {
642
+ type: 'alert',
643
+ payload: {
644
+ message: 'The poker task runtime evaluates this choice.',
645
+ },
646
+ },
647
+ },
648
+ },
649
+ {
650
+ id: 'decision-large',
651
+ type: 'Button',
652
+ props: {
653
+ children: 'Bet ~75% pot',
654
+ color: 'primary',
655
+ variant: 'outline',
656
+ size: 'm',
657
+ onPress: {
658
+ type: 'navigate',
659
+ payload: {
660
+ route: 'answer-explanation',
661
+ },
662
+ },
663
+ },
664
+ },
665
+ ],
666
+ },
667
+ ],
668
+ },
669
+ },
670
+ 'answer-explanation': {
671
+ id: 'answer-explanation',
672
+ name: 'Answer Explanation',
673
+ title: 'Review the decision',
674
+ description: 'Immediate wrong-answer feedback with the correct default and a strategic explanation.',
675
+ root: {
676
+ id: 'answer-explanation-root',
677
+ type: 'Screen',
678
+ props: {
679
+ width: 'narrow',
680
+ scroll: true,
681
+ },
682
+ style: {
683
+ padding: 24,
684
+ gap: 16,
685
+ },
686
+ children: [
687
+ {
688
+ id: 'answer-title',
689
+ type: 'Heading',
690
+ props: {
691
+ text: 'Review the decision',
692
+ level: 1,
693
+ size: 'h1',
694
+ },
695
+ },
696
+ {
697
+ id: 'answer-category',
698
+ type: 'Text',
699
+ props: {
700
+ text: 'Flop · C-bet sizing',
701
+ variant: 'eyebrow',
702
+ color: 'primary',
703
+ },
704
+ },
705
+ {
706
+ id: 'answer-context',
707
+ type: 'Card',
708
+ props: {
709
+ title: 'Hero A♠ Q♦',
710
+ description: 'Board Q♥ 7♣ 2♠ · Pot 650',
711
+ tone: 'outline',
712
+ },
713
+ style: {
714
+ borderRadius: 24,
715
+ },
716
+ },
717
+ {
718
+ id: 'answer-error',
719
+ type: 'Notice',
720
+ props: {
721
+ title: 'Not quite',
722
+ description: 'You chose Bet ~75% pot',
723
+ color: 'danger',
724
+ },
725
+ },
726
+ {
727
+ id: 'answer-correct',
728
+ type: 'Notice',
729
+ props: {
730
+ title: 'Best default: Bet ~33% pot',
731
+ description: 'Correct answer',
732
+ color: 'success',
733
+ },
734
+ },
735
+ {
736
+ id: 'answer-why',
737
+ type: 'Heading',
738
+ props: {
739
+ text: 'Why',
740
+ level: 2,
741
+ size: 'h2',
742
+ },
743
+ },
744
+ {
745
+ id: 'answer-explanation-copy',
746
+ type: 'Text',
747
+ props: {
748
+ text: 'A small continuation bet gains value from worse Qx and denies equity efficiently. A large size is unnecessary as a baseline.',
749
+ variant: 'body',
750
+ },
751
+ },
752
+ {
753
+ id: 'answer-next',
754
+ type: 'Button',
755
+ props: {
756
+ children: 'Next hand',
757
+ color: 'primary',
758
+ variant: 'solid',
759
+ size: 'l',
760
+ onPress: {
761
+ type: 'navigate',
762
+ payload: {
763
+ route: 'decision-table',
764
+ },
765
+ },
766
+ },
767
+ },
768
+ ],
769
+ },
770
+ },
771
+ 'session-summary': {
772
+ id: 'session-summary',
773
+ name: 'Session Summary',
774
+ title: 'Session complete',
775
+ description: 'Session-level accuracy and adaptive category guidance.',
776
+ root: {
777
+ id: 'session-summary-root',
778
+ type: 'Screen',
779
+ props: {
780
+ width: 'narrow',
781
+ scroll: true,
782
+ },
783
+ style: {
784
+ padding: 24,
785
+ gap: 16,
786
+ },
787
+ children: [
788
+ {
789
+ id: 'summary-title',
790
+ type: 'Heading',
791
+ props: {
792
+ text: 'Session complete',
793
+ level: 1,
794
+ size: 'h1',
795
+ },
796
+ },
797
+ {
798
+ id: 'summary-progress',
799
+ type: 'ProgressRing',
800
+ props: {
801
+ value: 7,
802
+ max: 10,
803
+ centerValue: '70%',
804
+ centerLabel: 'Accuracy',
805
+ accessibilityLabel: 'Session accuracy',
806
+ accessibilityValueText: '7 of 10 answers correct',
807
+ color: 'primary',
808
+ trackColor: 'neutral',
809
+ size: 180,
810
+ thickness: 12,
811
+ },
812
+ },
813
+ {
814
+ id: 'summary-score',
815
+ type: 'Text',
816
+ props: {
817
+ text: '7 of 10 correct · 70% accuracy',
818
+ variant: 'lead',
819
+ weight: 'semiBold',
820
+ },
821
+ },
822
+ {
823
+ id: 'summary-strongest',
824
+ type: 'Card',
825
+ props: {
826
+ title: 'Preflop ranges · 86',
827
+ description: 'Strongest',
828
+ tone: 'outline',
829
+ },
830
+ style: {
831
+ borderRadius: 24,
832
+ },
833
+ },
834
+ {
835
+ id: 'summary-needs-work',
836
+ type: 'Card',
837
+ props: {
838
+ title: 'Bet sizing · 61',
839
+ description: 'Needs work',
840
+ tone: 'outline',
841
+ },
842
+ style: {
843
+ borderRadius: 24,
844
+ },
845
+ },
846
+ {
847
+ id: 'summary-adaptive',
848
+ type: 'Text',
849
+ props: {
850
+ text: 'Your next session will adapt to these results.',
851
+ variant: 'body',
852
+ emphasis: 'muted',
853
+ },
854
+ },
855
+ {
856
+ id: 'summary-practice',
857
+ type: 'Button',
858
+ props: {
859
+ children: 'Practice bet sizing',
860
+ color: 'primary',
861
+ variant: 'solid',
862
+ size: 'l',
863
+ onPress: {
864
+ type: 'navigate',
865
+ payload: {
866
+ route: 'training-setup',
867
+ },
868
+ },
869
+ },
870
+ },
871
+ ],
872
+ },
873
+ },
874
+ 'hand-history': {
875
+ id: 'hand-history',
876
+ name: 'Hand History',
877
+ title: 'History',
878
+ description: 'Completed one-decision summaries only. Hand replay is intentionally deferred.',
879
+ root: {
880
+ id: 'hand-history-root',
881
+ type: 'Screen',
882
+ props: {
883
+ width: 'narrow',
884
+ scroll: true,
885
+ },
886
+ style: {
887
+ padding: 24,
888
+ gap: 16,
889
+ },
890
+ children: [
891
+ {
892
+ id: 'history-title',
893
+ type: 'Heading',
894
+ props: {
895
+ text: 'History',
896
+ level: 1,
897
+ size: 'h1',
898
+ },
899
+ },
900
+ {
901
+ id: 'history-filters',
902
+ type: 'ButtonGroup',
903
+ props: {
904
+ align: 'stretch',
905
+ orientation: 'horizontal',
906
+ gap: 's',
907
+ },
908
+ children: [
909
+ {
910
+ id: 'history-all',
911
+ type: 'Button',
912
+ props: {
913
+ children: 'All · Selected',
914
+ color: 'primary',
915
+ variant: 'outline',
916
+ size: 'm',
917
+ onPress: {
918
+ type: 'filter',
919
+ payload: {
920
+ filterKey: 'decisionStatus',
921
+ filterValue: 'all',
922
+ },
923
+ },
924
+ },
925
+ },
926
+ {
927
+ id: 'history-correct',
928
+ type: 'Button',
929
+ props: {
930
+ children: 'Correct',
931
+ color: 'primary',
932
+ variant: 'outline',
933
+ size: 'm',
934
+ onPress: {
935
+ type: 'filter',
936
+ payload: {
937
+ filterKey: 'decisionStatus',
938
+ filterValue: 'correct',
939
+ },
940
+ },
941
+ },
942
+ },
943
+ {
944
+ id: 'history-review',
945
+ type: 'Button',
946
+ props: {
947
+ children: 'Review',
948
+ color: 'primary',
949
+ variant: 'outline',
950
+ size: 'm',
951
+ onPress: {
952
+ type: 'filter',
953
+ payload: {
954
+ filterKey: 'decisionStatus',
955
+ filterValue: 'incorrect',
956
+ },
957
+ },
958
+ },
959
+ },
960
+ ],
961
+ },
962
+ {
963
+ id: 'history-recent',
964
+ type: 'Heading',
965
+ props: {
966
+ text: 'Recent decisions',
967
+ level: 2,
968
+ size: 'h2',
969
+ },
970
+ },
971
+ {
972
+ id: 'history-aq',
973
+ type: 'Card',
974
+ props: {
975
+ title: 'A♠ Q♦ · Q♥ 7♣ 2♠ · Incorrect',
976
+ description: 'Bet ~75% → Bet ~33% · C-bet sizing',
977
+ tone: 'outline',
978
+ },
979
+ style: {
980
+ borderRadius: 24,
981
+ },
982
+ },
983
+ {
984
+ id: 'history-ak',
985
+ type: 'Card',
986
+ props: {
987
+ title: 'A♣ K♠ · Preflop · Correct',
988
+ description: 'Raise 2.5 BB · Preflop ranges',
989
+ tone: 'outline',
990
+ },
991
+ style: {
992
+ borderRadius: 24,
993
+ },
994
+ },
995
+ {
996
+ id: 'history-kq',
997
+ type: 'Card',
998
+ props: {
999
+ title: 'K♥ Q♣ · Turn · Correct',
1000
+ description: 'Check · Pot control',
1001
+ tone: 'outline',
1002
+ },
1003
+ style: {
1004
+ borderRadius: 24,
1005
+ },
1006
+ },
1007
+ ],
1008
+ },
1009
+ },
1010
+ stats: {
1011
+ id: 'stats',
1012
+ name: 'Stats',
1013
+ title: 'Your game',
1014
+ description: 'Strengths and weaknesses derived from completed decision categories.',
1015
+ root: {
1016
+ id: 'stats-root',
1017
+ type: 'Screen',
1018
+ props: {
1019
+ width: 'narrow',
1020
+ scroll: true,
1021
+ },
1022
+ style: {
1023
+ padding: 24,
1024
+ gap: 16,
1025
+ },
1026
+ children: [
1027
+ {
1028
+ id: 'stats-title',
1029
+ type: 'Heading',
1030
+ props: {
1031
+ text: 'Your game',
1032
+ level: 1,
1033
+ size: 'h1',
1034
+ },
1035
+ },
1036
+ {
1037
+ id: 'stats-overall',
1038
+ type: 'ProgressRing',
1039
+ props: {
1040
+ value: 72,
1041
+ max: 100,
1042
+ centerValue: '72',
1043
+ centerLabel: 'Overall',
1044
+ accessibilityLabel: 'Overall poker decision score',
1045
+ accessibilityValueText: '72 based on 100 decisions',
1046
+ color: 'primary',
1047
+ trackColor: 'neutral',
1048
+ size: 160,
1049
+ thickness: 12,
1050
+ },
1051
+ },
1052
+ {
1053
+ id: 'stats-based-on',
1054
+ type: 'Text',
1055
+ props: {
1056
+ text: 'Based on 100 decisions',
1057
+ variant: 'body',
1058
+ emphasis: 'muted',
1059
+ },
1060
+ },
1061
+ {
1062
+ id: 'stats-strengths',
1063
+ type: 'Heading',
1064
+ props: {
1065
+ text: 'Strengths',
1066
+ level: 2,
1067
+ size: 'h2',
1068
+ },
1069
+ },
1070
+ {
1071
+ id: 'stats-preflop',
1072
+ type: 'Card',
1073
+ props: {
1074
+ title: 'Preflop ranges · 86',
1075
+ description: 'Strong category',
1076
+ tone: 'outline',
1077
+ },
1078
+ style: {
1079
+ borderRadius: 24,
1080
+ },
1081
+ },
1082
+ {
1083
+ id: 'stats-position',
1084
+ type: 'Card',
1085
+ props: {
1086
+ title: 'Position · 74',
1087
+ description: 'Strong category',
1088
+ tone: 'outline',
1089
+ },
1090
+ style: {
1091
+ borderRadius: 24,
1092
+ },
1093
+ },
1094
+ {
1095
+ id: 'stats-weaknesses',
1096
+ type: 'Heading',
1097
+ props: {
1098
+ text: 'Weaknesses',
1099
+ level: 2,
1100
+ size: 'h2',
1101
+ },
1102
+ },
1103
+ {
1104
+ id: 'stats-sizing',
1105
+ type: 'Card',
1106
+ props: {
1107
+ title: 'Bet sizing · 61',
1108
+ description: 'Needs focused practice',
1109
+ tone: 'outline',
1110
+ },
1111
+ style: {
1112
+ borderRadius: 24,
1113
+ },
1114
+ },
1115
+ {
1116
+ id: 'stats-bluffing',
1117
+ type: 'Card',
1118
+ props: {
1119
+ title: 'Bluffing · 68',
1120
+ description: 'Needs focused practice',
1121
+ tone: 'outline',
1122
+ },
1123
+ style: {
1124
+ borderRadius: 24,
1125
+ },
1126
+ },
1127
+ {
1128
+ id: 'stats-practice',
1129
+ type: 'Button',
1130
+ props: {
1131
+ children: 'Practice bet sizing',
1132
+ color: 'primary',
1133
+ variant: 'solid',
1134
+ size: 'l',
1135
+ onPress: {
1136
+ type: 'navigate',
1137
+ payload: {
1138
+ route: 'training-setup',
1139
+ },
1140
+ },
1141
+ },
1142
+ },
1143
+ ],
1144
+ },
1145
+ },
1146
+ learn: {
1147
+ id: 'learn',
1148
+ name: 'Learn',
1149
+ title: 'Learn',
1150
+ description: 'Fundamentals remain available without replacing the adaptive training loop.',
1151
+ root: {
1152
+ id: 'learn-root',
1153
+ type: 'Screen',
1154
+ props: {
1155
+ width: 'narrow',
1156
+ scroll: true,
1157
+ },
1158
+ style: {
1159
+ padding: 24,
1160
+ gap: 16,
1161
+ },
1162
+ children: [
1163
+ {
1164
+ id: 'learn-title',
1165
+ type: 'Heading',
1166
+ props: {
1167
+ text: 'Learn',
1168
+ level: 1,
1169
+ size: 'h1',
1170
+ },
1171
+ },
1172
+ {
1173
+ id: 'learn-rules',
1174
+ type: 'Card',
1175
+ props: {
1176
+ title: 'Start with the rules',
1177
+ description: 'Learn the essentials, then put them into practice.',
1178
+ tone: 'outline',
1179
+ eyebrow: 'NEW TO NLHE?',
1180
+ },
1181
+ style: {
1182
+ borderRadius: 24,
1183
+ },
1184
+ children: [
1185
+ {
1186
+ id: 'learn-explore',
1187
+ type: 'Button',
1188
+ props: {
1189
+ children: 'Explore fundamentals',
1190
+ color: 'primary',
1191
+ variant: 'outline',
1192
+ size: 'm',
1193
+ onPress: {
1194
+ type: 'alert',
1195
+ payload: {
1196
+ message: 'Fundamentals content is supplied by the learning service.',
1197
+ },
1198
+ },
1199
+ },
1200
+ },
1201
+ ],
1202
+ },
1203
+ {
1204
+ id: 'learn-recommended',
1205
+ type: 'Heading',
1206
+ props: {
1207
+ text: 'Recommended for you',
1208
+ level: 2,
1209
+ size: 'h2',
1210
+ },
1211
+ },
1212
+ {
1213
+ id: 'learn-cbet',
1214
+ type: 'Card',
1215
+ props: {
1216
+ title: 'Continuation-bet sizing',
1217
+ description: 'Why a small bet does more · 2 of 5 lessons',
1218
+ tone: 'outline',
1219
+ eyebrow: 'BET SIZING',
1220
+ },
1221
+ style: {
1222
+ borderRadius: 24,
1223
+ },
1224
+ children: [
1225
+ {
1226
+ id: 'learn-progress',
1227
+ type: 'Progress',
1228
+ props: {
1229
+ value: 2,
1230
+ max: 5,
1231
+ color: 'primary',
1232
+ size: 'm',
1233
+ },
1234
+ },
1235
+ {
1236
+ id: 'learn-continue',
1237
+ type: 'Button',
1238
+ props: {
1239
+ children: 'Continue lesson',
1240
+ color: 'primary',
1241
+ variant: 'solid',
1242
+ size: 'l',
1243
+ onPress: {
1244
+ type: 'alert',
1245
+ payload: {
1246
+ message: 'Lesson detail requires the learning-content runtime.',
1247
+ },
1248
+ },
1249
+ },
1250
+ },
1251
+ ],
1252
+ },
1253
+ {
1254
+ id: 'learn-more',
1255
+ type: 'Heading',
1256
+ props: {
1257
+ text: 'More fundamentals',
1258
+ level: 2,
1259
+ size: 'h2',
1260
+ },
1261
+ },
1262
+ {
1263
+ id: 'learn-rankings',
1264
+ type: 'Card',
1265
+ props: {
1266
+ title: 'Hand rankings',
1267
+ description: '5 min',
1268
+ tone: 'outline',
1269
+ },
1270
+ style: {
1271
+ borderRadius: 24,
1272
+ },
1273
+ },
1274
+ {
1275
+ id: 'learn-position',
1276
+ type: 'Card',
1277
+ props: {
1278
+ title: 'Position at the table',
1279
+ description: '6 min',
1280
+ tone: 'outline',
1281
+ },
1282
+ style: {
1283
+ borderRadius: 24,
1284
+ },
1285
+ },
1286
+ ],
1287
+ },
1288
+ },
1289
+ settings: {
1290
+ id: 'settings',
1291
+ name: 'Settings',
1292
+ title: 'Settings',
1293
+ description: 'Preferences are visible through supported SettingsRow nodes. Generated-app adapters own persisted selection, SharkScope connection, and destructive confirmation.',
1294
+ root: {
1295
+ id: 'settings-root',
1296
+ type: 'Screen',
1297
+ props: {
1298
+ width: 'narrow',
1299
+ scroll: true,
1300
+ },
1301
+ style: {
1302
+ padding: 24,
1303
+ gap: 16,
1304
+ },
1305
+ children: [
1306
+ {
1307
+ id: 'settings-title',
1308
+ type: 'Heading',
1309
+ props: {
1310
+ text: 'Settings',
1311
+ level: 1,
1312
+ size: 'h1',
1313
+ },
1314
+ },
1315
+ {
1316
+ id: 'settings-preferences',
1317
+ type: 'Heading',
1318
+ props: {
1319
+ text: 'Preferences',
1320
+ level: 2,
1321
+ size: 'h2',
1322
+ },
1323
+ },
1324
+ {
1325
+ id: 'settings-appearance',
1326
+ type: 'SettingsRow',
1327
+ props: {
1328
+ title: 'Appearance',
1329
+ description: 'Light, dark, or system',
1330
+ meta: 'System',
1331
+ disabled: false,
1332
+ },
1333
+ },
1334
+ {
1335
+ id: 'settings-toggle-theme',
1336
+ type: 'Button',
1337
+ props: {
1338
+ children: 'Toggle theme',
1339
+ color: 'primary',
1340
+ variant: 'outline',
1341
+ size: 'm',
1342
+ onPress: {
1343
+ type: 'toggleDarkMode',
1344
+ },
1345
+ },
1346
+ },
1347
+ {
1348
+ id: 'settings-deck',
1349
+ type: 'SettingsRow',
1350
+ props: {
1351
+ title: 'Card deck',
1352
+ description: 'Choose your preferred deck style',
1353
+ meta: 'SharkPrey Classic',
1354
+ disabled: false,
1355
+ },
1356
+ },
1357
+ {
1358
+ id: 'settings-language',
1359
+ type: 'SettingsRow',
1360
+ props: {
1361
+ title: 'Language',
1362
+ description: 'Application language',
1363
+ meta: 'English',
1364
+ disabled: false,
1365
+ },
1366
+ },
1367
+ {
1368
+ id: 'settings-haptics',
1369
+ type: 'SettingsRow',
1370
+ props: {
1371
+ title: 'Haptics',
1372
+ description: 'Decision feedback',
1373
+ meta: 'On',
1374
+ disabled: false,
1375
+ },
1376
+ },
1377
+ {
1378
+ id: 'settings-account',
1379
+ type: 'Heading',
1380
+ props: {
1381
+ text: 'Account',
1382
+ level: 2,
1383
+ size: 'h2',
1384
+ },
1385
+ },
1386
+ {
1387
+ id: 'settings-sharkscope',
1388
+ type: 'SettingsRow',
1389
+ props: {
1390
+ title: 'SharkScope',
1391
+ description: 'Connect your account',
1392
+ meta: 'Not connected',
1393
+ disabled: false,
1394
+ },
1395
+ },
1396
+ {
1397
+ id: 'settings-connect',
1398
+ type: 'Button',
1399
+ props: {
1400
+ children: 'Connect account',
1401
+ color: 'primary',
1402
+ variant: 'outline',
1403
+ size: 'm',
1404
+ onPress: {
1405
+ type: 'alert',
1406
+ payload: {
1407
+ message: 'SharkScope connection requires its generated-app adapter.',
1408
+ },
1409
+ },
1410
+ },
1411
+ },
1412
+ {
1413
+ id: 'settings-data',
1414
+ type: 'Heading',
1415
+ props: {
1416
+ text: 'Data',
1417
+ level: 2,
1418
+ size: 'h2',
1419
+ },
1420
+ },
1421
+ {
1422
+ id: 'settings-reset',
1423
+ type: 'Button',
1424
+ props: {
1425
+ children: 'Reset stats',
1426
+ color: 'danger',
1427
+ variant: 'outline',
1428
+ size: 'm',
1429
+ onPress: {
1430
+ type: 'alert',
1431
+ payload: {
1432
+ message: 'Confirmation is required before all progress and category scores are erased.',
1433
+ },
1434
+ },
1435
+ },
1436
+ },
1437
+ {
1438
+ id: 'settings-footer',
1439
+ type: 'Text',
1440
+ props: {
1441
+ text: 'SharkPrey · Improve your game. Become the shark.',
1442
+ variant: 'caption',
1443
+ emphasis: 'muted',
1444
+ align: 'center',
1445
+ },
1446
+ },
1447
+ ],
1448
+ },
1449
+ },
1450
+ },
1451
+ activeThemeMode: 'dark',
1452
+ media: {
1453
+ assets: {
1454
+ 'sharkprey-logo': {
1455
+ id: 'sharkprey-logo',
1456
+ name: 'SharkPrey shark and graduation-cap logo',
1457
+ kind: 'image',
1458
+ source: {
1459
+ kind: 'bundled',
1460
+ path: 'assets/images/sharkprey-logo.png',
1461
+ },
1462
+ contentType: 'image/png',
1463
+ metadata: {
1464
+ originalFileName: '00-logo.png',
1465
+ width: 1536,
1466
+ height: 1024,
1467
+ },
1468
+ },
1469
+ },
1470
+ },
1471
+ };
1472
+ /*** Create the complete portable application manifest for this template. */
1473
+ export default function createAppManifest() {
1474
+ return structuredClone(manifest);
1475
+ }
1476
+ //# sourceMappingURL=createAppManifest.js.map