@ifc-lite/sdk 1.7.0

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 (82) hide show
  1. package/LICENSE +373 -0
  2. package/dist/context.d.ts +76 -0
  3. package/dist/context.d.ts.map +1 -0
  4. package/dist/context.js +106 -0
  5. package/dist/context.js.map +1 -0
  6. package/dist/host.d.ts +29 -0
  7. package/dist/host.d.ts.map +1 -0
  8. package/dist/host.js +91 -0
  9. package/dist/host.js.map +1 -0
  10. package/dist/index.d.ts +45 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +55 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/namespaces/bcf.d.ts +36 -0
  15. package/dist/namespaces/bcf.d.ts.map +1 -0
  16. package/dist/namespaces/bcf.js +42 -0
  17. package/dist/namespaces/bcf.js.map +1 -0
  18. package/dist/namespaces/drawing.d.ts +30 -0
  19. package/dist/namespaces/drawing.d.ts.map +1 -0
  20. package/dist/namespaces/drawing.js +33 -0
  21. package/dist/namespaces/drawing.js.map +1 -0
  22. package/dist/namespaces/events.d.ts +14 -0
  23. package/dist/namespaces/events.d.ts.map +1 -0
  24. package/dist/namespaces/events.js +30 -0
  25. package/dist/namespaces/events.js.map +1 -0
  26. package/dist/namespaces/export.d.ts +38 -0
  27. package/dist/namespaces/export.d.ts.map +1 -0
  28. package/dist/namespaces/export.js +136 -0
  29. package/dist/namespaces/export.js.map +1 -0
  30. package/dist/namespaces/ids.d.ts +28 -0
  31. package/dist/namespaces/ids.d.ts.map +1 -0
  32. package/dist/namespaces/ids.js +40 -0
  33. package/dist/namespaces/ids.js.map +1 -0
  34. package/dist/namespaces/lens.d.ts +15 -0
  35. package/dist/namespaces/lens.d.ts.map +1 -0
  36. package/dist/namespaces/lens.js +25 -0
  37. package/dist/namespaces/lens.js.map +1 -0
  38. package/dist/namespaces/list.d.ts +19 -0
  39. package/dist/namespaces/list.d.ts.map +1 -0
  40. package/dist/namespaces/list.js +19 -0
  41. package/dist/namespaces/list.js.map +1 -0
  42. package/dist/namespaces/model.d.ts +15 -0
  43. package/dist/namespaces/model.d.ts.map +1 -0
  44. package/dist/namespaces/model.js +30 -0
  45. package/dist/namespaces/model.js.map +1 -0
  46. package/dist/namespaces/mutate.d.ts +21 -0
  47. package/dist/namespaces/mutate.d.ts.map +1 -0
  48. package/dist/namespaces/mutate.js +41 -0
  49. package/dist/namespaces/mutate.js.map +1 -0
  50. package/dist/namespaces/query.d.ts +60 -0
  51. package/dist/namespaces/query.d.ts.map +1 -0
  52. package/dist/namespaces/query.js +158 -0
  53. package/dist/namespaces/query.js.map +1 -0
  54. package/dist/namespaces/spatial.d.ts +20 -0
  55. package/dist/namespaces/spatial.d.ts.map +1 -0
  56. package/dist/namespaces/spatial.js +28 -0
  57. package/dist/namespaces/spatial.js.map +1 -0
  58. package/dist/namespaces/viewer.d.ts +46 -0
  59. package/dist/namespaces/viewer.d.ts.map +1 -0
  60. package/dist/namespaces/viewer.js +91 -0
  61. package/dist/namespaces/viewer.js.map +1 -0
  62. package/dist/transport/broadcast.d.ts +23 -0
  63. package/dist/transport/broadcast.d.ts.map +1 -0
  64. package/dist/transport/broadcast.js +59 -0
  65. package/dist/transport/broadcast.js.map +1 -0
  66. package/dist/transport/message-port.d.ts +20 -0
  67. package/dist/transport/message-port.d.ts.map +1 -0
  68. package/dist/transport/message-port.js +57 -0
  69. package/dist/transport/message-port.js.map +1 -0
  70. package/dist/transport/remote-backend.d.ts +23 -0
  71. package/dist/transport/remote-backend.d.ts.map +1 -0
  72. package/dist/transport/remote-backend.js +36 -0
  73. package/dist/transport/remote-backend.js.map +1 -0
  74. package/dist/transport/types.d.ts +10 -0
  75. package/dist/transport/types.d.ts.map +1 -0
  76. package/dist/transport/types.js +5 -0
  77. package/dist/transport/types.js.map +1 -0
  78. package/dist/types.d.ts +236 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +33 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/namespaces/ids.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,oEAAoE;AACpE,qBAAa,YAAY;IACvB,iCAAiC;IAC3B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjD,qCAAqC;IACrC,SAAS,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,KAAK,CAAC;YAAE,aAAa,EAAE,KAAK,CAAC;gBAAE,MAAM,EAAE,OAAO,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,oBAAoB;CAkBxH"}
@@ -0,0 +1,40 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ // Dynamic import helper
5
+ async function loadIDS() {
6
+ const name = '@ifc-lite/ids';
7
+ return import(/* webpackIgnore: true */ name);
8
+ }
9
+ /** bim.ids — IDS (Information Delivery Specification) validation */
10
+ export class IDSNamespace {
11
+ /** Parse an IDS XML document. */
12
+ async parse(xmlContent) {
13
+ const mod = await loadIDS();
14
+ return mod.parseIDS(xmlContent);
15
+ }
16
+ /** Summarize a validation report. */
17
+ summarize(report) {
18
+ let totalSpecs = 0, passedSpecs = 0, failedSpecs = 0;
19
+ let totalEntities = 0, passedEntities = 0, failedEntities = 0;
20
+ for (const spec of report.specificationResults) {
21
+ totalSpecs++;
22
+ let specPassed = true;
23
+ for (const entity of spec.entityResults) {
24
+ totalEntities++;
25
+ if (entity.passed)
26
+ passedEntities++;
27
+ else {
28
+ failedEntities++;
29
+ specPassed = false;
30
+ }
31
+ }
32
+ if (specPassed)
33
+ passedSpecs++;
34
+ else
35
+ failedSpecs++;
36
+ }
37
+ return { totalSpecifications: totalSpecs, passedSpecifications: passedSpecs, failedSpecifications: failedSpecs, totalEntities, passedEntities, failedEntities };
38
+ }
39
+ }
40
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/namespaces/ids.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,wBAAwB;AACxB,KAAK,UAAU,OAAO;IACpB,MAAM,IAAI,GAAG,eAAe,CAAC;IAC7B,OAAO,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAqC,CAAC;AACpF,CAAC;AAED,oEAAoE;AACpE,MAAM,OAAO,YAAY;IACvB,iCAAiC;IACjC,KAAK,CAAC,KAAK,CAAC,UAAkB;QAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;QAC5B,OAAQ,GAAG,CAAC,QAAqC,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,MAAsF;QAC9F,IAAI,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;QACrD,IAAI,aAAa,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC/C,UAAU,EAAE,CAAC;YACb,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,aAAa,EAAE,CAAC;gBAChB,IAAI,MAAM,CAAC,MAAM;oBAAE,cAAc,EAAE,CAAC;qBAC/B,CAAC;oBAAC,cAAc,EAAE,CAAC;oBAAC,UAAU,GAAG,KAAK,CAAC;gBAAC,CAAC;YAChD,CAAC;YACD,IAAI,UAAU;gBAAE,WAAW,EAAE,CAAC;;gBACzB,WAAW,EAAE,CAAC;QACrB,CAAC;QAED,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;IAClK,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { Lens } from '@ifc-lite/lens';
2
+ /**
3
+ * bim.lens — Rule-based visualization
4
+ *
5
+ * Lens evaluation runs on the host (viewer) side since it needs access to the
6
+ * full data provider. The SDK exposes lens definitions and presets; the backend
7
+ * handles evaluation and color overlay application.
8
+ */
9
+ export declare class LensNamespace {
10
+ /** Get all built-in lens presets */
11
+ presets(): readonly Lens[];
12
+ /** Create a new lens definition (does not apply it) */
13
+ create(lens: Omit<Lens, 'id'>): Lens;
14
+ }
15
+ //# sourceMappingURL=lens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../src/namespaces/lens.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,oCAAoC;IACpC,OAAO,IAAI,SAAS,IAAI,EAAE;IAI1B,uDAAuD;IACvD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI;CAMrC"}
@@ -0,0 +1,25 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { BUILTIN_LENSES } from '@ifc-lite/lens';
5
+ /**
6
+ * bim.lens — Rule-based visualization
7
+ *
8
+ * Lens evaluation runs on the host (viewer) side since it needs access to the
9
+ * full data provider. The SDK exposes lens definitions and presets; the backend
10
+ * handles evaluation and color overlay application.
11
+ */
12
+ export class LensNamespace {
13
+ /** Get all built-in lens presets */
14
+ presets() {
15
+ return BUILTIN_LENSES;
16
+ }
17
+ /** Create a new lens definition (does not apply it) */
18
+ create(lens) {
19
+ return {
20
+ ...lens,
21
+ id: `lens-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=lens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lens.js","sourceRoot":"","sources":["../../src/namespaces/lens.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACxB,oCAAoC;IACpC,OAAO;QACL,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,uDAAuD;IACvD,MAAM,CAAC,IAAsB;QAC3B,OAAO;YACL,GAAG,IAAI;YACP,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;SACnE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * bim.list — Property lists / entity tables
3
+ *
4
+ * Wraps @ifc-lite/lists for configurable entity tables with column discovery.
5
+ */
6
+ export interface ListColumn {
7
+ /** Column header */
8
+ header: string;
9
+ /** Data source: 'name', 'type', 'globalId', or 'PsetName.PropName' */
10
+ source: string;
11
+ }
12
+ /** bim.list — Entity lists and property tables */
13
+ export declare class ListNamespace {
14
+ /**
15
+ * Get available list presets.
16
+ */
17
+ getPresets(): Promise<unknown[]>;
18
+ }
19
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/namespaces/list.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,kDAAkD;AAClD,qBAAa,aAAa;IACxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAIvC"}
@@ -0,0 +1,19 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ // Dynamic import helper
5
+ async function loadLists() {
6
+ const name = '@ifc-lite/lists';
7
+ return import(/* webpackIgnore: true */ name);
8
+ }
9
+ /** bim.list — Entity lists and property tables */
10
+ export class ListNamespace {
11
+ /**
12
+ * Get available list presets.
13
+ */
14
+ async getPresets() {
15
+ const mod = await loadLists();
16
+ return mod.LIST_PRESETS;
17
+ }
18
+ }
19
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/namespaces/list.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAe/D,wBAAwB;AACxB,KAAK,UAAU,SAAS;IACtB,MAAM,IAAI,GAAG,iBAAiB,CAAC;IAC/B,OAAO,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAqC,CAAC;AACpF,CAAC;AAED,kDAAkD;AAClD,MAAM,OAAO,aAAa;IACxB;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,YAAyB,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { BimBackend, ModelInfo } from '../types.js';
2
+ /** bim.model — Model loading and management */
3
+ export declare class ModelNamespace {
4
+ private backend;
5
+ constructor(backend: BimBackend);
6
+ /** List all loaded models */
7
+ list(): ModelInfo[];
8
+ /** Get the currently active model ID */
9
+ activeId(): string | null;
10
+ /** Get the active model info, or null */
11
+ active(): ModelInfo | null;
12
+ /** Get model info by ID */
13
+ get(modelId: string): ModelInfo | null;
14
+ }
15
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/namespaces/model.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzD,+CAA+C;AAC/C,qBAAa,cAAc;IACb,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU;IAEvC,6BAA6B;IAC7B,IAAI,IAAI,SAAS,EAAE;IAInB,wCAAwC;IACxC,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,yCAAyC;IACzC,MAAM,IAAI,SAAS,GAAG,IAAI;IAM1B,2BAA2B;IAC3B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAGvC"}
@@ -0,0 +1,30 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /** bim.model — Model loading and management */
5
+ export class ModelNamespace {
6
+ backend;
7
+ constructor(backend) {
8
+ this.backend = backend;
9
+ }
10
+ /** List all loaded models */
11
+ list() {
12
+ return this.backend.model.list();
13
+ }
14
+ /** Get the currently active model ID */
15
+ activeId() {
16
+ return this.backend.model.activeId();
17
+ }
18
+ /** Get the active model info, or null */
19
+ active() {
20
+ const id = this.activeId();
21
+ if (!id)
22
+ return null;
23
+ return this.list().find(m => m.id === id) ?? null;
24
+ }
25
+ /** Get model info by ID */
26
+ get(modelId) {
27
+ return this.list().find(m => m.id === modelId) ?? null;
28
+ }
29
+ }
30
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/namespaces/model.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAI/D,+CAA+C;AAC/C,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAE3C,6BAA6B;IAC7B,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,wCAAwC;IACxC,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,yCAAyC;IACzC,MAAM;QACJ,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IAED,2BAA2B;IAC3B,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { BimBackend, EntityRef } from '../types.js';
2
+ /** bim.mutate — Property editing with undo/redo */
3
+ export declare class MutateNamespace {
4
+ private backend;
5
+ constructor(backend: BimBackend);
6
+ /** Set a property on an entity */
7
+ setProperty(ref: EntityRef, psetName: string, propName: string, value: string | number | boolean): void;
8
+ /** Delete a property from an entity */
9
+ deleteProperty(ref: EntityRef, psetName: string, propName: string): void;
10
+ /**
11
+ * Batch multiple mutations into a single undo step.
12
+ * Sends begin/end markers to the backend so the mutation adapter
13
+ * can group all enclosed mutations into one undoable operation.
14
+ */
15
+ batch(label: string, fn: () => void): void;
16
+ /** Undo last mutation for a model */
17
+ undo(modelId: string): boolean;
18
+ /** Redo last undone mutation for a model */
19
+ redo(modelId: string): boolean;
20
+ }
21
+ //# sourceMappingURL=mutate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/namespaces/mutate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzD,mDAAmD;AACnD,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU;IAEvC,kCAAkC;IAClC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAIvG,uCAAuC;IACvC,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxE;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAS1C,qCAAqC;IACrC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI9B,4CAA4C;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG/B"}
@@ -0,0 +1,41 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /** bim.mutate — Property editing with undo/redo */
5
+ export class MutateNamespace {
6
+ backend;
7
+ constructor(backend) {
8
+ this.backend = backend;
9
+ }
10
+ /** Set a property on an entity */
11
+ setProperty(ref, psetName, propName, value) {
12
+ this.backend.mutate.setProperty(ref, psetName, propName, value);
13
+ }
14
+ /** Delete a property from an entity */
15
+ deleteProperty(ref, psetName, propName) {
16
+ this.backend.mutate.deleteProperty(ref, psetName, propName);
17
+ }
18
+ /**
19
+ * Batch multiple mutations into a single undo step.
20
+ * Sends begin/end markers to the backend so the mutation adapter
21
+ * can group all enclosed mutations into one undoable operation.
22
+ */
23
+ batch(label, fn) {
24
+ this.backend.mutate.batchBegin(label);
25
+ try {
26
+ fn();
27
+ }
28
+ finally {
29
+ this.backend.mutate.batchEnd(label);
30
+ }
31
+ }
32
+ /** Undo last mutation for a model */
33
+ undo(modelId) {
34
+ return this.backend.mutate.undo(modelId);
35
+ }
36
+ /** Redo last undone mutation for a model */
37
+ redo(modelId) {
38
+ return this.backend.mutate.redo(modelId);
39
+ }
40
+ }
41
+ //# sourceMappingURL=mutate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/namespaces/mutate.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAI/D,mDAAmD;AACnD,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAE3C,kCAAkC;IAClC,WAAW,CAAC,GAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,KAAgC;QAC9F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,uCAAuC;IACvC,cAAc,CAAC,GAAc,EAAE,QAAgB,EAAE,QAAgB;QAC/D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAa,EAAE,EAAc;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,EAAE,EAAE,CAAC;QACP,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,60 @@
1
+ import type { BimBackend, EntityRef, EntityData, PropertySetData, QuantitySetData, ComparisonOp } from '../types.js';
2
+ /**
3
+ * Chainable query builder — collects filters, executes on terminal call.
4
+ *
5
+ * Usage:
6
+ * bim.query().byType('IfcWall').where('Pset_WallCommon', 'IsExternal', '=', true).toArray()
7
+ */
8
+ export declare class QueryBuilder {
9
+ private descriptor;
10
+ private backend;
11
+ constructor(backend: BimBackend);
12
+ /** Scope query to a specific model */
13
+ model(modelId: string): this;
14
+ /** Filter by IFC class type(s) */
15
+ byType(...types: string[]): this;
16
+ /** Filter by property value */
17
+ where(psetName: string, propName: string, operator?: ComparisonOp, value?: string | number | boolean): this;
18
+ /** Limit result count */
19
+ limit(n: number): this;
20
+ /** Skip first n results */
21
+ offset(n: number): this;
22
+ /** Execute and return EntityData array */
23
+ toArray(): EntityData[];
24
+ /** Execute and return first match or null */
25
+ first(): EntityData | null;
26
+ /** Execute and return count */
27
+ count(): number;
28
+ /** Execute and return just EntityRef[] (no property data) */
29
+ refs(): EntityRef[];
30
+ }
31
+ /** bim.query — Chainable entity queries + entity data access */
32
+ export declare class QueryNamespace {
33
+ private backend;
34
+ constructor(backend: BimBackend);
35
+ /** Start a new query chain */
36
+ create(): QueryBuilder;
37
+ /** Get a single entity by ref */
38
+ entity(ref: EntityRef): EntityData | null;
39
+ /** Get all property sets for an entity */
40
+ properties(ref: EntityRef): PropertySetData[];
41
+ /** Get a single property value */
42
+ property(ref: EntityRef, psetName: string, propName: string): string | number | boolean | null;
43
+ /** Get all quantity sets for an entity */
44
+ quantities(ref: EntityRef): QuantitySetData[];
45
+ /** Get a single quantity value */
46
+ quantity(ref: EntityRef, qsetName: string, quantityName: string): number | null;
47
+ /** Get related entities by IFC relationship type */
48
+ related(ref: EntityRef, relType: string, direction: 'forward' | 'inverse'): EntityData[];
49
+ /** IfcRelContainedInSpatialStructure (inverse) — what spatial element contains this entity */
50
+ containedIn(ref: EntityRef): EntityData | null;
51
+ /** IfcRelContainedInSpatialStructure (forward) — elements contained in this spatial element */
52
+ contains(ref: EntityRef): EntityData[];
53
+ /** IfcRelAggregates (inverse) — the whole that this entity is a part of */
54
+ decomposedBy(ref: EntityRef): EntityData | null;
55
+ /** IfcRelAggregates (forward) — parts that this entity aggregates */
56
+ decomposes(ref: EntityRef): EntityData[];
57
+ /** Navigate up to the building storey */
58
+ storey(ref: EntityRef): EntityData | null;
59
+ }
60
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/namespaces/query.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,eAAe,EAGf,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,OAAO,CAAa;gBAEhB,OAAO,EAAE,UAAU;IAI/B,sCAAsC;IACtC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5B,kCAAkC;IAClC,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,+BAA+B;IAC/B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAW3G,yBAAyB;IACzB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,2BAA2B;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOvB,0CAA0C;IAC1C,OAAO,IAAI,UAAU,EAAE;IAIvB,6CAA6C;IAC7C,KAAK,IAAI,UAAU,GAAG,IAAI;IAQ1B,+BAA+B;IAC/B,KAAK,IAAI,MAAM;IAIf,6DAA6D;IAC7D,IAAI,IAAI,SAAS,EAAE;CAGpB;AAED,gEAAgE;AAChE,qBAAa,cAAc;IACb,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU;IAEvC,8BAA8B;IAC9B,MAAM,IAAI,YAAY;IAItB,iCAAiC;IACjC,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAIzC,0CAA0C;IAC1C,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,EAAE;IAI7C,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAQ9F,0CAA0C;IAC1C,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,EAAE;IAI7C,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ/E,oDAAoD;IACpD,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,EAAE;IAUxF,8FAA8F;IAC9F,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAM9C,+FAA+F;IAC/F,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,EAAE;IAItC,2EAA2E;IAC3E,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAM/C,qEAAqE;IACrE,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,EAAE;IAIxC,yCAAyC;IACzC,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;CAY1C"}
@@ -0,0 +1,158 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Chainable query builder — collects filters, executes on terminal call.
6
+ *
7
+ * Usage:
8
+ * bim.query().byType('IfcWall').where('Pset_WallCommon', 'IsExternal', '=', true).toArray()
9
+ */
10
+ export class QueryBuilder {
11
+ descriptor = {};
12
+ backend;
13
+ constructor(backend) {
14
+ this.backend = backend;
15
+ }
16
+ /** Scope query to a specific model */
17
+ model(modelId) {
18
+ this.descriptor.modelId = modelId;
19
+ return this;
20
+ }
21
+ /** Filter by IFC class type(s) */
22
+ byType(...types) {
23
+ this.descriptor.types = [...(this.descriptor.types ?? []), ...types];
24
+ return this;
25
+ }
26
+ /** Filter by property value */
27
+ where(psetName, propName, operator, value) {
28
+ const filter = {
29
+ psetName,
30
+ propName,
31
+ operator: operator ?? 'exists',
32
+ value,
33
+ };
34
+ this.descriptor.filters = [...(this.descriptor.filters ?? []), filter];
35
+ return this;
36
+ }
37
+ /** Limit result count */
38
+ limit(n) {
39
+ this.descriptor.limit = n;
40
+ return this;
41
+ }
42
+ /** Skip first n results */
43
+ offset(n) {
44
+ this.descriptor.offset = n;
45
+ return this;
46
+ }
47
+ // ── Terminal operations ────────────────────────────────────
48
+ /** Execute and return EntityData array */
49
+ toArray() {
50
+ return this.backend.query.entities(this.descriptor);
51
+ }
52
+ /** Execute and return first match or null */
53
+ first() {
54
+ const saved = this.descriptor.limit;
55
+ this.descriptor.limit = 1;
56
+ const result = this.toArray();
57
+ this.descriptor.limit = saved;
58
+ return result[0] ?? null;
59
+ }
60
+ /** Execute and return count */
61
+ count() {
62
+ return this.backend.query.entities(this.descriptor).length;
63
+ }
64
+ /** Execute and return just EntityRef[] (no property data) */
65
+ refs() {
66
+ return this.backend.query.entities(this.descriptor).map(e => e.ref);
67
+ }
68
+ }
69
+ /** bim.query — Chainable entity queries + entity data access */
70
+ export class QueryNamespace {
71
+ backend;
72
+ constructor(backend) {
73
+ this.backend = backend;
74
+ }
75
+ /** Start a new query chain */
76
+ create() {
77
+ return new QueryBuilder(this.backend);
78
+ }
79
+ /** Get a single entity by ref */
80
+ entity(ref) {
81
+ return this.backend.query.entityData(ref);
82
+ }
83
+ /** Get all property sets for an entity */
84
+ properties(ref) {
85
+ return this.backend.query.properties(ref);
86
+ }
87
+ /** Get a single property value */
88
+ property(ref, psetName, propName) {
89
+ const psets = this.properties(ref);
90
+ const pset = psets.find(p => p.name === psetName);
91
+ if (!pset)
92
+ return null;
93
+ const prop = pset.properties.find(p => p.name === propName);
94
+ return prop?.value ?? null;
95
+ }
96
+ /** Get all quantity sets for an entity */
97
+ quantities(ref) {
98
+ return this.backend.query.quantities(ref);
99
+ }
100
+ /** Get a single quantity value */
101
+ quantity(ref, qsetName, quantityName) {
102
+ const qsets = this.quantities(ref);
103
+ const qset = qsets.find(q => q.name === qsetName);
104
+ if (!qset)
105
+ return null;
106
+ const qty = qset.quantities.find(q => q.name === quantityName);
107
+ return qty?.value ?? null;
108
+ }
109
+ /** Get related entities by IFC relationship type */
110
+ related(ref, relType, direction) {
111
+ const refs = this.backend.query.related(ref, relType, direction);
112
+ const result = [];
113
+ for (const r of refs) {
114
+ const data = this.backend.query.entityData(r);
115
+ if (data)
116
+ result.push(data);
117
+ }
118
+ return result;
119
+ }
120
+ /** IfcRelContainedInSpatialStructure (inverse) — what spatial element contains this entity */
121
+ containedIn(ref) {
122
+ const refs = this.backend.query.related(ref, 'IfcRelContainedInSpatialStructure', 'inverse');
123
+ if (refs.length === 0)
124
+ return null;
125
+ return this.backend.query.entityData(refs[0]);
126
+ }
127
+ /** IfcRelContainedInSpatialStructure (forward) — elements contained in this spatial element */
128
+ contains(ref) {
129
+ return this.related(ref, 'IfcRelContainedInSpatialStructure', 'forward');
130
+ }
131
+ /** IfcRelAggregates (inverse) — the whole that this entity is a part of */
132
+ decomposedBy(ref) {
133
+ const refs = this.backend.query.related(ref, 'IfcRelAggregates', 'inverse');
134
+ if (refs.length === 0)
135
+ return null;
136
+ return this.backend.query.entityData(refs[0]);
137
+ }
138
+ /** IfcRelAggregates (forward) — parts that this entity aggregates */
139
+ decomposes(ref) {
140
+ return this.related(ref, 'IfcRelAggregates', 'forward');
141
+ }
142
+ /** Navigate up to the building storey */
143
+ storey(ref) {
144
+ let current = this.entity(ref);
145
+ const visited = new Set();
146
+ while (current) {
147
+ const key = `${current.ref.modelId}:${current.ref.expressId}`;
148
+ if (visited.has(key))
149
+ break;
150
+ visited.add(key);
151
+ if (current.type === 'IfcBuildingStorey')
152
+ return current;
153
+ current = this.containedIn(current.ref) ?? this.decomposedBy(current.ref);
154
+ }
155
+ return null;
156
+ }
157
+ }
158
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/namespaces/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * bim.spatial — Spatial queries (BVH-accelerated)
3
+ *
4
+ * Provides AABB queries, raycasting, and frustum culling against the
5
+ * spatial index built from model geometry.
6
+ *
7
+ * All methods return EntityRef[] — local express IDs scoped to their model.
8
+ */
9
+ import type { BimBackend, EntityRef, AABB, SpatialFrustum } from '../types.js';
10
+ /** bim.spatial — Spatial queries on model geometry */
11
+ export declare class SpatialNamespace {
12
+ private backend;
13
+ constructor(backend: BimBackend);
14
+ queryBounds(modelId: string, bounds: AABB): EntityRef[];
15
+ raycast(modelId: string, origin: [number, number, number], direction: [number, number, number]): EntityRef[];
16
+ queryFrustum(modelId: string, frustum: SpatialFrustum): EntityRef[];
17
+ /** Convenience: find entities near a point within a radius. */
18
+ queryRadius(modelId: string, center: [number, number, number], radius: number): EntityRef[];
19
+ }
20
+ //# sourceMappingURL=spatial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/namespaces/spatial.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/E,sDAAsD;AACtD,qBAAa,gBAAgB;IACf,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU;IAEvC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE;IAIvD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE;IAI5G,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE;IAInE,+DAA+D;IAC/D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;CAO5F"}
@@ -0,0 +1,28 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /** bim.spatial — Spatial queries on model geometry */
5
+ export class SpatialNamespace {
6
+ backend;
7
+ constructor(backend) {
8
+ this.backend = backend;
9
+ }
10
+ queryBounds(modelId, bounds) {
11
+ return this.backend.spatial.queryBounds(modelId, bounds);
12
+ }
13
+ raycast(modelId, origin, direction) {
14
+ return this.backend.spatial.raycast(modelId, origin, direction);
15
+ }
16
+ queryFrustum(modelId, frustum) {
17
+ return this.backend.spatial.queryFrustum(modelId, frustum);
18
+ }
19
+ /** Convenience: find entities near a point within a radius. */
20
+ queryRadius(modelId, center, radius) {
21
+ const bounds = {
22
+ min: [center[0] - radius, center[1] - radius, center[2] - radius],
23
+ max: [center[0] + radius, center[1] + radius, center[2] + radius],
24
+ };
25
+ return this.backend.spatial.queryBounds(modelId, bounds);
26
+ }
27
+ }
28
+ //# sourceMappingURL=spatial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatial.js","sourceRoot":"","sources":["../../src/namespaces/spatial.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,sDAAsD;AACtD,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAE3C,WAAW,CAAC,OAAe,EAAE,MAAY;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,MAAgC,EAAE,SAAmC;QAC5F,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,OAAuB;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,+DAA+D;IAC/D,WAAW,CAAC,OAAe,EAAE,MAAgC,EAAE,MAAc;QAC3E,MAAM,MAAM,GAAS;YACnB,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;YACjE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SAClE,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ import type { BimBackend, EntityRef, SectionPlane, CameraState, ProjectionMode, RGBAColor } from '../types.js';
2
+ /** bim.viewer — Renderer control, camera, section planes */
3
+ export declare class ViewerNamespace {
4
+ private backend;
5
+ constructor(backend: BimBackend);
6
+ /** Colorize entities with a hex color string */
7
+ colorize(refs: EntityRef[], color: string): void;
8
+ /** Colorize with RGBA tuple [0-1] */
9
+ colorizeRgba(refs: EntityRef[], color: RGBAColor): void;
10
+ /** Batch colorize: apply multiple entity-color pairs in a single call */
11
+ colorizeAll(batches: Array<{
12
+ refs: EntityRef[];
13
+ color: string;
14
+ }>): void;
15
+ /** Reset color overrides */
16
+ resetColors(refs?: EntityRef[]): void;
17
+ /** Hide entities */
18
+ hide(refs: EntityRef[]): void;
19
+ /** Show previously hidden entities */
20
+ show(refs: EntityRef[]): void;
21
+ /** Isolate entities (hide everything else) */
22
+ isolate(refs: EntityRef[]): void;
23
+ /** Reset all visibility to default */
24
+ resetVisibility(): void;
25
+ /** Set the selection to given entities */
26
+ select(refs: EntityRef[]): void;
27
+ /** Clear selection */
28
+ deselect(): void;
29
+ /** Get current selection */
30
+ getSelection(): EntityRef[];
31
+ /** Fly camera to frame the given entities */
32
+ flyTo(refs: EntityRef[]): void;
33
+ /** Set camera state */
34
+ setCamera(state: Partial<CameraState>): void;
35
+ /** Get current camera state */
36
+ getCamera(): CameraState;
37
+ /** Switch projection mode */
38
+ setProjection(mode: ProjectionMode): void;
39
+ /** Set a section plane */
40
+ setSection(section: SectionPlane): void;
41
+ /** Get current section plane */
42
+ getSection(): SectionPlane | null;
43
+ /** Remove section plane */
44
+ clearSection(): void;
45
+ }
46
+ //# sourceMappingURL=viewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../src/namespaces/viewer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG/G,4DAA4D;AAC5D,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,UAAU;IAIvC,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhD,qCAAqC;IACrC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAIvD,yEAAyE;IACzE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAKvE,4BAA4B;IAC5B,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI;IAMrC,oBAAoB;IACpB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAI7B,sCAAsC;IACtC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAI7B,8CAA8C;IAC9C,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAIhC,sCAAsC;IACtC,eAAe,IAAI,IAAI;IAMvB,0CAA0C;IAC1C,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAI/B,sBAAsB;IACtB,QAAQ,IAAI,IAAI;IAIhB,4BAA4B;IAC5B,YAAY,IAAI,SAAS,EAAE;IAM3B,6CAA6C;IAC7C,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI;IAI9B,uBAAuB;IACvB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAI5C,+BAA+B;IAC/B,SAAS,IAAI,WAAW;IAIxB,6BAA6B;IAC7B,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAMzC,0BAA0B;IAC1B,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIvC,gCAAgC;IAChC,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC,2BAA2B;IAC3B,YAAY,IAAI,IAAI;CAGrB"}