vim-web 1.0.0-alpha.0 → 1.0.0-alpha.1

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.
package/dist/style.css CHANGED
@@ -810,6 +810,9 @@ video:where(.vim-component,.vim-component *) {
810
810
  .vc-ml-1 {
811
811
  margin-left: 0.25rem;
812
812
  }
813
+ .vc-ml-2 {
814
+ margin-left: 0.5rem;
815
+ }
813
816
  .vc-ml-5 {
814
817
  margin-left: 1.25rem;
815
818
  }
package/dist/vim-web.d.ts CHANGED
@@ -89,6 +89,14 @@ type RecursivePartial<T> = {
89
89
  @module viw-webgl-viewer
90
90
  */
91
91
 
92
+ /**
93
+ * How selected elements are filled (beyond the outline).
94
+ * - 'none': Outline only, no fill.
95
+ * - 'default': Tint selected meshes in the main render pass (zero cost).
96
+ * - 'xray': Tint + render selected on top of everything (1 extra pass).
97
+ * - 'seethrough': Tint + render a semi-transparent ghost where behind geometry (1 extra pass).
98
+ */
99
+ type SelectionFillMode = 'none' | 'default' | 'xray' | 'seethrough';
92
100
  type MaterialSettings = {
93
101
  /**
94
102
  * Ghost material options
@@ -132,6 +140,33 @@ type MaterialSettings = {
132
140
  */
133
141
  thickness: number;
134
142
  };
143
+ /**
144
+ * Selection fill options (beyond outlines).
145
+ */
146
+ selection: {
147
+ /**
148
+ * How selected elements are filled.
149
+ * Default: 'none'
150
+ */
151
+ fillMode: SelectionFillMode;
152
+ /**
153
+ * Tint color applied to selected elements.
154
+ * Default: rgb(0, 100, 255) — blue
155
+ */
156
+ color: THREE.Color;
157
+ /**
158
+ * Tint blend strength (0 = no tint, 1 = solid color).
159
+ * Default: 0.3
160
+ */
161
+ opacity: number;
162
+ /**
163
+ * Opacity of the overlay pass in 'xray' and 'seethrough' modes.
164
+ * In xray: applies to all selected geometry rendered on top.
165
+ * In seethrough: applies to selected geometry rendered behind other objects.
166
+ * Default: 0.25
167
+ */
168
+ overlayOpacity: number;
169
+ };
135
170
  };
136
171
  /**
137
172
  * Core renderer configuration, passed to `Core.Webgl.createViewer(settings)` at initialization.
@@ -375,6 +410,14 @@ interface IMaterials {
375
410
  outlineColor: THREE.Color;
376
411
  /** Clipping planes applied to all materials. Set to undefined to disable clipping. */
377
412
  clippingPlanes: THREE.Plane[] | undefined;
413
+ /** Selection fill mode: 'none' | 'default' | 'xray' | 'seethrough'. */
414
+ selectionFillMode: SelectionFillMode;
415
+ /** Color used to tint selected elements. */
416
+ selectionColor: THREE.Color;
417
+ /** Blend strength for selection tint (0 = off, 1 = solid). */
418
+ selectionOpacity: number;
419
+ /** Opacity of the overlay pass in 'xray' and 'seethrough' modes. */
420
+ selectionOverlayOpacity: number;
378
421
  /** Applies a full set of material settings from the viewer configuration. */
379
422
  applySettings(settings: MaterialSettings): void;
380
423
  }
@@ -931,19 +974,22 @@ interface IWebglCamera {
931
974
  * The default forward direction in Z-up space (X = right, Y = forward, Z = up).
932
975
  */
933
976
  defaultForward: THREE.Vector3;
977
+ /**
978
+ * When true, lockMovement and lockRotation are bypassed.
979
+ * Set temporarily to position the camera while ignoring user-configured constraints.
980
+ */
981
+ ignoreConstraints: boolean;
934
982
  /**
935
983
  * Interface for instantaneously moving the camera.
936
- * @param {boolean} [force=false] - Set to true to ignore locked axis and rotation.
937
984
  * @returns {ICameraMovement} The camera movement api.
938
985
  */
939
- snap(force?: boolean): ICameraMovement;
986
+ snap(): ICameraMovement;
940
987
  /**
941
988
  * Interface for smoothly moving the camera over time.
942
989
  * @param {number} [duration=1] - The duration of the camera movement animation.
943
- * @param {boolean} [force=false] - Set to true to ignore locked axis and rotation.
944
990
  * @returns {ICameraMovement} The camera movement api.
945
991
  */
946
- lerp(duration: number, force?: boolean): ICameraMovement;
992
+ lerp(duration: number): ICameraMovement;
947
993
  /**
948
994
  * Calculates the frustum size at a given point in the scene.
949
995
  * @param {THREE.Vector3} point - The point in the scene to calculate the frustum size at.
@@ -1534,6 +1580,10 @@ interface IWebglRenderer {
1534
1580
  getBoundingBox(target?: THREE.Box3): THREE.Box3 | undefined;
1535
1581
  /** When true (default), only renders when dirty (`requestRender()` was called). When false, renders every frame. */
1536
1582
  autoRender: boolean;
1583
+ /** Whether selection outlines are enabled. */
1584
+ outlineEnabled: boolean;
1585
+ /** Selection fill mode for the rendering pipeline. */
1586
+ selectionFillMode: SelectionFillMode;
1537
1587
  }
1538
1588
 
1539
1589
  /**
@@ -1600,7 +1650,7 @@ declare function createCoreWebglViewer(settings?: PartialViewerSettings): IWebgl
1600
1650
 
1601
1651
  declare namespace Core_Webgl {
1602
1652
  export { MaterialSet, createCoreWebglViewer as createViewer, isElement3D };
1603
- export type { AxesSettings, ICameraMovement, IElement3D, IGizmoAxes, IGizmoMarkers, IGizmoOrbit, IGizmos, IMarker, IMaterials, IMeasure, IRenderingSection, IScene, ISelectable, ISubset, IWebglCamera, IWebglLoadRequest, IWebglRaycastResult, IWebglRaycaster, IWebglRenderer, IWebglSectionBox, IWebglSelection, IWebglViewport, IWebglVim, MaterialSettings, MeasureStage, PartialViewerSettings, RequestSource, SubsetFilter, TransparencyMode, IWebglViewer as Viewer, ViewerSettings, VimPartialSettings, VimSettings };
1653
+ export type { AxesSettings, ICameraMovement, IElement3D, IGizmoAxes, IGizmoMarkers, IGizmoOrbit, IGizmos, IMarker, IMaterials, IMeasure, IRenderingSection, IScene, ISelectable, ISubset, IWebglCamera, IWebglLoadRequest, IWebglRaycastResult, IWebglRaycaster, IWebglRenderer, IWebglSectionBox, IWebglSelection, IWebglViewport, IWebglVim, MaterialSettings, MeasureStage, PartialViewerSettings, RequestSource, SelectionFillMode, SubsetFilter, TransparencyMode, IWebglViewer as Viewer, ViewerSettings, VimPartialSettings, VimSettings };
1604
1654
  }
1605
1655
 
1606
1656
  /**
@@ -2295,6 +2345,16 @@ interface IsolationApi {
2295
2345
  ghostOpacity: StateRef<number>;
2296
2346
  /** Whether transparent materials are rendered (observable). */
2297
2347
  transparency: StateRef<boolean>;
2348
+ /** Whether selection outlines are enabled (observable). */
2349
+ outlineEnabled: StateRef<boolean>;
2350
+ /** Outline quality: 'low' (0.5x) | 'medium' (1x) | 'high' (2x) render target scale. */
2351
+ outlineQuality: StateRef<string>;
2352
+ /** Outline thickness in screen pixels (1-5). */
2353
+ outlineThickness: StateRef<number>;
2354
+ /** Selection fill mode: 'none' | 'default' | 'xray' | 'seethrough' (observable). */
2355
+ selectionFillMode: StateRef<string>;
2356
+ /** Opacity of the overlay pass in 'xray' and 'seethrough' modes (0-1). */
2357
+ selectionOverlayOpacity: StateRef<number>;
2298
2358
  /** Whether room elements are shown (observable). */
2299
2359
  showRooms: StateRef<boolean>;
2300
2360
  /** Hook called when auto-isolate triggers. Use `update()` to add middleware. */
@@ -2824,7 +2884,19 @@ interface GenericBoolEntry {
2824
2884
  visible?: () => boolean;
2825
2885
  state: StateRef<boolean>;
2826
2886
  }
2827
- type GenericEntryType = GenericTextEntry | GenericBoolEntry | GenericNumberEntry;
2887
+ interface GenericSelectEntry {
2888
+ type: "select";
2889
+ id: string;
2890
+ label: string;
2891
+ enabled?: () => boolean;
2892
+ visible?: () => boolean;
2893
+ options: {
2894
+ label: string;
2895
+ value: string;
2896
+ }[];
2897
+ state: StateRef<string>;
2898
+ }
2899
+ type GenericEntryType = GenericTextEntry | GenericBoolEntry | GenericNumberEntry | GenericSelectEntry;
2828
2900
 
2829
2901
  type GenericPanelApi = {
2830
2902
  customize(fn: (entries: GenericEntryType[]) => GenericEntryType[]): void;
@@ -2838,7 +2910,7 @@ type GenericPanelApi = {
2838
2910
  type AnySettings = WebglSettings | UltraSettings;
2839
2911
 
2840
2912
  type SettingsCustomization<T extends AnySettings> = (items: SettingsItem<T>[]) => SettingsItem<T>[];
2841
- type SettingsItem<T extends AnySettings> = SettingsSubtitle | SettingsToggle<T> | SettingsBox<T> | SettingsElement;
2913
+ type SettingsItem<T extends AnySettings> = SettingsSubtitle | SettingsToggle<T> | SettingsBox<T> | SettingsSelect<T> | SettingsElement;
2842
2914
  type SettingsSubtitle = {
2843
2915
  type: 'subtitle';
2844
2916
  key: string;
@@ -2860,6 +2932,17 @@ type SettingsBox<T extends AnySettings> = {
2860
2932
  getter: (settings: T) => number;
2861
2933
  setter: (settings: T, b: number) => void;
2862
2934
  };
2935
+ type SettingsSelect<T extends AnySettings> = {
2936
+ type: 'select';
2937
+ key: string;
2938
+ label: string;
2939
+ options: {
2940
+ label: string;
2941
+ value: string;
2942
+ }[];
2943
+ getter: (settings: T) => string;
2944
+ setter: (settings: T, value: string) => void;
2945
+ };
2863
2946
  type SettingsElement = {
2864
2947
  type: 'element';
2865
2948
  key: string;
@@ -3252,6 +3335,11 @@ declare const IsolationPanel: {
3252
3335
  showGhost: string;
3253
3336
  ghostOpacity: string;
3254
3337
  transparency: string;
3338
+ outlineEnabled: string;
3339
+ outlineQuality: string;
3340
+ outlineThickness: string;
3341
+ selectionFillMode: string;
3342
+ selectionOverlayOpacity: string;
3255
3343
  };
3256
3344
  };
3257
3345