@eyeon/threejs-map 1.1.1

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 (56) hide show
  1. package/README.md +15 -0
  2. package/dist/Hooks/useMeshFloors/Montserrat_Regular.typeface.json.d.ts +5872 -0
  3. package/dist/Hooks/useMeshFloors/getWallShape.d.ts +2 -0
  4. package/dist/Hooks/useMeshFloors/index.d.ts +3 -0
  5. package/dist/Hooks/useMeshFloors/nodesUtils.d.ts +4 -0
  6. package/dist/Hooks/useMeshFloors/useDrawLogoHelper.d.ts +18 -0
  7. package/dist/Hooks/useMeshFloors/useLoadFloors.d.ts +3 -0
  8. package/dist/Hooks/useMeshFloors/useMaterialAndGeometry.d.ts +29 -0
  9. package/dist/Hooks/useMeshFloors/useMeshParams.d.ts +17 -0
  10. package/dist/Hooks/useMeshFloors/useRouteHelper.d.ts +24 -0
  11. package/dist/MapBox.d.ts +31 -0
  12. package/dist/components/SceneComponent/CameraProperties.d.ts +10 -0
  13. package/dist/components/SceneComponent/FloorsMap.d.ts +32 -0
  14. package/dist/components/SceneComponent/Map.d.ts +20 -0
  15. package/dist/components/SceneComponent/MapCenterMarker.d.ts +9 -0
  16. package/dist/components/SceneComponent/RouteTube.d.ts +6 -0
  17. package/dist/components/SceneComponent/SceneComponent.d.ts +21 -0
  18. package/dist/components/SceneComponent/SceneProperties.d.ts +6 -0
  19. package/dist/components/SceneComponent/portal-sidebar-form/PortalSidebarForm.d.ts +15 -0
  20. package/dist/components/SceneComponent/retailer-info/RetailerInfoModal.d.ts +11 -0
  21. package/dist/components/UIComponent.d.ts +15 -0
  22. package/dist/contexts/MapBoxContextProvider.d.ts +61 -0
  23. package/dist/defaults.d.ts +9 -0
  24. package/dist/globals.d.ts +10 -0
  25. package/dist/helpers/amenities.helper.d.ts +7 -0
  26. package/dist/helpers/camera.helper.d.ts +5 -0
  27. package/dist/helpers/easing.helper.d.ts +1 -0
  28. package/dist/helpers/misc.helper.d.ts +6 -0
  29. package/dist/helpers/svgIcons.helper.d.ts +17 -0
  30. package/dist/images/amenities/amenity-atm.svg +17 -0
  31. package/dist/images/amenities/amenity-elevator.svg +5 -0
  32. package/dist/images/amenities/amenity-family-restroom.svg +7 -0
  33. package/dist/images/amenities/amenity-management.svg +3 -0
  34. package/dist/images/amenities/amenity-playarea.svg +6 -0
  35. package/dist/images/amenities/amenity-restroom.svg +7 -0
  36. package/dist/images/amenities/amenity-security.svg +4 -0
  37. package/dist/index.css +1 -0
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.js +114 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/index.module.js +18842 -0
  42. package/dist/index.module.js.map +1 -0
  43. package/dist/index.umd.js +115 -0
  44. package/dist/index.umd.js.map +1 -0
  45. package/dist/interfaces/index.d.ts +93 -0
  46. package/dist/interfaces/mapApiTypes.d.ts +90 -0
  47. package/dist/interfaces/mapbox.d.ts +18 -0
  48. package/dist/interfaces/portal-sidebar-form.d.ts +13 -0
  49. package/dist/interfaces/portal.d.ts +21 -0
  50. package/dist/react-app-env.d.ts +1 -0
  51. package/dist/reportWebVitals.d.ts +3 -0
  52. package/dist/services/index.service.d.ts +9 -0
  53. package/dist/services/map.service.d.ts +15 -0
  54. package/dist/services/retailers.service.d.ts +11 -0
  55. package/dist/types/style-modules.d.ts +10 -0
  56. package/package.json +135 -0
@@ -0,0 +1,93 @@
1
+ import { Color, Intersection, Material, Mesh, MeshLambertMaterial, Object3D, ShapeGeometry, Vector3 } from 'three';
2
+ import { Graph } from 'ngraph.graph';
3
+ import { MapResponsiveSettings } from './mapApiTypes';
4
+ export type MapMode = 'view' | 'edit';
5
+ export type MapRole = 'PORTAL' | 'DISPLAY_APP' | 'WP_SITE' | 'PORTAL_KIOSK' | 'PORTAL_RESPONSIVE' | 'DEMO';
6
+ export type MapRenderMode = '2D' | '3D';
7
+ export type MapDeviceType = 'display_app' | 'desktop' | 'tablet' | 'mobile';
8
+ export interface MapConfigProps {
9
+ CENTER_ID: number;
10
+ KIOSK_ID: number;
11
+ ROLE: MapRole;
12
+ DEVICE: MapDeviceType;
13
+ STYLE: MapRenderMode;
14
+ STATS: boolean;
15
+ DEBUG: boolean;
16
+ IMAGE_PROXY_URL?: string;
17
+ CAMERA_CONTROLS_STATES: MapResponsiveSettings;
18
+ DEFAULT_CONTROLS_TARGET: null;
19
+ ORIGINAL_CAMERA_POSITION: null;
20
+ BASE_COLOR: Color;
21
+ OVERLAY_OPACITY: number;
22
+ DEFAULT_CAMERA_POSITION: null;
23
+ BOUNDARY_THICKNESS: number;
24
+ SELECTED_RETAILER_ID?: number;
25
+ STORE_TEXT_COLOR: Color;
26
+ STORE_HEIGHT: number;
27
+ WALL_THICKNESS: number;
28
+ DEFAULT_SELECTED_STORE: string | null;
29
+ BOUNDARY_COLOR: Color;
30
+ CAMERA: {
31
+ minDistance: number;
32
+ maxDistance: number;
33
+ animSpeed: number;
34
+ far?: number;
35
+ fov?: number;
36
+ };
37
+ WALL_COLOR: Color;
38
+ OVERLAY_COLOR: Color;
39
+ ACCENT_COLOR: Color;
40
+ STORE_DEFAULT_COLOR: Color;
41
+ MAP_BACKGROUND_COLOR: Color;
42
+ KIOSK_SIZE: number;
43
+ ZOOM_STEP: number;
44
+ SELECTED_ZOOM_LIMIT: number;
45
+ }
46
+ export interface IMeshValues {
47
+ mesh: IExtMesh;
48
+ geometry: ShapeGeometry;
49
+ material: Material;
50
+ object_id: string;
51
+ mesh_type: string | null;
52
+ floor_index: number;
53
+ visible: boolean;
54
+ renderOrder: number;
55
+ route_node_id?: string | null;
56
+ }
57
+ export interface MeshFloorsProps {
58
+ meshParams: IMeshValues[][];
59
+ textParams: {
60
+ textMesh: IExtMesh;
61
+ }[][];
62
+ storeLogos: {
63
+ storeLogo: IExtMesh;
64
+ }[][];
65
+ drawText?: Function;
66
+ pathFinderGraph: Graph<any, any>;
67
+ escalator_nodes: string[];
68
+ allSvgObjectIds: Set<string>;
69
+ }
70
+ export interface IExtMeshLambertMaterial extends MeshLambertMaterial {
71
+ colorDefault?: Color;
72
+ active?: boolean;
73
+ }
74
+ export interface IExtMesh extends Mesh {
75
+ object_id?: string | null;
76
+ mesh_type?: string | null;
77
+ floor_index?: number;
78
+ route_node_id?: string | null;
79
+ escalator_id?: string | null;
80
+ goToFloor?: {
81
+ index: number;
82
+ direction: string;
83
+ };
84
+ }
85
+ export interface IExtShapeGeometry extends ShapeGeometry {
86
+ faces: Vector3[];
87
+ }
88
+ export interface ExIntersection extends Intersection {
89
+ eventObject: Object3D | IExtMesh;
90
+ }
91
+ export interface ZoomData {
92
+ direction: 'in' | 'out';
93
+ }
@@ -0,0 +1,90 @@
1
+ import { MapAmenityID } from '../helpers/amenities.helper';
2
+ import { PortalMapSettingsProps } from './portal';
3
+ import { MapConfigProps } from '.';
4
+ export interface MapRetailer {
5
+ id: number;
6
+ global_retailer_id: number;
7
+ index?: number;
8
+ retail_name: string;
9
+ slug: string;
10
+ location: string;
11
+ retailer_phone: string;
12
+ retailer_description: string;
13
+ logo: string;
14
+ map_obj_name: string;
15
+ }
16
+ export interface MapRetailerSingle extends MapRetailer {
17
+ opening_hours: Record<string, {
18
+ startTime: string;
19
+ endTime: string;
20
+ isClosed: boolean;
21
+ }>;
22
+ }
23
+ export interface MapObjData {
24
+ id?: number;
25
+ center_id?: number;
26
+ retailer_id: number | null;
27
+ kiosk_id: number | null;
28
+ map_obj_name: string;
29
+ obj_type: 'retailer' | 'special' | 'custom';
30
+ layer_type: 'retail_name' | 'retail_logo' | 'retail_text' | 'kiosk' | 'amenity' | 'custom_image' | 'custom_text';
31
+ value: MapAmenityID | string;
32
+ custom_text: string | null;
33
+ custom_image: string | null;
34
+ bg_color: string | null;
35
+ transparent: boolean;
36
+ text_color: string | null;
37
+ size: number;
38
+ rotate: number;
39
+ offset_x: number;
40
+ offset_y: number;
41
+ lock_size: boolean;
42
+ }
43
+ export interface MapFloor {
44
+ id: number;
45
+ name: string;
46
+ svgUrl: string;
47
+ }
48
+ export interface MapKiosk {
49
+ id: number;
50
+ name: string;
51
+ map_obj_name?: string;
52
+ }
53
+ export interface MapVectorPoint {
54
+ x: number;
55
+ y: number;
56
+ z: number;
57
+ }
58
+ export type MapCameraControlsState = {
59
+ camera: MapVectorPoint;
60
+ controls: MapVectorPoint;
61
+ };
62
+ export interface FloorMapResponsiveSettings {
63
+ display_app: MapCameraControlsState;
64
+ desktop: MapCameraControlsState;
65
+ tablet: MapCameraControlsState;
66
+ mobile: MapCameraControlsState;
67
+ id?: number;
68
+ floor_id: number;
69
+ }
70
+ export interface MapResponsiveSettings {
71
+ display_app: MapCameraControlsState;
72
+ desktop: MapCameraControlsState;
73
+ tablet: MapCameraControlsState;
74
+ mobile: MapCameraControlsState;
75
+ perFloor: {
76
+ [floorId: number]: FloorMapResponsiveSettings;
77
+ } | null;
78
+ }
79
+ export type MapAllDataResponse = {
80
+ retailers: MapRetailer[];
81
+ globalRetailerIds: number[];
82
+ map_objs: MapObjData[];
83
+ floors: MapFloor[];
84
+ kiosks: MapKiosk[];
85
+ mapSettings: {
86
+ apiResponse: PortalMapSettingsProps;
87
+ responseConfig: Partial<MapConfigProps>;
88
+ };
89
+ responsiveSettings: MapResponsiveSettings;
90
+ };
@@ -0,0 +1,18 @@
1
+ import { MapFloor } from './mapApiTypes';
2
+ import { Group, Texture, Vector3 } from 'three';
3
+ export type AppRoutePoint = {
4
+ name: string;
5
+ node: Vector3;
6
+ };
7
+ export interface AppFloor extends MapFloor {
8
+ objsGroup: Group;
9
+ interactiveObjs: any[];
10
+ escalatorsObjs: any[];
11
+ escalatorsNodes: Record<any, any>;
12
+ escalatorMeshes?: any[];
13
+ route_points?: AppRoutePoint[];
14
+ route_tube?: any;
15
+ route_texture?: Texture | null | undefined;
16
+ routeMeshes?: any[];
17
+ route_active?: boolean;
18
+ }
@@ -0,0 +1,13 @@
1
+ export interface MapRetailerOption {
2
+ value: number;
3
+ label: string;
4
+ }
5
+ export interface MapKioskOption {
6
+ value: number;
7
+ label: string;
8
+ isDisabled: boolean;
9
+ }
10
+ export interface MapAmenityOption {
11
+ value: string;
12
+ label: string;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { MapRenderMode } from '.';
2
+ export interface PortalMapSettingsProps {
3
+ MAP_STYLE: MapRenderMode;
4
+ MAP_BACKGROUND_COLOR: string;
5
+ ACCENT_COLOR: string;
6
+ STORE_DEFAULT_COLOR: string;
7
+ STORE_TEXT_COLOR: string;
8
+ STORE_HEIGHT: number;
9
+ WALL_COLOR: string;
10
+ BOUNDARY_COLOR: string;
11
+ BASE_COLOR: string;
12
+ OVERLAY_COLOR: string;
13
+ WALL_THICKNESS: number;
14
+ BOUNDARY_THICKNESS: number;
15
+ OVERLAY_OPACITY: number;
16
+ KIOSK_SIZE: number;
17
+ ZOOM_STEP: number;
18
+ SELECTED_ZOOM_LIMIT: number;
19
+ CAMERA_MAX_DISTANCE: number;
20
+ CAMERA_MIN_DISTANCE: number;
21
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="react-scripts" />
@@ -0,0 +1,3 @@
1
+ import { ReportHandler } from 'web-vitals';
2
+ declare const reportWebVitals: (onPerfEntry?: ReportHandler) => void;
3
+ export default reportWebVitals;
@@ -0,0 +1,9 @@
1
+ import { MapApiService } from './map.service';
2
+ import { RetailersService } from './retailers.service';
3
+ import { MapConfigProps } from '../interfaces';
4
+ export interface ApiServicesProps {
5
+ mapApiService: MapApiService;
6
+ retailersService: RetailersService;
7
+ }
8
+ declare const createApiServices: (baseApiUrl: string, mapConfig: MapConfigProps) => ApiServicesProps;
9
+ export default createApiServices;
@@ -0,0 +1,15 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { MapConfigProps } from '../interfaces';
3
+ import { MapResponsiveSettings, MapObjData, MapFloor, MapKiosk } from '../interfaces/mapApiTypes';
4
+ export interface MapApiService {
5
+ getMapData: () => Promise<MapObjData[]>;
6
+ getMapFloors: () => Promise<MapFloor[]>;
7
+ getMapKiosks: () => Promise<MapKiosk[]>;
8
+ getMapSettings: () => Promise<{
9
+ apiResponse: any;
10
+ responseConfig: Partial<MapConfigProps>;
11
+ }>;
12
+ getMapResponsiveSettings: () => Promise<MapResponsiveSettings>;
13
+ }
14
+ declare const createMapApiService: (axiosInstance: AxiosInstance) => MapApiService;
15
+ export default createMapApiService;
@@ -0,0 +1,11 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { MapRetailer, MapRetailerSingle } from '../interfaces/mapApiTypes';
3
+ export interface RetailersService {
4
+ getAllRetailers: () => Promise<{
5
+ retailers: MapRetailer[];
6
+ globalRetailerIds: number[];
7
+ }>;
8
+ getRetailer: (slug: string) => Promise<MapRetailerSingle>;
9
+ }
10
+ declare const createRetailersService: (axiosInstance: AxiosInstance) => RetailersService;
11
+ export default createRetailersService;
@@ -0,0 +1,10 @@
1
+ // removed scss declarations
2
+
3
+ declare module '*.module.css' {
4
+ const classes: { [key: string]: string };
5
+ export default classes;
6
+ }
7
+
8
+ declare module '*.css';
9
+
10
+
package/package.json ADDED
@@ -0,0 +1,135 @@
1
+ {
2
+ "name": "@eyeon/threejs-map",
3
+ "version": "1.1.1",
4
+ "description": "EyeOn ThreeJS Map component for interactive 3D mall/center maps",
5
+ "keywords": [
6
+ "threejs",
7
+ "react",
8
+ "3d",
9
+ "map",
10
+ "interactive",
11
+ "mall",
12
+ "retail"
13
+ ],
14
+ "author": "EyeOn LLC",
15
+ "license": "UNLICENSED",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/mycenterportal/eyeon-threejs-map-build.git"
19
+ },
20
+ "type": "module",
21
+ "source": "src/index.ts",
22
+ "main": "dist/index.js",
23
+ "module": "dist/index.module.js",
24
+ "unpkg": "dist/index.umd.js",
25
+ "types": "dist/index.d.ts",
26
+ "engines": {
27
+ "node": "^22.20.0",
28
+ "npm": "^11.6.2"
29
+ },
30
+ "engineStrict": true,
31
+ "packageManager": "npm@11.6.2",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.module.js",
36
+ "require": "./dist/index.js"
37
+ },
38
+ "./index.css": "./dist/index.css"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ],
45
+ "sideEffects": [
46
+ "**/*.css"
47
+ ],
48
+ "scripts": {
49
+ "build": "vite build --mode lib",
50
+ "dev": "vite",
51
+ "storybook": "storybook dev -p 6006"
52
+ },
53
+ "husky": {
54
+ "hooks": {
55
+ "pre-push": "npm run prepare"
56
+ }
57
+ },
58
+ "dependencies": {
59
+ "@react-three/drei": "10.7.6",
60
+ "@reduxjs/toolkit": "^2.2.3",
61
+ "@tweenjs/tween.js": "^21.0.0",
62
+ "axios": "^1.7.2",
63
+ "bootstrap": "^5.3.1",
64
+ "ngraph.graph": "^20.0.1",
65
+ "ngraph.path": "^1.5.0",
66
+ "react-bootstrap": "^2.8.0",
67
+ "react-bootstrap-icons": "^1.10.3",
68
+ "react-device-detect": "^2.2.3",
69
+ "react-feather": "^2.0.10",
70
+ "react-redux": "^9.1.0",
71
+ "react-select": "^5.8.0",
72
+ "three-stdlib": "^2.25.1",
73
+ "web-vitals": "^2.1.4"
74
+ },
75
+ "peerDependencies": {
76
+ "@react-three/fiber": "^9.4.0",
77
+ "react": "^19.2.1",
78
+ "react-dom": "^19.2.1",
79
+ "three": "^0.180.0"
80
+ },
81
+ "devDependencies": {
82
+ "@react-three/fiber": "^9.4.0",
83
+ "@storybook/addon-docs": "^9.1.8",
84
+ "@storybook/addon-links": "^9.1.8",
85
+ "@storybook/addon-onboarding": "^9.1.8",
86
+ "@storybook/react": "^9.1.8",
87
+ "@storybook/react-vite": "^9.1.8",
88
+ "@types/express": "^5.0.5",
89
+ "@types/jest": "^27.5.2",
90
+ "@types/jsonwebtoken": "^9.0.6",
91
+ "@types/node": "^22.7.4",
92
+ "@types/react": "^19.0.0",
93
+ "@types/react-dom": "^19.0.0",
94
+ "@types/three": "^0.180.0",
95
+ "@vitejs/plugin-react": "^4.3.1",
96
+ "dotenv": "^17.2.3",
97
+ "eslint-plugin-storybook": "^9.1.8",
98
+ "express": "^5.1.0",
99
+ "husky": "^8.0.3",
100
+ "jsonwebtoken": "^9.0.2",
101
+ "postcss": "^8.4.47",
102
+ "postcss-nested": "^6.0.1",
103
+ "prop-types": "^15.8.1",
104
+ "react": "19.2.1",
105
+ "react-dom": "19.2.1",
106
+ "storybook": "^9.1.8",
107
+ "three": "^0.180.0",
108
+ "typescript": "^5.4.5",
109
+ "vite": "^5.4.9",
110
+ "vite-plugin-dts": "^4.2.3"
111
+ },
112
+ "eslintConfig": {
113
+ "extends": [
114
+ "react-app",
115
+ "react-app/jest"
116
+ ]
117
+ },
118
+ "browserslist": {
119
+ "production": [
120
+ ">0.2%",
121
+ "not dead",
122
+ "not op_mini all"
123
+ ],
124
+ "development": [
125
+ "last 1 chrome version",
126
+ "last 1 firefox version",
127
+ "last 1 safari version"
128
+ ]
129
+ },
130
+ "overrides": {
131
+ "@react-spring/animated": "^9.7.0",
132
+ "@react-spring/core": "^9.7.0",
133
+ "@react-spring/shared": "^9.7.0"
134
+ }
135
+ }