@inweb/viewer-core 27.1.5 → 27.1.7

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.
@@ -272,10 +272,6 @@
272
272
  static defaults() {
273
273
  return defaultOptions();
274
274
  }
275
- notifierChangeEvent() {
276
- console.warn("Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.");
277
- this.change();
278
- }
279
275
  change() {
280
276
  if (this._emitter !== undefined) {
281
277
  this.saveToStorage();
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-core.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n\n yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\n }\n\n extractFileName(file: FileSource): string {\n const regex = /[^/\\\\?#:]+(?=\\?|#|$)/;\n\n if (typeof file === \"string\") return (file.match(regex) || [])[0];\n else if (file instanceof globalThis.File) return (file.name.match(regex) || [])[0];\n\n return undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Deprecated since `25.8`.\n */\n geometryType?: string;\n\n /**\n * Unit of measurement for the ruler tool (distance measurements).\n *\n * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are\n * automatically converted to the specified unit.\n *\n * Available values:\n *\n * - `Default` - Use file's native units (recommended)\n * - `Millimeters`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - Imperial: 0.0000000254 m\n *\n * @defaultValue \"Default\"\n */\n rulerUnit?: string;\n\n /**\n * Number of decimal places to display in ruler measurements.\n *\n * Controls the precision of distance values shown by the ruler tool. Higher values provide more\n * precision but may clutter the display with unnecessary digits.\n *\n * Available values:\n *\n * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.\n * - `Auto` - Automatically choose precision based on distance value.\n * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).\n *\n * @defaultValue 2\n */\n rulerPrecision?: any;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType?: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality?: number;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n rulerPrecision: 2,\n cameraMode: \"perspective\",\n snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n notifierChangeEvent(): void {\n console.warn(\n \"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\"\n );\n this.change();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get rulerPrecision(): any {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: any) {\n this._data.rulerPrecision = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewer-core.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n\n yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\n }\n\n extractFileName(file: FileSource): string {\n const regex = /[^/\\\\?#:]+(?=\\?|#|$)/;\n\n if (typeof file === \"string\") return (file.match(regex) || [])[0];\n else if (file instanceof globalThis.File) return (file.name.match(regex) || [])[0];\n\n return undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\n */\n geometryType?: string;\n\n /**\n * Unit of measurement for the ruler tool (distance measurements).\n *\n * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are\n * automatically converted to the specified unit.\n *\n * Available values:\n *\n * - `Default` - Use file's native units (recommended)\n * - `Millimeters`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - Imperial: 0.0000000254 m\n *\n * @defaultValue \"Default\"\n */\n rulerUnit?: string;\n\n /**\n * Number of decimal places to display in ruler measurements.\n *\n * Controls the precision of distance values shown by the ruler tool. Higher values provide more\n * precision but may clutter the display with unnecessary digits.\n *\n * Available values:\n *\n * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.\n * - `Auto` - Automatically choose precision based on distance value.\n * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).\n *\n * @defaultValue 2\n */\n rulerPrecision?: any;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType?: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality?: number;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n rulerPrecision: 2,\n cameraMode: \"perspective\",\n snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get rulerPrecision(): any {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: any) {\n this._data.rulerPrecision = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -266,10 +266,6 @@ class Options {
266
266
  static defaults() {
267
267
  return defaultOptions();
268
268
  }
269
- notifierChangeEvent() {
270
- console.warn("Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.");
271
- this.change();
272
- }
273
269
  change() {
274
270
  if (this._emitter !== undefined) {
275
271
  this.saveToStorage();
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-core.module.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n\n yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\n }\n\n extractFileName(file: FileSource): string {\n const regex = /[^/\\\\?#:]+(?=\\?|#|$)/;\n\n if (typeof file === \"string\") return (file.match(regex) || [])[0];\n else if (file instanceof globalThis.File) return (file.name.match(regex) || [])[0];\n\n return undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Deprecated since `25.8`.\n */\n geometryType?: string;\n\n /**\n * Unit of measurement for the ruler tool (distance measurements).\n *\n * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are\n * automatically converted to the specified unit.\n *\n * Available values:\n *\n * - `Default` - Use file's native units (recommended)\n * - `Millimeters`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - Imperial: 0.0000000254 m\n *\n * @defaultValue \"Default\"\n */\n rulerUnit?: string;\n\n /**\n * Number of decimal places to display in ruler measurements.\n *\n * Controls the precision of distance values shown by the ruler tool. Higher values provide more\n * precision but may clutter the display with unnecessary digits.\n *\n * Available values:\n *\n * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.\n * - `Auto` - Automatically choose precision based on distance value.\n * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).\n *\n * @defaultValue 2\n */\n rulerPrecision?: any;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType?: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality?: number;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n rulerPrecision: 2,\n cameraMode: \"perspective\",\n snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n notifierChangeEvent(): void {\n console.warn(\n \"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\"\n );\n this.change();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get rulerPrecision(): any {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: any) {\n this._data.rulerPrecision = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewer-core.module.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n\n yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\n }\n\n extractFileName(file: FileSource): string {\n const regex = /[^/\\\\?#:]+(?=\\?|#|$)/;\n\n if (typeof file === \"string\") return (file.match(regex) || [])[0];\n else if (file instanceof globalThis.File) return (file.name.match(regex) || [])[0];\n\n return undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\n */\n geometryType?: string;\n\n /**\n * Unit of measurement for the ruler tool (distance measurements).\n *\n * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are\n * automatically converted to the specified unit.\n *\n * Available values:\n *\n * - `Default` - Use file's native units (recommended)\n * - `Millimeters`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - Imperial: 0.0000000254 m\n *\n * @defaultValue \"Default\"\n */\n rulerUnit?: string;\n\n /**\n * Number of decimal places to display in ruler measurements.\n *\n * Controls the precision of distance values shown by the ruler tool. Higher values provide more\n * precision but may clutter the display with unnecessary digits.\n *\n * Available values:\n *\n * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.\n * - `Auto` - Automatically choose precision based on distance value.\n * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).\n *\n * @defaultValue 2\n */\n rulerPrecision?: any;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType?: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality?: number;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n rulerPrecision: 2,\n cameraMode: \"perspective\",\n snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get rulerPrecision(): any {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: any) {\n this._data.rulerPrecision = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -8,23 +8,10 @@ export interface IDragger {
8
8
  * {@link Viewer.setActiveDragger | Viewer.setActiveDragger()}
9
9
  */
10
10
  name?: string;
11
- /**
12
- * Deprecated since `25.12`. Use costructor instead to initialize dragger.
13
- *
14
- * @deprecated
15
- */
16
- initialize?(): void;
17
11
  /**
18
12
  * Releases resources allocated by the dragger.
19
13
  */
20
14
  dispose(): void;
21
- /**
22
- * Deprecated since `25.12`. Instead, register an `update` event listener for the viewer and update the
23
- * dragger preview in the event handler.
24
- *
25
- * @deprecated
26
- */
27
- updatePreview?(): void;
28
15
  }
29
16
  /**
30
17
  * Dragger provider is a function that creates a dragger instance for the specified viewer.
@@ -166,7 +166,10 @@ export interface IOptions {
166
166
  */
167
167
  enableGestures: boolean;
168
168
  /**
169
- * Deprecated since `25.8`.
169
+ * Preferred viewer for newely uploaded files. Can be one of:
170
+ *
171
+ * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.
172
+ * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.
170
173
  */
171
174
  geometryType?: string;
172
175
  /**
@@ -5,7 +5,6 @@ export declare class Options implements IOptions {
5
5
  protected _data: IOptions;
6
6
  constructor(emitter?: EventEmitter2);
7
7
  static defaults(): IOptions;
8
- notifierChangeEvent(): void;
9
8
  change(): void;
10
9
  saveToStorage(): void;
11
10
  loadFromStorage(): void;
@@ -128,6 +128,7 @@ export interface IViewer extends IEventEmitter, ICommandService {
128
128
  * Fires:
129
129
  *
130
130
  * - {@link UpdateEvent | update}
131
+ * - {@link RenderEvent | render}
131
132
  *
132
133
  * @param force - If `true` updates the viewer immidietly. Otherwise the update will be scheduled for
133
134
  * the next animation frame. Default is `false`.
@@ -139,12 +139,6 @@ export interface DatabaseChunkEvent {
139
139
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
140
140
  */
141
141
  model?: Model;
142
- /**
143
- * Deprecated since `26.4`. Use {@link file} instead.
144
- *
145
- * @deprecated
146
- */
147
- buffer?: Uint8Array | ArrayBuffer;
148
142
  }
149
143
  /**
150
144
  * Event that fires before viewer resources has been released.
@@ -210,12 +204,6 @@ export interface GeometryChunkEvent {
210
204
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
211
205
  */
212
206
  model?: Model;
213
- /**
214
- * Deprecated since `26.4`. Use {@link file} instead.
215
- *
216
- * @deprecated
217
- */
218
- buffer?: Uint8Array | ArrayBuffer;
219
207
  }
220
208
  /**
221
209
  * Event that fires after file has been successfully loaded.
@@ -235,12 +223,6 @@ export interface GeometryEndEvent {
235
223
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
236
224
  */
237
225
  model?: Model;
238
- /**
239
- * Deprecated since `26.4`. Use {@link file} instead.
240
- *
241
- * @deprecated
242
- */
243
- buffer?: Uint8Array | ArrayBuffer;
244
226
  }
245
227
  /**
246
228
  * Event that fires when the file fails to load.
@@ -264,12 +246,6 @@ export interface GeometryErrorEvent {
264
246
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
265
247
  */
266
248
  model?: Model;
267
- /**
268
- * Deprecated since `26.4`. Use {@link file} instead.
269
- *
270
- * @deprecated
271
- */
272
- buffer?: Uint8Array | ArrayBuffer;
273
249
  }
274
250
  /**
275
251
  * Event that measures the progress of the file loading.
@@ -293,12 +269,6 @@ export interface GeometryProgressEvent {
293
269
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
294
270
  */
295
271
  model?: Model;
296
- /**
297
- * Deprecated since `26.4`. Use {@link file} instead.
298
- *
299
- * @deprecated
300
- */
301
- buffer?: Uint8Array | ArrayBuffer;
302
272
  }
303
273
  /**
304
274
  * Event that fires before the file loads.
@@ -318,12 +288,6 @@ export interface GeometryStartEvent {
318
288
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
319
289
  */
320
290
  model?: Model;
321
- /**
322
- * Deprecated since `26.4`. Use {@link file} instead.
323
- *
324
- * @deprecated
325
- */
326
- buffer?: Uint8Array | ArrayBuffer;
327
291
  }
328
292
  /**
329
293
  * Event that fires after selected objects becomes invisible.
@@ -401,12 +365,6 @@ export interface OpenEvent {
401
365
  * File to load.
402
366
  */
403
367
  file: File | Assembly | Model | string | globalThis.File | ArrayBuffer;
404
- /**
405
- * Deprecated since `26.4`. Use {@link file} instead.
406
- *
407
- * @deprecated
408
- */
409
- buffer?: Uint8Array | ArrayBuffer;
410
368
  }
411
369
  /**
412
370
  * Event that fires when camera rotating.
@@ -560,32 +518,6 @@ export interface UpdateEvent {
560
518
  * `true` to force the update, otherwise the update is delayed until the next animation frame.
561
519
  */
562
520
  force: boolean;
563
- /**
564
- * Deprecated since `27.0`. Use `force` instead.
565
- */
566
- data?: boolean;
567
- }
568
- /**
569
- * Deprecated since `25.4`. Use {@link InitializeProgressEvent | initializeprogress} instead.
570
- *
571
- * @deprecated
572
- * @event
573
- */
574
- export interface VisualizeProgressEvent {
575
- /**
576
- * Event type.
577
- */
578
- type: "visualizeprogress";
579
- /**
580
- * A 64-bit unsigned integer value indicating the amount of work already performed by the underlying
581
- * process. The ratio of work done can be calculated by dividing total by the value of this property.
582
- */
583
- loaded: number;
584
- /**
585
- * A 64-bit unsigned integer representing the total amount of work that the underlying process is in
586
- * the progress of performing.
587
- */
588
- total: number;
589
521
  }
590
522
  /**
591
523
  * Event that fires after viewer loads a viewpoint.
@@ -845,12 +777,6 @@ export interface ViewerEventMap {
845
777
  * Event that fires when an update occurs.
846
778
  */
847
779
  update: UpdateEvent;
848
- /**
849
- * Deprecated since `25.4`. Use {@link InitializeProgressEvent | initializeprogress} instead.
850
- *
851
- * @deprecated
852
- */
853
- visualizeprogress: VisualizeProgressEvent;
854
780
  /**
855
781
  * Event that fires when walk speed changing.
856
782
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inweb/viewer-core",
3
- "version": "27.1.5",
3
+ "version": "27.1.7",
4
4
  "description": "3D CAD and BIM data Viewer core",
5
5
  "homepage": "https://cloud.opendesign.com/docs/index.html",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -26,7 +26,7 @@
26
26
  "test": "karma start karma.conf.js"
27
27
  },
28
28
  "dependencies": {
29
- "@inweb/client": "~27.1.5",
30
- "@inweb/eventemitter2": "~27.1.5"
29
+ "@inweb/client": "~27.1.7",
30
+ "@inweb/eventemitter2": "~27.1.7"
31
31
  }
32
32
  }
@@ -33,25 +33,10 @@ export interface IDragger {
33
33
  */
34
34
  name?: string;
35
35
 
36
- /**
37
- * Deprecated since `25.12`. Use costructor instead to initialize dragger.
38
- *
39
- * @deprecated
40
- */
41
- initialize?(): void;
42
-
43
36
  /**
44
37
  * Releases resources allocated by the dragger.
45
38
  */
46
39
  dispose(): void;
47
-
48
- /**
49
- * Deprecated since `25.12`. Instead, register an `update` event listener for the viewer and update the
50
- * dragger preview in the event handler.
51
- *
52
- * @deprecated
53
- */
54
- updatePreview?(): void;
55
40
  }
56
41
 
57
42
  /**
@@ -207,7 +207,10 @@ export interface IOptions {
207
207
  enableGestures: boolean;
208
208
 
209
209
  /**
210
- * Deprecated since `25.8`.
210
+ * Preferred viewer for newely uploaded files. Can be one of:
211
+ *
212
+ * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.
213
+ * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.
211
214
  */
212
215
  geometryType?: string;
213
216
 
@@ -38,13 +38,6 @@ export class Options implements IOptions {
38
38
  return defaultOptions();
39
39
  }
40
40
 
41
- notifierChangeEvent(): void {
42
- console.warn(
43
- "Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead."
44
- );
45
- this.change();
46
- }
47
-
48
41
  change(): void {
49
42
  if (this._emitter !== undefined) {
50
43
  this.saveToStorage();
@@ -165,6 +165,7 @@ export interface IViewer extends IEventEmitter, ICommandService {
165
165
  * Fires:
166
166
  *
167
167
  * - {@link UpdateEvent | update}
168
+ * - {@link RenderEvent | render}
168
169
  *
169
170
  * @param force - If `true` updates the viewer immidietly. Otherwise the update will be scheduled for
170
171
  * the next animation frame. Default is `false`.
@@ -176,13 +176,6 @@ export interface DatabaseChunkEvent {
176
176
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
177
177
  */
178
178
  model?: Model;
179
-
180
- /**
181
- * Deprecated since `26.4`. Use {@link file} instead.
182
- *
183
- * @deprecated
184
- */
185
- buffer?: Uint8Array | ArrayBuffer;
186
179
  }
187
180
 
188
181
  /**
@@ -256,13 +249,6 @@ export interface GeometryChunkEvent {
256
249
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
257
250
  */
258
251
  model?: Model;
259
-
260
- /**
261
- * Deprecated since `26.4`. Use {@link file} instead.
262
- *
263
- * @deprecated
264
- */
265
- buffer?: Uint8Array | ArrayBuffer;
266
252
  }
267
253
 
268
254
  /**
@@ -285,13 +271,6 @@ export interface GeometryEndEvent {
285
271
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
286
272
  */
287
273
  model?: Model;
288
-
289
- /**
290
- * Deprecated since `26.4`. Use {@link file} instead.
291
- *
292
- * @deprecated
293
- */
294
- buffer?: Uint8Array | ArrayBuffer;
295
274
  }
296
275
 
297
276
  /**
@@ -319,13 +298,6 @@ export interface GeometryErrorEvent {
319
298
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
320
299
  */
321
300
  model?: Model;
322
-
323
- /**
324
- * Deprecated since `26.4`. Use {@link file} instead.
325
- *
326
- * @deprecated
327
- */
328
- buffer?: Uint8Array | ArrayBuffer;
329
301
  }
330
302
 
331
303
  /**
@@ -353,13 +325,6 @@ export interface GeometryProgressEvent {
353
325
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
354
326
  */
355
327
  model?: Model;
356
-
357
- /**
358
- * Deprecated since `26.4`. Use {@link file} instead.
359
- *
360
- * @deprecated
361
- */
362
- buffer?: Uint8Array | ArrayBuffer;
363
328
  }
364
329
 
365
330
  /**
@@ -382,13 +347,6 @@ export interface GeometryStartEvent {
382
347
  * Model from file to load. Only defined when loading a file from the Open Cloud Server.
383
348
  */
384
349
  model?: Model;
385
-
386
- /**
387
- * Deprecated since `26.4`. Use {@link file} instead.
388
- *
389
- * @deprecated
390
- */
391
- buffer?: Uint8Array | ArrayBuffer;
392
350
  }
393
351
 
394
352
  /**
@@ -476,13 +434,6 @@ export interface OpenEvent {
476
434
  * File to load.
477
435
  */
478
436
  file: File | Assembly | Model | string | globalThis.File | ArrayBuffer;
479
-
480
- /**
481
- * Deprecated since `26.4`. Use {@link file} instead.
482
- *
483
- * @deprecated
484
- */
485
- buffer?: Uint8Array | ArrayBuffer;
486
437
  }
487
438
 
488
439
  /**
@@ -658,36 +609,6 @@ export interface UpdateEvent {
658
609
  * `true` to force the update, otherwise the update is delayed until the next animation frame.
659
610
  */
660
611
  force: boolean;
661
-
662
- /**
663
- * Deprecated since `27.0`. Use `force` instead.
664
- */
665
- data?: boolean;
666
- }
667
-
668
- /**
669
- * Deprecated since `25.4`. Use {@link InitializeProgressEvent | initializeprogress} instead.
670
- *
671
- * @deprecated
672
- * @event
673
- */
674
- export interface VisualizeProgressEvent {
675
- /**
676
- * Event type.
677
- */
678
- type: "visualizeprogress";
679
-
680
- /**
681
- * A 64-bit unsigned integer value indicating the amount of work already performed by the underlying
682
- * process. The ratio of work done can be calculated by dividing total by the value of this property.
683
- */
684
- loaded: number;
685
-
686
- /**
687
- * A 64-bit unsigned integer representing the total amount of work that the underlying process is in
688
- * the progress of performing.
689
- */
690
- total: number;
691
612
  }
692
613
 
693
614
  /**
@@ -997,13 +918,6 @@ export interface ViewerEventMap {
997
918
  */
998
919
  update: UpdateEvent;
999
920
 
1000
- /**
1001
- * Deprecated since `25.4`. Use {@link InitializeProgressEvent | initializeprogress} instead.
1002
- *
1003
- * @deprecated
1004
- */
1005
- visualizeprogress: VisualizeProgressEvent;
1006
-
1007
921
  /**
1008
922
  * Event that fires when walk speed changing.
1009
923
  */