@clikvn/showroom-visualizer 0.1.29-dev → 1.1.28-dev

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 (76) hide show
  1. package/dist/components/SkinLayer/PlayAll/index.d.ts +0 -8
  2. package/dist/components/SkinLayer/PlayAll/index.d.ts.map +0 -1
  3. package/dist/components/SkinLayer/PoiDetailSlideIn/GalleryProduct.d.ts +9 -0
  4. package/dist/components/SkinLayer/PoiDetailSlideIn/GalleryProduct.d.ts.map +1 -0
  5. package/dist/components/SkinLayer/PoiDetailSlideIn/Tabs.d.ts +28 -0
  6. package/dist/components/SkinLayer/PoiDetailSlideIn/Tabs.d.ts.map +1 -0
  7. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent/GalleryProduct.d.ts +9 -0
  8. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent/GalleryProduct.d.ts.map +1 -0
  9. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent/TabsContent.d.ts +9 -0
  10. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent/TabsContent.d.ts.map +1 -0
  11. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent.d.ts +9 -0
  12. package/dist/components/SkinLayer/PoiDetailSlideIn/TabsContent.d.ts.map +1 -0
  13. package/dist/components/SkinLayer/PoiDetailSlideIn/gallery.d.ts +9 -0
  14. package/dist/components/SkinLayer/PoiDetailSlideIn/gallery.d.ts.map +1 -0
  15. package/dist/components/SkinLayer/PoiDetailSlideIn/group-action-button.d.ts +14 -0
  16. package/dist/components/SkinLayer/PoiDetailSlideIn/group-action-button.d.ts.map +1 -0
  17. package/dist/components/SkinLayer/PoiDetailSlideIn/header.d.ts +12 -0
  18. package/dist/components/SkinLayer/PoiDetailSlideIn/header.d.ts.map +1 -0
  19. package/dist/components/SkinLayer/PoiDetailSlideIn/rating.d.ts +7 -0
  20. package/dist/components/SkinLayer/PoiDetailSlideIn/rating.d.ts.map +1 -0
  21. package/dist/components/SkinLayer/RightPanel/index.d.ts +2 -0
  22. package/dist/components/SkinLayer/RightPanel/index.d.ts.map +1 -0
  23. package/dist/constants/Visualizer/fallback-images.d.ts +27 -0
  24. package/dist/constants/Visualizer/fallback-images.d.ts.map +1 -0
  25. package/dist/index.html +67 -98
  26. package/dist/utils/Visualizer/asset.utils.d.ts +19 -0
  27. package/dist/utils/Visualizer/asset.utils.d.ts.map +1 -0
  28. package/dist/utils/Visualizer/cors-bypass.utils.d.ts +16 -0
  29. package/dist/utils/Visualizer/cors-bypass.utils.d.ts.map +1 -0
  30. package/dist/utils/Visualizer/cors-proxy.d.ts +8 -0
  31. package/dist/utils/Visualizer/cors-proxy.d.ts.map +1 -0
  32. package/dist/utils/Visualizer/cors-test.d.ts +12 -0
  33. package/dist/utils/Visualizer/cors-test.d.ts.map +1 -0
  34. package/dist/utils/Visualizer/global-cors-handler.d.ts +13 -0
  35. package/dist/utils/Visualizer/global-cors-handler.d.ts.map +1 -0
  36. package/dist/utils/Visualizer/no-cors-fetch.d.ts +20 -0
  37. package/dist/utils/Visualizer/no-cors-fetch.d.ts.map +1 -0
  38. package/dist/utils/Visualizer/simple-cors-handler.d.ts +9 -0
  39. package/dist/utils/Visualizer/simple-cors-handler.d.ts.map +1 -0
  40. package/dist/web.js +1 -1
  41. package/package.json +1 -1
  42. package/.idea/inspectionProfiles/Project_Default.xml +0 -36
  43. package/.idea/jsLinters/eslint.xml +0 -7
  44. package/.idea/misc.xml +0 -9
  45. package/.idea/modules.xml +0 -8
  46. package/.idea/prettier.xml +0 -8
  47. package/.idea/showroom-visualizer.iml +0 -9
  48. package/.idea/vcs.xml +0 -6
  49. package/dist/components/SkinLayer/GalleryFullScreen/Content/ARViewer.d.ts +0 -30
  50. package/dist/components/SkinLayer/GalleryFullScreen/Content/ARViewer.d.ts.map +0 -1
  51. package/dist/components/SkinLayer/ModalItemInfo/Description.d.ts +0 -10
  52. package/dist/components/SkinLayer/ModalItemInfo/Description.d.ts.map +0 -1
  53. package/dist/components/SkinLayer/ModalItemInfo/Intro.d.ts +0 -9
  54. package/dist/components/SkinLayer/ModalItemInfo/Intro.d.ts.map +0 -1
  55. package/dist/components/SkinLayer/ModalItemInfo/Media.d.ts +0 -13
  56. package/dist/components/SkinLayer/ModalItemInfo/Media.d.ts.map +0 -1
  57. package/dist/components/SkinLayer/ModalItemInfo/index.d.ts +0 -10
  58. package/dist/components/SkinLayer/ModalItemInfo/index.d.ts.map +0 -1
  59. package/dist/components/SkinLayer/PoiTextureOptions/HorizontalMenu/index.d.ts +0 -13
  60. package/dist/components/SkinLayer/PoiTextureOptions/HorizontalMenu/index.d.ts.map +0 -1
  61. package/dist/components/SkinLayer/PoiTextureOptions/SemicircleMenu/index.d.ts +0 -13
  62. package/dist/components/SkinLayer/PoiTextureOptions/SemicircleMenu/index.d.ts.map +0 -1
  63. package/dist/components/SkinLayer/PoiTextureOptions/TextureMenuItem/index.d.ts +0 -15
  64. package/dist/components/SkinLayer/PoiTextureOptions/TextureMenuItem/index.d.ts.map +0 -1
  65. package/dist/components/SkinLayer/PoiTextureOptions/VerticalMenu/index.d.ts +0 -13
  66. package/dist/components/SkinLayer/PoiTextureOptions/VerticalMenu/index.d.ts.map +0 -1
  67. package/dist/context/StoreContext.d.ts +0 -5
  68. package/dist/context/StoreContext.d.ts.map +0 -1
  69. package/dist/features/ShowroomVisualizer/Scripts.d.ts +0 -4
  70. package/dist/features/ShowroomVisualizer/Scripts.d.ts.map +0 -1
  71. package/dist/features/ShowroomVisualizer/TourContainer.d.ts +0 -9
  72. package/dist/features/ShowroomVisualizer/TourContainer.d.ts.map +0 -1
  73. package/dist/features/ShowroomVisualizer/Tours.d.ts +0 -3
  74. package/dist/features/ShowroomVisualizer/Tours.d.ts.map +0 -1
  75. package/dist/hooks/Visualizer/reducer.d.ts +0 -116
  76. package/dist/hooks/Visualizer/reducer.d.ts.map +0 -1
@@ -1,8 +0,0 @@
1
- import { FC } from 'react';
2
- export type PlayAllPropsType = {
3
- onClickAutoPlay?: () => void;
4
- loading?: boolean;
5
- };
6
- declare const PlayAll: FC<PlayAllPropsType>;
7
- export default PlayAll;
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PlayAll/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAI3B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF,QAAA,MAAM,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAoCjC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface GalleryProps {
3
+ items: any[];
4
+ className?: string;
5
+ onClick?: (index: number, type?: string) => void;
6
+ }
7
+ declare const Gallery: React.FC<GalleryProps>;
8
+ export default Gallery;
9
+ //# sourceMappingURL=GalleryProduct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryProduct.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/GalleryProduct.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,UAAU,YAAY;IACpB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqFnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const TabsList: {
2
+ info: {
3
+ label: string;
4
+ key: string;
5
+ title: import("react/jsx-runtime").JSX.Element;
6
+ };
7
+ gallery: {
8
+ label: string;
9
+ key: string;
10
+ title: string;
11
+ };
12
+ webRotate: {
13
+ label: string;
14
+ key: string;
15
+ title: string;
16
+ };
17
+ ar: {
18
+ label: string;
19
+ key: string;
20
+ title: string;
21
+ };
22
+ };
23
+ declare const Tabs: ({ activeTab, setActiveTab, }: {
24
+ activeTab: string;
25
+ setActiveTab: (key: string) => void;
26
+ }) => import("react/jsx-runtime").JSX.Element;
27
+ export default Tabs;
28
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/Tabs.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;CAqBpB,CAAC;AAEF,QAAA,MAAM,IAAI,GAAI,8BAGX;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,4CA4BA,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface GalleryProps {
3
+ items: any[];
4
+ className?: string;
5
+ onClick?: (index: number, type: string) => void;
6
+ }
7
+ declare const Gallery: React.FC<GalleryProps>;
8
+ export default Gallery;
9
+ //# sourceMappingURL=GalleryProduct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryProduct.d.ts","sourceRoot":"","sources":["../../../../../src/components/SkinLayer/PoiDetailSlideIn/TabsContent/GalleryProduct.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,UAAU,YAAY;IACpB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqFnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ type TabsContentProps = {
3
+ activeTab: string;
4
+ product: any;
5
+ galleryProduct: any;
6
+ };
7
+ declare const Content: FC<TabsContentProps>;
8
+ export default Content;
9
+ //# sourceMappingURL=TabsContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/SkinLayer/PoiDetailSlideIn/TabsContent/TabsContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAGhD,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,cAAc,EAAE,GAAG,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAiDjC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ type TabsContentProps = {
3
+ activeTab: string;
4
+ product: any;
5
+ galleryProduct: any;
6
+ };
7
+ declare const Content: FC<TabsContentProps>;
8
+ export default Content;
9
+ //# sourceMappingURL=TabsContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsContent.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/TabsContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAGhD,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,cAAc,EAAE,GAAG,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAiDjC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface GalleryProps {
3
+ items: any[];
4
+ className?: string;
5
+ onClick?: (index: number) => void;
6
+ }
7
+ declare const Gallery: React.FC<GalleryProps>;
8
+ export default Gallery;
9
+ //# sourceMappingURL=gallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/gallery.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,UAAU,YAAY;IACpB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqFnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ interface GroupActionButtonProps {
3
+ actions: {
4
+ key: string;
5
+ label: string;
6
+ icon: React.ElementType;
7
+ disabled?: boolean;
8
+ }[];
9
+ activeKey?: string;
10
+ onClick?: (key: string) => void;
11
+ }
12
+ declare const GroupActionButton: FC<GroupActionButtonProps>;
13
+ export default GroupActionButton;
14
+ //# sourceMappingURL=group-action-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-action-button.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/group-action-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,UAAU,sBAAsB;IAC9B,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAgDjD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { FC } from 'react';
2
+ interface HeaderProps {
3
+ onBack: () => void;
4
+ title: string;
5
+ children?: React.ReactNode;
6
+ displayPrice?: string;
7
+ salePrice?: string;
8
+ rating?: number;
9
+ }
10
+ declare const Header: FC<HeaderProps>;
11
+ export default Header;
12
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/header.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAmD3B,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface RatingProps {
3
+ rating: number;
4
+ }
5
+ declare const Rating: FC<RatingProps>;
6
+ export default Rating;
7
+ //# sourceMappingURL=rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/PoiDetailSlideIn/rating.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAgC3B,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function RightPanel(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/RightPanel/index.tsx"],"names":[],"mappings":"AA8QA,MAAM,CAAC,OAAO,UAAU,UAAU,4CAQjC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Fallback images dạng base64 cho development khi CORS fail
3
+ */
4
+ export declare const TRANSPARENT_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChAI9jU77yQAAAABJRU5ErkJggg==";
5
+ export declare const PLACEHOLDER_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiByeD0iNCIgZmlsbD0iIzMzMzMzMyIvPgo8Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSI4IiBmaWxsPSIjNjY2NjY2Ii8+Cjwvc3ZnPgo=";
6
+ export declare const NAVIGATION_ARROW_PLACEHOLDER = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDJMMjIgMTJMMTIgMjJMMTAgMjBMMTggMTJMMTAgNEwxMiAyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
7
+ export declare const FALLBACK_IMAGES: {
8
+ 'vtourskin.png': string;
9
+ 'hotspot_sound_icon.png': string;
10
+ 'tag.png': string;
11
+ 'gallery.png': string;
12
+ 'hotspot_video_icon.png': string;
13
+ 'play-solid.png': string;
14
+ 'stop-solid.png': string;
15
+ 'bgshadow.png': string;
16
+ 'vtourskin_hotspot.png': string;
17
+ 'promotion_lg.png': string;
18
+ 'caret_up_icon.png': string;
19
+ 'navigation_north.svg': string;
20
+ 'navigation_east.svg': string;
21
+ 'navigation_south.svg': string;
22
+ 'navigation_west.svg': string;
23
+ 'audio_shake.png': string;
24
+ 'navigation.svg': string;
25
+ 'navigation-highlight.svg': string;
26
+ };
27
+ //# sourceMappingURL=fallback-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback-images.d.ts","sourceRoot":"","sources":["../../../src/constants/Visualizer/fallback-images.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,eAAe,2HAC8F,CAAC;AAG3H,eAAO,MAAM,gBAAgB,+SACiR,CAAC;AAG/S,eAAO,MAAM,4BAA4B,mQACyN,CAAC;AAEnQ,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC"}
package/dist/index.html CHANGED
@@ -1,105 +1,74 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
5
  <meta
6
- name="viewport"
7
- content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"
6
+ name="viewport"
7
+ content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"
8
8
  />
9
9
  <title>Title</title>
10
- </head>
11
- <body>
12
- <div class="flex h-screen w-screen">
13
- <!-- <div class="h-full" style="width: 72px"></div>-->
14
- <div class="h-full" style="width: /*calc(100% - 462px);*/ 100%;">
15
- <div class="h-full w-full relative">
16
- <showroom-visualizer></showroom-visualizer>
17
- </div>
18
- </div>
19
- <!-- <div class="h-full" style="width: 390px"></div>-->
20
- </div>
21
- <script type="module">
22
- // import ShowroomVisualizer from 'https://85f81d7dc992.ngrok-free.app/web.js';
23
- import ShowroomVisualizer from 'http://localhost:3000/web.js';
24
-
25
- ShowroomVisualizer.initVisualizer({
26
- apiHost: 'https://ci-api.clik.vn/vt360',
27
- webRotateApiHost: 'https://ci-api.clik.vn/cms',
28
- webRotateClientHost: 'https://ci-webrotate360-client.clik.vn',
29
- config: {
30
- language: 'VI',
31
- // tourCode: 'TOUR_FXYCEN7ZZVW6',
32
-
33
- // startScene: 'scene_kr3rgeezzvw6',
34
- // hLookAt: -254,
35
- // vLookAt: 1
36
- // tourCode: 'TOUR_GEVEXLWNPT74',
37
- // tourCode: 'TOUR_7YUL2ALGFL94',
38
- tourCode: 'TOUR_KUFGDEPDTJA4',
39
- // startScene: 'SCENE_KNLRAKUHFL94',
40
- // hLookAt: -54.11884505373274,
41
- // vLookAt: -9.111287009391969
42
-
43
- // tourCode: 'tour_7a6hchjljga4'.toUpperCase(),
10
+ <script type="module">
11
+ import ShowroomVisualizer from 'http://localhost:3000/web.js';
44
12
 
45
- // tourCode: 'TOUR_ZJMHKMJEACAH',
46
- // startScene: 'SCENE_LVN4DLUFACAH',
47
- // hLookAt: -179.145,
48
- // vLookAt: 11.597,
13
+ ShowroomVisualizer.initVisualizer({
14
+ apiHost: 'https://ci-api.clik.vn/vt360',
15
+ webRotateClientHost: 'https://ci-webrotate360-client.clik.vn',
16
+ config: {
17
+ tourCode: 'TOUR_KUFGDEPDTJA4',
18
+ language: 'VI',
19
+ },
20
+ listeners: {
21
+ onLoaded: (tool) => {
22
+ window.tool = tool;
23
+ },
24
+ onPinActionClicked: (key) => {
25
+ console.log('onPinActionClicked', key);
26
+ },
27
+ onAIProductClicked: (poi) => {
28
+ console.log('onPoiClicked', poi);
29
+ },
30
+ },
31
+ mobile: false,
32
+ });
33
+ </script>
34
+ <style>
35
+ .toggle-btn {
36
+ position: fixed;
37
+ top: 20px;
38
+ right: 20px;
39
+ z-index: 9999;
40
+ padding: 10px 15px;
41
+ background: #3585f7;
42
+ color: white;
43
+ border: none;
44
+ border-radius: 5px;
45
+ cursor: pointer;
46
+ font-family: 'Be Vietnam Pro', sans-serif;
47
+ font-size: 14px;
48
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
49
+ transition: background 0.3s ease;
50
+ }
51
+ .toggle-btn:hover {
52
+ background: #2574e6;
53
+ }
54
+ </style>
55
+ </head>
56
+ <body>
57
+ <button class="toggle-btn" onclick="toggleWidth()">Toggle Width</button>
58
+ <div id="container" style="width: 100vw; height: 100vh; overflow: hidden">
59
+ <showroom-visualizer></showroom-visualizer>
60
+ </div>
61
+ <script>
62
+ function toggleWidth() {
63
+ const container = document.getElementById('container');
64
+ const currentWidth = container.style.width;
49
65
 
50
- // tourCode: 'tour_7yul2algfl94'.toUpperCase(),
51
- // startScene: 'scene_vrz9v2uhfl94'.toUpperCase(),
52
- // hLookAt: -87,
53
- // vLookAt: 9,
54
- // hotspot: 'item27getn2d2m94'.toUpperCase(),
55
- },
56
- listeners: {
57
- onTourSwitchLoaded: (tool) => {
58
- window.switchTour = tool.switchTour;
59
- },
60
- onSceneCompleted: (...args) => {
61
- // console.log('onSceneCompleted', args);
62
- },
63
- onLoaded: tool => {
64
- // console.log('TOOL_LOADED')
65
- window.tool = tool;
66
- },
67
- onPoiClicked: (poi) => {
68
- console.log('onPoiClicked', poi);
69
- },
70
- onPoiOut: () => {
71
- // console.log('onPoiOut');
72
- },
73
- onPoiOver: (poi) => {
74
- console.log('onPoiOver', poi);
75
- },
76
- onPoiInCenter: (poi) => {
77
- // console.log('onPoiInCenter', poi);
78
- },
79
- onStartScenario: (code) => {
80
- // console.log('onStartScenario', code);
81
- },
82
- onScenarioPaused: (code) => {
83
- // console.log('onScenarioPaused', code);
84
- },
85
- onScenarioEnded: (code) => {
86
- // console.log('onScenarioEnded', code);
87
- },
88
- onChanged: (args) => {
89
- console.log('onChanged', args);
90
- },
91
- onStartLoadingTour: (code) => {
92
- // console.log('onStartLoadingTour', code);
93
- },
94
- onFinishedLoadingTour: (code) => {
95
- // console.log('onFinishedLoadingTour', code);
96
- },
97
- onStateChanged: (changes) => {
98
- // console.log('changes', changes);
66
+ if (currentWidth === '80vw') {
67
+ container.style.width = '100vw';
68
+ } else {
69
+ container.style.width = '80vw';
70
+ }
99
71
  }
100
- },
101
- mobile: false
102
- });
103
- </script>
104
- </body>
105
- </html>
72
+ </script>
73
+ </body>
74
+ </html>
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Get asset URL - đơn giản chỉ return URL gốc
3
+ * CORS sẽ được xử lý ở level component/image loading
4
+ */
5
+ export declare const getAssetUrl: (originalUrl: string) => string;
6
+ /**
7
+ * Load image với CORS handling
8
+ * Sử dụng crossOrigin = 'anonymous' để bypass CORS
9
+ */
10
+ export declare const loadImageWithCORS: (url: string) => Promise<string>;
11
+ /**
12
+ * Preload image để kiểm tra CORS
13
+ */
14
+ export declare const preloadImage: (url: string) => Promise<boolean>;
15
+ /**
16
+ * Tạo img element với CORS handling
17
+ */
18
+ export declare const createImageWithCORS: (url: string) => HTMLImageElement;
19
+ //# sourceMappingURL=asset.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/asset.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,aAAa,MAAM,KAAG,MAEjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAiB7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAQzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,gBAKjD,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CORS bypass utilities cho development
3
+ */
4
+ /**
5
+ * Bypass CORS bằng cách sử dụng proxy service
6
+ */
7
+ export declare const bypassCORS: (originalUrl: string, proxyIndex?: number) => string;
8
+ /**
9
+ * Tạo img element với CORS bypass
10
+ */
11
+ export declare const createCORSImage: (url: string) => Promise<HTMLImageElement>;
12
+ /**
13
+ * Set image src với CORS handling
14
+ */
15
+ export declare const setImageSrcWithCORS: (imgElement: HTMLImageElement, url: string, onSuccess?: () => void, onError?: () => void) => void;
16
+ //# sourceMappingURL=cors-bypass.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors-bypass.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/cors-bypass.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,EAAE,mBAAc,KAAG,MAahE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAqBrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,gBAAgB,EAC5B,KAAK,MAAM,EACX,YAAY,MAAM,IAAI,EACtB,UAAU,MAAM,IAAI,SAiBrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Simple CORS proxy solution
3
+ */
4
+ /**
5
+ * Fetch with CORS proxy fallback
6
+ */
7
+ export declare const fetchWithCORSProxy: (url: string, options?: RequestInit) => Promise<Response>;
8
+ //# sourceMappingURL=cors-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors-proxy.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/cors-proxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,KAAK,MAAM,EACX,UAAS,WAAgB,KACxB,OAAO,CAAC,QAAQ,CA+ClB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Test utilities để kiểm tra CORS handling
3
+ */
4
+ /**
5
+ * Test global CORS handler
6
+ */
7
+ export declare const testCORSHandler: () => void;
8
+ /**
9
+ * Test với proxy trực tiếp
10
+ */
11
+ export declare const testProxyDirectly: () => void;
12
+ //# sourceMappingURL=cors-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors-test.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/cors-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,eAAe,YAuB3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,YAW7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Global CORS handler cho tất cả images
3
+ * Đơn giản và hiệu quả
4
+ */
5
+ /**
6
+ * Initialize global CORS handling
7
+ */
8
+ export declare const initGlobalCORSHandler: () => void;
9
+ /**
10
+ * Disable global CORS handling
11
+ */
12
+ export declare const disableGlobalCORSHandler: () => void;
13
+ //# sourceMappingURL=global-cors-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-cors-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/global-cors-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,eAAO,MAAM,qBAAqB,YAmUjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,YAOpC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Alternative fetch methods that work with no-cors
3
+ */
4
+ /**
5
+ * Load JSON data bằng dynamic script tag (JSONP alternative)
6
+ */
7
+ export declare const loadJSONWithScript: (url: string) => Promise<any>;
8
+ /**
9
+ * Load JSON bằng Image tag trick (for very small data)
10
+ */
11
+ export declare const loadJSONWithImage: (url: string) => Promise<any>;
12
+ /**
13
+ * Load JSON bằng iframe trick
14
+ */
15
+ export declare const loadJSONWithIframe: (url: string) => Promise<any>;
16
+ /**
17
+ * Fallback method - try multiple approaches
18
+ */
19
+ export declare const loadJSONFallback: (url: string) => Promise<any>;
20
+ //# sourceMappingURL=no-cors-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-cors-fetch.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/no-cors-fetch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,GAAG,CA8B3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,GAAG,CAe1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,GAAG,CAqC3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,GAAG,CAmB/D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Simple CORS handler - chỉ thay thế URLs với proxy
3
+ * Approach đơn giản và đáng tin cậy hơn
4
+ */
5
+ /**
6
+ * Thay thế tất cả CDN URLs với proxy URLs
7
+ */
8
+ export declare const initSimpleCORSHandler: () => void;
9
+ //# sourceMappingURL=simple-cors-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-cors-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/Visualizer/simple-cors-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,eAAO,MAAM,qBAAqB,YA+FjC,CAAC"}