@preference-sl/pref-viewer 2.3.4 → 2.4.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 (2) hide show
  1. package/package.json +8 -2
  2. package/src/index.js +1 -33
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "@preference-sl/pref-viewer",
3
- "version": "2.3.4",
4
3
  "description": "Web Component to preview GLTF models with Babylon.js",
5
4
  "author": "Alex Moreno Palacio <amoreno@preference.es>",
5
+ "scripts": {
6
+ "release": "standard-version --releaseCommitMessageFormat \"chore(release): {{currentTag}} [skip ci]\""
7
+ },
6
8
  "repository": {
7
9
  "type": "git",
8
10
  "url": "git+https://bitbucket.org/preferencesl/pref-viewer.git"
@@ -30,5 +32,9 @@
30
32
  "dependencies": {
31
33
  "@babylonjs/core": "^8.0.0",
32
34
  "@babylonjs/loaders": "^8.0.0"
33
- }
35
+ },
36
+ "devDependencies": {
37
+ "standard-version": "^9.5.0"
38
+ },
39
+ "version": "2.4.0"
34
40
  }
package/src/index.js CHANGED
@@ -55,7 +55,6 @@ import "@babylonjs/loaders";
55
55
  class PrefViewer extends HTMLElement {
56
56
  constructor() {
57
57
  super();
58
- console.log("PrefViewer: constructor");
59
58
  this.attachShadow({ mode: "open" });
60
59
  this._createCanvas();
61
60
  this._wrapCanvas();
@@ -79,10 +78,8 @@ class PrefViewer extends HTMLElement {
79
78
  }
80
79
 
81
80
  attributeChangedCallback(name, _oldValue, newValue) {
82
- console.log(`PrefViewer: attributeChangedCallback - ${name} -> ${newValue}`);
83
81
  if (name === "model" && newValue) {
84
82
  this.modelUrl = newValue;
85
- console.log(`PrefViewer: modelUrl set to ${this.modelUrl}`);
86
83
  // Only reload if initialization has already happened
87
84
  if (this._hasInitialized) {
88
85
  this._reloadModel();
@@ -91,7 +88,6 @@ class PrefViewer extends HTMLElement {
91
88
  }
92
89
 
93
90
  connectedCallback() {
94
- console.log("PrefViewer: connectedCallback");
95
91
 
96
92
  // Set up the plugin hook ONCE globally before any other initialization
97
93
  if (!this._pluginHookSetup) {
@@ -102,10 +98,8 @@ class PrefViewer extends HTMLElement {
102
98
  // 1) Determine modelUrl now that element is connected
103
99
  if (!this.hasAttribute("model")) {
104
100
  this.modelUrl = new URL("./models/window.gltf", import.meta.url).href;
105
- console.log(`PrefViewer: no model attribute, defaulting to ${this.modelUrl}`);
106
101
  } else {
107
102
  this.modelUrl = this.getAttribute("model");
108
- console.log(`PrefViewer: model attribute present, using ${this.modelUrl}`);
109
103
  }
110
104
 
111
105
  // 2) Initialize Babylon (engine + scene + camera + lights + hooks)
@@ -119,7 +113,6 @@ class PrefViewer extends HTMLElement {
119
113
  }
120
114
 
121
115
  disconnectedCallback() {
122
- console.log("PrefViewer: disconnectedCallback - disposing engine");
123
116
  this._disposeEngine();
124
117
  if (this._onWindowResize) {
125
118
  window.removeEventListener("resize", this._onWindowResize);
@@ -128,7 +121,6 @@ class PrefViewer extends HTMLElement {
128
121
 
129
122
  // ====== URL Preprocessing Setup ======
130
123
  _setupUrlPreprocessing() {
131
- console.log("PrefViewer: Setting up URL preprocessing hook");
132
124
 
133
125
  const transformUrl = (url) => {
134
126
  // a) If the loader already prepended "blob:…", strip it out.
@@ -138,35 +130,28 @@ class PrefViewer extends HTMLElement {
138
130
  );
139
131
  // b) Normalize backslashes "\" → forward slashes "/"
140
132
  const fixedSlashes = stripped.replace(/\\/g, "/");
141
- console.log(
142
- `PrefViewer: preprocessUrl received "${url}", stripped to "${stripped}", normalized to "${fixedSlashes}"`
143
- );
133
+
144
134
  // c) If it now starts with "http://" or "https://", return it as an absolute URL:
145
135
  if (/^https?:\/\//i.test(fixedSlashes)) {
146
- console.log(`PrefViewer: preprocessUrl returning absolute URL "${fixedSlashes}"`);
147
136
  return fixedSlashes;
148
137
  }
149
138
  // d) Otherwise, return the relative path
150
- console.log(`PrefViewer: preprocessUrl returning relative URL "${fixedSlashes}"`);
151
139
  return fixedSlashes;
152
140
  };
153
141
 
154
142
  SceneLoader.OnPluginActivatedObservable.add((plugin) => {
155
- console.log(`PrefViewer: Plugin activated - ${plugin.name}`);
156
143
  if (plugin.name === "gltf" || plugin.name === "gltf2") {
157
144
  // Support both sync and async preprocessing
158
145
  plugin.preprocessUrl = transformUrl;
159
146
  if (typeof plugin.preprocessUrlAsync === 'function' || plugin.preprocessUrlAsync === undefined) {
160
147
  plugin.preprocessUrlAsync = (url) => Promise.resolve(transformUrl(url));
161
148
  }
162
- console.log("PrefViewer: URL preprocessing hooks set up for GLTF plugin");
163
149
  }
164
150
  });
165
151
  }
166
152
 
167
153
  // ====== Private setup methods ======
168
154
  _createCanvas() {
169
- console.log("PrefViewer: _createCanvas");
170
155
  this.canvas = document.createElement("canvas");
171
156
  Object.assign(this.canvas.style, {
172
157
  width: "100%",
@@ -176,7 +161,6 @@ class PrefViewer extends HTMLElement {
176
161
  }
177
162
 
178
163
  _wrapCanvas() {
179
- console.log("PrefViewer: _wrapCanvas");
180
164
  const wrapper = document.createElement("div");
181
165
  Object.assign(wrapper.style, {
182
166
  width: "100%",
@@ -188,7 +172,6 @@ class PrefViewer extends HTMLElement {
188
172
  }
189
173
 
190
174
  _initializeBabylon() {
191
- console.log("PrefViewer: _initializeBabylon - creating engine and scene");
192
175
 
193
176
  // 1) Create the Babylon engine & scene
194
177
  this.engine = new Engine(this.canvas, true, { alpha: true });
@@ -196,16 +179,13 @@ class PrefViewer extends HTMLElement {
196
179
  this.scene.clearColor = new Color4(1, 1, 1, 1);
197
180
 
198
181
  // 2) Create camera and lights
199
- console.log("PrefViewer: _createCamera and _createLights");
200
182
  this._createCamera();
201
183
  this._createLights();
202
184
 
203
185
  // 3) Hook up input/event handlers (e.g. wheel-to-zoom)
204
- console.log("PrefViewer: _setupEventListeners");
205
186
  this._setupEventListeners();
206
187
 
207
188
  // 4) Start Babylon's render loop
208
- console.log("PrefViewer: Starting render loop");
209
189
  this.engine.runRenderLoop(() => {
210
190
  if (this.scene) {
211
191
  this.scene.render();
@@ -213,7 +193,6 @@ class PrefViewer extends HTMLElement {
213
193
  });
214
194
 
215
195
  this._onWindowResize = () => {
216
- console.log("PrefViewer: Window resized - calling engine.resize()");
217
196
  if (this.engine) {
218
197
  this.engine.resize();
219
198
  }
@@ -222,7 +201,6 @@ class PrefViewer extends HTMLElement {
222
201
  }
223
202
 
224
203
  _createCamera() {
225
- console.log("PrefViewer: _createCamera");
226
204
  // ArcRotateCamera that orbits around origin
227
205
  this.camera = new ArcRotateCamera(
228
206
  "camera",
@@ -236,7 +214,6 @@ class PrefViewer extends HTMLElement {
236
214
  }
237
215
 
238
216
  _createLights() {
239
- console.log("PrefViewer: _createLights");
240
217
  this.hemiLight = new HemisphericLight(
241
218
  "hemiLight",
242
219
  new Vector3(0, 1, 0),
@@ -254,7 +231,6 @@ class PrefViewer extends HTMLElement {
254
231
  }
255
232
 
256
233
  _setupEventListeners() {
257
- console.log("PrefViewer: _setupEventListeners");
258
234
  // Zoom toward point-of-interest on wheel scroll
259
235
  this.canvas.addEventListener("wheel", (evt) => {
260
236
  if (!this.scene || !this.camera) return;
@@ -274,7 +250,6 @@ class PrefViewer extends HTMLElement {
274
250
 
275
251
  // ====== Model loading / management ======
276
252
  async _reloadModel() {
277
- console.log(`PrefViewer: _reloadModel - loading ${this.modelUrl}`);
278
253
  if (!this.scene || !this.modelUrl) {
279
254
  console.warn("PrefViewer: _reloadModel aborted (scene or modelUrl missing)");
280
255
  return;
@@ -284,7 +259,6 @@ class PrefViewer extends HTMLElement {
284
259
  this._disposePreviousMeshes();
285
260
 
286
261
  try {
287
- console.log(`PrefViewer: ImportMeshAsync("${this.modelUrl}")`);
288
262
  const result = await SceneLoader.ImportMeshAsync(
289
263
  null,
290
264
  "",
@@ -293,10 +267,8 @@ class PrefViewer extends HTMLElement {
293
267
  undefined,
294
268
  ".gltf"
295
269
  );
296
- console.log("PrefViewer: Model loaded, creating default camera/light if needed");
297
270
  this.scene.createDefaultCameraOrLight(true, true, true);
298
271
 
299
- console.log("PrefViewer: Dispatching model-loaded event");
300
272
  this.dispatchEvent(
301
273
  new CustomEvent("model-loaded", {
302
274
  detail: {
@@ -309,7 +281,6 @@ class PrefViewer extends HTMLElement {
309
281
  );
310
282
  } catch (err) {
311
283
  console.error("PrefViewer: Error loading model:", err);
312
- console.log("PrefViewer: Dispatching model-error event");
313
284
  this.dispatchEvent(
314
285
  new CustomEvent("model-error", {
315
286
  detail: { error: err },
@@ -321,11 +292,9 @@ class PrefViewer extends HTMLElement {
321
292
  }
322
293
 
323
294
  _disposePreviousMeshes() {
324
- console.log("PrefViewer: _disposePreviousMeshes");
325
295
  if (!this.scene) return;
326
296
  this.scene.meshes.slice().forEach((mesh) => {
327
297
  if (mesh.getClassName() === "Mesh") {
328
- console.log(`PrefViewer: Disposing mesh ${mesh.name}`);
329
298
  mesh.dispose();
330
299
  }
331
300
  });
@@ -333,7 +302,6 @@ class PrefViewer extends HTMLElement {
333
302
 
334
303
  // ====== Cleanup ======
335
304
  _disposeEngine() {
336
- console.log("PrefViewer: _disposeEngine");
337
305
  if (this.engine) {
338
306
  this.engine.dispose();
339
307
  this.engine = null;