@salsita-ai/sdk 0.49.0-develop.cbee856178 → 0.49.0-develop.f5fc5cfc25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  2. package/dist/application-spec/generate-application/code/templates/index.d.ts +1 -1
  3. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  4. package/dist/application-spec/generate-application/code/templates/phoenix-feedback-skill.js +14 -2
  5. package/dist/application-spec/generate-application/code/templates/phoenix-skill.d.ts +13 -1
  6. package/dist/application-spec/generate-application/code/templates/phoenix-skill.js +1 -1
  7. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +7 -3
  8. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.js +1 -1
  9. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-system.d.ts +24 -1
  10. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-system.js +1 -1
  11. package/dist/docs/3d-scene/cameras/custom.mdx +4 -1
  12. package/dist/docs/3d-scene/cameras/fit-entity.mdx +2 -0
  13. package/dist/docs/3d-scene/cameras/fit-root.mdx +2 -0
  14. package/dist/docs/3d-scene/cameras/fit-selection.mdx +2 -0
  15. package/dist/docs/3d-scene/cameras/locks.mdx +439 -0
  16. package/dist/docs/3d-scene/cameras/static.mdx +2 -0
  17. package/dist/docs/3d-scene/cameras/transitions.mdx +2 -0
  18. package/dist/docs/index.json +12 -1
  19. package/dist/docs/phoenix/phoenix-cli.mdx +6 -5
  20. package/dist/docs/phoenix/project-structure.mdx +1 -1
  21. package/dist/docs/phoenix/sdk-builder-workflow.mdx +13 -8
  22. package/dist/domain/projections/common/camera-orbit.d.ts +37 -9
  23. package/dist/domain/projections/common/camera-orbit.js +1 -1
  24. package/dist/domain/projections/common/index.d.ts +1 -1
  25. package/dist/domain/projections/common/index.js +1 -1
  26. package/dist/domain/system-components/fit-entity-orthographic-camera-component.d.ts +8 -0
  27. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  28. package/dist/domain/system-components/fit-entity-perspective-camera-component.d.ts +8 -0
  29. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  30. package/dist/domain/system-components/fit-root-orthographic-camera-component.d.ts +8 -0
  31. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  32. package/dist/domain/system-components/fit-root-perspective-camera-component.d.ts +8 -0
  33. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  34. package/dist/domain/system-components/fit-selection-orthographic-camera-component.d.ts +8 -0
  35. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +1 -1
  36. package/dist/domain/system-components/fit-selection-perspective-camera-component.d.ts +8 -0
  37. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +1 -1
  38. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +8 -0
  39. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  40. package/dist/domain/system-components/static-perspective-camera-component.d.ts +8 -0
  41. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  42. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +16 -0
  43. package/dist/phoenix/application-spec/project-files.js +1 -1
  44. package/dist/phoenix/cli.js +1 -1
  45. package/dist/phoenix/commands/deploy.js +2 -2
  46. package/dist/phoenix/commands/dev.js +4 -4
  47. package/dist/phoenix/commands/init.d.ts +2 -1
  48. package/dist/phoenix/commands/init.js +1 -1
  49. package/dist/phoenix/commands/login.js +2 -2
  50. package/dist/phoenix/commands/sync.js +1 -1
  51. package/dist/phoenix/services/cli-credentials.d.ts +3 -0
  52. package/dist/phoenix/services/cli-credentials.js +1 -1
  53. package/dist/phoenix/utils/index.d.ts +1 -1
  54. package/dist/phoenix/utils/index.js +1 -1
  55. package/dist/phoenix/utils/package-info.d.ts +9 -0
  56. package/dist/phoenix/utils/package-info.js +1 -1
  57. package/package.json +3 -3
  58. package/schema/domain-spec.json +208 -0
@@ -1,5 +1,24 @@
1
1
  import { type Matrix4, Vector3 } from 'three';
2
2
  import type { DimensionUnit } from '../../dimensions/index.js';
3
+ /** Camera angle and an equivalent pair of bounds that contains or clamps that angle. */
4
+ export interface ResolvedCameraAngleBounds {
5
+ readonly angle: number;
6
+ readonly min: number;
7
+ readonly max: number;
8
+ }
9
+ /**
10
+ * Resolves periodic camera bounds around the supplied world-space angle.
11
+ *
12
+ * Equivalent angles separated by a full revolution remain the same view, so finite bounds are shifted to the
13
+ * revolution nearest the supplied angle before it is clamped. This prevents a preserved live angle near the 0/2π
14
+ * seam from introducing a full turn when the destination uses an equivalent range on another revolution.
15
+ *
16
+ * A one-sided range contains every angle on some revolution, so its finite bound is placed on the allowed side
17
+ * within one revolution of the angle: the angle is always inside the range and the limit is reached by orbiting
18
+ * toward it. Comparing a normalized angle against the raw bound instead let camera-controls snap the camera by up
19
+ * to a full turn on the next orbit input whenever the two happened to sit on different revolutions.
20
+ */
21
+ export declare const resolveCameraAngleBounds: (angle: number, lowerBoundary: number, upperBoundary: number) => ResolvedCameraAngleBounds;
3
22
  /** Camera component state that determines its orbit around a target. */
4
23
  export interface CameraOrbitState {
5
24
  /** Camera azimuth angle in radians. */
@@ -32,20 +51,23 @@ export interface ResolveCameraOrbitProps {
32
51
  /** World transform used when the state's angles are relative. */
33
52
  readonly worldMatrix: Matrix4;
34
53
  }
35
- /** Camera orbit shared by interactive and exported rendering, expressed in world angles and default distance units. */
36
- export interface ResolvedCameraOrbit {
37
- /** Resolved world azimuth angle in radians. */
54
+ /** Camera rotation prepared in world angles, before applying angle bounds. */
55
+ export interface PreparedCameraRotation {
56
+ /** World azimuth angle in radians. */
38
57
  readonly azimuthAngle: number;
39
- /** Resolved minimum world azimuth angle in radians. */
58
+ /** Minimum world azimuth angle in radians. */
40
59
  readonly minAzimuthAngle: number;
41
- /** Resolved maximum world azimuth angle in radians. */
60
+ /** Maximum world azimuth angle in radians. */
42
61
  readonly maxAzimuthAngle: number;
43
- /** Resolved polar angle in radians. */
62
+ /** Polar angle in radians. */
44
63
  readonly polarAngle: number;
45
- /** Resolved minimum polar angle in radians. */
64
+ /** Minimum polar angle in radians. */
46
65
  readonly minPolarAngle: number;
47
- /** Resolved maximum polar angle in radians. */
66
+ /** Maximum polar angle in radians. */
48
67
  readonly maxPolarAngle: number;
68
+ }
69
+ /** Camera orbit prepared in world angles and default distance units, before applying angle bounds. */
70
+ export interface PreparedCameraOrbit extends PreparedCameraRotation {
49
71
  /** Camera distance in domain default distance units, if configured. */
50
72
  readonly distance: number | undefined;
51
73
  /** Minimum camera distance in domain default distance units. */
@@ -53,8 +75,14 @@ export interface ResolvedCameraOrbit {
53
75
  /** Maximum camera distance in domain default distance units. */
54
76
  readonly maxDistance: number;
55
77
  }
78
+ /** Camera orbit shared by interactive and exported rendering after applying angle bounds. */
79
+ export type ResolvedCameraOrbit = PreparedCameraOrbit;
80
+ /** Applies camera defaults, relative rotation, and distance units without clamping angles. */
81
+ export declare const prepareCameraOrbit: ({ state, dimensionUnit, worldMatrix, }: ResolveCameraOrbitProps) => PreparedCameraOrbit;
82
+ /** Applies the configured angle bounds to a prepared camera rotation. */
83
+ export declare const resolvePreparedCameraRotation: (cameraRotation: PreparedCameraRotation) => PreparedCameraRotation;
56
84
  /** Resolves camera angle defaults, bounds, relative rotation, and distance units. */
57
- export declare const resolveCameraOrbit: ({ state, dimensionUnit, worldMatrix, }: ResolveCameraOrbitProps) => ResolvedCameraOrbit;
85
+ export declare const resolveCameraOrbit: (props: ResolveCameraOrbitProps) => ResolvedCameraOrbit;
58
86
  /** Applies camera distance bounds after the caller supplies a fallback in default distance units. */
59
87
  export declare const resolveCameraDistance: (distance: number | undefined, bounds: Pick<ResolvedCameraOrbit, 'minDistance' | 'maxDistance'>, fallbackDistance: number) => number;
60
88
  /** Converts a camera orbit to its Cartesian offset from the look-at target. */
@@ -1 +1 @@
1
- import{Vector3 as a}from"three";import{distanceUnitToDefault as e}from"../../dimensions/index.js";import{getWorldAzimuthAngle as n}from"./world-transform.js";let t=Math.PI/2-.3,i=(a,e,n)=>{if(!Number.isFinite(e)||!Number.isFinite(n))return{angle:a,min:Math.min(e,n),max:Math.max(e,n)};let t=2*Math.PI,i=n-e,m=a-((a-e)%t+t)%t,r=m+i;if(a<=r)return{angle:a,min:m,max:r};if(a-r<=m+t-a)return{angle:r,min:m,max:r};let l=m+t;return{angle:l,min:l,max:l+i}};export const resolveCameraOrbit=({state:a,dimensionUnit:m,worldMatrix:r})=>{var l;let s=!0===a.relative?n(r):0,o=i(a.polarAngle??t,a.minPolarAngle??0,a.maxPolarAngle??Math.PI),h=i(Number.isFinite(l=(a.azimuthAngle??-.3)+s)?(l%(2*Math.PI)+2*Math.PI)%(2*Math.PI):l,(a.minAzimuthAngle??-1/0)+s,(a.maxAzimuthAngle??1/0)+s);return{azimuthAngle:h.angle,minAzimuthAngle:h.min,maxAzimuthAngle:h.max,polarAngle:o.angle,minPolarAngle:o.min,maxPolarAngle:o.max,distance:e(a.distance,m),minDistance:e(a.minDistance,m)??Number.EPSILON,maxDistance:e(a.maxDistance,m)??1/0}};export const resolveCameraDistance=(a,e,n)=>Math.max(e.minDistance,Math.min(a??n,e.maxDistance));export const cameraOrbitToCartesian=(e,n,t)=>new a(t*Math.sin(n)*Math.sin(e),t*Math.cos(n),t*Math.sin(n)*Math.cos(e));
1
+ import{Vector3 as e}from"three";import{distanceUnitToDefault as a}from"../../dimensions/index.js";import{getWorldAzimuthAngle as n}from"./world-transform.js";let t=Math.PI/2-.3,r=2*Math.PI;export const resolveCameraAngleBounds=(e,a,n)=>{let t=Number.isFinite(a),i=Number.isFinite(n);if(!Number.isFinite(e)||!t&&!i)return{angle:e,min:Math.min(a,n),max:Math.max(a,n)};if(!t)return{angle:e,min:a,max:n+r*Math.ceil((e-n)/r)};if(!i)return{angle:e,min:a+r*Math.floor((e-a)/r),max:n};let m=n-a,l=e-((e-a)%r+r)%r,o=l+m;if(e<=o)return{angle:e,min:l,max:o};if(e-o<=l+r-e)return{angle:o,min:l,max:o};let s=l+r;return{angle:s,min:s,max:s+m}};export const prepareCameraOrbit=({state:e,dimensionUnit:r,worldMatrix:i})=>{let m=!0===e.relative?n(i):0;return{azimuthAngle:(e.azimuthAngle??-.3)+m,minAzimuthAngle:(e.minAzimuthAngle??-1/0)+m,maxAzimuthAngle:(e.maxAzimuthAngle??1/0)+m,polarAngle:e.polarAngle??t,minPolarAngle:e.minPolarAngle??0,maxPolarAngle:e.maxPolarAngle??Math.PI,distance:a(e.distance,r),minDistance:a(e.minDistance,r)??Number.EPSILON,maxDistance:a(e.maxDistance,r)??1/0}};export const resolvePreparedCameraRotation=e=>{var a;let n=resolveCameraAngleBounds(e.polarAngle,e.minPolarAngle,e.maxPolarAngle),t=resolveCameraAngleBounds(Number.isFinite(a=e.azimuthAngle)?(a%(2*Math.PI)+2*Math.PI)%(2*Math.PI):a,e.minAzimuthAngle,e.maxAzimuthAngle);return{azimuthAngle:t.angle,minAzimuthAngle:t.min,maxAzimuthAngle:t.max,polarAngle:n.angle,minPolarAngle:n.min,maxPolarAngle:n.max}};export const resolveCameraOrbit=e=>{let a=prepareCameraOrbit(e);return{...a,...resolvePreparedCameraRotation(a)}};export const resolveCameraDistance=(e,a,n)=>Math.max(a.minDistance,Math.min(e??n,a.maxDistance));export const cameraOrbitToCartesian=(a,n,t)=>new e(t*Math.sin(n)*Math.sin(a),t*Math.cos(n),t*Math.sin(n)*Math.cos(a));
@@ -1,5 +1,5 @@
1
1
  export { resolveBoundingBox, resolveBoundingSphere } from './bounding-shape.js';
2
- export { cameraOrbitToCartesian, resolveCameraDistance, resolveCameraOrbit, type CameraOrbitState, type ResolveCameraOrbitProps, type ResolvedCameraOrbit, } from './camera-orbit.js';
2
+ export { cameraOrbitToCartesian, prepareCameraOrbit, resolveCameraDistance, resolveCameraOrbit, resolvePreparedCameraRotation, type CameraOrbitState, type PreparedCameraOrbit, type PreparedCameraRotation, type ResolveCameraOrbitProps, type ResolvedCameraOrbit, } from './camera-orbit.js';
3
3
  export { toMmVec3 } from './distance-vectors.js';
4
4
  export { createSceneObjectTransformMatrix, type SceneObjectTransformState } from './scene-object-transform.js';
5
5
  export { getPerspectiveBoxFitDistance, getPerspectiveSphereFitDistance, getWorldToViewSpaceQuaternion, type PerspectiveBoxFitDistanceProps, type PerspectiveCameraFitFrustum, type PerspectiveCameraFitViewingAngles, type PerspectiveSphereFitDistanceProps, } from './perspective-camera-fit.js';
@@ -1 +1 @@
1
- export{resolveBoundingBox,resolveBoundingSphere}from"./bounding-shape.js";export{cameraOrbitToCartesian,resolveCameraDistance,resolveCameraOrbit}from"./camera-orbit.js";export{toMmVec3}from"./distance-vectors.js";export{createSceneObjectTransformMatrix}from"./scene-object-transform.js";export{getPerspectiveBoxFitDistance,getPerspectiveSphereFitDistance,getWorldToViewSpaceQuaternion}from"./perspective-camera-fit.js";export{getWorldAzimuthAngle}from"./world-transform.js";
1
+ export{resolveBoundingBox,resolveBoundingSphere}from"./bounding-shape.js";export{cameraOrbitToCartesian,prepareCameraOrbit,resolveCameraDistance,resolveCameraOrbit,resolvePreparedCameraRotation}from"./camera-orbit.js";export{toMmVec3}from"./distance-vectors.js";export{createSceneObjectTransformMatrix}from"./scene-object-transform.js";export{getPerspectiveBoxFitDistance,getPerspectiveSphereFitDistance,getWorldToViewSpaceQuaternion}from"./perspective-camera-fit.js";export{getWorldAzimuthAngle}from"./world-transform.js";
@@ -20,6 +20,14 @@ export type FitEntityOrthographicCameraComponentState = {
20
20
  * @default true
21
21
  */
22
22
  readonly animateTransition?: boolean | undefined;
23
+ /**
24
+ * Preserves the live camera zoom when switching between orthographic cameras with the same group.
25
+ */
26
+ readonly zoomLockGroup?: string | null | undefined;
27
+ /**
28
+ * Preserves the live camera rotation when switching between cameras with the same group.
29
+ */
30
+ readonly rotationLockGroup?: string | null | undefined;
23
31
  /**
24
32
  * Uses fitToBox strategy to fit the entity. By default, fitToSphere strategy is used.
25
33
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isInstanceOfComponentType as t,isSnapshotOfComponentType as o}from"../core/index.js";export const FitEntityOrthographicCameraComponentName="fitEntityOrthographicCamera";export const fitEntityOrthographicCameraComponent=e.component("fitEntityOrthographicCamera").withState({type:"object",tsType:"FitEntityOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitEntityOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fitToBox:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitEntityOrthographicCameraComponentSnapshot=o(fitEntityOrthographicCameraComponent);export const isFitEntityOrthographicCameraComponentInstance=t(fitEntityOrthographicCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isInstanceOfComponentType as t,isSnapshotOfComponentType as o}from"../core/index.js";export const FitEntityOrthographicCameraComponentName="fitEntityOrthographicCamera";export const fitEntityOrthographicCameraComponent=e.component("fitEntityOrthographicCamera").withState({type:"object",tsType:"FitEntityOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitEntityOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},zoomLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fitToBox:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitEntityOrthographicCameraComponentSnapshot=o(fitEntityOrthographicCameraComponent);export const isFitEntityOrthographicCameraComponentInstance=t(fitEntityOrthographicCameraComponent);
@@ -20,6 +20,14 @@ export type FitEntityPerspectiveCameraComponentState = {
20
20
  * @default true
21
21
  */
22
22
  readonly animateTransition?: boolean | undefined;
23
+ /**
24
+ * Preserves the live camera distance when switching between perspective cameras with the same group.
25
+ */
26
+ readonly distanceLockGroup?: string | null | undefined;
27
+ /**
28
+ * Preserves the live camera rotation when switching between cameras with the same group.
29
+ */
30
+ readonly rotationLockGroup?: string | null | undefined;
23
31
  /**
24
32
  * If true, the camera will use fitToBox algorithm to fit the mesh. Otherwise, it will fit use fitToSphere.
25
33
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isInstanceOfComponentType as t,isSnapshotOfComponentType as n}from"../core/index.js";export const FitEntityPerspectiveCameraComponentName="fitEntityPerspectiveCamera";export const fitEntityPerspectiveCameraComponent=e.component("fitEntityPerspectiveCamera").withState({type:"object",tsType:"FitEntityPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitEntityPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fitToBox:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitEntityPerspectiveCameraComponentSnapshot=n(fitEntityPerspectiveCameraComponent);export const isFitEntityPerspectiveCameraComponentInstance=t(fitEntityPerspectiveCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isInstanceOfComponentType as t,isSnapshotOfComponentType as n}from"../core/index.js";export const FitEntityPerspectiveCameraComponentName="fitEntityPerspectiveCamera";export const fitEntityPerspectiveCameraComponent=e.component("fitEntityPerspectiveCamera").withState({type:"object",tsType:"FitEntityPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitEntityPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},distanceLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fitToBox:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitEntityPerspectiveCameraComponentSnapshot=n(fitEntityPerspectiveCameraComponent);export const isFitEntityPerspectiveCameraComponentInstance=t(fitEntityPerspectiveCameraComponent);
@@ -19,6 +19,14 @@ export type FitRootOrthographicCameraComponentState = {
19
19
  * @default true
20
20
  */
21
21
  readonly animateTransition?: boolean | undefined;
22
+ /**
23
+ * Preserves the live camera zoom when switching between orthographic cameras with the same group.
24
+ */
25
+ readonly zoomLockGroup?: string | null | undefined;
26
+ /**
27
+ * Preserves the live camera rotation when switching between cameras with the same group.
28
+ */
29
+ readonly rotationLockGroup?: string | null | undefined;
22
30
  /**
23
31
  * If true, the camera will use fitToBox algorithm to fit the mesh. Otherwise, it will fit use fitToSphere.
24
32
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitRootOrthographicCameraComponentName="fitRootOrthographicCamera";export const fitRootOrthographicCameraComponent=e.component("fitRootOrthographicCamera").withState({type:"object",tsType:"FitRootOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitRootOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fitToBox:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitRootOrthographicCameraComponent=t(fitRootOrthographicCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitRootOrthographicCameraComponentName="fitRootOrthographicCamera";export const fitRootOrthographicCameraComponent=e.component("fitRootOrthographicCamera").withState({type:"object",tsType:"FitRootOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitRootOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},zoomLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fitToBox:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitRootOrthographicCameraComponent=t(fitRootOrthographicCameraComponent);
@@ -19,6 +19,14 @@ export type FitRootPerspectiveCameraComponentState = {
19
19
  * @default true
20
20
  */
21
21
  readonly animateTransition?: boolean | undefined;
22
+ /**
23
+ * Preserves the live camera distance when switching between perspective cameras with the same group.
24
+ */
25
+ readonly distanceLockGroup?: string | null | undefined;
26
+ /**
27
+ * Preserves the live camera rotation when switching between cameras with the same group.
28
+ */
29
+ readonly rotationLockGroup?: string | null | undefined;
22
30
  /**
23
31
  * If true, the camera will use fitToBox algorithm to fit the mesh. Otherwise, it will fit use fitToSphere.
24
32
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitRootPerspectiveCameraComponentName="fitRootPerspectiveCamera";export const fitRootPerspectiveCameraComponent=e.component("fitRootPerspectiveCamera").withState({type:"object",tsType:"FitRootPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitRootPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fitToBox:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitRootPerspectiveCameraComponent=t(fitRootPerspectiveCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitRootPerspectiveCameraComponentName="fitRootPerspectiveCamera";export const fitRootPerspectiveCameraComponent=e.component("fitRootPerspectiveCamera").withState({type:"object",tsType:"FitRootPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitRootPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},distanceLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fitToBox:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitRootPerspectiveCameraComponent=t(fitRootPerspectiveCameraComponent);
@@ -20,6 +20,14 @@ export type FitSelectionOrthographicCameraComponentState = {
20
20
  * @default true
21
21
  */
22
22
  readonly animateTransition?: boolean | undefined;
23
+ /**
24
+ * Preserves the live camera zoom when switching between orthographic cameras with the same group.
25
+ */
26
+ readonly zoomLockGroup?: string | null | undefined;
27
+ /**
28
+ * Preserves the live camera rotation when switching between cameras with the same group.
29
+ */
30
+ readonly rotationLockGroup?: string | null | undefined;
23
31
  /**
24
32
  * Uses fitToBox strategy to fit the selection. By default, fitToSphere strategy is used.
25
33
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitSelectionOrthographicCameraComponentName="fitSelectionOrthographicCamera";export const fitSelectionOrthographicCameraComponent=e.component("fitSelectionOrthographicCamera").withState({type:"object",tsType:"FitSelectionOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitSelectionOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitToBox:{type:"boolean"},animateTransition:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitSelectionOrthographicCameraComponent=t(fitSelectionOrthographicCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitSelectionOrthographicCameraComponentName="fitSelectionOrthographicCamera";export const fitSelectionOrthographicCameraComponent=e.component("fitSelectionOrthographicCamera").withState({type:"object",tsType:"FitSelectionOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitSelectionOrthographicCameraComponentState"}],properties:{priority:{type:"number"},fitToBox:{type:"boolean"},animateTransition:{type:"boolean"},zoomLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},near:{type:"number"},far:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitSelectionOrthographicCameraComponent=t(fitSelectionOrthographicCameraComponent);
@@ -19,6 +19,14 @@ export type FitSelectionPerspectiveCameraComponentState = {
19
19
  * @default true
20
20
  */
21
21
  readonly animateTransition?: boolean | undefined;
22
+ /**
23
+ * Preserves the live camera distance when switching between perspective cameras with the same group.
24
+ */
25
+ readonly distanceLockGroup?: string | null | undefined;
26
+ /**
27
+ * Preserves the live camera rotation when switching between cameras with the same group.
28
+ */
29
+ readonly rotationLockGroup?: string | null | undefined;
22
30
  /**
23
31
  * Uses fitToBox strategy to fit the selection. By default, fitToSphere strategy is used.
24
32
  */
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitSelectionPerspectiveCameraComponentName="fitSelectionPerspectiveCamera";export const fitSelectionPerspectiveCameraComponent=e.component("fitSelectionPerspectiveCamera").withState({type:"object",tsType:"FitSelectionPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitSelectionPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitToBox:{type:"boolean"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitSelectionPerspectiveCameraComponent=t(fitSelectionPerspectiveCameraComponent);
1
+ import{SystemComponentBuilder as e}from"../components/index.js";import{isSnapshotOfComponentType as t}from"../core/index.js";export const FitSelectionPerspectiveCameraComponentName="fitSelectionPerspectiveCamera";export const fitSelectionPerspectiveCameraComponent=e.component("fitSelectionPerspectiveCamera").withState({type:"object",tsType:"FitSelectionPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"FitSelectionPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},fitToBox:{type:"boolean"},fitMeshChanges:{type:"boolean"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},distanceLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isFitSelectionPerspectiveCameraComponent=t(fitSelectionPerspectiveCameraComponent);
@@ -16,6 +16,14 @@ export type StaticOrthographicCameraComponentState = {
16
16
  * @default true
17
17
  */
18
18
  readonly animateTransition?: boolean | undefined;
19
+ /**
20
+ * Preserves the live camera zoom when switching between orthographic cameras with the same group.
21
+ */
22
+ readonly zoomLockGroup?: string | null | undefined;
23
+ /**
24
+ * Preserves the live camera rotation when switching between cameras with the same group.
25
+ */
26
+ readonly rotationLockGroup?: string | null | undefined;
19
27
  /**
20
28
  * Camera frustum left plane.
21
29
  * Distance is converted based on application's distanceDataUnit.
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";export const StaticOrthographicCameraComponentName="staticOrthographicCamera";export const staticOrthographicCameraComponent=e.component(StaticOrthographicCameraComponentName).withState({type:"object",tsType:"StaticOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"StaticOrthographicCameraComponentState"}],properties:{priority:{type:"number"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},far:{type:"number"},near:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},lookAtX:{type:"number"},lookAtY:{type:"number"},lookAtZ:{type:"number"}},required:[],additionalProperties:!1}).build();export const isStaticOrthographicCameraComponent=e=>e.componentInstance.componentType.name===StaticOrthographicCameraComponentName;
1
+ import{SystemComponentBuilder as e}from"../components/index.js";export const StaticOrthographicCameraComponentName="staticOrthographicCamera";export const staticOrthographicCameraComponent=e.component(StaticOrthographicCameraComponentName).withState({type:"object",tsType:"StaticOrthographicCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"StaticOrthographicCameraComponentState"}],properties:{priority:{type:"number"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},zoomLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},left:{type:"number"},bottom:{type:"number"},frustumSize:{type:"number"},far:{type:"number"},near:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},minZoom:{type:"number"},maxZoom:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},lookAtX:{type:"number"},lookAtY:{type:"number"},lookAtZ:{type:"number"}},required:[],additionalProperties:!1}).build();export const isStaticOrthographicCameraComponent=e=>e.componentInstance.componentType.name===StaticOrthographicCameraComponentName;
@@ -16,6 +16,14 @@ export type StaticPerspectiveCameraComponentState = {
16
16
  * @default true
17
17
  */
18
18
  readonly animateTransition?: boolean | undefined;
19
+ /**
20
+ * Preserves the live camera distance when switching between perspective cameras with the same group.
21
+ */
22
+ readonly distanceLockGroup?: string | null | undefined;
23
+ /**
24
+ * Preserves the live camera rotation when switching between cameras with the same group.
25
+ */
26
+ readonly rotationLockGroup?: string | null | undefined;
19
27
  /**
20
28
  * Field of view in degrees.
21
29
  * @see PerspectiveCamera documentation
@@ -1 +1 @@
1
- import{SystemComponentBuilder as e}from"../components/index.js";export const StaticPerspectiveCameraComponentName="staticPerspectiveCamera";export const staticPerspectiveCameraComponent=e.component(StaticPerspectiveCameraComponentName).withState({type:"object",tsType:"StaticPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"StaticPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},lookAtX:{type:"number"},lookAtY:{type:"number"},lookAtZ:{type:"number"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isStaticPerspectiveCameraComponent=e=>e.componentInstance.componentType.name===StaticPerspectiveCameraComponentName;
1
+ import{SystemComponentBuilder as e}from"../components/index.js";export const StaticPerspectiveCameraComponentName="staticPerspectiveCamera";export const staticPerspectiveCameraComponent=e.component(StaticPerspectiveCameraComponentName).withState({type:"object",tsType:"StaticPerspectiveCameraComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"StaticPerspectiveCameraComponentState"}],properties:{priority:{type:"number"},animateOnLoad:{type:"boolean"},animateTransition:{type:"boolean"},distanceLockGroup:{type:["string","null"]},rotationLockGroup:{type:["string","null"]},fov:{type:"number"},far:{type:"number"},near:{type:"number"},focus:{type:"number"},distance:{type:"number"},minDistance:{type:"number"},maxDistance:{type:"number"},polarAngle:{type:"number"},minPolarAngle:{type:"number"},maxPolarAngle:{type:"number"},azimuthAngle:{type:"number"},minAzimuthAngle:{type:"number"},maxAzimuthAngle:{type:"number"},smoothTime:{type:"number"},draggingSmoothTime:{type:"number"},maxSpeed:{type:"number"},azimuthRotateSpeed:{type:"number"},polarRotateSpeed:{type:"number"},dollySpeed:{type:"number"},dollyDragInverted:{type:"boolean"},truckSpeed:{type:"number"},mouseButtons:{type:"object",properties:{left:{type:"number"},middle:{type:"number"},right:{type:"number"},wheel:{type:"number"}},required:["left","middle","right"],additionalProperties:!1},touches:{type:"object",properties:{one:{type:"number"},two:{type:"number"},three:{type:"number"}},required:["one","two"],additionalProperties:!1},boundaryEnclosesCamera:{type:"boolean"},dollyToCursor:{type:"boolean"},dragToOffset:{type:"boolean"},verticalDragToForward:{type:"boolean"},boundary:{type:"object"},lookAtX:{type:"number"},lookAtY:{type:"number"},lookAtZ:{type:"number"},relative:{type:"boolean"}},required:[],additionalProperties:!1}).build();export const isStaticPerspectiveCameraComponent=e=>e.componentInstance.componentType.name===StaticPerspectiveCameraComponentName;
@@ -2844,6 +2844,8 @@ export interface DomainSpecification {
2844
2844
  fitMeshChanges?: EnhancedBooleanRead;
2845
2845
  animateOnLoad?: EnhancedBooleanRead;
2846
2846
  animateTransition?: EnhancedBooleanRead;
2847
+ distanceLockGroup?: (string | null) | ReadEnhancement;
2848
+ rotationLockGroup?: (string | null) | ReadEnhancement;
2847
2849
  fitToBox?: EnhancedBooleanRead;
2848
2850
  fov?: EnhancedNumberRead;
2849
2851
  far?: EnhancedNumberRead;
@@ -2897,6 +2899,8 @@ export interface DomainSpecification {
2897
2899
  fitMeshChanges?: EnhancedBooleanRead;
2898
2900
  animateOnLoad?: EnhancedBooleanRead;
2899
2901
  animateTransition?: EnhancedBooleanRead;
2902
+ zoomLockGroup?: (string | null) | ReadEnhancement;
2903
+ rotationLockGroup?: (string | null) | ReadEnhancement;
2900
2904
  fitToBox?: EnhancedBooleanRead;
2901
2905
  left?: EnhancedNumberRead;
2902
2906
  bottom?: EnhancedNumberRead;
@@ -2954,6 +2958,8 @@ export interface DomainSpecification {
2954
2958
  fitMeshChanges?: EnhancedBooleanRead;
2955
2959
  animateOnLoad?: EnhancedBooleanRead;
2956
2960
  animateTransition?: EnhancedBooleanRead;
2961
+ distanceLockGroup?: (string | null) | ReadEnhancement;
2962
+ rotationLockGroup?: (string | null) | ReadEnhancement;
2957
2963
  fitToBox?: EnhancedBooleanRead;
2958
2964
  fov?: EnhancedNumberRead;
2959
2965
  far?: EnhancedNumberRead;
@@ -3007,6 +3013,8 @@ export interface DomainSpecification {
3007
3013
  fitMeshChanges?: EnhancedBooleanRead;
3008
3014
  animateOnLoad?: EnhancedBooleanRead;
3009
3015
  animateTransition?: EnhancedBooleanRead;
3016
+ zoomLockGroup?: (string | null) | ReadEnhancement;
3017
+ rotationLockGroup?: (string | null) | ReadEnhancement;
3010
3018
  fitToBox?: EnhancedBooleanRead;
3011
3019
  left?: EnhancedNumberRead;
3012
3020
  bottom?: EnhancedNumberRead;
@@ -3064,6 +3072,8 @@ export interface DomainSpecification {
3064
3072
  fitMeshChanges?: EnhancedBooleanRead;
3065
3073
  animateOnLoad?: EnhancedBooleanRead;
3066
3074
  animateTransition?: EnhancedBooleanRead;
3075
+ distanceLockGroup?: (string | null) | ReadEnhancement;
3076
+ rotationLockGroup?: (string | null) | ReadEnhancement;
3067
3077
  fov?: EnhancedNumberRead;
3068
3078
  far?: EnhancedNumberRead;
3069
3079
  near?: EnhancedNumberRead;
@@ -3115,6 +3125,8 @@ export interface DomainSpecification {
3115
3125
  priority?: EnhancedNumberRead;
3116
3126
  fitToBox?: EnhancedBooleanRead;
3117
3127
  animateTransition?: EnhancedBooleanRead;
3128
+ zoomLockGroup?: (string | null) | ReadEnhancement;
3129
+ rotationLockGroup?: (string | null) | ReadEnhancement;
3118
3130
  left?: EnhancedNumberRead;
3119
3131
  bottom?: EnhancedNumberRead;
3120
3132
  frustumSize?: EnhancedNumberRead;
@@ -3170,6 +3182,8 @@ export interface DomainSpecification {
3170
3182
  priority?: EnhancedNumberRead;
3171
3183
  animateOnLoad?: EnhancedBooleanRead;
3172
3184
  animateTransition?: EnhancedBooleanRead;
3185
+ distanceLockGroup?: (string | null) | ReadEnhancement;
3186
+ rotationLockGroup?: (string | null) | ReadEnhancement;
3173
3187
  fov?: EnhancedNumberRead;
3174
3188
  far?: EnhancedNumberRead;
3175
3189
  near?: EnhancedNumberRead;
@@ -3224,6 +3238,8 @@ export interface DomainSpecification {
3224
3238
  priority?: EnhancedNumberRead;
3225
3239
  animateOnLoad?: EnhancedBooleanRead;
3226
3240
  animateTransition?: EnhancedBooleanRead;
3241
+ zoomLockGroup?: (string | null) | ReadEnhancement;
3242
+ rotationLockGroup?: (string | null) | ReadEnhancement;
3227
3243
  left?: EnhancedNumberRead;
3228
3244
  bottom?: EnhancedNumberRead;
3229
3245
  frustumSize?: EnhancedNumberRead;
@@ -1 +1 @@
1
- import{globby as s}from"globby";import e from"picomatch";export const SPEC_FILE_PATTERN="spec/**/*.yaml";export const PARSED_TEXT_FILE_PATTERNS=["spec/**/*.yaml","src/**/*.{ts,tsx}","mocks/**/*.{yaml,yml}",".gitignore",".cursor/rules/phoenix.mdc","CLAUDE.md","package.json","assets/chat/embeddings.csv","assets/chat/chat.yaml"];export const PARSED_ASSET_FILE_PATTERNS=["assets/private/**","assets/public/**"];let o=[...PARSED_TEXT_FILE_PATTERNS,...PARSED_ASSET_FILE_PATTERNS,"src/**","mocks/**","assets/**","public/**","templates/**","pnpm-lock.yaml"],t=["**/node_modules/**","**/.phoenix/**","**/__generated/**","**/.DS_Store","**/._*","**/.env","**/.env.*"],c=e(o,{dot:!0,ignore:t});export const isProjectFile=s=>c(s);export const listProjectEntries=async e=>(await s(o,{cwd:e,dot:!0,ignore:t,onlyFiles:!1,followSymbolicLinks:!1})).sort();
1
+ import{globby as s}from"globby";import e from"picomatch";export const SPEC_FILE_PATTERN="spec/**/*.yaml";export const PARSED_TEXT_FILE_PATTERNS=["spec/**/*.yaml","src/**/*.{ts,tsx}","mocks/**/*.{yaml,yml}",".gitignore",".cursor/rules/phoenix.mdc","CLAUDE.md","package.json","assets/chat/embeddings.csv","assets/chat/chat.yaml"];export const PARSED_ASSET_FILE_PATTERNS=["assets/private/**","assets/public/**"];let o=[...PARSED_TEXT_FILE_PATTERNS,...PARSED_ASSET_FILE_PATTERNS,"src/**","mocks/**","assets/**","public/**","templates/**","pnpm-lock.yaml","pnpm-workspace.yaml"],t=["**/node_modules/**","**/.phoenix/**","**/__generated/**","**/.DS_Store","**/._*","**/.env","**/.env.*"],c=e(o,{dot:!0,ignore:t});export const isProjectFile=s=>c(s);export const listProjectEntries=async e=>(await s(o,{cwd:e,dot:!0,ignore:t,onlyFiles:!1,followSymbolicLinks:!1})).sort();