@pacem/pacem-3d 1.0.4 → 1.0.5-bartels

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem-3d v1.0.4 (https://js.pacem.it)
2
+ * @pacem/pacem-3d v1.0.5-bartels (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -9,56 +9,31 @@ var __export = (target, all) => {
9
9
  __defProp(target, name, { get: all[name], enumerable: true });
10
10
  };
11
11
 
12
- // packages/3d/dist/esm/index-components.js
13
- var index_components_exports = {};
14
- __export(index_components_exports, {
15
- Drawing3D: () => index_components_drawing3d_exports
16
- });
17
-
18
- // packages/3d/dist/esm/index-components-drawing3d.js
19
- var index_components_drawing3d_exports = {};
20
- __export(index_components_drawing3d_exports, {
21
- AdapterUtils: () => AdapterUtils,
22
- BasicMaterialElement: () => BasicMaterialElement,
12
+ // packages/3d/dist/esm/index-drawing3d.js
13
+ var index_drawing3d_exports = {};
14
+ __export(index_drawing3d_exports, {
15
+ BooleanOrNumberConverter: () => BooleanOrNumberConverter,
23
16
  DragEvent: () => DragEvent,
24
17
  KnownShader: () => KnownShader,
25
- LambertMaterialElement: () => LambertMaterialElement,
26
- LineMaterialElement: () => LineMaterialElement,
18
+ LineGeometry: () => LineGeometry,
27
19
  MaterialElement: () => MaterialElement,
28
- OrbitCameraBehavior: () => OrbitCameraBehavior,
20
+ MeshGeometry: () => MeshGeometry,
21
+ NodeGeometry: () => NodeGeometry,
22
+ NotifyChange: () => NotifyChange,
29
23
  Pacem3DAdapterElement: () => Pacem3DAdapterElement,
30
24
  Pacem3DCameraElement: () => Pacem3DCameraElement,
31
- Pacem3DDetector: () => Pacem3DDetector,
32
- Pacem3DElement: () => Pacem3DElement,
33
25
  Pacem3DGroupElement: () => Pacem3DGroupElement,
34
26
  Pacem3DLightElement: () => Pacem3DLightElement,
35
27
  Pacem3DMeshElement: () => Pacem3DMeshElement,
36
28
  Pacem3DObjectElement: () => Pacem3DObjectElement,
37
29
  Pacem3DOrthographicCameraElement: () => Pacem3DOrthographicCameraElement,
38
30
  Pacem3DPerspectiveCameraElement: () => Pacem3DPerspectiveCameraElement,
39
- Pacem3DPrimitiveElement: () => Pacem3DPrimitiveElement,
40
- Pacem3DThreeAdapterElement: () => Pacem3DThreeAdapterElement,
41
- Pacem3DWebgpuAdapterElement: () => Pacem3DWebgpuAdapterElement,
42
- Pacem3DWgslScriptElement: () => Pacem3DWgslScriptElement,
43
- PacemBoxElement: () => PacemBoxElement,
44
- PacemConeElement: () => PacemConeElement,
45
- PacemCylinderElement: () => PacemCylinderElement,
46
- PacemDodecahedronElement: () => PacemDodecahedronElement,
47
- PacemHexahedronElement: () => PacemHexahedronElement,
48
- PacemIcosahedronElement: () => PacemIcosahedronElement,
49
- PacemLineElement: () => PacemLineElement,
50
- PacemOctahedronElement: () => PacemOctahedronElement,
51
- PacemOrbitCameraBehaviorElement: () => PacemOrbitCameraBehaviorElement,
52
- PacemPlaneElement: () => PacemPlaneElement,
53
- PacemSphereElement: () => PacemSphereElement,
54
- PacemTetrahedronElement: () => PacemTetrahedronElement,
55
- PacemTorusElement: () => PacemTorusElement,
56
- PhongMaterialElement: () => PhongMaterialElement,
57
- PolyhedronElement: () => PolyhedronElement,
31
+ Point3DConverter: () => Point3DConverter,
32
+ Point3DOrNumberConverter: () => Point3DOrNumberConverter,
33
+ QuaternionConverter: () => QuaternionConverter,
58
34
  RenderableElement: () => RenderableElement,
59
35
  RenderableEvent: () => RenderableEvent,
60
36
  StalePropertyFlag: () => StalePropertyFlag,
61
- StandardMaterialElement: () => StandardMaterialElement,
62
37
  UI3DEvent: () => UI3DEvent,
63
38
  Ui3DElement: () => Ui3DElement,
64
39
  computePlaneNormal: () => computePlaneNormal,
@@ -865,85 +840,155 @@ Pacem3DOrthographicCameraElement = __decorate2([
865
840
  var Pacem3DAdapterElement = class extends PacemEventTarget {
866
841
  };
867
842
 
868
- // packages/3d/dist/esm/detector.js
869
- var Pacem3DDetector = class {
870
- /** Probes the browser for WebGL support by attempting to create a rendering context, populating {@link info} and {@link supported}. */
871
- constructor() {
872
- this._detected = {
873
- supported: false,
874
- info: {}
875
- };
876
- let cvs = document.createElement("canvas");
877
- let contextNames = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
878
- let ctx;
879
- let getParam = function(str) {
880
- if (!str)
881
- return void 0;
882
- return ctx.getParameter(str);
883
- };
884
- let addLine = (section, name, value) => {
885
- let detected = this._detected;
886
- var info = detected.info[section] = detected.info[section] || {};
887
- name = name.replace(/[^\w]+/g, "");
888
- name = name.substring(0, 1).toLowerCase() + name.substring(1);
889
- info[name] = value;
890
- };
891
- if (navigator.userAgent.indexOf("MSIE") >= 0) {
892
- try {
893
- ctx = window["WebGLHelper"].CreateGLContext(cvs, "canvas");
894
- } catch (e) {
843
+ // packages/3d/dist/esm/geometry.js
844
+ import { Utils as Utils5 } from "@pacem/pacem-core";
845
+
846
+ // packages/3d/dist/esm/decorators.js
847
+ import { Utils as Utils4 } from "@pacem/pacem-core";
848
+ function NotifyChange(callback) {
849
+ return (target, prop, descriptor) => {
850
+ const backingField = `_${prop}_${Utils4.uniqueCode()}_backingField`;
851
+ function getter() {
852
+ return this[backingField];
853
+ }
854
+ function setter(val) {
855
+ if (val !== this[backingField]) {
856
+ const old = this[backingField];
857
+ this[backingField] = val;
858
+ callback.call(this, prop, old, val);
895
859
  }
896
- } else {
897
- for (var i = 0; i < contextNames.length; i++) {
898
- try {
899
- ctx = cvs.getContext(contextNames[i]);
900
- if (ctx) {
901
- addLine("main", "Context Name", contextNames[i]);
902
- break;
903
- }
904
- } catch (e) {
905
- }
860
+ }
861
+ Object.defineProperty(target, prop, {
862
+ get: function() {
863
+ return getter.call(this);
864
+ },
865
+ set: function(val) {
866
+ setter.call(this, val);
867
+ },
868
+ enumerable: true,
869
+ configurable: false
870
+ });
871
+ };
872
+ }
873
+
874
+ // packages/3d/dist/esm/geometry.js
875
+ var __decorate3 = function(decorators, target, key, desc) {
876
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
877
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
878
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
879
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
880
+ };
881
+ var NodeGeometry = class {
882
+ constructor(positions = []) {
883
+ this.positions = positions;
884
+ }
885
+ /** Computes the centroid (average) of the given positions. */
886
+ static barycenter(positions) {
887
+ var bary = { x: 0, y: 0, z: 0 };
888
+ if (!Utils5.isNullOrEmpty(positions)) {
889
+ var count = positions.length;
890
+ for (var i = 0; i < positions.length; i++) {
891
+ var pt = positions[i];
892
+ bary.x += pt.x;
893
+ bary.y += pt.y;
894
+ bary.z += pt.z;
906
895
  }
896
+ var countDbl = 1 * count;
897
+ bary.x /= countDbl;
898
+ bary.y /= countDbl;
899
+ bary.z /= countDbl;
907
900
  }
908
- this._detected.supported = !!ctx;
909
- addLine("main", "Platform", navigator.platform);
910
- addLine("main", "Agent", navigator.userAgent);
911
- if (ctx) {
912
- addLine("main", "Vendor", getParam(ctx.VENDOR));
913
- addLine("main", "Version", getParam(ctx.VERSION));
914
- addLine("main", "Renderer", getParam(ctx.RENDERER));
915
- addLine("main", "Shading Language Version", getParam(ctx.SHADING_LANGUAGE_VERSION));
916
- addLine("bits", "Rgba Bits", getParam(ctx.RED_BITS) + ", " + getParam(ctx.GREEN_BITS) + ", " + getParam(ctx.BLUE_BITS) + ", " + getParam(ctx.ALPHA_BITS));
917
- addLine("bits", "Depth Bits", getParam(ctx.DEPTH_BITS));
918
- addLine("shader", "Max Vertex Attribs", getParam(ctx.MAX_VERTEX_ATTRIBS));
919
- addLine("shader", "Max Vertex Texture Image Units", getParam(ctx.MAX_VERTEX_TEXTURE_IMAGE_UNITS));
920
- addLine("shader", "Max Varying Vectors", getParam(ctx.MAX_VARYING_VECTORS));
921
- addLine("shader", "Max Uniform Vectors", getParam(ctx.MAX_VERTEX_UNIFORM_VECTORS));
922
- addLine("tex", "Max Combined Texture Image Units", getParam(ctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS));
923
- addLine("tex", "Max Texture Size", getParam(ctx.MAX_TEXTURE_SIZE));
924
- addLine("tex", "Max Cube Map Texture Size", getParam(ctx.MAX_CUBE_MAP_TEXTURE_SIZE));
925
- addLine("tex", "Num. Compressed Texture Formats", getParam(ctx.COMPRESSED_TEXTURE_FORMATS));
926
- addLine("misc", "Max Render Buffer Size", getParam(ctx.MAX_RENDERBUFFER_SIZE));
927
- addLine("misc", "Max Viewport Dimensions", getParam(ctx.MAX_VIEWPORT_DIMS));
928
- addLine("misc", "Aliased Line Width Range", getParam(ctx.ALIASED_LINE_WIDTH_RANGE));
929
- addLine("misc", "Aliased Point Size Range", getParam(ctx.ALIASED_POINT_SIZE_RANGE));
930
- addLine("misc", "Supported Extensions", ctx.getSupportedExtensions() || []);
901
+ return bary;
902
+ }
903
+ /** Computes the axis-aligned {@link Box3D} enclosing the given positions. */
904
+ static boundingBox(positions) {
905
+ const output = {
906
+ minX: Infinity,
907
+ minY: Infinity,
908
+ minZ: Infinity,
909
+ maxX: -Infinity,
910
+ maxY: -Infinity,
911
+ maxZ: -Infinity
912
+ };
913
+ if (!Utils5.isNullOrEmpty(positions)) {
914
+ for (var i = 0; i < positions.length; i++) {
915
+ var pt = positions[i];
916
+ output.minX = Math.min(output.minX, pt.x);
917
+ output.minY = Math.min(output.minY, pt.y);
918
+ output.minZ = Math.min(output.minZ, pt.z);
919
+ output.maxX = Math.max(output.maxX, pt.x);
920
+ output.maxY = Math.max(output.maxY, pt.y);
921
+ output.maxZ = Math.max(output.maxZ, pt.z);
922
+ }
931
923
  }
924
+ return output;
932
925
  }
933
- /** @readonly Gets the detected WebGL capabilities/limits, grouped by section (`main`, `bits`, `shader`, `tex`, `misc`). */
934
- get info() {
935
- return this._detected.info;
926
+ /** Marks the geometry as stale, flagging it with {@link StalePropertyFlag.Geometry} for the next render. */
927
+ setAsDirty() {
928
+ setSelfAsDirty.call(this);
936
929
  }
937
- /** @readonly Gets whether a WebGL rendering context could be created on this browser/device. */
938
- get supported() {
939
- return this._detected.supported;
930
+ };
931
+ function setSelfAsDirty() {
932
+ const me = this;
933
+ me.flags = [
934
+ /* no further specifications, other than 'geometry' */
935
+ StalePropertyFlag.Geometry
936
+ ];
937
+ }
938
+ var LineGeometry = class extends NodeGeometry {
939
+ };
940
+ __decorate3([
941
+ NotifyChange(setSelfAsDirty)
942
+ ], LineGeometry.prototype, "positions", void 0);
943
+ var MeshGeometry = class extends NodeGeometry {
944
+ #boundingBox;
945
+ #boundingSphere;
946
+ #barycenter;
947
+ /** Gets or sets the centroid of {@link positions}; computed on first access if not explicitly set. */
948
+ get barycenter() {
949
+ return this.#barycenter ??= NodeGeometry.barycenter(this.positions);
950
+ }
951
+ set barycenter(point) {
952
+ this.#barycenter = point;
953
+ }
954
+ /** Gets or sets the axis-aligned bounding box; computed from {@link positions} on first access if not explicitly set. */
955
+ get boundingBox() {
956
+ return this.#boundingBox ??= NodeGeometry.boundingBox(this.positions);
957
+ }
958
+ set boundingBox(bbox) {
959
+ this.#boundingBox = bbox;
960
+ }
961
+ /** Gets or sets the bounding sphere. */
962
+ get boundingSphere() {
963
+ return this.#boundingSphere;
964
+ }
965
+ set boundingSphere(sphere) {
966
+ this.#boundingSphere = sphere;
967
+ }
968
+ constructor(positions, triangleIndices, textureCoordinates = [], normals = []) {
969
+ super(positions);
970
+ this.triangleIndices = triangleIndices;
971
+ this.textureCoordinates = textureCoordinates;
972
+ this.normals = normals;
940
973
  }
941
974
  };
975
+ __decorate3([
976
+ NotifyChange(setSelfAsDirty)
977
+ ], MeshGeometry.prototype, "positions", void 0);
978
+ __decorate3([
979
+ NotifyChange(setSelfAsDirty)
980
+ ], MeshGeometry.prototype, "triangleIndices", void 0);
981
+ __decorate3([
982
+ NotifyChange(setSelfAsDirty)
983
+ ], MeshGeometry.prototype, "textureCoordinates", void 0);
984
+ __decorate3([
985
+ NotifyChange(setSelfAsDirty)
986
+ ], MeshGeometry.prototype, "normals", void 0);
942
987
 
943
988
  // packages/3d/dist/esm/materials/material.js
944
- import { PacemEventTarget as PacemEventTarget2, Utils as Utils4, Watch as Watch3, PropertyConverters as PropertyConverters3, PCSS as PCSS2 } from "@pacem/pacem-core";
989
+ import { PacemEventTarget as PacemEventTarget2, Utils as Utils6, Watch as Watch3, PropertyConverters as PropertyConverters3, PCSS as PCSS2 } from "@pacem/pacem-core";
945
990
  import { Imaging } from "@pacem/pacem-foundation";
946
- var __decorate3 = function(decorators, target, key, desc) {
991
+ var __decorate4 = function(decorators, target, key, desc) {
947
992
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
948
993
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
949
994
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -994,14 +1039,14 @@ var MaterialElement = class extends PacemEventTarget2 {
994
1039
  return this.#shader;
995
1040
  }
996
1041
  async _loadMap(url, old = this.material?.texture) {
997
- if (!Utils4.isNull(old)) {
1042
+ if (!Utils6.isNull(old)) {
998
1043
  old.close();
999
1044
  }
1000
- if (Utils4.isNullOrEmpty(url)) {
1045
+ if (Utils6.isNullOrEmpty(url)) {
1001
1046
  return null;
1002
1047
  }
1003
1048
  const blob = await Imaging.loadImage(url);
1004
- if (Utils4.isNull(blob)) {
1049
+ if (Utils6.isNull(blob)) {
1005
1050
  return null;
1006
1051
  }
1007
1052
  return await createImageBitmap(blob);
@@ -1027,7 +1072,7 @@ var MaterialElement = class extends PacemEventTarget2 {
1027
1072
  /** Recomputes {@link material} via {@link createMaterial}, flagging it as {@link StalePropertyFlag.Material}. */
1028
1073
  updateMaterial() {
1029
1074
  this.createMaterial().then((m) => {
1030
- this.material = Utils4.extend(m, { flags: [StalePropertyFlag.Material] });
1075
+ this.material = Utils6.extend(m, { flags: [StalePropertyFlag.Material] });
1031
1076
  });
1032
1077
  }
1033
1078
  /** Builds the base {@link Material} out of the shared watched attributes (`opacity`, `wireframe`, `color`, `hide`, `map`); overridden by subclasses to add their shader-specific properties. */
@@ -1035,7 +1080,7 @@ var MaterialElement = class extends PacemEventTarget2 {
1035
1080
  return {
1036
1081
  opacity: this.opacity ?? 1,
1037
1082
  wireframe: this.wireframe ?? false,
1038
- color: this.color || Utils4.Css.getVariableValue(`--${PCSS2}-color-primary`),
1083
+ color: this.color || Utils6.Css.getVariableValue(`--${PCSS2}-color-primary`),
1039
1084
  visible: !(this.hide ?? false),
1040
1085
  map: this.map,
1041
1086
  texture: await this._loadMap(this.map),
@@ -1044,29 +1089,273 @@ var MaterialElement = class extends PacemEventTarget2 {
1044
1089
  };
1045
1090
  }
1046
1091
  };
1047
- __decorate3([
1092
+ __decorate4([
1048
1093
  Watch3()
1049
1094
  ], MaterialElement.prototype, "material", void 0);
1050
- __decorate3([
1095
+ __decorate4([
1051
1096
  Watch3({ emit: false, converter: PropertyConverters3.Number })
1052
1097
  ], MaterialElement.prototype, "opacity", void 0);
1053
- __decorate3([
1098
+ __decorate4([
1054
1099
  Watch3({ emit: false, converter: PropertyConverters3.Boolean })
1055
1100
  ], MaterialElement.prototype, "wireframe", void 0);
1056
- __decorate3([
1101
+ __decorate4([
1057
1102
  Watch3({ emit: false, converter: PropertyConverters3.String })
1058
1103
  ], MaterialElement.prototype, "color", void 0);
1059
- __decorate3([
1104
+ __decorate4([
1060
1105
  Watch3({ emit: false, converter: PropertyConverters3.Boolean })
1061
1106
  ], MaterialElement.prototype, "hide", void 0);
1062
- __decorate3([
1107
+ __decorate4([
1063
1108
  Watch3({ emit: false, converter: PropertyConverters3.String })
1064
1109
  ], MaterialElement.prototype, "map", void 0);
1065
1110
 
1066
- // packages/3d/dist/esm/materials/basic.js
1067
- import { CustomElement as CustomElement3, P as P3 } from "@pacem/pacem-core";
1068
- var __decorate4 = function(decorators, target, key, desc) {
1069
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1111
+ // packages/3d/dist/esm/parsers/parser.js
1112
+ import { Transformer } from "@pacem/pacem-core";
1113
+ import { Point } from "@pacem/pacem-foundation";
1114
+ var __decorate5 = function(decorators, target, key, desc) {
1115
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1116
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1117
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1118
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1119
+ };
1120
+ var OBJParser = class {
1121
+ /**
1122
+ * Parses `v` (vertex), `vt` (texture coordinate), `vn` (normal) and `f` (face) records out of `content`,
1123
+ * triangulating any face with more than 3 vertices (fan triangulation).
1124
+ */
1125
+ static parse(content) {
1126
+ const vertices = [];
1127
+ const vParser = /^v((\s+-?[\d\.]+){3})/gm;
1128
+ let arr = vParser.exec(content);
1129
+ while (arr && arr.length) {
1130
+ vertices.push(Point3DConverter.convert(arr[1]));
1131
+ arr = vParser.exec(content);
1132
+ }
1133
+ const vt = [];
1134
+ const tParser = /^vt((\s+-?[\d\.]+){2})/gm;
1135
+ arr = tParser.exec(content);
1136
+ while (arr && arr.length) {
1137
+ vt.push(Point.parse(arr[1]));
1138
+ arr = tParser.exec(content);
1139
+ }
1140
+ const vn = [];
1141
+ const nParser = /^vn((\s+-?[\d\.]+){3})/gm;
1142
+ arr = nParser.exec(content);
1143
+ while (arr && arr.length) {
1144
+ vn.push(Point3DConverter.convert(arr[1]));
1145
+ arr = nParser.exec(content);
1146
+ }
1147
+ const normals = [];
1148
+ const uv = [];
1149
+ const positions = [];
1150
+ const fParser = /^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;
1151
+ arr = fParser.exec(content);
1152
+ while (arr && arr.length) {
1153
+ const fjParser = /([\d]+)\/([\d]+)\/([\d]+)/g;
1154
+ const face = arr[1];
1155
+ let jArr = fjParser.exec(face);
1156
+ let jIndex = 0;
1157
+ var vIndex0, tIndex0, nIndex0;
1158
+ var vIndex, tIndex, nIndex;
1159
+ while (jArr && jArr.length) {
1160
+ if (jIndex > 2) {
1161
+ positions.push(vIndex0);
1162
+ uv.push(vt[tIndex0]);
1163
+ normals.push(vn[nIndex0]);
1164
+ positions.push(vIndex);
1165
+ uv.push(vt[tIndex]);
1166
+ normals.push(vn[nIndex]);
1167
+ }
1168
+ vIndex = parseInt(jArr[1]) - 1;
1169
+ tIndex = parseInt(jArr[2]) - 1;
1170
+ nIndex = parseInt(jArr[3]) - 1;
1171
+ positions.push(vIndex);
1172
+ uv.push(vt[tIndex]);
1173
+ normals.push(vn[nIndex]);
1174
+ if (jIndex === 0) {
1175
+ vIndex0 = vIndex;
1176
+ tIndex0 = tIndex;
1177
+ nIndex0 = nIndex;
1178
+ }
1179
+ jIndex++;
1180
+ jArr = fjParser.exec(face);
1181
+ }
1182
+ arr = fParser.exec(content);
1183
+ }
1184
+ return new MeshGeometry(vertices, positions, uv, normals);
1185
+ }
1186
+ };
1187
+ var Parser3D = class {
1188
+ /**
1189
+ * Parses `content` according to `type` into a {@link NodeGeometry} (currently only the `'obj'` Wavefront format,
1190
+ * via {@link OBJParser}) or a {@link Material}. Throws for any other/unsupported `type` (e.g. `'mtl'`, not yet implemented).
1191
+ */
1192
+ static parseGeometry(content, type) {
1193
+ switch (type.toLowerCase()) {
1194
+ case "obj":
1195
+ return OBJParser.parse(content);
1196
+ default:
1197
+ throw new Error(`Type '${type}' is not supported.`);
1198
+ }
1199
+ }
1200
+ };
1201
+ __decorate5([
1202
+ Transformer("parse3D")
1203
+ ], Parser3D, "parseGeometry", null);
1204
+
1205
+ // packages/3d/dist/esm/index-components.js
1206
+ var index_components_exports = {};
1207
+ __export(index_components_exports, {
1208
+ Drawing3D: () => index_components_drawing3d_exports
1209
+ });
1210
+
1211
+ // packages/3d/dist/esm/index-components-drawing3d.js
1212
+ var index_components_drawing3d_exports = {};
1213
+ __export(index_components_drawing3d_exports, {
1214
+ AdapterUtils: () => AdapterUtils,
1215
+ BasicMaterialElement: () => BasicMaterialElement,
1216
+ DragEvent: () => DragEvent,
1217
+ KnownShader: () => KnownShader,
1218
+ LambertMaterialElement: () => LambertMaterialElement,
1219
+ LineMaterialElement: () => LineMaterialElement,
1220
+ MaterialElement: () => MaterialElement,
1221
+ OrbitCameraBehavior: () => OrbitCameraBehavior,
1222
+ Pacem3DAdapterElement: () => Pacem3DAdapterElement,
1223
+ Pacem3DCameraElement: () => Pacem3DCameraElement,
1224
+ Pacem3DDetector: () => Pacem3DDetector,
1225
+ Pacem3DElement: () => Pacem3DElement,
1226
+ Pacem3DGroupElement: () => Pacem3DGroupElement,
1227
+ Pacem3DLightElement: () => Pacem3DLightElement,
1228
+ Pacem3DMeshElement: () => Pacem3DMeshElement,
1229
+ Pacem3DObjectElement: () => Pacem3DObjectElement,
1230
+ Pacem3DOrthographicCameraElement: () => Pacem3DOrthographicCameraElement,
1231
+ Pacem3DPerspectiveCameraElement: () => Pacem3DPerspectiveCameraElement,
1232
+ Pacem3DPrimitiveElement: () => Pacem3DPrimitiveElement,
1233
+ Pacem3DThreeAdapterElement: () => Pacem3DThreeAdapterElement,
1234
+ Pacem3DWebgpuAdapterElement: () => Pacem3DWebgpuAdapterElement,
1235
+ Pacem3DWgslScriptElement: () => Pacem3DWgslScriptElement,
1236
+ PacemBoxElement: () => PacemBoxElement,
1237
+ PacemConeElement: () => PacemConeElement,
1238
+ PacemCylinderElement: () => PacemCylinderElement,
1239
+ PacemDodecahedronElement: () => PacemDodecahedronElement,
1240
+ PacemHexahedronElement: () => PacemHexahedronElement,
1241
+ PacemIcosahedronElement: () => PacemIcosahedronElement,
1242
+ PacemLineElement: () => PacemLineElement,
1243
+ PacemOctahedronElement: () => PacemOctahedronElement,
1244
+ PacemOrbitCameraBehaviorElement: () => PacemOrbitCameraBehaviorElement,
1245
+ PacemPlaneElement: () => PacemPlaneElement,
1246
+ PacemSphereElement: () => PacemSphereElement,
1247
+ PacemTetrahedronElement: () => PacemTetrahedronElement,
1248
+ PacemTorusElement: () => PacemTorusElement,
1249
+ PhongMaterialElement: () => PhongMaterialElement,
1250
+ PolyhedronElement: () => PolyhedronElement,
1251
+ RenderableElement: () => RenderableElement,
1252
+ RenderableEvent: () => RenderableEvent,
1253
+ StalePropertyFlag: () => StalePropertyFlag,
1254
+ StandardMaterialElement: () => StandardMaterialElement,
1255
+ UI3DEvent: () => UI3DEvent,
1256
+ Ui3DElement: () => Ui3DElement,
1257
+ computePlaneNormal: () => computePlaneNormal,
1258
+ computeSharpVertexNormals: () => computeSharpVertexNormals,
1259
+ isBasicMaterial: () => isBasicMaterial,
1260
+ isCamera: () => isCamera,
1261
+ isGeometry: () => isGeometry,
1262
+ isGroup: () => isGroup,
1263
+ isInteraction: () => isInteraction,
1264
+ isLambertMaterial: () => isLambertMaterial,
1265
+ isLight: () => isLight,
1266
+ isLineMaterial: () => isLineMaterial,
1267
+ isMaterial: () => isMaterial,
1268
+ isMesh: () => isMesh,
1269
+ isMeshGeometry: () => isMeshGeometry,
1270
+ isOrthographicCamera: () => isOrthographicCamera,
1271
+ isPerspectiveCamera: () => isPerspectiveCamera,
1272
+ isPhongMaterial: () => isPhongMaterial,
1273
+ isRenderable: () => isRenderable,
1274
+ isShaderMaterial: () => isShaderMaterial,
1275
+ isStage: () => isStage,
1276
+ isStandardMaterial: () => isStandardMaterial,
1277
+ isUi3DObject: () => isUi3DObject
1278
+ });
1279
+
1280
+ // packages/3d/dist/esm/detector.js
1281
+ var Pacem3DDetector = class {
1282
+ /** Probes the browser for WebGL support by attempting to create a rendering context, populating {@link info} and {@link supported}. */
1283
+ constructor() {
1284
+ this._detected = {
1285
+ supported: false,
1286
+ info: {}
1287
+ };
1288
+ let cvs = document.createElement("canvas");
1289
+ let contextNames = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
1290
+ let ctx;
1291
+ let getParam = function(str) {
1292
+ if (!str)
1293
+ return void 0;
1294
+ return ctx.getParameter(str);
1295
+ };
1296
+ let addLine = (section, name, value) => {
1297
+ let detected = this._detected;
1298
+ var info = detected.info[section] = detected.info[section] || {};
1299
+ name = name.replace(/[^\w]+/g, "");
1300
+ name = name.substring(0, 1).toLowerCase() + name.substring(1);
1301
+ info[name] = value;
1302
+ };
1303
+ if (navigator.userAgent.indexOf("MSIE") >= 0) {
1304
+ try {
1305
+ ctx = window["WebGLHelper"].CreateGLContext(cvs, "canvas");
1306
+ } catch (e) {
1307
+ }
1308
+ } else {
1309
+ for (var i = 0; i < contextNames.length; i++) {
1310
+ try {
1311
+ ctx = cvs.getContext(contextNames[i]);
1312
+ if (ctx) {
1313
+ addLine("main", "Context Name", contextNames[i]);
1314
+ break;
1315
+ }
1316
+ } catch (e) {
1317
+ }
1318
+ }
1319
+ }
1320
+ this._detected.supported = !!ctx;
1321
+ addLine("main", "Platform", navigator.platform);
1322
+ addLine("main", "Agent", navigator.userAgent);
1323
+ if (ctx) {
1324
+ addLine("main", "Vendor", getParam(ctx.VENDOR));
1325
+ addLine("main", "Version", getParam(ctx.VERSION));
1326
+ addLine("main", "Renderer", getParam(ctx.RENDERER));
1327
+ addLine("main", "Shading Language Version", getParam(ctx.SHADING_LANGUAGE_VERSION));
1328
+ addLine("bits", "Rgba Bits", getParam(ctx.RED_BITS) + ", " + getParam(ctx.GREEN_BITS) + ", " + getParam(ctx.BLUE_BITS) + ", " + getParam(ctx.ALPHA_BITS));
1329
+ addLine("bits", "Depth Bits", getParam(ctx.DEPTH_BITS));
1330
+ addLine("shader", "Max Vertex Attribs", getParam(ctx.MAX_VERTEX_ATTRIBS));
1331
+ addLine("shader", "Max Vertex Texture Image Units", getParam(ctx.MAX_VERTEX_TEXTURE_IMAGE_UNITS));
1332
+ addLine("shader", "Max Varying Vectors", getParam(ctx.MAX_VARYING_VECTORS));
1333
+ addLine("shader", "Max Uniform Vectors", getParam(ctx.MAX_VERTEX_UNIFORM_VECTORS));
1334
+ addLine("tex", "Max Combined Texture Image Units", getParam(ctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS));
1335
+ addLine("tex", "Max Texture Size", getParam(ctx.MAX_TEXTURE_SIZE));
1336
+ addLine("tex", "Max Cube Map Texture Size", getParam(ctx.MAX_CUBE_MAP_TEXTURE_SIZE));
1337
+ addLine("tex", "Num. Compressed Texture Formats", getParam(ctx.COMPRESSED_TEXTURE_FORMATS));
1338
+ addLine("misc", "Max Render Buffer Size", getParam(ctx.MAX_RENDERBUFFER_SIZE));
1339
+ addLine("misc", "Max Viewport Dimensions", getParam(ctx.MAX_VIEWPORT_DIMS));
1340
+ addLine("misc", "Aliased Line Width Range", getParam(ctx.ALIASED_LINE_WIDTH_RANGE));
1341
+ addLine("misc", "Aliased Point Size Range", getParam(ctx.ALIASED_POINT_SIZE_RANGE));
1342
+ addLine("misc", "Supported Extensions", ctx.getSupportedExtensions() || []);
1343
+ }
1344
+ }
1345
+ /** @readonly Gets the detected WebGL capabilities/limits, grouped by section (`main`, `bits`, `shader`, `tex`, `misc`). */
1346
+ get info() {
1347
+ return this._detected.info;
1348
+ }
1349
+ /** @readonly Gets whether a WebGL rendering context could be created on this browser/device. */
1350
+ get supported() {
1351
+ return this._detected.supported;
1352
+ }
1353
+ };
1354
+
1355
+ // packages/3d/dist/esm/materials/basic.js
1356
+ import { CustomElement as CustomElement3, P as P3 } from "@pacem/pacem-core";
1357
+ var __decorate6 = function(decorators, target, key, desc) {
1358
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1070
1359
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1071
1360
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1072
1361
  return c > 3 && r && Object.defineProperty(target, key, r), r;
@@ -1076,13 +1365,13 @@ var BasicMaterialElement = class BasicMaterialElement2 extends MaterialElement {
1076
1365
  super(KnownShader.Basic);
1077
1366
  }
1078
1367
  };
1079
- BasicMaterialElement = __decorate4([
1368
+ BasicMaterialElement = __decorate6([
1080
1369
  CustomElement3({ tagName: `${P3}-${TAG_MIDDLE_NAME}-material-basic` })
1081
1370
  ], BasicMaterialElement);
1082
1371
 
1083
1372
  // packages/3d/dist/esm/materials/lambert.js
1084
- import { CustomElement as CustomElement4, P as P4, Watch as Watch4, PropertyConverters as PropertyConverters4, Utils as Utils5 } from "@pacem/pacem-core";
1085
- var __decorate5 = function(decorators, target, key, desc) {
1373
+ import { CustomElement as CustomElement4, P as P4, Watch as Watch4, PropertyConverters as PropertyConverters4, Utils as Utils7 } from "@pacem/pacem-core";
1374
+ var __decorate7 = function(decorators, target, key, desc) {
1086
1375
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1087
1376
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1088
1377
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1094,7 +1383,7 @@ var LambertMaterialElement = class LambertMaterialElement2 extends MaterialEleme
1094
1383
  }
1095
1384
  /** Builds the {@link LambertMaterial}, adding `emissiveColor`, `reflectivity` and `refractionRatio` to the base {@link Material}. */
1096
1385
  async createMaterial() {
1097
- return Utils5.extend({
1386
+ return Utils7.extend({
1098
1387
  emissiveColor: this.emissiveColor || "#000",
1099
1388
  reflectivity: this.reflectivity ?? 0,
1100
1389
  refractionRatio: this.refractionRatio ?? 0
@@ -1113,22 +1402,22 @@ var LambertMaterialElement = class LambertMaterialElement2 extends MaterialEleme
1113
1402
  }
1114
1403
  }
1115
1404
  };
1116
- __decorate5([
1405
+ __decorate7([
1117
1406
  Watch4({ emit: false, converter: PropertyConverters4.String })
1118
1407
  ], LambertMaterialElement.prototype, "emissiveColor", void 0);
1119
- __decorate5([
1408
+ __decorate7([
1120
1409
  Watch4({ emit: false, converter: PropertyConverters4.Number })
1121
1410
  ], LambertMaterialElement.prototype, "reflectivity", void 0);
1122
- __decorate5([
1411
+ __decorate7([
1123
1412
  Watch4({ emit: false, converter: PropertyConverters4.Number })
1124
1413
  ], LambertMaterialElement.prototype, "refractionRatio", void 0);
1125
- LambertMaterialElement = __decorate5([
1414
+ LambertMaterialElement = __decorate7([
1126
1415
  CustomElement4({ tagName: `${P4}-${TAG_MIDDLE_NAME}-material-lambert` })
1127
1416
  ], LambertMaterialElement);
1128
1417
 
1129
1418
  // packages/3d/dist/esm/materials/line.js
1130
- import { CustomElement as CustomElement5, P as P5, Watch as Watch5, PropertyConverters as PropertyConverters5, Utils as Utils6 } from "@pacem/pacem-core";
1131
- var __decorate6 = function(decorators, target, key, desc) {
1419
+ import { CustomElement as CustomElement5, P as P5, Watch as Watch5, PropertyConverters as PropertyConverters5, Utils as Utils8 } from "@pacem/pacem-core";
1420
+ var __decorate8 = function(decorators, target, key, desc) {
1132
1421
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1133
1422
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1134
1423
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1153,7 +1442,7 @@ var LineMaterialElement = class LineMaterialElement2 extends MaterialElement {
1153
1442
  }
1154
1443
  /** Builds the {@link LineMaterial}, adding `lineWidth`, `lineJoin`, `lineCap` and `dashArray` to the base {@link Material}. */
1155
1444
  async createMaterial() {
1156
- return Utils6.extend({
1445
+ return Utils8.extend({
1157
1446
  lineWidth: this.lineWidth ?? 1,
1158
1447
  lineJoin: this.lineJoin ?? "round",
1159
1448
  lineCap: this.lineCap ?? "round",
@@ -1161,16 +1450,16 @@ var LineMaterialElement = class LineMaterialElement2 extends MaterialElement {
1161
1450
  }, await super.createMaterial());
1162
1451
  }
1163
1452
  };
1164
- __decorate6([
1453
+ __decorate8([
1165
1454
  Watch5({ emit: false, converter: PropertyConverters5.Number })
1166
1455
  ], LineMaterialElement.prototype, "lineWidth", void 0);
1167
- __decorate6([
1456
+ __decorate8([
1168
1457
  Watch5({ emit: false, converter: PropertyConverters5.String })
1169
1458
  ], LineMaterialElement.prototype, "lineJoin", void 0);
1170
- __decorate6([
1459
+ __decorate8([
1171
1460
  Watch5({ emit: false, converter: PropertyConverters5.String })
1172
1461
  ], LineMaterialElement.prototype, "lineCap", void 0);
1173
- __decorate6([
1462
+ __decorate8([
1174
1463
  Watch5({
1175
1464
  emit: false,
1176
1465
  converter: {
@@ -1179,13 +1468,13 @@ __decorate6([
1179
1468
  }
1180
1469
  })
1181
1470
  ], LineMaterialElement.prototype, "dashArray", void 0);
1182
- LineMaterialElement = __decorate6([
1471
+ LineMaterialElement = __decorate8([
1183
1472
  CustomElement5({ tagName: `${P5}-${TAG_MIDDLE_NAME}-material-line` })
1184
1473
  ], LineMaterialElement);
1185
1474
 
1186
1475
  // packages/3d/dist/esm/materials/phong.js
1187
- import { CustomElement as CustomElement6, P as P6, Watch as Watch6, PropertyConverters as PropertyConverters6, Utils as Utils7 } from "@pacem/pacem-core";
1188
- var __decorate7 = function(decorators, target, key, desc) {
1476
+ import { CustomElement as CustomElement6, P as P6, Watch as Watch6, PropertyConverters as PropertyConverters6, Utils as Utils9 } from "@pacem/pacem-core";
1477
+ var __decorate9 = function(decorators, target, key, desc) {
1189
1478
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1190
1479
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1191
1480
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1197,7 +1486,7 @@ var PhongMaterialElement = class PhongMaterialElement2 extends MaterialElement {
1197
1486
  }
1198
1487
  /** Builds the {@link PhongMaterial}, adding the diffuse (`emissiveColor`, `reflectivity`, `refractionRatio`) and specular (`specularColor`, `shininess`, `flatShading`) properties to the base {@link Material}. */
1199
1488
  async createMaterial() {
1200
- return Utils7.extend({
1489
+ return Utils9.extend({
1201
1490
  emissiveColor: this.emissiveColor || "#000",
1202
1491
  reflectivity: this.reflectivity ?? 0,
1203
1492
  refractionRatio: this.refractionRatio ?? 0,
@@ -1222,31 +1511,31 @@ var PhongMaterialElement = class PhongMaterialElement2 extends MaterialElement {
1222
1511
  }
1223
1512
  }
1224
1513
  };
1225
- __decorate7([
1514
+ __decorate9([
1226
1515
  Watch6({ emit: false, converter: PropertyConverters6.String })
1227
1516
  ], PhongMaterialElement.prototype, "emissiveColor", void 0);
1228
- __decorate7([
1517
+ __decorate9([
1229
1518
  Watch6({ emit: false, converter: PropertyConverters6.Number })
1230
1519
  ], PhongMaterialElement.prototype, "reflectivity", void 0);
1231
- __decorate7([
1520
+ __decorate9([
1232
1521
  Watch6({ emit: false, converter: PropertyConverters6.Number })
1233
1522
  ], PhongMaterialElement.prototype, "refractionRatio", void 0);
1234
- __decorate7([
1523
+ __decorate9([
1235
1524
  Watch6({ emit: false, converter: PropertyConverters6.String })
1236
1525
  ], PhongMaterialElement.prototype, "specularColor", void 0);
1237
- __decorate7([
1526
+ __decorate9([
1238
1527
  Watch6({ emit: false, converter: PropertyConverters6.Number })
1239
1528
  ], PhongMaterialElement.prototype, "shininess", void 0);
1240
- __decorate7([
1529
+ __decorate9([
1241
1530
  Watch6({ emit: false, converter: PropertyConverters6.Boolean })
1242
1531
  ], PhongMaterialElement.prototype, "flatShading", void 0);
1243
- PhongMaterialElement = __decorate7([
1532
+ PhongMaterialElement = __decorate9([
1244
1533
  CustomElement6({ tagName: `${P6}-${TAG_MIDDLE_NAME}-material-phong` })
1245
1534
  ], PhongMaterialElement);
1246
1535
 
1247
1536
  // packages/3d/dist/esm/materials/standard.js
1248
- import { CustomElement as CustomElement7, P as P7, Watch as Watch7, PropertyConverters as PropertyConverters7, Utils as Utils8 } from "@pacem/pacem-core";
1249
- var __decorate8 = function(decorators, target, key, desc) {
1537
+ import { CustomElement as CustomElement7, P as P7, Watch as Watch7, PropertyConverters as PropertyConverters7, Utils as Utils10 } from "@pacem/pacem-core";
1538
+ var __decorate10 = function(decorators, target, key, desc) {
1250
1539
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1251
1540
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1252
1541
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1258,7 +1547,7 @@ var StandardMaterialElement = class StandardMaterialElement2 extends MaterialEle
1258
1547
  }
1259
1548
  /** Builds the {@link StandardMaterial}, adding `emissiveColor`, `refractionRatio`, `metalness`, `roughness` and `flatShading` to the base {@link Material}. */
1260
1549
  async createMaterial() {
1261
- return Utils8.extend({
1550
+ return Utils10.extend({
1262
1551
  emissiveColor: this.emissiveColor || "#000",
1263
1552
  refractionRatio: this.refractionRatio ?? 0,
1264
1553
  metalness: this.metalness ?? 0,
@@ -1281,28 +1570,28 @@ var StandardMaterialElement = class StandardMaterialElement2 extends MaterialEle
1281
1570
  }
1282
1571
  }
1283
1572
  };
1284
- __decorate8([
1573
+ __decorate10([
1285
1574
  Watch7({ emit: false, converter: PropertyConverters7.String })
1286
1575
  ], StandardMaterialElement.prototype, "emissiveColor", void 0);
1287
- __decorate8([
1576
+ __decorate10([
1288
1577
  Watch7({ emit: false, converter: PropertyConverters7.Number })
1289
1578
  ], StandardMaterialElement.prototype, "refractionRatio", void 0);
1290
- __decorate8([
1579
+ __decorate10([
1291
1580
  Watch7({ emit: false, converter: PropertyConverters7.Number })
1292
1581
  ], StandardMaterialElement.prototype, "roughness", void 0);
1293
- __decorate8([
1582
+ __decorate10([
1294
1583
  Watch7({ emit: false, converter: PropertyConverters7.Number })
1295
1584
  ], StandardMaterialElement.prototype, "metalness", void 0);
1296
- __decorate8([
1585
+ __decorate10([
1297
1586
  Watch7({ emit: false, converter: PropertyConverters7.Boolean })
1298
1587
  ], StandardMaterialElement.prototype, "flatShading", void 0);
1299
- StandardMaterialElement = __decorate8([
1588
+ StandardMaterialElement = __decorate10([
1300
1589
  CustomElement7({ tagName: `${P7}-${TAG_MIDDLE_NAME}-material-standard` })
1301
1590
  ], StandardMaterialElement);
1302
1591
 
1303
1592
  // packages/3d/dist/esm/primitives/primitive.js
1304
- import { PacemEventTarget as PacemEventTarget3, Watch as Watch8, PropertyConverters as PropertyConverters8, Utils as Utils9 } from "@pacem/pacem-core";
1305
- var __decorate9 = function(decorators, target, key, desc) {
1593
+ import { PacemEventTarget as PacemEventTarget3, Watch as Watch8, PropertyConverters as PropertyConverters8, Utils as Utils11 } from "@pacem/pacem-core";
1594
+ var __decorate11 = function(decorators, target, key, desc) {
1306
1595
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1307
1596
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1308
1597
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1311,165 +1600,18 @@ var __decorate9 = function(decorators, target, key, desc) {
1311
1600
  var Pacem3DPrimitiveElement = class extends PacemEventTarget3 {
1312
1601
  viewActivatedCallback() {
1313
1602
  super.viewActivatedCallback();
1314
- if (Utils9.isNull(this.geometry)) {
1603
+ if (Utils11.isNull(this.geometry)) {
1315
1604
  this.geometry = this.createDefaultGeometry();
1316
1605
  }
1317
1606
  }
1318
- };
1319
- __decorate9([
1320
- Watch8({ converter: PropertyConverters8.Json })
1321
- ], Pacem3DPrimitiveElement.prototype, "geometry", void 0);
1322
-
1323
- // packages/3d/dist/esm/primitives/box.js
1324
- import { CustomElement as CustomElement8, P as P8, Watch as Watch9, PropertyConverters as PropertyConverters9 } from "@pacem/pacem-core";
1325
-
1326
- // packages/3d/dist/esm/geometry.js
1327
- import { Utils as Utils11 } from "@pacem/pacem-core";
1328
-
1329
- // packages/3d/dist/esm/decorators.js
1330
- import { Utils as Utils10 } from "@pacem/pacem-core";
1331
- function NotifyChange(callback) {
1332
- return (target, prop, descriptor) => {
1333
- const backingField = `_${prop}_${Utils10.uniqueCode()}_backingField`;
1334
- function getter() {
1335
- return this[backingField];
1336
- }
1337
- function setter(val) {
1338
- if (val !== this[backingField]) {
1339
- const old = this[backingField];
1340
- this[backingField] = val;
1341
- callback.call(this, prop, old, val);
1342
- }
1343
- }
1344
- Object.defineProperty(target, prop, {
1345
- get: function() {
1346
- return getter.call(this);
1347
- },
1348
- set: function(val) {
1349
- setter.call(this, val);
1350
- },
1351
- enumerable: true,
1352
- configurable: false
1353
- });
1354
- };
1355
- }
1356
-
1357
- // packages/3d/dist/esm/geometry.js
1358
- var __decorate10 = function(decorators, target, key, desc) {
1359
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1360
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1361
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1362
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1363
- };
1364
- var NodeGeometry = class {
1365
- constructor(positions = []) {
1366
- this.positions = positions;
1367
- }
1368
- /** Computes the centroid (average) of the given positions. */
1369
- static barycenter(positions) {
1370
- var bary = { x: 0, y: 0, z: 0 };
1371
- if (!Utils11.isNullOrEmpty(positions)) {
1372
- var count = positions.length;
1373
- for (var i = 0; i < positions.length; i++) {
1374
- var pt = positions[i];
1375
- bary.x += pt.x;
1376
- bary.y += pt.y;
1377
- bary.z += pt.z;
1378
- }
1379
- var countDbl = 1 * count;
1380
- bary.x /= countDbl;
1381
- bary.y /= countDbl;
1382
- bary.z /= countDbl;
1383
- }
1384
- return bary;
1385
- }
1386
- /** Computes the axis-aligned {@link Box3D} enclosing the given positions. */
1387
- static boundingBox(positions) {
1388
- const output = {
1389
- minX: Infinity,
1390
- minY: Infinity,
1391
- minZ: Infinity,
1392
- maxX: -Infinity,
1393
- maxY: -Infinity,
1394
- maxZ: -Infinity
1395
- };
1396
- if (!Utils11.isNullOrEmpty(positions)) {
1397
- for (var i = 0; i < positions.length; i++) {
1398
- var pt = positions[i];
1399
- output.minX = Math.min(output.minX, pt.x);
1400
- output.minY = Math.min(output.minY, pt.y);
1401
- output.minZ = Math.min(output.minZ, pt.z);
1402
- output.maxX = Math.max(output.maxX, pt.x);
1403
- output.maxY = Math.max(output.maxY, pt.y);
1404
- output.maxZ = Math.max(output.maxZ, pt.z);
1405
- }
1406
- }
1407
- return output;
1408
- }
1409
- /** Marks the geometry as stale, flagging it with {@link StalePropertyFlag.Geometry} for the next render. */
1410
- setAsDirty() {
1411
- setSelfAsDirty.call(this);
1412
- }
1413
- };
1414
- function setSelfAsDirty() {
1415
- const me = this;
1416
- me.flags = [
1417
- /* no further specifications, other than 'geometry' */
1418
- StalePropertyFlag.Geometry
1419
- ];
1420
- }
1421
- var LineGeometry = class extends NodeGeometry {
1422
- };
1423
- __decorate10([
1424
- NotifyChange(setSelfAsDirty)
1425
- ], LineGeometry.prototype, "positions", void 0);
1426
- var MeshGeometry = class extends NodeGeometry {
1427
- #boundingBox;
1428
- #boundingSphere;
1429
- #barycenter;
1430
- /** Gets or sets the centroid of {@link positions}; computed on first access if not explicitly set. */
1431
- get barycenter() {
1432
- return this.#barycenter ??= NodeGeometry.barycenter(this.positions);
1433
- }
1434
- set barycenter(point) {
1435
- this.#barycenter = point;
1436
- }
1437
- /** Gets or sets the axis-aligned bounding box; computed from {@link positions} on first access if not explicitly set. */
1438
- get boundingBox() {
1439
- return this.#boundingBox ??= NodeGeometry.boundingBox(this.positions);
1440
- }
1441
- set boundingBox(bbox) {
1442
- this.#boundingBox = bbox;
1443
- }
1444
- /** Gets or sets the bounding sphere. */
1445
- get boundingSphere() {
1446
- return this.#boundingSphere;
1447
- }
1448
- set boundingSphere(sphere) {
1449
- this.#boundingSphere = sphere;
1450
- }
1451
- constructor(positions, triangleIndices, textureCoordinates = [], normals = []) {
1452
- super(positions);
1453
- this.triangleIndices = triangleIndices;
1454
- this.textureCoordinates = textureCoordinates;
1455
- this.normals = normals;
1456
- }
1457
- };
1458
- __decorate10([
1459
- NotifyChange(setSelfAsDirty)
1460
- ], MeshGeometry.prototype, "positions", void 0);
1461
- __decorate10([
1462
- NotifyChange(setSelfAsDirty)
1463
- ], MeshGeometry.prototype, "triangleIndices", void 0);
1464
- __decorate10([
1465
- NotifyChange(setSelfAsDirty)
1466
- ], MeshGeometry.prototype, "textureCoordinates", void 0);
1467
- __decorate10([
1468
- NotifyChange(setSelfAsDirty)
1469
- ], MeshGeometry.prototype, "normals", void 0);
1607
+ };
1608
+ __decorate11([
1609
+ Watch8({ converter: PropertyConverters8.Json })
1610
+ ], Pacem3DPrimitiveElement.prototype, "geometry", void 0);
1470
1611
 
1471
1612
  // packages/3d/dist/esm/primitives/box.js
1472
- var __decorate11 = function(decorators, target, key, desc) {
1613
+ import { CustomElement as CustomElement8, P as P8, Watch as Watch9, PropertyConverters as PropertyConverters9 } from "@pacem/pacem-core";
1614
+ var __decorate12 = function(decorators, target, key, desc) {
1473
1615
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1474
1616
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1475
1617
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1653,31 +1795,31 @@ var PacemBoxElement = PacemBoxElement_1 = class PacemBoxElement2 extends Pacem3D
1653
1795
  }
1654
1796
  }
1655
1797
  };
1656
- __decorate11([
1798
+ __decorate12([
1657
1799
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1658
1800
  ], PacemBoxElement.prototype, "width", void 0);
1659
- __decorate11([
1801
+ __decorate12([
1660
1802
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1661
1803
  ], PacemBoxElement.prototype, "height", void 0);
1662
- __decorate11([
1804
+ __decorate12([
1663
1805
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1664
1806
  ], PacemBoxElement.prototype, "depth", void 0);
1665
- __decorate11([
1807
+ __decorate12([
1666
1808
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1667
1809
  ], PacemBoxElement.prototype, "widthSegments", void 0);
1668
- __decorate11([
1810
+ __decorate12([
1669
1811
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1670
1812
  ], PacemBoxElement.prototype, "heightSegments", void 0);
1671
- __decorate11([
1813
+ __decorate12([
1672
1814
  Watch9({ emit: false, converter: PropertyConverters9.Number })
1673
1815
  ], PacemBoxElement.prototype, "depthSegments", void 0);
1674
- PacemBoxElement = PacemBoxElement_1 = __decorate11([
1816
+ PacemBoxElement = PacemBoxElement_1 = __decorate12([
1675
1817
  CustomElement8({ tagName: P8 + "-" + TAG_MIDDLE_NAME + "-primitive-box" })
1676
1818
  ], PacemBoxElement);
1677
1819
 
1678
1820
  // packages/3d/dist/esm/primitives/cone.js
1679
1821
  import { CustomElement as CustomElement9, P as P9, Watch as Watch10, PropertyConverters as PropertyConverters10 } from "@pacem/pacem-core";
1680
- var __decorate12 = function(decorators, target, key, desc) {
1822
+ var __decorate13 = function(decorators, target, key, desc) {
1681
1823
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1682
1824
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1683
1825
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1796,28 +1938,28 @@ var PacemConeElement = PacemConeElement_1 = class PacemConeElement2 extends Pace
1796
1938
  }
1797
1939
  }
1798
1940
  };
1799
- __decorate12([
1941
+ __decorate13([
1800
1942
  Watch10({ emit: false, converter: PropertyConverters10.Number })
1801
1943
  ], PacemConeElement.prototype, "radius", void 0);
1802
- __decorate12([
1944
+ __decorate13([
1803
1945
  Watch10({ emit: false, converter: PropertyConverters10.Number })
1804
1946
  ], PacemConeElement.prototype, "height", void 0);
1805
- __decorate12([
1947
+ __decorate13([
1806
1948
  Watch10({ emit: false, converter: PropertyConverters10.Number })
1807
1949
  ], PacemConeElement.prototype, "sides", void 0);
1808
- __decorate12([
1950
+ __decorate13([
1809
1951
  Watch10({ emit: false, converter: PropertyConverters10.Number })
1810
1952
  ], PacemConeElement.prototype, "heightSegments", void 0);
1811
- __decorate12([
1953
+ __decorate13([
1812
1954
  Watch10({ emit: false, converter: PropertyConverters10.Number })
1813
1955
  ], PacemConeElement.prototype, "capSegments", void 0);
1814
- PacemConeElement = PacemConeElement_1 = __decorate12([
1956
+ PacemConeElement = PacemConeElement_1 = __decorate13([
1815
1957
  CustomElement9({ tagName: P9 + "-" + TAG_MIDDLE_NAME + "-primitive-cone" })
1816
1958
  ], PacemConeElement);
1817
1959
 
1818
1960
  // packages/3d/dist/esm/primitives/cylinder.js
1819
1961
  import { CustomElement as CustomElement10, P as P10, Watch as Watch11, PropertyConverters as PropertyConverters11 } from "@pacem/pacem-core";
1820
- var __decorate13 = function(decorators, target, key, desc) {
1962
+ var __decorate14 = function(decorators, target, key, desc) {
1821
1963
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1822
1964
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1823
1965
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1978,28 +2120,28 @@ var PacemCylinderElement = PacemCylinderElement_1 = class PacemCylinderElement2
1978
2120
  }
1979
2121
  }
1980
2122
  };
1981
- __decorate13([
2123
+ __decorate14([
1982
2124
  Watch11({ emit: false, converter: PropertyConverters11.Number })
1983
2125
  ], PacemCylinderElement.prototype, "radius", void 0);
1984
- __decorate13([
2126
+ __decorate14([
1985
2127
  Watch11({ emit: false, converter: PropertyConverters11.Number })
1986
2128
  ], PacemCylinderElement.prototype, "height", void 0);
1987
- __decorate13([
2129
+ __decorate14([
1988
2130
  Watch11({ emit: false, converter: PropertyConverters11.Number })
1989
2131
  ], PacemCylinderElement.prototype, "sides", void 0);
1990
- __decorate13([
2132
+ __decorate14([
1991
2133
  Watch11({ emit: false, converter: PropertyConverters11.Number })
1992
2134
  ], PacemCylinderElement.prototype, "heightSegments", void 0);
1993
- __decorate13([
2135
+ __decorate14([
1994
2136
  Watch11({ emit: false, converter: PropertyConverters11.Number })
1995
2137
  ], PacemCylinderElement.prototype, "capSegments", void 0);
1996
- PacemCylinderElement = PacemCylinderElement_1 = __decorate13([
2138
+ PacemCylinderElement = PacemCylinderElement_1 = __decorate14([
1997
2139
  CustomElement10({ tagName: P10 + "-" + TAG_MIDDLE_NAME + "-primitive-cylinder" })
1998
2140
  ], PacemCylinderElement);
1999
2141
 
2000
2142
  // packages/3d/dist/esm/primitives/line.js
2001
2143
  import { CustomElement as CustomElement11, P as P11, Watch as Watch12, PropertyConverters as PropertyConverters12 } from "@pacem/pacem-core";
2002
- var __decorate14 = function(decorators, target, key, desc) {
2144
+ var __decorate15 = function(decorators, target, key, desc) {
2003
2145
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2004
2146
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2005
2147
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -2025,17 +2167,17 @@ var PacemLineElement = PacemLineElement_1 = class PacemLineElement2 extends Pace
2025
2167
  }
2026
2168
  }
2027
2169
  };
2028
- __decorate14([
2170
+ __decorate15([
2029
2171
  Watch12({ emit: false, converter: PropertyConverters12.Json })
2030
2172
  ], PacemLineElement.prototype, "positions", void 0);
2031
- PacemLineElement = PacemLineElement_1 = __decorate14([
2173
+ PacemLineElement = PacemLineElement_1 = __decorate15([
2032
2174
  CustomElement11({ tagName: P11 + "-" + TAG_MIDDLE_NAME + "-primitive-line" })
2033
2175
  ], PacemLineElement);
2034
2176
 
2035
2177
  // packages/3d/dist/esm/primitives/plane.js
2036
2178
  import { CustomElement as CustomElement12, P as P12, Watch as Watch13, PropertyConverters as PropertyConverters13 } from "@pacem/pacem-core";
2037
2179
  import { Geometry as Geometry3 } from "@pacem/pacem-numerical";
2038
- var __decorate15 = function(decorators, target, key, desc) {
2180
+ var __decorate16 = function(decorators, target, key, desc) {
2039
2181
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2040
2182
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2041
2183
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -2102,26 +2244,26 @@ var PacemPlaneElement = PacemPlaneElement_1 = class PacemPlaneElement2 extends P
2102
2244
  }
2103
2245
  }
2104
2246
  };
2105
- __decorate15([
2247
+ __decorate16([
2106
2248
  Watch13({ emit: false, converter: PropertyConverters13.Number })
2107
2249
  ], PacemPlaneElement.prototype, "width", void 0);
2108
- __decorate15([
2250
+ __decorate16([
2109
2251
  Watch13({ emit: false, converter: PropertyConverters13.Number })
2110
2252
  ], PacemPlaneElement.prototype, "length", void 0);
2111
- __decorate15([
2253
+ __decorate16([
2112
2254
  Watch13({ emit: false, converter: PropertyConverters13.Number })
2113
2255
  ], PacemPlaneElement.prototype, "widthSegments", void 0);
2114
- __decorate15([
2256
+ __decorate16([
2115
2257
  Watch13({ emit: false, converter: PropertyConverters13.Number })
2116
2258
  ], PacemPlaneElement.prototype, "lengthSegments", void 0);
2117
- PacemPlaneElement = PacemPlaneElement_1 = __decorate15([
2259
+ PacemPlaneElement = PacemPlaneElement_1 = __decorate16([
2118
2260
  CustomElement12({ tagName: P12 + "-" + TAG_MIDDLE_NAME + "-primitive-plane" })
2119
2261
  ], PacemPlaneElement);
2120
2262
 
2121
2263
  // packages/3d/dist/esm/primitives/polyhedra.js
2122
2264
  import { CustomElement as CustomElement13, P as P13, Watch as Watch14, PropertyConverters as PropertyConverters14 } from "@pacem/pacem-core";
2123
2265
  import { Geometry as Geometry4 } from "@pacem/pacem-numerical";
2124
- var __decorate16 = function(decorators, target, key, desc) {
2266
+ var __decorate17 = function(decorators, target, key, desc) {
2125
2267
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2126
2268
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2127
2269
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -2163,7 +2305,7 @@ var PolyhedronElement = class extends Pacem3DPrimitiveElement {
2163
2305
  return this.createMeshGeometry(1);
2164
2306
  }
2165
2307
  };
2166
- __decorate16([
2308
+ __decorate17([
2167
2309
  Watch14({ emit: false, converter: PropertyConverters14.Number })
2168
2310
  ], PolyhedronElement.prototype, "radius", void 0);
2169
2311
  var PacemTetrahedronElement = PacemTetrahedronElement_1 = class PacemTetrahedronElement2 extends PolyhedronElement {
@@ -2198,7 +2340,7 @@ var PacemTetrahedronElement = PacemTetrahedronElement_1 = class PacemTetrahedron
2198
2340
  return PacemTetrahedronElement_1.createMeshGeometry(radius);
2199
2341
  }
2200
2342
  };
2201
- PacemTetrahedronElement = PacemTetrahedronElement_1 = __decorate16([
2343
+ PacemTetrahedronElement = PacemTetrahedronElement_1 = __decorate17([
2202
2344
  CustomElement13({ tagName: P13 + "-" + TAG_MIDDLE_NAME + "-primitive-tetrahedron" })
2203
2345
  ], PacemTetrahedronElement);
2204
2346
  var PacemOctahedronElement = PacemOctahedronElement_1 = class PacemOctahedronElement2 extends PolyhedronElement {
@@ -2233,7 +2375,7 @@ var PacemOctahedronElement = PacemOctahedronElement_1 = class PacemOctahedronEle
2233
2375
  return PacemOctahedronElement_1.createMeshGeometry(radius);
2234
2376
  }
2235
2377
  };
2236
- PacemOctahedronElement = PacemOctahedronElement_1 = __decorate16([
2378
+ PacemOctahedronElement = PacemOctahedronElement_1 = __decorate17([
2237
2379
  CustomElement13({ tagName: P13 + "-" + TAG_MIDDLE_NAME + "-primitive-octahedron" })
2238
2380
  ], PacemOctahedronElement);
2239
2381
  var PacemHexahedronElement = PacemHexahedronElement_1 = class PacemHexahedronElement2 extends PolyhedronElement {
@@ -2250,7 +2392,7 @@ var PacemHexahedronElement = PacemHexahedronElement_1 = class PacemHexahedronEle
2250
2392
  return PacemHexahedronElement_1.createMeshGeometry(radius);
2251
2393
  }
2252
2394
  };
2253
- PacemHexahedronElement = PacemHexahedronElement_1 = __decorate16([
2395
+ PacemHexahedronElement = PacemHexahedronElement_1 = __decorate17([
2254
2396
  CustomElement13({ tagName: P13 + "-" + TAG_MIDDLE_NAME + "-primitive-hexahedron" })
2255
2397
  ], PacemHexahedronElement);
2256
2398
  var PacemIcosahedronElement = PacemIcosahedronElement_1 = class PacemIcosahedronElement2 extends PolyhedronElement {
@@ -2407,7 +2549,7 @@ var PacemIcosahedronElement = PacemIcosahedronElement_1 = class PacemIcosahedron
2407
2549
  return PacemIcosahedronElement_1.createMeshGeometry(radius);
2408
2550
  }
2409
2551
  };
2410
- PacemIcosahedronElement = PacemIcosahedronElement_1 = __decorate16([
2552
+ PacemIcosahedronElement = PacemIcosahedronElement_1 = __decorate17([
2411
2553
  CustomElement13({ tagName: P13 + "-" + TAG_MIDDLE_NAME + "-primitive-icosahedron" })
2412
2554
  ], PacemIcosahedronElement);
2413
2555
  var PacemDodecahedronElement = PacemDodecahedronElement_1 = class PacemDodecahedronElement2 extends PolyhedronElement {
@@ -2723,13 +2865,13 @@ var PacemDodecahedronElement = PacemDodecahedronElement_1 = class PacemDodecahed
2723
2865
  return PacemDodecahedronElement_1.createMeshGeometry(radius);
2724
2866
  }
2725
2867
  };
2726
- PacemDodecahedronElement = PacemDodecahedronElement_1 = __decorate16([
2868
+ PacemDodecahedronElement = PacemDodecahedronElement_1 = __decorate17([
2727
2869
  CustomElement13({ tagName: P13 + "-" + TAG_MIDDLE_NAME + "-primitive-dodecahedron" })
2728
2870
  ], PacemDodecahedronElement);
2729
2871
 
2730
2872
  // packages/3d/dist/esm/primitives/sphere.js
2731
2873
  import { CustomElement as CustomElement14, P as P14, Watch as Watch15, PropertyConverters as PropertyConverters15 } from "@pacem/pacem-core";
2732
- var __decorate17 = function(decorators, target, key, desc) {
2874
+ var __decorate18 = function(decorators, target, key, desc) {
2733
2875
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2734
2876
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2735
2877
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -2820,19 +2962,19 @@ var PacemSphereElement = PacemSphereElement_1 = class PacemSphereElement2 extend
2820
2962
  }
2821
2963
  }
2822
2964
  };
2823
- __decorate17([
2965
+ __decorate18([
2824
2966
  Watch15({ emit: false, converter: PropertyConverters15.Number })
2825
2967
  ], PacemSphereElement.prototype, "radius", void 0);
2826
- __decorate17([
2968
+ __decorate18([
2827
2969
  Watch15({ emit: false, converter: PropertyConverters15.Number })
2828
2970
  ], PacemSphereElement.prototype, "segments", void 0);
2829
- PacemSphereElement = PacemSphereElement_1 = __decorate17([
2971
+ PacemSphereElement = PacemSphereElement_1 = __decorate18([
2830
2972
  CustomElement14({ tagName: P14 + "-" + TAG_MIDDLE_NAME + "-primitive-sphere" })
2831
2973
  ], PacemSphereElement);
2832
2974
 
2833
2975
  // packages/3d/dist/esm/primitives/torus.js
2834
2976
  import { CustomElement as CustomElement15, P as P15, Watch as Watch16, PropertyConverters as PropertyConverters16 } from "@pacem/pacem-core";
2835
- var __decorate18 = function(decorators, target, key, desc) {
2977
+ var __decorate19 = function(decorators, target, key, desc) {
2836
2978
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2837
2979
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2838
2980
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -2901,28 +3043,28 @@ var PacemTorusElement = PacemTorusElement_1 = class PacemTorusElement2 extends P
2901
3043
  }
2902
3044
  }
2903
3045
  };
2904
- __decorate18([
3046
+ __decorate19([
2905
3047
  Watch16({ emit: false, converter: PropertyConverters16.Number })
2906
3048
  ], PacemTorusElement.prototype, "radius", void 0);
2907
- __decorate18([
3049
+ __decorate19([
2908
3050
  Watch16({ emit: false, converter: PropertyConverters16.Number })
2909
3051
  ], PacemTorusElement.prototype, "innerRadius", void 0);
2910
- __decorate18([
3052
+ __decorate19([
2911
3053
  Watch16({ emit: false, converter: PropertyConverters16.Number })
2912
3054
  ], PacemTorusElement.prototype, "segments", void 0);
2913
- __decorate18([
3055
+ __decorate19([
2914
3056
  Watch16({ emit: false, converter: PropertyConverters16.Number })
2915
3057
  ], PacemTorusElement.prototype, "sides", void 0);
2916
- PacemTorusElement = PacemTorusElement_1 = __decorate18([
3058
+ PacemTorusElement = PacemTorusElement_1 = __decorate19([
2917
3059
  CustomElement15({ tagName: P15 + "-" + TAG_MIDDLE_NAME + "-primitive-torus" })
2918
3060
  ], PacemTorusElement);
2919
3061
 
2920
3062
  // packages/3d/dist/esm/adapters/shared.js
2921
3063
  import { CustomEventUtils, Utils as Utils12 } from "@pacem/pacem-core";
2922
- import { Point } from "@pacem/pacem-foundation";
3064
+ import { Point as Point2 } from "@pacem/pacem-foundation";
2923
3065
  function _clipPoint(evt, rect) {
2924
3066
  let x, y;
2925
- if (Point.isPoint(evt)) {
3067
+ if (Point2.isPoint(evt)) {
2926
3068
  x = evt.x;
2927
3069
  y = evt.y;
2928
3070
  } else {
@@ -2984,7 +3126,7 @@ var AdapterUtils = class _AdapterUtils {
2984
3126
  import { CustomElement as CustomElement16, P as P16, Watch as Watch17, PropertyConverters as PropertyConverters17, Utils as Utils13, CustomElementUtils as CustomElementUtils2 } from "@pacem/pacem-core";
2985
3127
  import { Colors } from "@pacem/pacem-foundation";
2986
3128
  import { Geometry as Geometry5 } from "@pacem/pacem-numerical";
2987
- var __decorate19 = function(decorators, target, key, desc) {
3129
+ var __decorate20 = function(decorators, target, key, desc) {
2988
3130
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2989
3131
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2990
3132
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -3577,10 +3719,10 @@ var Pacem3DThreeAdapterElement = class Pacem3DThreeAdapterElement2 extends Pacem
3577
3719
  }
3578
3720
  }
3579
3721
  };
3580
- __decorate19([
3722
+ __decorate20([
3581
3723
  Watch17({ emit: false, converter: PropertyConverters17.Boolean })
3582
3724
  ], Pacem3DThreeAdapterElement.prototype, "orbit", void 0);
3583
- Pacem3DThreeAdapterElement = __decorate19([
3725
+ Pacem3DThreeAdapterElement = __decorate20([
3584
3726
  CustomElement16({ tagName: P16 + "-3d-three-adapter" })
3585
3727
  ], Pacem3DThreeAdapterElement);
3586
3728
 
@@ -7124,7 +7266,7 @@ var RendererClass = class {
7124
7266
  };
7125
7267
 
7126
7268
  // packages/3d/dist/esm/adapters/webgpu/webgpuadapter.js
7127
- var __decorate20 = function(decorators, target, key, desc) {
7269
+ var __decorate21 = function(decorators, target, key, desc) {
7128
7270
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7129
7271
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7130
7272
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -7174,13 +7316,13 @@ var Pacem3DWgslScriptElement = class Pacem3DWgslScriptElement2 extends Component
7174
7316
  super.disconnectedCallback();
7175
7317
  }
7176
7318
  };
7177
- __decorate20([
7319
+ __decorate21([
7178
7320
  Watch18({ emit: false, converter: PropertyConverters18.String })
7179
7321
  ], Pacem3DWgslScriptElement.prototype, "type", void 0);
7180
- __decorate20([
7322
+ __decorate21([
7181
7323
  Watch18({ emit: false, converter: PropertyConverters18.String })
7182
7324
  ], Pacem3DWgslScriptElement.prototype, "wgsl", void 0);
7183
- Pacem3DWgslScriptElement = __decorate20([
7325
+ Pacem3DWgslScriptElement = __decorate21([
7184
7326
  CustomElement17({ tagName: P18 + "-3d-wgsl-script" })
7185
7327
  ], Pacem3DWgslScriptElement);
7186
7328
  var Pacem3DWebgpuAdapterElement = class Pacem3DWebgpuAdapterElement2 extends Pacem3DAdapterElement {
@@ -7412,23 +7554,23 @@ var Pacem3DWebgpuAdapterElement = class Pacem3DWebgpuAdapterElement2 extends Pac
7412
7554
  return stage;
7413
7555
  }
7414
7556
  };
7415
- __decorate20([
7557
+ __decorate21([
7416
7558
  Debounce(100)
7417
7559
  ], Pacem3DWebgpuAdapterElement.prototype, "_parseWgslModifiers", null);
7418
- __decorate20([
7560
+ __decorate21([
7419
7561
  Watch18({ emit: false })
7420
7562
  ], Pacem3DWebgpuAdapterElement.prototype, "modifiers", void 0);
7421
- __decorate20([
7563
+ __decorate21([
7422
7564
  Watch18({ emit: false, converter: PropertyConverters18.Boolean })
7423
7565
  ], Pacem3DWebgpuAdapterElement.prototype, "enableValidation", void 0);
7424
- Pacem3DWebgpuAdapterElement = __decorate20([
7566
+ Pacem3DWebgpuAdapterElement = __decorate21([
7425
7567
  CustomElement17({ tagName: P18 + "-3d-webgpu-adapter" })
7426
7568
  ], Pacem3DWebgpuAdapterElement);
7427
7569
 
7428
7570
  // packages/3d/dist/esm/adapters/webgpu/behaviors/orbit-camera.js
7429
7571
  import { CustomElement as CustomElement18, P as P19, Watch as Watch19, PropertyConverters as PropertyConverters19, Utils as Utils28, CustomEventUtils as CustomEventUtils2, avoidHandler, Behaviors, PropertyChangeEventName as PropertyChangeEventName3 } from "@pacem/pacem-core";
7430
7572
  import { Geometry as Geometry9 } from "@pacem/pacem-numerical";
7431
- var __decorate21 = function(decorators, target, key, desc) {
7573
+ var __decorate22 = function(decorators, target, key, desc) {
7432
7574
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7433
7575
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7434
7576
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -7753,177 +7895,33 @@ var PacemOrbitCameraBehaviorElement = class PacemOrbitCameraBehaviorElement2 ext
7753
7895
  }
7754
7896
  }
7755
7897
  };
7756
- __decorate21([
7898
+ __decorate22([
7757
7899
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7758
7900
  ], PacemOrbitCameraBehaviorElement.prototype, "maxAzimuth", void 0);
7759
- __decorate21([
7901
+ __decorate22([
7760
7902
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7761
7903
  ], PacemOrbitCameraBehaviorElement.prototype, "maxPolar", void 0);
7762
- __decorate21([
7904
+ __decorate22([
7763
7905
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7764
7906
  ], PacemOrbitCameraBehaviorElement.prototype, "minAzimuth", void 0);
7765
- __decorate21([
7907
+ __decorate22([
7766
7908
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7767
7909
  ], PacemOrbitCameraBehaviorElement.prototype, "minPolar", void 0);
7768
- __decorate21([
7910
+ __decorate22([
7769
7911
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7770
7912
  ], PacemOrbitCameraBehaviorElement.prototype, "zoomControl", void 0);
7771
- __decorate21([
7913
+ __decorate22([
7772
7914
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7773
7915
  ], PacemOrbitCameraBehaviorElement.prototype, "rotationControl", void 0);
7774
- __decorate21([
7916
+ __decorate22([
7775
7917
  Watch19({ emit: false, converter: PropertyConverters19.Number })
7776
7918
  ], PacemOrbitCameraBehaviorElement.prototype, "panControl", void 0);
7777
- __decorate21([
7919
+ __decorate22([
7778
7920
  Watch19({ emit: false, converter: BooleanOrNumberConverter })
7779
7921
  ], PacemOrbitCameraBehaviorElement.prototype, "inertia", void 0);
7780
- PacemOrbitCameraBehaviorElement = __decorate21([
7922
+ PacemOrbitCameraBehaviorElement = __decorate22([
7781
7923
  CustomElement18({ tagName: P19 + "-" + TAG_MIDDLE_NAME + "-orbit-camera" })
7782
7924
  ], PacemOrbitCameraBehaviorElement);
7783
-
7784
- // packages/3d/dist/esm/index-drawing3d.js
7785
- var index_drawing3d_exports = {};
7786
- __export(index_drawing3d_exports, {
7787
- BooleanOrNumberConverter: () => BooleanOrNumberConverter,
7788
- DragEvent: () => DragEvent,
7789
- KnownShader: () => KnownShader,
7790
- LineGeometry: () => LineGeometry,
7791
- MaterialElement: () => MaterialElement,
7792
- MeshGeometry: () => MeshGeometry,
7793
- NodeGeometry: () => NodeGeometry,
7794
- NotifyChange: () => NotifyChange,
7795
- Pacem3DAdapterElement: () => Pacem3DAdapterElement,
7796
- Pacem3DCameraElement: () => Pacem3DCameraElement,
7797
- Pacem3DGroupElement: () => Pacem3DGroupElement,
7798
- Pacem3DLightElement: () => Pacem3DLightElement,
7799
- Pacem3DMeshElement: () => Pacem3DMeshElement,
7800
- Pacem3DObjectElement: () => Pacem3DObjectElement,
7801
- Pacem3DOrthographicCameraElement: () => Pacem3DOrthographicCameraElement,
7802
- Pacem3DPerspectiveCameraElement: () => Pacem3DPerspectiveCameraElement,
7803
- Point3DConverter: () => Point3DConverter,
7804
- Point3DOrNumberConverter: () => Point3DOrNumberConverter,
7805
- QuaternionConverter: () => QuaternionConverter,
7806
- RenderableElement: () => RenderableElement,
7807
- RenderableEvent: () => RenderableEvent,
7808
- StalePropertyFlag: () => StalePropertyFlag,
7809
- UI3DEvent: () => UI3DEvent,
7810
- Ui3DElement: () => Ui3DElement,
7811
- computePlaneNormal: () => computePlaneNormal,
7812
- computeSharpVertexNormals: () => computeSharpVertexNormals,
7813
- isBasicMaterial: () => isBasicMaterial,
7814
- isCamera: () => isCamera,
7815
- isGeometry: () => isGeometry,
7816
- isGroup: () => isGroup,
7817
- isInteraction: () => isInteraction,
7818
- isLambertMaterial: () => isLambertMaterial,
7819
- isLight: () => isLight,
7820
- isLineMaterial: () => isLineMaterial,
7821
- isMaterial: () => isMaterial,
7822
- isMesh: () => isMesh,
7823
- isMeshGeometry: () => isMeshGeometry,
7824
- isOrthographicCamera: () => isOrthographicCamera,
7825
- isPerspectiveCamera: () => isPerspectiveCamera,
7826
- isPhongMaterial: () => isPhongMaterial,
7827
- isRenderable: () => isRenderable,
7828
- isShaderMaterial: () => isShaderMaterial,
7829
- isStage: () => isStage,
7830
- isStandardMaterial: () => isStandardMaterial,
7831
- isUi3DObject: () => isUi3DObject
7832
- });
7833
-
7834
- // packages/3d/dist/esm/parsers/parser.js
7835
- import { Transformer } from "@pacem/pacem-core";
7836
- import { Point as Point2 } from "@pacem/pacem-foundation";
7837
- var __decorate22 = function(decorators, target, key, desc) {
7838
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7839
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7840
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7841
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7842
- };
7843
- var OBJParser = class {
7844
- /**
7845
- * Parses `v` (vertex), `vt` (texture coordinate), `vn` (normal) and `f` (face) records out of `content`,
7846
- * triangulating any face with more than 3 vertices (fan triangulation).
7847
- */
7848
- static parse(content) {
7849
- const vertices = [];
7850
- const vParser = /^v((\s+-?[\d\.]+){3})/gm;
7851
- let arr = vParser.exec(content);
7852
- while (arr && arr.length) {
7853
- vertices.push(Point3DConverter.convert(arr[1]));
7854
- arr = vParser.exec(content);
7855
- }
7856
- const vt = [];
7857
- const tParser = /^vt((\s+-?[\d\.]+){2})/gm;
7858
- arr = tParser.exec(content);
7859
- while (arr && arr.length) {
7860
- vt.push(Point2.parse(arr[1]));
7861
- arr = tParser.exec(content);
7862
- }
7863
- const vn = [];
7864
- const nParser = /^vn((\s+-?[\d\.]+){3})/gm;
7865
- arr = nParser.exec(content);
7866
- while (arr && arr.length) {
7867
- vn.push(Point3DConverter.convert(arr[1]));
7868
- arr = nParser.exec(content);
7869
- }
7870
- const normals = [];
7871
- const uv = [];
7872
- const positions = [];
7873
- const fParser = /^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;
7874
- arr = fParser.exec(content);
7875
- while (arr && arr.length) {
7876
- const fjParser = /([\d]+)\/([\d]+)\/([\d]+)/g;
7877
- const face = arr[1];
7878
- let jArr = fjParser.exec(face);
7879
- let jIndex = 0;
7880
- var vIndex0, tIndex0, nIndex0;
7881
- var vIndex, tIndex, nIndex;
7882
- while (jArr && jArr.length) {
7883
- if (jIndex > 2) {
7884
- positions.push(vIndex0);
7885
- uv.push(vt[tIndex0]);
7886
- normals.push(vn[nIndex0]);
7887
- positions.push(vIndex);
7888
- uv.push(vt[tIndex]);
7889
- normals.push(vn[nIndex]);
7890
- }
7891
- vIndex = parseInt(jArr[1]) - 1;
7892
- tIndex = parseInt(jArr[2]) - 1;
7893
- nIndex = parseInt(jArr[3]) - 1;
7894
- positions.push(vIndex);
7895
- uv.push(vt[tIndex]);
7896
- normals.push(vn[nIndex]);
7897
- if (jIndex === 0) {
7898
- vIndex0 = vIndex;
7899
- tIndex0 = tIndex;
7900
- nIndex0 = nIndex;
7901
- }
7902
- jIndex++;
7903
- jArr = fjParser.exec(face);
7904
- }
7905
- arr = fParser.exec(content);
7906
- }
7907
- return new MeshGeometry(vertices, positions, uv, normals);
7908
- }
7909
- };
7910
- var Parser3D = class {
7911
- /**
7912
- * Parses `content` according to `type` into a {@link NodeGeometry} (currently only the `'obj'` Wavefront format,
7913
- * via {@link OBJParser}) or a {@link Material}. Throws for any other/unsupported `type` (e.g. `'mtl'`, not yet implemented).
7914
- */
7915
- static parseGeometry(content, type) {
7916
- switch (type.toLowerCase()) {
7917
- case "obj":
7918
- return OBJParser.parse(content);
7919
- default:
7920
- throw new Error(`Type '${type}' is not supported.`);
7921
- }
7922
- }
7923
- };
7924
- __decorate22([
7925
- Transformer("parse3D")
7926
- ], Parser3D, "parseGeometry", null);
7927
7925
  export {
7928
7926
  index_components_exports as Components,
7929
7927
  index_drawing3d_exports as Drawing3D