@clikvn/showroom-visualizer 0.5.0 → 0.5.1-dev-02

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 (121) hide show
  1. package/CLAUDE.md +145 -145
  2. package/DEVELOPMENT.md +120 -120
  3. package/EXAMPLES.md +967 -967
  4. package/README.md +489 -489
  5. package/SETUP_COMPLETE.md +149 -149
  6. package/dist/components/SkinLayer/DefaultLayout/index.d.ts.map +1 -1
  7. package/dist/components/SkinLayer/Drawer/PoiHeader/index.d.ts +16 -0
  8. package/dist/components/SkinLayer/Drawer/PoiHeader/index.d.ts.map +1 -0
  9. package/dist/components/SkinLayer/Drawer/index.d.ts +29 -0
  10. package/dist/components/SkinLayer/Drawer/index.d.ts.map +1 -0
  11. package/dist/components/SkinLayer/GalleryFullScreen/Content/ARViewer.d.ts +30 -0
  12. package/dist/components/SkinLayer/GalleryFullScreen/Content/ARViewer.d.ts.map +1 -0
  13. package/dist/components/SkinLayer/HotspotOverview/index.d.ts.map +1 -1
  14. package/dist/components/SkinLayer/Layout/index.d.ts.map +1 -1
  15. package/dist/components/SkinLayer/ModalItemInfo/Description.d.ts +10 -0
  16. package/dist/components/SkinLayer/ModalItemInfo/Description.d.ts.map +1 -0
  17. package/dist/components/SkinLayer/ModalItemInfo/Intro.d.ts +9 -0
  18. package/dist/components/SkinLayer/ModalItemInfo/Intro.d.ts.map +1 -0
  19. package/dist/components/SkinLayer/ModalItemInfo/Media.d.ts +13 -0
  20. package/dist/components/SkinLayer/ModalItemInfo/Media.d.ts.map +1 -0
  21. package/dist/components/SkinLayer/ModalItemInfo/index.d.ts +10 -0
  22. package/dist/components/SkinLayer/ModalItemInfo/index.d.ts.map +1 -0
  23. package/dist/components/SkinLayer/PlayAll/index.d.ts +8 -0
  24. package/dist/components/SkinLayer/PlayAll/index.d.ts.map +1 -0
  25. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/HorizontalMenu.d.ts +14 -0
  26. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/HorizontalMenu.d.ts.map +1 -0
  27. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/ListMovingMenuItem.d.ts +14 -0
  28. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/ListMovingMenuItem.d.ts.map +1 -0
  29. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/SemicircleMenu.d.ts +14 -0
  30. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/SemicircleMenu.d.ts.map +1 -0
  31. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/VerticalMenu.d.ts +14 -0
  32. package/dist/components/SkinLayer/PoiListMovingOptions/Menu/VerticalMenu.d.ts.map +1 -0
  33. package/dist/components/SkinLayer/PoiListMovingOptions/index.d.ts +4 -0
  34. package/dist/components/SkinLayer/PoiListMovingOptions/index.d.ts.map +1 -0
  35. package/dist/components/SkinLayer/PoiTextureOptions/HorizontalMenu/index.d.ts +13 -0
  36. package/dist/components/SkinLayer/PoiTextureOptions/HorizontalMenu/index.d.ts.map +1 -0
  37. package/dist/components/SkinLayer/PoiTextureOptions/SemicircleMenu/index.d.ts +13 -0
  38. package/dist/components/SkinLayer/PoiTextureOptions/SemicircleMenu/index.d.ts.map +1 -0
  39. package/dist/components/SkinLayer/PoiTextureOptions/TextureMenuItem/index.d.ts +15 -0
  40. package/dist/components/SkinLayer/PoiTextureOptions/TextureMenuItem/index.d.ts.map +1 -0
  41. package/dist/components/SkinLayer/PoiTextureOptions/VerticalMenu/index.d.ts +13 -0
  42. package/dist/components/SkinLayer/PoiTextureOptions/VerticalMenu/index.d.ts.map +1 -0
  43. package/dist/components/SkinLayer/index.d.ts +1 -0
  44. package/dist/components/SkinLayer/index.d.ts.map +1 -1
  45. package/dist/constants/Visualizer/index.d.ts +1 -0
  46. package/dist/constants/Visualizer/index.d.ts.map +1 -1
  47. package/dist/constants/Visualizer/poi.d.ts +1 -0
  48. package/dist/constants/Visualizer/poi.d.ts.map +1 -1
  49. package/dist/context/StoreContext.d.ts +5 -0
  50. package/dist/context/StoreContext.d.ts.map +1 -0
  51. package/dist/features/ShowroomVisualizer/Scripts.d.ts +4 -0
  52. package/dist/features/ShowroomVisualizer/Scripts.d.ts.map +1 -0
  53. package/dist/features/ShowroomVisualizer/TourContainer.d.ts +9 -0
  54. package/dist/features/ShowroomVisualizer/TourContainer.d.ts.map +1 -0
  55. package/dist/features/ShowroomVisualizer/Tours.d.ts +3 -0
  56. package/dist/features/ShowroomVisualizer/Tours.d.ts.map +1 -0
  57. package/dist/features/ShowroomVisualizer/{CssStyles.d.ts.map → cssStyles.d.ts.map} +1 -1
  58. package/dist/features/ShowroomVisualizer/index.d.ts +1 -0
  59. package/dist/features/ShowroomVisualizer/index.d.ts.map +1 -1
  60. package/dist/features/VirtualTourVisualizer/index.d.ts +20 -0
  61. package/dist/features/VirtualTourVisualizer/index.d.ts.map +1 -0
  62. package/dist/features/VirtualTourVisualizerUI/index.d.ts +17 -0
  63. package/dist/features/VirtualTourVisualizerUI/index.d.ts.map +1 -0
  64. package/dist/hooks/SkinLayer/useAutoPlayer.d.ts.map +1 -1
  65. package/dist/hooks/Visualizer/reducer.d.ts +116 -0
  66. package/dist/hooks/Visualizer/reducer.d.ts.map +1 -0
  67. package/dist/hooks/Visualizer/useTourVisualizer.d.ts.map +1 -1
  68. package/dist/hooks/useStore.d.ts.map +1 -1
  69. package/dist/index.d.ts +1 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.html +110 -0
  72. package/dist/index.js +1 -1
  73. package/dist/models/Visualizer/Poi/PoiListMoving.d.ts +39 -0
  74. package/dist/models/Visualizer/Poi/PoiListMoving.d.ts.map +1 -0
  75. package/dist/models/Visualizer/Scene.d.ts.map +1 -1
  76. package/dist/models/Visualizer/Tour.d.ts +3 -0
  77. package/dist/models/Visualizer/Tour.d.ts.map +1 -1
  78. package/dist/models/Visualizer/TourScenario/TourScenarioPlayer.d.ts +1 -0
  79. package/dist/models/Visualizer/TourScenario/TourScenarioPlayer.d.ts.map +1 -1
  80. package/dist/models/Visualizer/TourScenario/actions/RotationAction.d.ts.map +1 -1
  81. package/dist/types/SkinLayer/store.type.d.ts +7 -0
  82. package/dist/types/SkinLayer/store.type.d.ts.map +1 -1
  83. package/dist/types/Visualizer/poi.type.d.ts +17 -0
  84. package/dist/types/Visualizer/poi.type.d.ts.map +1 -1
  85. package/dist/types/Visualizer/signal.type.d.ts +3 -0
  86. package/dist/types/Visualizer/signal.type.d.ts.map +1 -1
  87. package/dist/utils/Visualizer/index.d.ts +1 -0
  88. package/dist/utils/Visualizer/index.d.ts.map +1 -1
  89. package/dist/utils/Visualizer/scene.utils.d.ts +5 -0
  90. package/dist/utils/Visualizer/scene.utils.d.ts.map +1 -0
  91. package/dist/web.js +1 -1
  92. package/example/CSS_HANDLING.md +141 -141
  93. package/example/FIXES_SUMMARY.md +121 -121
  94. package/example/PATH_ALIASES.md +103 -103
  95. package/example/README.md +64 -64
  96. package/example/index.html +13 -13
  97. package/example/package.json +25 -25
  98. package/example/postcss.config.cjs +5 -5
  99. package/example/src/App.tsx +195 -0
  100. package/example/src/components/ControlPanel.tsx +736 -0
  101. package/example/src/components/CustomComponents/FloorplanComponents.tsx +37 -0
  102. package/example/src/components/CustomComponents/HotspotCategoryComponents.tsx +106 -0
  103. package/example/src/components/CustomComponents/PinActionsComponents.tsx +45 -0
  104. package/example/src/components/CustomComponents/PlayBarComponents.tsx +41 -0
  105. package/example/src/components/CustomComponents/PoiDetailComponents.tsx +296 -0
  106. package/example/src/components/CustomComponents/SearchAndDiscoveryComponents.tsx +207 -0
  107. package/example/src/components/CustomComponents/index.tsx +7 -0
  108. package/example/src/css-modules.d.ts +4 -0
  109. package/example/src/hooks/useCustomLayout.ts +328 -0
  110. package/example/src/index.css +31 -0
  111. package/example/src/main.tsx +11 -0
  112. package/example/tailwind.config.cjs +12 -12
  113. package/example/tsconfig.node.json +12 -12
  114. package/example/vite.config.ts +142 -142
  115. package/package.json +133 -133
  116. package/rollup.config.js +400 -400
  117. package/yarn-error.log +12200 -0
  118. package/.claude/settings.local.json +0 -19
  119. package/dist/components/SkinLayer/Floorplan/Minimap/test01.d.ts +0 -15
  120. package/dist/components/SkinLayer/Floorplan/Minimap/test01.d.ts.map +0 -1
  121. /package/dist/features/ShowroomVisualizer/{CssStyles.d.ts → cssStyles.d.ts} +0 -0
@@ -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
+