@smplrspace/smplr-loader 0.0.1-beta.1 → 2.4.1-beta.10

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.
@@ -0,0 +1,313 @@
1
+ declare interface BaseDataLayer<T, D extends UnknownData> {
2
+ tooltip?: (dataElement: T & D) => string;
3
+ onClick?: (dataElement: T & D) => void;
4
+ onHover?: (dataElement: T & D) => void;
5
+ onHoverOut?: (dataElement: T & D) => void;
6
+ }
7
+
8
+ declare type CameraMode = '2d' | '3d'
9
+
10
+ declare type DataLayer<D extends UnknownData = NoData> = PointDataLayer<D> | IconDataLayer<D> | PolygonDataLayer<D> | PolylineDataLayer<D> | FurnitureDataLayer<D>;
11
+
12
+ declare interface DeprecatedPreviewProps {
13
+ mode: CameraMode;
14
+ onViewerReady: () => void;
15
+ onError: () => void;
16
+ }
17
+
18
+ declare interface Filter {
19
+ background: {
20
+ clearColor: string;
21
+ };
22
+ directionalLight: {
23
+ distance: number;
24
+ intensity: number;
25
+ };
26
+ hemisphericLight: {
27
+ diffuseColor: string;
28
+ specularColor: string;
29
+ groundColor: string;
30
+ intensity: number;
31
+ };
32
+ whiteMaterial: {
33
+ baseColor: string;
34
+ metallicRatio: number;
35
+ roughnessRatio: number;
36
+ alphaRatio: number;
37
+ };
38
+ indoorMaterial: {
39
+ baseColor: string;
40
+ metallicRatio: number;
41
+ roughnessRatio: number;
42
+ alphaRatio: number;
43
+ };
44
+ grassMaterial: {
45
+ baseColor: string;
46
+ metallicRatio: number;
47
+ roughnessRatio: number;
48
+ alphaRatio: number;
49
+ };
50
+ waterMaterial: {
51
+ baseColor: string;
52
+ metallicRatio: number;
53
+ roughnessRatio: number;
54
+ alphaRatio: number;
55
+ };
56
+ darkGreyMaterial: {
57
+ baseColor: string;
58
+ metallicRatio: number;
59
+ roughnessRatio: number;
60
+ alphaRatio: number;
61
+ };
62
+ glassMaterial: {
63
+ baseColor: string;
64
+ metallicRatio: number;
65
+ roughnessRatio: number;
66
+ alphaRatio: number;
67
+ };
68
+ metalMaterial: {
69
+ baseColor: string;
70
+ metallicRatio: number;
71
+ roughnessRatio: number;
72
+ alphaRatio: number;
73
+ };
74
+ compassMaterial: {
75
+ baseColor: string;
76
+ metallicRatio: number;
77
+ roughnessRatio: number;
78
+ alphaRatio: number;
79
+ };
80
+ placeholderMaterial: {
81
+ baseColor: string;
82
+ metallicRatio: number;
83
+ roughnessRatio: number;
84
+ alphaRatio: number;
85
+ };
86
+ hoveredMaterial: {
87
+ baseColor: string;
88
+ metallicRatio: number;
89
+ roughnessRatio: number;
90
+ alphaRatio: number;
91
+ };
92
+ selectedMaterial: {
93
+ baseColor: string;
94
+ metallicRatio: number;
95
+ roughnessRatio: number;
96
+ alphaRatio: number;
97
+ };
98
+ dataElement: {
99
+ defaultColor: string;
100
+ };
101
+ }
102
+
103
+ declare type FurnitureData = {
104
+ furnitureId: string | string[];
105
+ };
106
+
107
+ declare interface FurnitureDataLayer<D extends UnknownData = NoData> extends BaseDataLayer<FurnitureData, D> {
108
+ id: string;
109
+ type: 'furniture';
110
+ data: (FurnitureData & D)[];
111
+ color?: string | ((dataElement: FurnitureData & D) => string);
112
+ }
113
+
114
+ declare type IconData = {
115
+ position: SmplrCoord3d;
116
+ };
117
+
118
+ declare interface IconDataLayer<D extends UnknownData = NoData> extends BaseDataLayer<IconData, D> {
119
+ id: string;
120
+ type: 'icon';
121
+ data: (IconData & D)[];
122
+ icon: {
123
+ url: string;
124
+ width: number;
125
+ height: number;
126
+ };
127
+ width?: number | ((dataElement: IconData & D) => number);
128
+ onDrag?: (dragged: {
129
+ data: IconData & D;
130
+ }) => void;
131
+ onDrop?: (dropped: {
132
+ data: IconData & D;
133
+ position: SmplrCoord3d;
134
+ }) => void;
135
+ }
136
+
137
+ declare type NoData = Record<string, never>;
138
+
139
+ declare type OnPickFn = (args: { coordinates: SmplrCoord3d; furnitureId?: string }) => void
140
+
141
+ declare interface OrbitCameraPlacement {
142
+ alpha: number;
143
+ beta: number;
144
+ radius: number;
145
+ target: Vector3Coord;
146
+ }
147
+
148
+ declare type PointData = {
149
+ position: SmplrCoord3d;
150
+ };
151
+
152
+ declare interface PointDataLayer<D extends UnknownData = NoData> extends BaseDataLayer<PointData, D> {
153
+ id: string;
154
+ type: 'point';
155
+ data: (PointData & D)[];
156
+ diameter?: number | ((dataElement: PointData & D) => number);
157
+ anchor?: 'bottom' | 'center' | 'top';
158
+ color?: string | ((dataElement: PointData & D) => string);
159
+ alpha?: number;
160
+ onDrag?: (dragged: {
161
+ data: PointData & D;
162
+ }) => void;
163
+ onDrop?: (dropped: {
164
+ data: PointData & D;
165
+ position: SmplrCoord3d;
166
+ }) => void;
167
+ }
168
+
169
+ declare type PolygonData = {
170
+ coordinates: SmplrCoord2d[];
171
+ };
172
+
173
+ declare interface PolygonDataLayer<D extends UnknownData = NoData> extends BaseDataLayer<PolygonData, D> {
174
+ id: string;
175
+ type: 'polygon';
176
+ data: (PolygonData & D)[];
177
+ baseHeight?: number | ((dataElement: PolygonData & D) => number);
178
+ height?: number | ((dataElement: PolygonData & D) => number);
179
+ color?: string | ((dataElement: PolygonData & D) => string);
180
+ alpha?: number;
181
+ onDrag?: (dragged: {
182
+ data: PolygonData & D;
183
+ }) => void;
184
+ onDrop?: (dropped: {
185
+ data: PolygonData & D;
186
+ coordinates: SmplrCoord2d[];
187
+ }) => void;
188
+ disableReshape?: boolean;
189
+ reshapeBoxColor?: string;
190
+ }
191
+
192
+ declare type PolylineData = {
193
+ coordinates: SmplrCoord3d[];
194
+ };
195
+
196
+ declare interface PolylineDataLayer<D extends UnknownData = NoData> extends BaseDataLayer<PolylineData, D> {
197
+ id: string;
198
+ type: 'polyline';
199
+ data: (PolylineData & D)[];
200
+ shape?: 'circle' | 'triangle' | 'square' | 'pentagon' | 'hexagon' | [number, number][];
201
+ cap?: boolean;
202
+ scale?: number | ((scaled: {
203
+ data: PolylineData & D;
204
+ stepIndex: number;
205
+ distance: number;
206
+ }) => number);
207
+ stepSize?: number;
208
+ color?: string | ((dataElement: PolylineData & D) => string);
209
+ alpha?: number;
210
+ onDrag?: (dragged: {
211
+ data: PolylineData & D;
212
+ }) => void;
213
+ onDrop?: (dropped: {
214
+ data: PolylineData & D;
215
+ coordinates: SmplrCoord3d[];
216
+ }) => void;
217
+ disableReshape?: boolean;
218
+ reshapeBoxColor?: string;
219
+ }
220
+
221
+ declare interface RenderOptions {
222
+ compass?: boolean
223
+ annotations?: boolean
224
+ skybox?: boolean
225
+ backgroundColor?: string
226
+ filter?: Partial<Filter>
227
+ walls?: {
228
+ render?: boolean
229
+ alpha?: number
230
+ maxHeightCm?: number
231
+ showStructuralWalls?: boolean
232
+ }
233
+ doors?: boolean
234
+ windows?: boolean
235
+ flip?: boolean
236
+ objects?: boolean
237
+ floorplan?: {
238
+ render?: boolean
239
+ alpha?: number
240
+ elevationInCm?: number
241
+ }
242
+ }
243
+
244
+ declare interface SmplrCoord2d {
245
+ levelIndex: number;
246
+ x: number;
247
+ z: number;
248
+ }
249
+
250
+ declare interface SmplrCoord3d extends SmplrCoord2d {
251
+ elevation: number;
252
+ }
253
+
254
+ export declare class Space {
255
+ private options;
256
+ private viewerStarted;
257
+ private scene;
258
+ private container;
259
+ private setPickHandler;
260
+ private dispatchDataLayersDefinition;
261
+ constructor(options: SpaceOptions);
262
+ private checkOptions;
263
+ private prepareContainer;
264
+ remove: () => void;
265
+ preview({ mode, onViewerReady, onError }: DeprecatedPreviewProps): void;
266
+ startViewer(options: ViewerOptions): void;
267
+ addDataLayer<D extends UnknownData>(dataLayer: DataLayer<D>): void;
268
+ updateDataLayer<D extends UnknownData>(dataLayer: Partial<DataLayer<D>>): void;
269
+ removeDataLayer(id: string): void;
270
+ enablePickingMode({ onPick }: {
271
+ onPick: OnPickFn;
272
+ }): void;
273
+ disablePickingMode(): void;
274
+ getCameraPlacement(): OrbitCameraPlacement;
275
+ setCameraPlacement(placement: OrbitCameraPlacement): void;
276
+ }
277
+
278
+ declare interface SpaceOptions {
279
+ spaceId: string;
280
+ clientToken: string;
281
+ containerId: string;
282
+ }
283
+
284
+ declare type UnknownData = Record<string, unknown>;
285
+
286
+ declare interface Vector2Coord {
287
+ x: number;
288
+ y: number;
289
+ }
290
+
291
+ declare interface Vector3Coord extends Vector2Coord {
292
+ z: number;
293
+ }
294
+
295
+ export declare const version = "2.4.1-beta.10";
296
+
297
+ declare interface ViewerOptions {
298
+ mode?: CameraMode;
299
+ preview?: boolean;
300
+ allowModeChange?: boolean;
301
+ cameraPlacement?: OrbitCameraPlacement;
302
+ disableCameraControls?: boolean;
303
+ hideNavigationButtons?: boolean;
304
+ compass?: boolean;
305
+ annotations?: boolean;
306
+ renderOptions?: RenderOptions;
307
+ onReady?: () => void;
308
+ onError?: (error: unknown) => void;
309
+ onModeChange?: (mode: CameraMode) => void;
310
+ loadingMessage?: string;
311
+ }
312
+
313
+ export { }
@@ -0,0 +1,5 @@
1
+ import { Smplr } from './types';
2
+ export type { Smplr } from './types';
3
+ declare type BundleType = 'esm' | 'umd';
4
+ declare type Env = 'prod' | 'dev' | 'local';
5
+ export declare function loadSmplrJs(bundle?: BundleType, env?: Env): Promise<Smplr>;
package/dist/index.js ADDED
@@ -0,0 +1,67 @@
1
+ const c = (r) => new Promise((o, s) => {
2
+ try {
3
+ const e = document.createElement("script");
4
+ e.type = "text/javascript", e.async = !0, e.src = r, e.addEventListener("load", () => {
5
+ o("ok");
6
+ }), e.addEventListener("error", () => {
7
+ s(`Failed to load the script from ${r}`);
8
+ }), document.body.appendChild(e);
9
+ } catch (e) {
10
+ s(e);
11
+ }
12
+ }), p = (r) => import(
13
+ r
14
+ /* @vite-ignore */
15
+ ), a = (r) => new Promise((o, s) => {
16
+ try {
17
+ const e = document.createElement("link");
18
+ e.type = "text/css", e.href = r, e.rel = "stylesheet", e.addEventListener("load", () => {
19
+ o("ok");
20
+ }), e.addEventListener("error", () => {
21
+ const l = new Error(`Failed to load the stylesheet from ${r}`);
22
+ console.error(l), s(l);
23
+ }), document.head.appendChild(e);
24
+ } catch (e) {
25
+ console.error(e), s(e);
26
+ }
27
+ }), t = {
28
+ umd: {
29
+ prod: "https://app.smplrspace.com/lib/smplr.js",
30
+ dev: "https://dev.smplrspace.com/lib/smplr.js",
31
+ local: "http://localhost:3000/lib/smplr.umd.js"
32
+ },
33
+ esm: {
34
+ prod: "https://app.smplrspace.com/lib/smplr.mjs",
35
+ dev: "https://dev.smplrspace.com/lib/smplr.mjs",
36
+ local: "http://localhost:3000/lib/smplr.mjs"
37
+ },
38
+ css: {
39
+ prod: "https://app.smplrspace.com/lib/smplr.css",
40
+ dev: "https://dev.smplrspace.com/lib/smplr.css",
41
+ local: "http://localhost:3000/lib/style.css"
42
+ }
43
+ };
44
+ async function d(r = "esm", o = "prod") {
45
+ try {
46
+ a(t.css[o]);
47
+ } catch {
48
+ console.warn("oops");
49
+ }
50
+ try {
51
+ if (r === "esm") {
52
+ const s = await p(t.esm[o]);
53
+ return console.log("loaded esm", s), s;
54
+ } else {
55
+ await c(t.umd[o]);
56
+ const s = window.smplr;
57
+ if (!s)
58
+ throw new Error("Failed to load smplr.js");
59
+ return console.log("loaded umd", s), s;
60
+ }
61
+ } catch (s) {
62
+ throw console.error(s), new Error("Failed to load smplr.js");
63
+ }
64
+ }
65
+ export {
66
+ d as loadSmplrJs
67
+ };
@@ -0,0 +1 @@
1
+ (function(r,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(r=typeof globalThis<"u"?globalThis:r||self,l(r.SmplrLoader={}))})(this,function(r){"use strict";const l=o=>new Promise((t,s)=>{try{const e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src=o,e.addEventListener("load",()=>{t("ok")}),e.addEventListener("error",()=>{s(`Failed to load the script from ${o}`)}),document.body.appendChild(e)}catch(e){s(e)}}),c=o=>import(o),n=o=>new Promise((t,s)=>{try{const e=document.createElement("link");e.type="text/css",e.href=o,e.rel="stylesheet",e.addEventListener("load",()=>{t("ok")}),e.addEventListener("error",()=>{const d=new Error(`Failed to load the stylesheet from ${o}`);console.error(d),s(d)}),document.head.appendChild(e)}catch(e){console.error(e),s(e)}}),p={umd:{prod:"https://app.smplrspace.com/lib/smplr.js",dev:"https://dev.smplrspace.com/lib/smplr.js",local:"http://localhost:3000/lib/smplr.umd.js"},esm:{prod:"https://app.smplrspace.com/lib/smplr.mjs",dev:"https://dev.smplrspace.com/lib/smplr.mjs",local:"http://localhost:3000/lib/smplr.mjs"},css:{prod:"https://app.smplrspace.com/lib/smplr.css",dev:"https://dev.smplrspace.com/lib/smplr.css",local:"http://localhost:3000/lib/style.css"}};async function m(o="esm",t="prod"){try{n(p.css[t])}catch{console.warn("oops")}try{if(o==="esm"){const s=await c(p.esm[t]);return console.log("loaded esm",s),s}else{await l(p.umd[t]);const s=window.smplr;if(!s)throw new Error("Failed to load smplr.js");return console.log("loaded umd",s),s}}catch(s){throw console.error(s),new Error("Failed to load smplr.js")}}r.loadSmplrJs=m,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,2 @@
1
+ export declare const loadUmdScript: (url: string) => Promise<unknown>;
2
+ export declare const loadEsmModule: (url: string) => Promise<any>;
@@ -0,0 +1 @@
1
+ export declare const loadStylesheet: (url: string) => Promise<unknown>;
package/package.json CHANGED
@@ -1,9 +1,22 @@
1
1
  {
2
2
  "name": "@smplrspace/smplr-loader",
3
- "version": "0.0.1-beta.1",
3
+ "version": "2.4.1-beta.10",
4
4
  "description": "NPM package to load a typed Smplr.js from CDN easily",
5
- "main": "src/index.ts",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "./dist/index.umd.cjs",
10
+ "module": "./dist/index.js",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.umd.cjs"
15
+ }
16
+ },
17
+ "types": "./dist/index.d.ts",
6
18
  "scripts": {
19
+ "build": "yarn tsc && vite build",
7
20
  "dev": "echo 'No dev'",
8
21
  "serve": "echo 'No serve'",
9
22
  "libtest": "echo 'No libtest'",
@@ -28,7 +41,9 @@
28
41
  "eslint-plugin-import": "^2.26.0",
29
42
  "eslint-plugin-prettier": "^4.2.1",
30
43
  "prettier": "^2.7.1",
31
- "typescript": "4.7.4"
44
+ "typescript": "4.7.4",
45
+ "vite": "^4.1.1",
46
+ "vite-plugin-dts": "^1.7.1"
32
47
  },
33
48
  "homepage": "https://www.smplrspace.com",
34
49
  "keywords": [
@@ -37,4 +52,4 @@
37
52
  "digital twin"
38
53
  ],
39
54
  "packageManager": "yarn@3.2.4"
40
- }
55
+ }
package/.eslintignore DELETED
@@ -1,3 +0,0 @@
1
- node_modules
2
- dist
3
- src/generated/smplr.d.ts
package/.eslintrc.js DELETED
@@ -1,42 +0,0 @@
1
- module.exports = {
2
- env: {
3
- browser: true,
4
- es2021: true,
5
- jest: true,
6
- node: true,
7
- },
8
- parser: '@typescript-eslint/parser',
9
- parserOptions: {
10
- ecmaVersion: 'latest',
11
- sourceType: 'module',
12
- },
13
- settings: {
14
- 'import/parsers': {
15
- '@typescript-eslint/parser': ['.ts', '.tsx'],
16
- },
17
- 'import/resolver': {
18
- typescript: {},
19
- },
20
- },
21
- extends: [
22
- 'eslint:recommended',
23
- 'plugin:@typescript-eslint/recommended',
24
- 'plugin:prettier/recommended',
25
- 'plugin:import/recommended',
26
- 'plugin:import/typescript',
27
- ],
28
- plugins: ['@typescript-eslint', 'simple-import-sort'],
29
- rules: {
30
- 'prettier/prettier': [
31
- 'error',
32
- {
33
- singleQuote: true,
34
- semi: false,
35
- printWidth: 120,
36
- },
37
- ],
38
- 'import/newline-after-import': 'error',
39
- 'simple-import-sort/imports': 'error',
40
- 'simple-import-sort/exports': 'error',
41
- },
42
- }
File without changes
package/src/index.ts DELETED
@@ -1,55 +0,0 @@
1
- import { loadEsmModule, loadUmdScript } from './loadScript'
2
- import { loadStylesheet } from './loadStylesheet'
3
- import { Smplr } from './types'
4
-
5
- export type { Smplr } from './types'
6
-
7
- const SMPLR = {
8
- umd: {
9
- prod: 'https://app.smplrspace.com/lib/smplr.js',
10
- dev: 'https://dev.smplrspace.com/lib/smplr.js',
11
- local: 'http://localhost:3000/lib/smplr.umd.js',
12
- },
13
- esm: {
14
- prod: 'https://app.smplrspace.com/lib/smplr.mjs',
15
- dev: 'https://dev.smplrspace.com/lib/smplr.mjs',
16
- local: 'http://localhost:3000/lib/smplr.mjs',
17
- },
18
- css: {
19
- prod: 'https://app.smplrspace.com/lib/smplr.css',
20
- dev: 'https://dev.smplrspace.com/lib/smplr.css',
21
- local: 'http://localhost:3000/lib/style.css',
22
- },
23
- }
24
-
25
- type BundleType = 'esm' | 'umd'
26
- type Env = 'prod' | 'dev' | 'local'
27
-
28
- export async function loadSmplrJs(bundle: BundleType = 'esm', env: Env = 'prod'): Promise<Smplr> {
29
- try {
30
- // we don't wait for the stylesheet, just start to load it
31
- loadStylesheet(SMPLR.css[env])
32
- } catch (e) {
33
- console.warn('oops')
34
- // ignore errors, they will be printed anyway
35
- }
36
- // load script
37
- try {
38
- if (bundle === 'esm') {
39
- const smplr = (await loadEsmModule(SMPLR.esm[env])) as Smplr
40
- console.log('loaded esm', smplr)
41
- return smplr
42
- } else {
43
- await loadUmdScript(SMPLR.umd[env])
44
- const smplr = window.smplr as Smplr
45
- if (!smplr) {
46
- throw new Error('Failed to load smplr.js')
47
- }
48
- console.log('loaded umd', smplr)
49
- return smplr
50
- }
51
- } catch (error) {
52
- console.error(error)
53
- throw new Error('Failed to load smplr.js')
54
- }
55
- }
package/src/loadScript.ts DELETED
@@ -1,21 +0,0 @@
1
- export const loadUmdScript = (url: string) => {
2
- return new Promise((resolve, reject) => {
3
- try {
4
- const scriptElement = document.createElement('script')
5
- scriptElement.type = 'text/javascript'
6
- scriptElement.async = true
7
- scriptElement.src = url
8
- scriptElement.addEventListener('load', () => {
9
- resolve('ok')
10
- })
11
- scriptElement.addEventListener('error', () => {
12
- reject(`Failed to load the script from ${url}`)
13
- })
14
- document.body.appendChild(scriptElement)
15
- } catch (error) {
16
- reject(error)
17
- }
18
- })
19
- }
20
-
21
- export const loadEsmModule = (url: string) => import(url /* @vite-ignore */)
@@ -1,22 +0,0 @@
1
- export const loadStylesheet = (url: string) => {
2
- return new Promise((resolve, reject) => {
3
- try {
4
- const linkElement = document.createElement('link')
5
- linkElement.type = 'text/css'
6
- linkElement.href = url
7
- linkElement.rel = 'stylesheet'
8
- linkElement.addEventListener('load', () => {
9
- resolve('ok')
10
- })
11
- linkElement.addEventListener('error', () => {
12
- const error = new Error(`Failed to load the stylesheet from ${url}`)
13
- console.error(error)
14
- reject(error)
15
- })
16
- document.head.appendChild(linkElement)
17
- } catch (error) {
18
- console.error(error)
19
- reject(error)
20
- }
21
- })
22
- }
package/tsconfig.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ESNext",
4
- "lib": ["DOM", "DOM.Iterable", "ESNext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "esModuleInterop": true,
8
- "allowSyntheticDefaultImports": true,
9
- "strict": true,
10
- "module": "ESNext",
11
- "moduleResolution": "Node",
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "noEmit": true
15
- },
16
- "include": ["src"]
17
- }
File without changes