@base2datadesign/viewer-kit 0.2.0 → 0.2.2

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 (42) hide show
  1. package/dist/engine/ViewerEngine.d.ts +5 -1
  2. package/dist/engine/ViewerEngine.d.ts.map +1 -1
  3. package/dist/engine/ViewerEngine.js +91 -6
  4. package/dist/engine/types.d.ts +44 -0
  5. package/dist/engine/types.d.ts.map +1 -1
  6. package/dist/exports/download.d.ts +2 -0
  7. package/dist/exports/download.d.ts.map +1 -0
  8. package/dist/exports/download.js +10 -0
  9. package/dist/exports/three-export.d.ts +4 -0
  10. package/dist/exports/three-export.d.ts.map +1 -0
  11. package/dist/exports/three-export.js +25 -0
  12. package/dist/index.d.ts +5 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -0
  15. package/dist/materials/architectural.js +1 -1
  16. package/dist/systems/debugSystem.d.ts.map +1 -1
  17. package/dist/systems/debugSystem.js +188 -35
  18. package/dist/systems/environmentSystem.d.ts +1 -0
  19. package/dist/systems/environmentSystem.d.ts.map +1 -1
  20. package/dist/systems/environmentSystem.js +26 -5
  21. package/dist/systems/lightingSystem.d.ts +2 -0
  22. package/dist/systems/lightingSystem.d.ts.map +1 -1
  23. package/dist/systems/lightingSystem.js +15 -0
  24. package/dist/systems/postfxSystem.d.ts +4 -0
  25. package/dist/systems/postfxSystem.d.ts.map +1 -1
  26. package/dist/systems/postfxSystem.js +51 -6
  27. package/dist/uploads/grasshopper.d.ts +12 -0
  28. package/dist/uploads/grasshopper.d.ts.map +1 -0
  29. package/dist/uploads/grasshopper.js +113 -0
  30. package/dist/uploads/index.d.ts +8 -0
  31. package/dist/uploads/index.d.ts.map +1 -0
  32. package/dist/uploads/index.js +29 -0
  33. package/dist/uploads/mesh.d.ts +8 -0
  34. package/dist/uploads/mesh.d.ts.map +1 -0
  35. package/dist/uploads/mesh.js +109 -0
  36. package/dist/uploads/rhino3dm.d.ts +7 -0
  37. package/dist/uploads/rhino3dm.d.ts.map +1 -0
  38. package/dist/uploads/rhino3dm.js +33 -0
  39. package/dist/uploads/types.d.ts +67 -0
  40. package/dist/uploads/types.d.ts.map +1 -0
  41. package/dist/uploads/types.js +1 -0
  42. package/package.json +4 -1
@@ -0,0 +1,113 @@
1
+ const normalizeInputs = (inputs) => {
2
+ if (!Array.isArray(inputs))
3
+ return [];
4
+ return inputs;
5
+ };
6
+ const extractSolvePayload = (payload) => {
7
+ const data = Array.isArray(payload) ? payload[0] : payload;
8
+ if (!data || typeof data !== "object")
9
+ return null;
10
+ const geometry3dm = data?.geometry3dm ?? data?.Geometry3dm ?? "";
11
+ if (!geometry3dm)
12
+ return null;
13
+ return {
14
+ kind: "grasshopper",
15
+ geometry3dm,
16
+ inputs: normalizeInputs(data?.inputs ?? data?.Inputs),
17
+ outputs: Array.isArray(data?.outputs ?? data?.Outputs) ? (data?.outputs ?? data?.Outputs) : undefined,
18
+ metadata: (data?.metadata ?? data?.Metadata),
19
+ warnings: Array.isArray(data?.warnings ?? data?.Warnings) ? (data?.warnings ?? data?.Warnings) : undefined,
20
+ errors: Array.isArray(data?.errors ?? data?.Errors) ? (data?.errors ?? data?.Errors) : undefined,
21
+ };
22
+ };
23
+ export async function solveGrasshopperFile(file, { apiRoute = "/api/gh-solve", values, preview, onStatus } = {}) {
24
+ onStatus?.("preparing payload");
25
+ const formData = new FormData();
26
+ formData.append("algo", file);
27
+ formData.append("values", JSON.stringify(values ?? []));
28
+ if (preview) {
29
+ formData.append("preview", JSON.stringify(preview));
30
+ }
31
+ onStatus?.(`uploading to ${apiRoute}`);
32
+ const res = await fetch(apiRoute, { method: "POST", body: formData });
33
+ onStatus?.("receiving response");
34
+ const text = await res.text();
35
+ let json = null;
36
+ try {
37
+ json = text ? JSON.parse(text) : null;
38
+ }
39
+ catch {
40
+ json = null;
41
+ }
42
+ if (!res.ok) {
43
+ throw new Error(json?.error || `Grasshopper solve failed (HTTP ${res.status})`);
44
+ }
45
+ const parsed = extractSolvePayload(json);
46
+ if (!parsed) {
47
+ throw new Error("Grasshopper solve returned no geometry");
48
+ }
49
+ return parsed;
50
+ }
51
+ export const mapGrasshopperInputType = (inputType) => {
52
+ const normalized = (inputType ?? "").toLowerCase();
53
+ if (normalized === "integer" || normalized === "int")
54
+ return "System.Int32";
55
+ if (normalized === "boolean" || normalized === "bool")
56
+ return "System.Boolean";
57
+ if (normalized === "string" || normalized === "text")
58
+ return "System.String";
59
+ return "System.Double";
60
+ };
61
+ const formatGrasshopperValue = (name, type, value) => {
62
+ let data = "";
63
+ if (type === "System.Boolean") {
64
+ data = value ? "true" : "false";
65
+ }
66
+ else {
67
+ data = value == null ? "" : String(value);
68
+ }
69
+ return {
70
+ ParamName: name,
71
+ InnerTree: {
72
+ "0": [
73
+ {
74
+ type,
75
+ data,
76
+ },
77
+ ],
78
+ },
79
+ };
80
+ };
81
+ export const buildGrasshopperValues = (inputs, valuesByKey, keyResolver) => {
82
+ return inputs
83
+ .map((input, index) => {
84
+ const key = keyResolver ? keyResolver(input, index) : input.guid ?? input.name ?? `${index}`;
85
+ const value = Object.prototype.hasOwnProperty.call(valuesByKey, key) ? valuesByKey[key] : input.value;
86
+ const paramName = input.name || input.nickname || key;
87
+ if (!paramName)
88
+ return null;
89
+ const type = mapGrasshopperInputType(input.type);
90
+ return formatGrasshopperValue(paramName, type, value);
91
+ })
92
+ .filter((entry) => Boolean(entry));
93
+ };
94
+ export const buildGrasshopperDefaults = (inputs, keyResolver) => {
95
+ return inputs.reduce((acc, input, index) => {
96
+ const key = keyResolver ? keyResolver(input, index) : input.guid ?? input.name ?? `${index}`;
97
+ if (!key)
98
+ return acc;
99
+ if (input.value !== undefined) {
100
+ acc[key] = input.value;
101
+ }
102
+ else if (typeof input.min === "number" && typeof input.max === "number") {
103
+ acc[key] = (input.min + input.max) / 2;
104
+ }
105
+ else if (typeof input.min === "number") {
106
+ acc[key] = input.min;
107
+ }
108
+ else {
109
+ acc[key] = "";
110
+ }
111
+ return acc;
112
+ }, {});
113
+ };
@@ -0,0 +1,8 @@
1
+ import type { UploadFileKind, UploadLimits } from "./types";
2
+ export type { UploadFileKind, UploadLimits, UploadResult, GrasshopperInput, GrasshopperSolveResult, GrasshopperValue, Rhino3dmSolveResult, Rhino3dmSolveStats, MeshLoadResult, MeshLoadStats, } from "./types";
3
+ export { solveGrasshopperFile, buildGrasshopperValues, buildGrasshopperDefaults, mapGrasshopperInputType } from "./grasshopper";
4
+ export { solveRhino3dmFile } from "./rhino3dm";
5
+ export { loadMeshFile } from "./mesh";
6
+ export declare const detectUploadKind: (file: File) => UploadFileKind;
7
+ export declare const DEFAULT_UPLOAD_LIMITS: UploadLimits;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,YAAY,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAChI,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,KAAG,cAY7C,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,YAGnC,CAAC"}
@@ -0,0 +1,29 @@
1
+ export { solveGrasshopperFile, buildGrasshopperValues, buildGrasshopperDefaults, mapGrasshopperInputType } from "./grasshopper";
2
+ export { solveRhino3dmFile } from "./rhino3dm";
3
+ export { loadMeshFile } from "./mesh";
4
+ export const detectUploadKind = (file) => {
5
+ const name = file.name.toLowerCase();
6
+ if (name.endsWith(".gh"))
7
+ return "gh";
8
+ if (name.endsWith(".ghx"))
9
+ return "ghx";
10
+ if (name.endsWith(".3dm"))
11
+ return "3dm";
12
+ if (name.endsWith(".obj"))
13
+ return "obj";
14
+ if (name.endsWith(".fbx"))
15
+ return "fbx";
16
+ if (name.endsWith(".gltf"))
17
+ return "gltf";
18
+ if (name.endsWith(".glb"))
19
+ return "glb";
20
+ if (name.endsWith(".stl"))
21
+ return "stl";
22
+ if (name.endsWith(".ply"))
23
+ return "ply";
24
+ return "unknown";
25
+ };
26
+ export const DEFAULT_UPLOAD_LIMITS = {
27
+ maxBytes: 50 * 1024 * 1024,
28
+ timeoutMs: 15_000,
29
+ };
@@ -0,0 +1,8 @@
1
+ import type { MeshLoadResult } from "./types";
2
+ export type MeshLoadOptions = {
3
+ maxBytes?: number;
4
+ timeoutMs?: number;
5
+ onStatus?: (status: string) => void;
6
+ };
7
+ export declare function loadMeshFile(file: File, { maxBytes, timeoutMs, onStatus }?: MeshLoadOptions): Promise<MeshLoadResult>;
8
+ //# sourceMappingURL=mesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh.d.ts","sourceRoot":"","sources":["../../src/uploads/mesh.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,SAAS,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AA6DF,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,EAAE,QAAQ,EAAE,SAAkB,EAAE,QAAQ,EAAE,GAAE,eAAoB,GAC/D,OAAO,CAAC,cAAc,CAAC,CAuDzB"}
@@ -0,0 +1,109 @@
1
+ import * as THREE from "three";
2
+ import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader.js";
3
+ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
4
+ import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader.js";
5
+ import { PLYLoader } from "three/examples/jsm/loaders/PLYLoader.js";
6
+ import { STLLoader } from "three/examples/jsm/loaders/STLLoader.js";
7
+ const DEFAULT_MATERIAL = new THREE.MeshStandardMaterial({
8
+ color: 0xd7dbe2,
9
+ metalness: 0.05,
10
+ roughness: 0.85,
11
+ });
12
+ const withTimeout = async (promise, timeoutMs) => {
13
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
14
+ return promise;
15
+ return Promise.race([
16
+ promise,
17
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Mesh parse timed out after ${timeoutMs}ms.`)), timeoutMs)),
18
+ ]);
19
+ };
20
+ const ensureSize = (file, maxBytes) => {
21
+ if (typeof maxBytes !== "number" || maxBytes <= 0)
22
+ return;
23
+ if (file.size > maxBytes) {
24
+ const mb = (maxBytes / (1024 * 1024)).toFixed(0);
25
+ throw new Error(`File exceeds ${mb}MB limit.`);
26
+ }
27
+ };
28
+ const wrapObject = (object) => {
29
+ const group = new THREE.Group();
30
+ group.add(object);
31
+ return group;
32
+ };
33
+ const wrapGeometry = (geometry) => {
34
+ if (!geometry.attributes?.normal) {
35
+ geometry.computeVertexNormals();
36
+ }
37
+ const mesh = new THREE.Mesh(geometry, DEFAULT_MATERIAL);
38
+ return wrapObject(mesh);
39
+ };
40
+ const countStats = (group, fileName) => {
41
+ let vertices = 0;
42
+ let triangles = 0;
43
+ group.traverse((obj) => {
44
+ const mesh = obj;
45
+ if (!mesh?.isMesh)
46
+ return;
47
+ const geom = mesh.geometry;
48
+ if (!geom)
49
+ return;
50
+ const pos = geom.getAttribute("position");
51
+ if (pos) {
52
+ vertices += pos.count;
53
+ if (geom.index) {
54
+ triangles += geom.index.count / 3;
55
+ }
56
+ else {
57
+ triangles += pos.count / 3;
58
+ }
59
+ }
60
+ });
61
+ return { vertices, triangles, fileName };
62
+ };
63
+ export async function loadMeshFile(file, { maxBytes, timeoutMs = 15_000, onStatus } = {}) {
64
+ ensureSize(file, maxBytes);
65
+ const name = file.name.toLowerCase();
66
+ const report = (status) => onStatus?.(status);
67
+ if (name.endsWith(".obj")) {
68
+ report("parsing OBJ");
69
+ const text = await file.text();
70
+ const loader = new OBJLoader();
71
+ const object = await withTimeout(Promise.resolve(loader.parse(text)), timeoutMs);
72
+ const group = wrapObject(object);
73
+ return { kind: "mesh", group, stats: countStats(group, file.name) };
74
+ }
75
+ if (name.endsWith(".fbx")) {
76
+ report("parsing FBX");
77
+ const buffer = await file.arrayBuffer();
78
+ const loader = new FBXLoader();
79
+ const object = await withTimeout(Promise.resolve(loader.parse(buffer, "")), timeoutMs);
80
+ const group = wrapObject(object);
81
+ return { kind: "mesh", group, stats: countStats(group, file.name) };
82
+ }
83
+ if (name.endsWith(".glb") || name.endsWith(".gltf")) {
84
+ report("parsing glTF");
85
+ const buffer = await file.arrayBuffer();
86
+ const loader = new GLTFLoader();
87
+ const gltf = await withTimeout(new Promise((resolve, reject) => loader.parse(buffer, "", resolve, reject)), timeoutMs);
88
+ const scene = gltf?.scene ?? gltf?.scenes?.[0] ?? new THREE.Group();
89
+ const group = wrapObject(scene);
90
+ return { kind: "mesh", group, stats: countStats(group, file.name) };
91
+ }
92
+ if (name.endsWith(".stl")) {
93
+ report("parsing STL");
94
+ const buffer = await file.arrayBuffer();
95
+ const loader = new STLLoader();
96
+ const geometry = await withTimeout(Promise.resolve(loader.parse(buffer)), timeoutMs);
97
+ const group = wrapGeometry(geometry);
98
+ return { kind: "mesh", group, stats: countStats(group, file.name) };
99
+ }
100
+ if (name.endsWith(".ply")) {
101
+ report("parsing PLY");
102
+ const buffer = await file.arrayBuffer();
103
+ const loader = new PLYLoader();
104
+ const geometry = await withTimeout(Promise.resolve(loader.parse(buffer)), timeoutMs);
105
+ const group = wrapGeometry(geometry);
106
+ return { kind: "mesh", group, stats: countStats(group, file.name) };
107
+ }
108
+ throw new Error("Unsupported mesh format.");
109
+ }
@@ -0,0 +1,7 @@
1
+ import type { Rhino3dmSolveResult } from "./types";
2
+ export type SolveRhino3dmOptions = {
3
+ apiRoute?: string;
4
+ onStatus?: (status: string) => void;
5
+ };
6
+ export declare function solveRhino3dmFile(file: File, { apiRoute, onStatus }?: SolveRhino3dmOptions): Promise<Rhino3dmSolveResult>;
7
+ //# sourceMappingURL=rhino3dm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rhino3dm.d.ts","sourceRoot":"","sources":["../../src/uploads/rhino3dm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,EAAE,QAA2B,EAAE,QAAQ,EAAE,GAAE,oBAAyB,GACnE,OAAO,CAAC,mBAAmB,CAAC,CAmC9B"}
@@ -0,0 +1,33 @@
1
+ export async function solveRhino3dmFile(file, { apiRoute = "/api/rhino-3dm", onStatus } = {}) {
2
+ const report = (status) => onStatus?.(status);
3
+ report("meshing via server");
4
+ const formData = new FormData();
5
+ formData.append("file", file);
6
+ report(`uploading to ${apiRoute}`);
7
+ const res = await fetch(apiRoute, { method: "POST", body: formData });
8
+ report("receiving response");
9
+ const text = await res.text();
10
+ let json = null;
11
+ try {
12
+ json = text ? JSON.parse(text) : null;
13
+ }
14
+ catch {
15
+ json = null;
16
+ }
17
+ if (!res.ok) {
18
+ throw new Error(json?.error || `Rhino 3dm solve failed (HTTP ${res.status})`);
19
+ }
20
+ if (!json?.geometry3dm) {
21
+ throw new Error("Rhino 3dm solve returned no geometry");
22
+ }
23
+ report("completed");
24
+ return {
25
+ kind: "rhino3dm",
26
+ geometry3dm: json.geometry3dm,
27
+ stats: {
28
+ source: "server",
29
+ fileName: file.name,
30
+ inspected: null,
31
+ },
32
+ };
33
+ }
@@ -0,0 +1,67 @@
1
+ import type * as THREE from "three";
2
+ export type UploadFileKind = "gh" | "ghx" | "3dm" | "obj" | "fbx" | "gltf" | "glb" | "stl" | "ply" | "unknown";
3
+ export type UploadLimits = {
4
+ maxBytes: number;
5
+ timeoutMs: number;
6
+ };
7
+ export type GrasshopperInput = {
8
+ name?: string;
9
+ nickname?: string;
10
+ type?: string;
11
+ value?: unknown;
12
+ min?: number;
13
+ max?: number;
14
+ options?: Array<{
15
+ value: unknown;
16
+ label?: string;
17
+ }> | null;
18
+ guid?: string;
19
+ };
20
+ export type GrasshopperSolveResult = {
21
+ kind: "grasshopper";
22
+ geometry3dm: string;
23
+ inputs?: GrasshopperInput[];
24
+ outputs?: unknown[];
25
+ metadata?: Record<string, unknown>;
26
+ warnings?: string[];
27
+ errors?: string[];
28
+ };
29
+ export type Rhino3dmSolveStats = {
30
+ source: "local" | "server";
31
+ fileName: string;
32
+ inspected?: {
33
+ ok: boolean;
34
+ meshCount: number;
35
+ brepCount: number;
36
+ extrusionCount: number;
37
+ otherCount: number;
38
+ } | null;
39
+ };
40
+ export type Rhino3dmSolveResult = {
41
+ kind: "rhino3dm";
42
+ geometry3dm: string;
43
+ stats: Rhino3dmSolveStats;
44
+ };
45
+ export type MeshLoadStats = {
46
+ vertices?: number;
47
+ triangles?: number;
48
+ fileName: string;
49
+ };
50
+ export type MeshLoadResult = {
51
+ kind: "mesh";
52
+ group: THREE.Group;
53
+ stats?: MeshLoadStats;
54
+ };
55
+ export type UploadResult = (GrasshopperSolveResult | Rhino3dmSolveResult | MeshLoadResult) & {
56
+ file: File;
57
+ };
58
+ export type GrasshopperValue = {
59
+ ParamName: string;
60
+ InnerTree: {
61
+ [path: string]: Array<{
62
+ type: string;
63
+ data: string;
64
+ }>;
65
+ };
66
+ };
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,OAAO,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,sBAAsB,GAAG,mBAAmB,GAAG,cAAc,CAAC,GAAG;IAC3F,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;KACJ,CAAC;CACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base2datadesign/viewer-kit",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "main": "./dist/index.js",
@@ -14,6 +14,9 @@
14
14
  "files": [
15
15
  "dist"
16
16
  ],
17
+ "dependencies": {
18
+ "@base2datadesign/rhino-bridge": "^0.1.4"
19
+ },
17
20
  "publishConfig": {
18
21
  "access": "public"
19
22
  },