@clikvn/showroom-visualizer 0.4.1-dev-13 → 0.4.1-dev-14

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 (39) 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/base.json +21 -21
  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/PlayAll/index.d.ts +8 -0
  12. package/dist/components/SkinLayer/PlayAll/index.d.ts.map +1 -0
  13. package/dist/features/VirtualTourVisualizer/index.d.ts +20 -0
  14. package/dist/features/VirtualTourVisualizer/index.d.ts.map +1 -0
  15. package/dist/features/VirtualTourVisualizerUI/index.d.ts +17 -0
  16. package/dist/features/VirtualTourVisualizerUI/index.d.ts.map +1 -0
  17. package/dist/fonts/icomoon.svg +633 -633
  18. package/dist/index.html +36 -0
  19. package/dist/index.js +1 -1
  20. package/dist/web.d.ts.map +1 -1
  21. package/dist/web.js +1 -1
  22. package/example/CSS_HANDLING.md +141 -141
  23. package/example/FIXES_SUMMARY.md +121 -131
  24. package/example/PATH_ALIASES.md +103 -102
  25. package/example/README.md +64 -63
  26. package/example/index.html +13 -12
  27. package/example/package.json +25 -25
  28. package/example/postcss.config.cjs +6 -6
  29. package/example/tailwind.config.cjs +12 -12
  30. package/example/tsconfig.node.json +12 -11
  31. package/example/vite.config.ts +142 -142
  32. package/package.json +133 -133
  33. package/rollup.config.js +400 -400
  34. package/tailwind.config.cjs +151 -151
  35. package/.claude/settings.local.json +0 -19
  36. package/dist/components/SkinLayer/Floorplan/Minimap/test01.d.ts +0 -15
  37. package/dist/components/SkinLayer/Floorplan/Minimap/test01.d.ts.map +0 -1
  38. /package/dist/features/ShowroomVisualizer/{CssStyles.d.ts → cssStyles.d.ts} +0 -0
  39. /package/dist/features/ShowroomVisualizer/{CssStyles.d.ts.map → cssStyles.d.ts.map} +0 -0
package/SETUP_COMPLETE.md CHANGED
@@ -1,149 +1,149 @@
1
- # ✅ Setup Hoàn Tất!
2
-
3
- ## 🎉 Đã tạo Example App để Development
4
-
5
- ### 📁 Cấu trúc đã tạo:
6
-
7
- ```
8
- showroom-visualizer/
9
- ├── example/ # ⭐ Example app mới
10
- │ ├── src/
11
- │ │ ├── App.tsx # Demo với custom layout toggle
12
- │ │ ├── main.tsx # Entry point
13
- │ │ └── index.css # Styles
14
- │ ├── index.html
15
- │ ├── vite.config.ts # Alias đến ../src
16
- │ ├── tsconfig.json
17
- │ ├── package.json
18
- │ └── README.md
19
-
20
- ├── src/ # Source code thư viện
21
- ├── DEVELOPMENT.md # ⭐ Hướng dẫn development
22
- └── package.json # Đã thêm "dev:demo" script
23
- ```
24
-
25
- ---
26
-
27
- ## 🚀 Bắt đầu ngay:
28
-
29
- ### Cách 1: Chạy Example App (Nhanh nhất)
30
-
31
- ```bash
32
- # Từ root directory
33
- yarn dev:demo
34
-
35
- # Hoặc
36
- cd example
37
- yarn dev
38
- ```
39
-
40
- **➡️ Mở browser:** http://localhost:3001
41
-
42
- ### Ưu điểm:
43
-
44
- ✅ **Import trực tiếp từ `src/`** - Không cần build
45
- ✅ **Hot reload siêu nhanh** - Thay đổi code → Tự động reload
46
- ✅ **Test custom layout dễ dàng** - Bật/tắt bằng checkbox
47
- ✅ **Debug source code** - Có source maps đầy đủ
48
- ✅ **Không cần yalc** - Độc lập hoàn toàn
49
-
50
- ---
51
-
52
- ### Cách 2: Test với Next.js (dùng yalc)
53
-
54
- Nếu cần test integration thật với Next.js:
55
-
56
- ```bash
57
- # Terminal 1: Trong showroom-visualizer
58
- yarn dev:yalc
59
-
60
- # Terminal 2: Trong Next.js project
61
- yalc add @clikvn/showroom-visualizer
62
- yarn install
63
- yarn dev
64
- ```
65
-
66
- ---
67
-
68
- ## 📝 Workflow Khuyến Nghị:
69
-
70
- ### 1. **Development hàng ngày → Dùng Example App**
71
-
72
- ```bash
73
- cd example
74
- yarn dev
75
- ```
76
-
77
- - Sửa code trong `../src/` → Tự động reload
78
- - Test features mới
79
- - Debug issues
80
- - Test custom layout components
81
-
82
- ### 2. **Test Integration → Dùng yalc với Next.js**
83
-
84
- Chỉ khi cần:
85
- - Test build output thật
86
- - Test với Next.js SSR/RSC
87
- - Test production build
88
-
89
- ### 3. **Test Web Component → Dùng `dist/index.html`**
90
-
91
- ```bash
92
- yarn build
93
- cd dist
94
- npx serve
95
- ```
96
-
97
- ---
98
-
99
- ## 🎯 Các files quan trọng:
100
-
101
- | File | Mô tả |
102
- |------|-------|
103
- | `DEVELOPMENT.md` | Hướng dẫn development chi tiết |
104
- | `example/README.md` | Hướng dẫn example app |
105
- | `example/src/App.tsx` | Demo app với custom layout |
106
- | `package.json` | Đã thêm `dev:demo` script |
107
-
108
- ---
109
-
110
- ## 💡 Tips:
111
-
112
- 1. **Luôn dùng Example app khi develop** - Nhanh và tiện nhất
113
- 2. **Code trong `src/`** → Tự động sync sang example
114
- 3. **Test custom layout** bằng checkbox trong UI
115
- 4. **Thay đổi API URL/Showroom ID** trong `example/src/App.tsx`
116
-
117
- ---
118
-
119
- ## 🐛 Fix lỗi yalc trước đó:
120
-
121
- **Vấn đề cũ:**
122
- ```
123
- ReactDOM__default.ReactDOM__default.findDOMNode
124
- ```
125
-
126
- **Giải pháp:**
127
- ➡️ Dùng Example app thay vì yalc để tránh hoàn toàn vấn đề này!
128
-
129
- Example app import trực tiếp từ source nên:
130
- - ✅ Không có build issues
131
- - ✅ Không có double prefix
132
- - ✅ Không cần fix Rollup plugins
133
- - ✅ React version luôn match (18.3.1)
134
-
135
- ---
136
-
137
- ## ✨ Bắt đầu ngay:
138
-
139
- ```bash
140
- cd /Users/tungthai/Desktop/Develop/showroom-visualizer/example
141
- yarn dev
142
- ```
143
-
144
- **Server đang chạy tại:** http://localhost:3001 🚀
145
-
146
- ---
147
-
148
- Happy Coding! 🎉
149
-
1
+ # ✅ Setup Hoàn Tất!
2
+
3
+ ## 🎉 Đã tạo Example App để Development
4
+
5
+ ### 📁 Cấu trúc đã tạo:
6
+
7
+ ```
8
+ showroom-visualizer/
9
+ ├── example/ # ⭐ Example app mới
10
+ │ ├── src/
11
+ │ │ ├── App.tsx # Demo với custom layout toggle
12
+ │ │ ├── main.tsx # Entry point
13
+ │ │ └── index.css # Styles
14
+ │ ├── index.html
15
+ │ ├── vite.config.ts # Alias đến ../src
16
+ │ ├── tsconfig.json
17
+ │ ├── package.json
18
+ │ └── README.md
19
+
20
+ ├── src/ # Source code thư viện
21
+ ├── DEVELOPMENT.md # ⭐ Hướng dẫn development
22
+ └── package.json # Đã thêm "dev:demo" script
23
+ ```
24
+
25
+ ---
26
+
27
+ ## 🚀 Bắt đầu ngay:
28
+
29
+ ### Cách 1: Chạy Example App (Nhanh nhất)
30
+
31
+ ```bash
32
+ # Từ root directory
33
+ yarn dev:demo
34
+
35
+ # Hoặc
36
+ cd example
37
+ yarn dev
38
+ ```
39
+
40
+ **➡️ Mở browser:** http://localhost:3001
41
+
42
+ ### Ưu điểm:
43
+
44
+ ✅ **Import trực tiếp từ `src/`** - Không cần build
45
+ ✅ **Hot reload siêu nhanh** - Thay đổi code → Tự động reload
46
+ ✅ **Test custom layout dễ dàng** - Bật/tắt bằng checkbox
47
+ ✅ **Debug source code** - Có source maps đầy đủ
48
+ ✅ **Không cần yalc** - Độc lập hoàn toàn
49
+
50
+ ---
51
+
52
+ ### Cách 2: Test với Next.js (dùng yalc)
53
+
54
+ Nếu cần test integration thật với Next.js:
55
+
56
+ ```bash
57
+ # Terminal 1: Trong showroom-visualizer
58
+ yarn dev:yalc
59
+
60
+ # Terminal 2: Trong Next.js project
61
+ yalc add @clikvn/showroom-visualizer
62
+ yarn install
63
+ yarn dev
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 📝 Workflow Khuyến Nghị:
69
+
70
+ ### 1. **Development hàng ngày → Dùng Example App**
71
+
72
+ ```bash
73
+ cd example
74
+ yarn dev
75
+ ```
76
+
77
+ - Sửa code trong `../src/` → Tự động reload
78
+ - Test features mới
79
+ - Debug issues
80
+ - Test custom layout components
81
+
82
+ ### 2. **Test Integration → Dùng yalc với Next.js**
83
+
84
+ Chỉ khi cần:
85
+ - Test build output thật
86
+ - Test với Next.js SSR/RSC
87
+ - Test production build
88
+
89
+ ### 3. **Test Web Component → Dùng `dist/index.html`**
90
+
91
+ ```bash
92
+ yarn build
93
+ cd dist
94
+ npx serve
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 🎯 Các files quan trọng:
100
+
101
+ | File | Mô tả |
102
+ |------|-------|
103
+ | `DEVELOPMENT.md` | Hướng dẫn development chi tiết |
104
+ | `example/README.md` | Hướng dẫn example app |
105
+ | `example/src/App.tsx` | Demo app với custom layout |
106
+ | `package.json` | Đã thêm `dev:demo` script |
107
+
108
+ ---
109
+
110
+ ## 💡 Tips:
111
+
112
+ 1. **Luôn dùng Example app khi develop** - Nhanh và tiện nhất
113
+ 2. **Code trong `src/`** → Tự động sync sang example
114
+ 3. **Test custom layout** bằng checkbox trong UI
115
+ 4. **Thay đổi API URL/Showroom ID** trong `example/src/App.tsx`
116
+
117
+ ---
118
+
119
+ ## 🐛 Fix lỗi yalc trước đó:
120
+
121
+ **Vấn đề cũ:**
122
+ ```
123
+ ReactDOM__default.ReactDOM__default.findDOMNode
124
+ ```
125
+
126
+ **Giải pháp:**
127
+ ➡️ Dùng Example app thay vì yalc để tránh hoàn toàn vấn đề này!
128
+
129
+ Example app import trực tiếp từ source nên:
130
+ - ✅ Không có build issues
131
+ - ✅ Không có double prefix
132
+ - ✅ Không cần fix Rollup plugins
133
+ - ✅ React version luôn match (18.3.1)
134
+
135
+ ---
136
+
137
+ ## ✨ Bắt đầu ngay:
138
+
139
+ ```bash
140
+ cd /Users/tungthai/Desktop/Develop/showroom-visualizer/example
141
+ yarn dev
142
+ ```
143
+
144
+ **Server đang chạy tại:** http://localhost:3001 🚀
145
+
146
+ ---
147
+
148
+ Happy Coding! 🎉
149
+
package/base.json CHANGED
@@ -1,21 +1,21 @@
1
- {
2
- "$schema": "https://json.schemastore.org/tsconfig",
3
- "display": "Default",
4
- "compilerOptions": {
5
- "composite": false,
6
- "declaration": true,
7
- "declarationMap": true,
8
- "esModuleInterop": true,
9
- "forceConsistentCasingInFileNames": true,
10
- "inlineSources": false,
11
- "isolatedModules": true,
12
- "moduleResolution": "node",
13
- "noUnusedLocals": false,
14
- "noUnusedParameters": false,
15
- "preserveWatchOutput": true,
16
- "skipLibCheck": true,
17
- "strict": true,
18
- "downlevelIteration": true
19
- },
20
- "exclude": ["node_modules"]
21
- }
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "display": "Default",
4
+ "compilerOptions": {
5
+ "composite": false,
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "esModuleInterop": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "inlineSources": false,
11
+ "isolatedModules": true,
12
+ "moduleResolution": "node",
13
+ "noUnusedLocals": false,
14
+ "noUnusedParameters": false,
15
+ "preserveWatchOutput": true,
16
+ "skipLibCheck": true,
17
+ "strict": true,
18
+ "downlevelIteration": true
19
+ },
20
+ "exclude": ["node_modules"]
21
+ }
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+ type PoiHeaderPropsTypes = {
3
+ title: string;
4
+ brand?: string;
5
+ rating?: number;
6
+ price?: number;
7
+ salePrice?: number;
8
+ currencyUnit?: string;
9
+ unit?: string;
10
+ onShare?: () => void;
11
+ onClose?: () => void;
12
+ onPlay?: () => void;
13
+ };
14
+ declare const PoiHeader: FC<PoiHeaderPropsTypes>;
15
+ export default PoiHeader;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/SkinLayer/Drawer/PoiHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAQlC,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAwGtC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { DrawerProps } from 'antd/lib/drawer';
2
+ import { CSSProperties, ReactNode } from 'react';
3
+ export type CommandTypes = {
4
+ icon: string;
5
+ onClick: () => void;
6
+ };
7
+ /**
8
+ * commands is actions list on side-in header
9
+ */
10
+ interface DrawerPropsType extends DrawerProps {
11
+ enableAutoPlay?: boolean;
12
+ enableShare?: boolean;
13
+ title?: string;
14
+ children?: ReactNode;
15
+ header?: ReactNode;
16
+ subHeader?: ReactNode;
17
+ loadingScenario?: boolean;
18
+ commands?: CommandTypes[] | null;
19
+ showHeader?: boolean;
20
+ closeStyle?: CSSProperties;
21
+ onBack?: () => void;
22
+ onClose?: () => void;
23
+ onClickAutoPlay?: () => void;
24
+ onClickShare?: () => void;
25
+ onClickContainer?: () => void;
26
+ }
27
+ declare const _default: import("react").NamedExoticComponent<DrawerPropsType>;
28
+ export default _default;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/SkinLayer/Drawer/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAY,SAAS,EAAoB,MAAM,OAAO,CAAC;AAI7E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAEjE;;GAEG;AACH,UAAU,eAAgB,SAAQ,WAAW;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;;AA4ND,wBAAqC"}
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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,20 @@
1
+ import { FC } from 'react';
2
+ import Poi from '../../models/Visualizer/Poi/Poi';
3
+ import Tour from '../../models/Visualizer/Tour';
4
+ type VirtualTourVisualizerProps = {
5
+ elementId?: string;
6
+ apiHost?: string;
7
+ config?: {
8
+ tourCode?: string;
9
+ language?: string;
10
+ startScene?: string;
11
+ hLookAt?: number;
12
+ vLookAt?: number;
13
+ } & Record<string, unknown>;
14
+ onTourLoaded?: (tour: Tour) => void;
15
+ onPoiClicked?: (poi?: Poi) => void;
16
+ onPinActionClicked?: (key: string) => void;
17
+ };
18
+ declare const VirtualTourVisualizer: FC<VirtualTourVisualizerProps>;
19
+ export default VirtualTourVisualizer;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/VirtualTourVisualizer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAI3B,OAAO,GAAG,MAAM,iCAAiC,CAAC;AAClD,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAEhD,KAAK,0BAA0B,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,CAAC;AACF,QAAA,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAmBzD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { FC } from 'react';
2
+ type VirtualTourVisualizerProps = {
3
+ elementId?: string;
4
+ apiHost?: string;
5
+ mobile: boolean;
6
+ config?: {
7
+ tourCode?: string;
8
+ language?: string;
9
+ startScene?: string;
10
+ hLookAt?: number;
11
+ vLookAt?: number;
12
+ } & Record<string, unknown>;
13
+ tourLoaded?: boolean;
14
+ };
15
+ declare const VirtualTourVisualizerUI: FC<VirtualTourVisualizerProps>;
16
+ export default VirtualTourVisualizerUI;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/VirtualTourVisualizerUI/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,KAAK,0BAA0B,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AACF,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,0BAA0B,CAoB3D,CAAC;AAEF,eAAe,uBAAuB,CAAC"}