@clikvn/showroom-visualizer 0.5.1 → 0.5.2

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 (28) hide show
  1. package/dist/components/SkinLayer/HotspotOverview/index.d.ts.map +1 -1
  2. package/dist/features/ShowroomVisualizer/index.d.ts +1 -0
  3. package/dist/features/ShowroomVisualizer/index.d.ts.map +1 -1
  4. package/dist/hooks/SkinLayer/useAutoPlayer.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/models/Visualizer/Poi/PoiListMoving.d.ts.map +1 -1
  7. package/dist/web.js +1 -1
  8. package/example/src/App.tsx +195 -0
  9. package/example/src/components/ControlPanel.tsx +736 -0
  10. package/example/src/components/CustomComponents/FloorplanComponents.tsx +37 -0
  11. package/example/src/components/CustomComponents/HotspotCategoryComponents.tsx +106 -0
  12. package/example/src/components/CustomComponents/PinActionsComponents.tsx +45 -0
  13. package/example/src/components/CustomComponents/PlayBarComponents.tsx +41 -0
  14. package/example/src/components/CustomComponents/PoiDetailComponents.tsx +296 -0
  15. package/example/src/components/CustomComponents/SearchAndDiscoveryComponents.tsx +207 -0
  16. package/example/src/components/CustomComponents/index.tsx +7 -0
  17. package/example/src/css-modules.d.ts +4 -0
  18. package/example/src/hooks/useCustomLayout.ts +328 -0
  19. package/example/src/index.css +31 -0
  20. package/example/src/main.tsx +11 -0
  21. package/package.json +1 -1
  22. package/.idea/inspectionProfiles/Project_Default.xml +0 -36
  23. package/.idea/jsLinters/eslint.xml +0 -7
  24. package/.idea/misc.xml +0 -9
  25. package/.idea/modules.xml +0 -8
  26. package/.idea/prettier.xml +0 -8
  27. package/.idea/showroom-visualizer.iml +0 -9
  28. package/.idea/vcs.xml +0 -6
@@ -0,0 +1,736 @@
1
+ import { FC } from 'react';
2
+
3
+ type ControlPanelProps = {
4
+ // General
5
+ enableCustomLayout: boolean;
6
+ language: 'vi' | 'en';
7
+ onEnableCustomLayoutChange: (value: boolean) => void;
8
+ onLanguageChange: (value: 'vi' | 'en') => void;
9
+
10
+ // Floorplan/Minimap
11
+ customMinimap: boolean;
12
+ customMarker: boolean;
13
+ onCustomMinimapChange: (value: boolean) => void;
14
+ onCustomMarkerChange: (value: boolean) => void;
15
+
16
+ // PinActions
17
+ customPinActions: boolean;
18
+ customPinActionButton: boolean;
19
+ customPinActionButtonWithTooltip: boolean;
20
+ onCustomPinActionsChange: (value: boolean) => void;
21
+ onCustomPinActionButtonChange: (value: boolean) => void;
22
+ onCustomPinActionButtonWithTooltipChange: (value: boolean) => void;
23
+
24
+ // SearchAndDiscoverySlideIn
25
+ customSearchAndDiscovery: boolean;
26
+ customTourInfoActionPart: boolean;
27
+ customScenarioPart: boolean;
28
+ customPromotionPart: boolean;
29
+ customPoiInfoActionPart: boolean;
30
+ customDisplayActionPart: boolean;
31
+ customHelpActionPart: boolean;
32
+ customContentItem: boolean;
33
+ customScenarioItem: boolean;
34
+ customCardItem: boolean;
35
+ onCustomSearchAndDiscoveryChange: (value: boolean) => void;
36
+ onCustomTourInfoActionPartChange: (value: boolean) => void;
37
+ onCustomScenarioPartChange: (value: boolean) => void;
38
+ onCustomPromotionPartChange: (value: boolean) => void;
39
+ onCustomPoiInfoActionPartChange: (value: boolean) => void;
40
+ onCustomDisplayActionPartChange: (value: boolean) => void;
41
+ onCustomHelpActionPartChange: (value: boolean) => void;
42
+ onCustomContentItemChange: (value: boolean) => void;
43
+ onCustomScenarioItemChange: (value: boolean) => void;
44
+ onCustomCardItemChange: (value: boolean) => void;
45
+
46
+ // HotspotCategorySlideIn
47
+ customHotspotCategorySlideIn: boolean;
48
+ customScenarioSlideIn: boolean;
49
+ customSpaceAndSceneSlideIn: boolean;
50
+ customFeatureSlideIn: boolean;
51
+ customProductSlideIn: boolean;
52
+ customPoiSlideIn: boolean;
53
+ onCustomHotspotCategorySlideInChange: (value: boolean) => void;
54
+ onCustomScenarioSlideInChange: (value: boolean) => void;
55
+ onCustomSpaceAndSceneSlideInChange: (value: boolean) => void;
56
+ onCustomFeatureSlideInChange: (value: boolean) => void;
57
+ onCustomProductSlideInChange: (value: boolean) => void;
58
+ onCustomPoiSlideInChange: (value: boolean) => void;
59
+
60
+ // PlayBar
61
+ customPlayBarTooltip: boolean;
62
+ customPlayBarButton: boolean;
63
+ onCustomPlayBarTooltipChange: (value: boolean) => void;
64
+ onCustomPlayBarButtonChange: (value: boolean) => void;
65
+
66
+ // PoiDetailSlideIn
67
+ customPoiDetailDrawer: boolean;
68
+ customPoiDetailBottomSheet: boolean;
69
+ customProductDetailHeader: boolean;
70
+ customGroupActionButton: boolean;
71
+ customTabs: boolean;
72
+ customTabsContent: boolean;
73
+ customInfo: boolean;
74
+ customGallery: boolean;
75
+ customArTab: boolean;
76
+ onCustomPoiDetailDrawerChange: (value: boolean) => void;
77
+ onCustomPoiDetailBottomSheetChange: (value: boolean) => void;
78
+ onCustomProductDetailHeaderChange: (value: boolean) => void;
79
+ onCustomGroupActionButtonChange: (value: boolean) => void;
80
+ onCustomTabsChange: (value: boolean) => void;
81
+ onCustomTabsContentChange: (value: boolean) => void;
82
+ onCustomInfoChange: (value: boolean) => void;
83
+ onCustomGalleryChange: (value: boolean) => void;
84
+ onCustomArTabChange: (value: boolean) => void;
85
+ };
86
+
87
+ const ControlPanel: FC<ControlPanelProps> = (props) => {
88
+ return (
89
+ <div
90
+ style={{
91
+ background: '#1a1a1a',
92
+ color: 'white',
93
+ padding: '16px',
94
+ maxHeight: '40vh',
95
+ overflowY: 'auto',
96
+ borderBottom: '2px solid #333',
97
+ }}
98
+ >
99
+ <h2 style={{ margin: '0 0 16px 0', fontSize: '18px' }}>
100
+ 🎨 Custom UI Test Panel
101
+ </h2>
102
+
103
+ <div style={{ display: 'flex', gap: '24px', flexWrap: 'wrap' }}>
104
+ {/* General Settings */}
105
+ <div style={{ minWidth: '200px' }}>
106
+ <h3
107
+ style={{
108
+ fontSize: '14px',
109
+ marginBottom: '8px',
110
+ color: '#4ecdc4',
111
+ }}
112
+ >
113
+ ⚙️ General
114
+ </h3>
115
+ <label
116
+ style={{
117
+ display: 'flex',
118
+ alignItems: 'center',
119
+ gap: '8px',
120
+ marginBottom: '8px',
121
+ }}
122
+ >
123
+ <input
124
+ type="checkbox"
125
+ checked={props.enableCustomLayout}
126
+ onChange={(e) => props.onEnableCustomLayoutChange(e.target.checked)}
127
+ />
128
+ <span>Enable Custom Layout</span>
129
+ </label>
130
+ <label
131
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
132
+ >
133
+ <select
134
+ value={props.language}
135
+ onChange={(e) =>
136
+ props.onLanguageChange(e.target.value as 'vi' | 'en')
137
+ }
138
+ style={{ padding: '4px 8px', borderRadius: '4px' }}
139
+ >
140
+ <option value="vi">Tiếng Việt</option>
141
+ <option value="en">English</option>
142
+ </select>
143
+ </label>
144
+ </div>
145
+
146
+ {/* Floorplan/Minimap Settings */}
147
+ <div style={{ minWidth: '200px' }}>
148
+ <h3
149
+ style={{
150
+ fontSize: '14px',
151
+ marginBottom: '8px',
152
+ color: '#9f7aea',
153
+ }}
154
+ >
155
+ 🗺️ Floorplan/Minimap
156
+ </h3>
157
+ <label
158
+ style={{
159
+ display: 'flex',
160
+ alignItems: 'center',
161
+ gap: '8px',
162
+ marginBottom: '8px',
163
+ }}
164
+ >
165
+ <input
166
+ type="checkbox"
167
+ checked={props.customMinimap}
168
+ onChange={(e) => props.onCustomMinimapChange(e.target.checked)}
169
+ />
170
+ <span>Custom Minimap</span>
171
+ </label>
172
+ <label
173
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
174
+ >
175
+ <input
176
+ type="checkbox"
177
+ checked={props.customMarker}
178
+ onChange={(e) => props.onCustomMarkerChange(e.target.checked)}
179
+ disabled={!props.customMinimap}
180
+ />
181
+ <span>Custom Marker</span>
182
+ </label>
183
+ </div>
184
+
185
+ {/* PinActions Settings */}
186
+ <div style={{ minWidth: '200px' }}>
187
+ <h3
188
+ style={{
189
+ fontSize: '14px',
190
+ marginBottom: '8px',
191
+ color: '#f6ad55',
192
+ }}
193
+ >
194
+ 🎯 PinActions
195
+ </h3>
196
+ <label
197
+ style={{
198
+ display: 'flex',
199
+ alignItems: 'center',
200
+ gap: '8px',
201
+ marginBottom: '8px',
202
+ }}
203
+ >
204
+ <input
205
+ type="checkbox"
206
+ checked={props.customPinActions}
207
+ onChange={(e) => props.onCustomPinActionsChange(e.target.checked)}
208
+ />
209
+ <span>Custom PinActions</span>
210
+ </label>
211
+ <label
212
+ style={{
213
+ display: 'flex',
214
+ alignItems: 'center',
215
+ gap: '8px',
216
+ marginBottom: '8px',
217
+ }}
218
+ >
219
+ <input
220
+ type="checkbox"
221
+ checked={props.customPinActionButton}
222
+ onChange={(e) =>
223
+ props.onCustomPinActionButtonChange(e.target.checked)
224
+ }
225
+ />
226
+ <span>Custom Button</span>
227
+ </label>
228
+ <label
229
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
230
+ >
231
+ <input
232
+ type="checkbox"
233
+ checked={props.customPinActionButtonWithTooltip}
234
+ onChange={(e) =>
235
+ props.onCustomPinActionButtonWithTooltipChange(e.target.checked)
236
+ }
237
+ />
238
+ <span>Custom ButtonWithTooltip</span>
239
+ </label>
240
+ </div>
241
+
242
+ {/* SearchAndDiscoverySlideIn Settings */}
243
+ <div style={{ minWidth: '200px' }}>
244
+ <h3
245
+ style={{
246
+ fontSize: '14px',
247
+ marginBottom: '8px',
248
+ color: '#38b2ac',
249
+ }}
250
+ >
251
+ 🔍 SearchAndDiscovery
252
+ </h3>
253
+ <label
254
+ style={{
255
+ display: 'flex',
256
+ alignItems: 'center',
257
+ gap: '8px',
258
+ marginBottom: '8px',
259
+ }}
260
+ >
261
+ <input
262
+ type="checkbox"
263
+ checked={props.customSearchAndDiscovery}
264
+ onChange={(e) =>
265
+ props.onCustomSearchAndDiscoveryChange(e.target.checked)
266
+ }
267
+ />
268
+ <span>Custom SlideIn</span>
269
+ </label>
270
+ <label
271
+ style={{
272
+ display: 'flex',
273
+ alignItems: 'center',
274
+ gap: '8px',
275
+ marginBottom: '8px',
276
+ }}
277
+ >
278
+ <input
279
+ type="checkbox"
280
+ checked={props.customTourInfoActionPart}
281
+ onChange={(e) =>
282
+ props.onCustomTourInfoActionPartChange(e.target.checked)
283
+ }
284
+ />
285
+ <span>Custom TourInfo</span>
286
+ </label>
287
+ <label
288
+ style={{
289
+ display: 'flex',
290
+ alignItems: 'center',
291
+ gap: '8px',
292
+ marginBottom: '8px',
293
+ }}
294
+ >
295
+ <input
296
+ type="checkbox"
297
+ checked={props.customScenarioPart}
298
+ onChange={(e) =>
299
+ props.onCustomScenarioPartChange(e.target.checked)
300
+ }
301
+ />
302
+ <span>Custom ScenarioPart</span>
303
+ </label>
304
+ <label
305
+ style={{
306
+ display: 'flex',
307
+ alignItems: 'center',
308
+ gap: '8px',
309
+ marginBottom: '8px',
310
+ }}
311
+ >
312
+ <input
313
+ type="checkbox"
314
+ checked={props.customPromotionPart}
315
+ onChange={(e) =>
316
+ props.onCustomPromotionPartChange(e.target.checked)
317
+ }
318
+ />
319
+ <span>Custom PromotionPart</span>
320
+ </label>
321
+ <label
322
+ style={{
323
+ display: 'flex',
324
+ alignItems: 'center',
325
+ gap: '8px',
326
+ marginBottom: '8px',
327
+ }}
328
+ >
329
+ <input
330
+ type="checkbox"
331
+ checked={props.customPoiInfoActionPart}
332
+ onChange={(e) =>
333
+ props.onCustomPoiInfoActionPartChange(e.target.checked)
334
+ }
335
+ />
336
+ <span>Custom PoiInfo</span>
337
+ </label>
338
+ <label
339
+ style={{
340
+ display: 'flex',
341
+ alignItems: 'center',
342
+ gap: '8px',
343
+ marginBottom: '8px',
344
+ }}
345
+ >
346
+ <input
347
+ type="checkbox"
348
+ checked={props.customDisplayActionPart}
349
+ onChange={(e) =>
350
+ props.onCustomDisplayActionPartChange(e.target.checked)
351
+ }
352
+ />
353
+ <span>Custom DisplayPart</span>
354
+ </label>
355
+ <label
356
+ style={{
357
+ display: 'flex',
358
+ alignItems: 'center',
359
+ gap: '8px',
360
+ marginBottom: '8px',
361
+ }}
362
+ >
363
+ <input
364
+ type="checkbox"
365
+ checked={props.customHelpActionPart}
366
+ onChange={(e) =>
367
+ props.onCustomHelpActionPartChange(e.target.checked)
368
+ }
369
+ />
370
+ <span>Custom HelpPart</span>
371
+ </label>
372
+ <label
373
+ style={{
374
+ display: 'flex',
375
+ alignItems: 'center',
376
+ gap: '8px',
377
+ marginBottom: '8px',
378
+ }}
379
+ >
380
+ <input
381
+ type="checkbox"
382
+ checked={props.customContentItem}
383
+ onChange={(e) =>
384
+ props.onCustomContentItemChange(e.target.checked)
385
+ }
386
+ />
387
+ <span>Custom ContentItem</span>
388
+ </label>
389
+ <label
390
+ style={{
391
+ display: 'flex',
392
+ alignItems: 'center',
393
+ gap: '8px',
394
+ marginBottom: '8px',
395
+ }}
396
+ >
397
+ <input
398
+ type="checkbox"
399
+ checked={props.customScenarioItem}
400
+ onChange={(e) =>
401
+ props.onCustomScenarioItemChange(e.target.checked)
402
+ }
403
+ />
404
+ <span>Custom ScenarioItem</span>
405
+ </label>
406
+ <label
407
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
408
+ >
409
+ <input
410
+ type="checkbox"
411
+ checked={props.customCardItem}
412
+ onChange={(e) => props.onCustomCardItemChange(e.target.checked)}
413
+ />
414
+ <span>Custom CardItem</span>
415
+ </label>
416
+ </div>
417
+
418
+ {/* HotspotCategorySlideIn Settings */}
419
+ <div style={{ minWidth: '200px' }}>
420
+ <h3
421
+ style={{
422
+ fontSize: '14px',
423
+ marginBottom: '8px',
424
+ color: '#fc8181',
425
+ }}
426
+ >
427
+ 🏠 HotspotCategory
428
+ </h3>
429
+ <label
430
+ style={{
431
+ display: 'flex',
432
+ alignItems: 'center',
433
+ gap: '8px',
434
+ marginBottom: '8px',
435
+ }}
436
+ >
437
+ <input
438
+ type="checkbox"
439
+ checked={props.customHotspotCategorySlideIn}
440
+ onChange={(e) =>
441
+ props.onCustomHotspotCategorySlideInChange(e.target.checked)
442
+ }
443
+ />
444
+ <span>Custom SlideIn</span>
445
+ </label>
446
+ <label
447
+ style={{
448
+ display: 'flex',
449
+ alignItems: 'center',
450
+ gap: '8px',
451
+ marginBottom: '8px',
452
+ }}
453
+ >
454
+ <input
455
+ type="checkbox"
456
+ checked={props.customScenarioSlideIn}
457
+ onChange={(e) =>
458
+ props.onCustomScenarioSlideInChange(e.target.checked)
459
+ }
460
+ />
461
+ <span>Custom ScenarioSlideIn</span>
462
+ </label>
463
+ <label
464
+ style={{
465
+ display: 'flex',
466
+ alignItems: 'center',
467
+ gap: '8px',
468
+ marginBottom: '8px',
469
+ }}
470
+ >
471
+ <input
472
+ type="checkbox"
473
+ checked={props.customSpaceAndSceneSlideIn}
474
+ onChange={(e) =>
475
+ props.onCustomSpaceAndSceneSlideInChange(e.target.checked)
476
+ }
477
+ />
478
+ <span>Custom SpaceAndScene</span>
479
+ </label>
480
+ <label
481
+ style={{
482
+ display: 'flex',
483
+ alignItems: 'center',
484
+ gap: '8px',
485
+ marginBottom: '8px',
486
+ }}
487
+ >
488
+ <input
489
+ type="checkbox"
490
+ checked={props.customFeatureSlideIn}
491
+ onChange={(e) =>
492
+ props.onCustomFeatureSlideInChange(e.target.checked)
493
+ }
494
+ />
495
+ <span>Custom FeatureSlideIn</span>
496
+ </label>
497
+ <label
498
+ style={{
499
+ display: 'flex',
500
+ alignItems: 'center',
501
+ gap: '8px',
502
+ marginBottom: '8px',
503
+ }}
504
+ >
505
+ <input
506
+ type="checkbox"
507
+ checked={props.customProductSlideIn}
508
+ onChange={(e) =>
509
+ props.onCustomProductSlideInChange(e.target.checked)
510
+ }
511
+ />
512
+ <span>Custom ProductSlideIn</span>
513
+ </label>
514
+ <label
515
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
516
+ >
517
+ <input
518
+ type="checkbox"
519
+ checked={props.customPoiSlideIn}
520
+ onChange={(e) =>
521
+ props.onCustomPoiSlideInChange(e.target.checked)
522
+ }
523
+ />
524
+ <span>Custom PoiSlideIn</span>
525
+ </label>
526
+ </div>
527
+
528
+ {/* PlayBar Settings */}
529
+ <div style={{ minWidth: '200px' }}>
530
+ <h3
531
+ style={{
532
+ fontSize: '14px',
533
+ marginBottom: '8px',
534
+ color: '#ff6b6b',
535
+ }}
536
+ >
537
+ 🎵 PlayBar
538
+ </h3>
539
+ <label
540
+ style={{
541
+ display: 'flex',
542
+ alignItems: 'center',
543
+ gap: '8px',
544
+ marginBottom: '8px',
545
+ }}
546
+ >
547
+ <input
548
+ type="checkbox"
549
+ checked={props.customPlayBarTooltip}
550
+ onChange={(e) =>
551
+ props.onCustomPlayBarTooltipChange(e.target.checked)
552
+ }
553
+ />
554
+ <span>Custom Tooltip</span>
555
+ </label>
556
+ <label
557
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
558
+ >
559
+ <input
560
+ type="checkbox"
561
+ checked={props.customPlayBarButton}
562
+ onChange={(e) =>
563
+ props.onCustomPlayBarButtonChange(e.target.checked)
564
+ }
565
+ />
566
+ <span>Custom Button</span>
567
+ </label>
568
+ </div>
569
+
570
+ {/* PoiDetailSlideIn Settings */}
571
+ <div style={{ minWidth: '200px' }}>
572
+ <h3
573
+ style={{
574
+ fontSize: '14px',
575
+ marginBottom: '8px',
576
+ color: '#48bb78',
577
+ }}
578
+ >
579
+ 📦 PoiDetailSlideIn
580
+ </h3>
581
+ <label
582
+ style={{
583
+ display: 'flex',
584
+ alignItems: 'center',
585
+ gap: '8px',
586
+ marginBottom: '8px',
587
+ }}
588
+ >
589
+ <input
590
+ type="checkbox"
591
+ checked={props.customPoiDetailDrawer}
592
+ onChange={(e) =>
593
+ props.onCustomPoiDetailDrawerChange(e.target.checked)
594
+ }
595
+ />
596
+ <span>Custom Drawer</span>
597
+ </label>
598
+ <label
599
+ style={{
600
+ display: 'flex',
601
+ alignItems: 'center',
602
+ gap: '8px',
603
+ marginBottom: '8px',
604
+ }}
605
+ >
606
+ <input
607
+ type="checkbox"
608
+ checked={props.customPoiDetailBottomSheet}
609
+ onChange={(e) =>
610
+ props.onCustomPoiDetailBottomSheetChange(e.target.checked)
611
+ }
612
+ />
613
+ <span>Custom BottomSheet</span>
614
+ </label>
615
+ <label
616
+ style={{
617
+ display: 'flex',
618
+ alignItems: 'center',
619
+ gap: '8px',
620
+ marginBottom: '8px',
621
+ }}
622
+ >
623
+ <input
624
+ type="checkbox"
625
+ checked={props.customProductDetailHeader}
626
+ onChange={(e) =>
627
+ props.onCustomProductDetailHeaderChange(e.target.checked)
628
+ }
629
+ />
630
+ <span>Custom Header</span>
631
+ </label>
632
+ <label
633
+ style={{
634
+ display: 'flex',
635
+ alignItems: 'center',
636
+ gap: '8px',
637
+ marginBottom: '8px',
638
+ }}
639
+ >
640
+ <input
641
+ type="checkbox"
642
+ checked={props.customGroupActionButton}
643
+ onChange={(e) =>
644
+ props.onCustomGroupActionButtonChange(e.target.checked)
645
+ }
646
+ />
647
+ <span>Custom Action Buttons</span>
648
+ </label>
649
+ <label
650
+ style={{
651
+ display: 'flex',
652
+ alignItems: 'center',
653
+ gap: '8px',
654
+ marginBottom: '8px',
655
+ }}
656
+ >
657
+ <input
658
+ type="checkbox"
659
+ checked={props.customTabs}
660
+ onChange={(e) => props.onCustomTabsChange(e.target.checked)}
661
+ />
662
+ <span>Custom Tabs</span>
663
+ </label>
664
+ <label
665
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
666
+ >
667
+ <input
668
+ type="checkbox"
669
+ checked={props.customTabsContent}
670
+ onChange={(e) =>
671
+ props.onCustomTabsContentChange(e.target.checked)
672
+ }
673
+ />
674
+ <span>Custom TabsContent</span>
675
+ </label>
676
+ </div>
677
+
678
+ {/* TabsContent Sub-components */}
679
+ <div style={{ minWidth: '200px' }}>
680
+ <h3
681
+ style={{
682
+ fontSize: '14px',
683
+ marginBottom: '8px',
684
+ color: '#ed8936',
685
+ }}
686
+ >
687
+ 📄 TabsContent
688
+ </h3>
689
+ <label
690
+ style={{
691
+ display: 'flex',
692
+ alignItems: 'center',
693
+ gap: '8px',
694
+ marginBottom: '8px',
695
+ }}
696
+ >
697
+ <input
698
+ type="checkbox"
699
+ checked={props.customInfo}
700
+ onChange={(e) => props.onCustomInfoChange(e.target.checked)}
701
+ />
702
+ <span>Custom Info</span>
703
+ </label>
704
+ <label
705
+ style={{
706
+ display: 'flex',
707
+ alignItems: 'center',
708
+ gap: '8px',
709
+ marginBottom: '8px',
710
+ }}
711
+ >
712
+ <input
713
+ type="checkbox"
714
+ checked={props.customGallery}
715
+ onChange={(e) => props.onCustomGalleryChange(e.target.checked)}
716
+ />
717
+ <span>Custom Gallery</span>
718
+ </label>
719
+ <label
720
+ style={{ display: 'flex', alignItems: 'center', gap: '8px' }}
721
+ >
722
+ <input
723
+ type="checkbox"
724
+ checked={props.customArTab}
725
+ onChange={(e) => props.onCustomArTabChange(e.target.checked)}
726
+ />
727
+ <span>Custom AR Tab</span>
728
+ </label>
729
+ </div>
730
+ </div>
731
+ </div>
732
+ );
733
+ };
734
+
735
+ export default ControlPanel;
736
+