@variantic/player 0.0.20 → 0.0.21

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.
@@ -0,0 +1,3 @@
1
+ export * from './lib/engine';
2
+ export * from './lib/publication';
3
+ export * from './lib/documentation';
@@ -0,0 +1,9 @@
1
+ export type TDocumentation = {
2
+ id: string;
3
+ parameters: {
4
+ name: string;
5
+ type: 'TEXT' | 'PROJECTION' | 'BOOL' | 'SOURCE_DATA';
6
+ uuid: string;
7
+ value: string;
8
+ }[];
9
+ };
@@ -0,0 +1,172 @@
1
+ import type { TObjectConfiguration, TInteractionMode, TVasFile } from '@variantic/schemas/file-types/vas';
2
+ import type { TPublication } from './publication';
3
+ import type { TDocumentation } from './documentation';
4
+ type TValue = string | number | boolean;
5
+ export { TInteractionMode };
6
+ export type TSettings = TVasFile['set']['configuration']['settings'] & {
7
+ sceneSettings?: TVasFile['set']['configuration']['sceneSettings'] & {
8
+ backgroundColor?: string | null;
9
+ studioId?: number | null;
10
+ envMap?: string | null;
11
+ };
12
+ cameraSettings?: TVasFile['set']['configuration']['cameraSettings'];
13
+ flowsSettings?: TVasFile['set']['configuration']['flowsSettings'];
14
+ };
15
+ export type TRootObjectData = {
16
+ id: string;
17
+ fileId: string;
18
+ transform: number[];
19
+ showInProductsList?: boolean;
20
+ };
21
+ export type TRootObjectConfiguration = {
22
+ id: string;
23
+ fileId: string;
24
+ name?: string;
25
+ transform: number[];
26
+ interaction?: TInteractionMode;
27
+ configuration?: Record<string, TObjectConfiguration>;
28
+ };
29
+ export type TRootData = Partial<{
30
+ publication: TPublication;
31
+ documentation: TDocumentation;
32
+ }>;
33
+ export type TRenderDataObjectTag = `subcomponent:${string}`;
34
+ export type TRenderDataObject = Partial<{
35
+ inAvailableSpace: boolean;
36
+ count: number;
37
+ positioning: number[];
38
+ transform: number[];
39
+ propagation: number[];
40
+ geometry: [string, Record<string, TValue>];
41
+ dimensionGeometry: [string, Record<string, TValue>];
42
+ importedGeometry: [string, Record<string, TValue>];
43
+ isGroup: boolean;
44
+ isImport: boolean;
45
+ interaction: TInteractionMode;
46
+ movementPlane: number[];
47
+ keyPoint: string[];
48
+ gridPlane: {
49
+ priority: TValue;
50
+ tags: string[];
51
+ snaps: TSnap[];
52
+ };
53
+ boxCollider: {
54
+ tags: string[];
55
+ collision: boolean;
56
+ interact: boolean;
57
+ occluder: boolean;
58
+ };
59
+ dynamicConfiguration: Record<string, number>;
60
+ layers: number[];
61
+ dimensioning: Record<string, never>;
62
+ material: Record<string, {
63
+ blobUrl: string;
64
+ overrides?: Record<string, unknown>;
65
+ }>;
66
+ modifier: 'subtract' | 'intersect';
67
+ textureFit: {
68
+ offset: {
69
+ x: number | 'random';
70
+ y: number | 'random';
71
+ };
72
+ rotation: number | 'random';
73
+ scale: number;
74
+ flip: {
75
+ x: boolean;
76
+ y: boolean;
77
+ };
78
+ };
79
+ rendering: {
80
+ shadow: [boolean, boolean];
81
+ order: number;
82
+ };
83
+ tags: TRenderDataObjectTag[];
84
+ }>;
85
+ type TUniqueRenderDataObject = {
86
+ id: string;
87
+ ref: string;
88
+ } & TRenderDataObject;
89
+ export type TRenderData = {
90
+ entryObjects: number[];
91
+ tree: Record<string, number[]>;
92
+ objects: TUniqueRenderDataObject[];
93
+ activeDrag?: number;
94
+ };
95
+ export type TPricingSection = {
96
+ name: string;
97
+ table: string[][];
98
+ price: number;
99
+ priceColumnIndex: number;
100
+ };
101
+ export type TPricingData = {
102
+ sections: TPricingSection[];
103
+ finalPrice: number;
104
+ };
105
+ export type TTreeObjectOverrides = Partial<{
106
+ transform: number[];
107
+ movementPlane: number[];
108
+ interaction: TInteractionMode;
109
+ }>;
110
+ export type TSnapType = 'point' | 'grid';
111
+ type TSnapTypeMaker<T extends TSnapType, U extends Record<string, unknown>> = {
112
+ type: T;
113
+ data: U;
114
+ };
115
+ type TSnapPoint = TSnapTypeMaker<'point', {
116
+ x: TValue;
117
+ y: TValue;
118
+ }>;
119
+ type TSnapGrid = TSnapTypeMaker<'grid', {
120
+ cols: TValue;
121
+ rows: TValue;
122
+ }>;
123
+ export type TSnap = TSnapPoint | TSnapGrid;
124
+ /**
125
+ * Snaps because of different types
126
+ * have to be identified in different ways based
127
+ * on the type which snap point belongs to
128
+ *
129
+ * Example
130
+ * { type: 'grid', snapId: 0, data: { row: 0, col: 1 } } }
131
+ *
132
+ * Which means that we are referring to the grid (snaps array index 0) snap point
133
+ * on row 0 and column 1
134
+ */
135
+ type TSnapIdentifierMaker<T extends TSnapType, U extends Record<string, unknown>> = {
136
+ type: T;
137
+ snapId: number;
138
+ data: U;
139
+ };
140
+ type TSnapPointIdentifier = TSnapIdentifierMaker<'point', {
141
+ x: number;
142
+ y: number;
143
+ }>;
144
+ type TSnapGridIdentifier = TSnapIdentifierMaker<'grid', {
145
+ col: number;
146
+ row: number;
147
+ }>;
148
+ export type TSnapIdentifier = TSnapPointIdentifier | TSnapGridIdentifier;
149
+ type TCommonMaterialGroupProperties = {
150
+ hash: string;
151
+ selected: string;
152
+ alias: string;
153
+ };
154
+ export type TMaterialGroup = ({
155
+ type: 'list';
156
+ materials: string[];
157
+ } | {
158
+ type: 'query';
159
+ query: Record<string, any>;
160
+ }) & TCommonMaterialGroupProperties;
161
+ type TCommonSubcomponentGroupProperties = {
162
+ hash: string;
163
+ selected: string;
164
+ alias: string;
165
+ };
166
+ export type TSubcomponentGroup = ({
167
+ type: 'list';
168
+ assets: string[];
169
+ } | {
170
+ type: 'query';
171
+ query: Record<string, any>;
172
+ }) & TCommonSubcomponentGroupProperties;
@@ -0,0 +1,73 @@
1
+ export type TPublication = {
2
+ containers: TPublicationContainer[];
3
+ };
4
+ export type TPublicationContainer = {
5
+ id: string;
6
+ panels: TPublicationPanel[];
7
+ };
8
+ export type TPublicationPanel = {
9
+ id: string;
10
+ label: string;
11
+ events: TEvents;
12
+ blocks: TPublicationBlock[];
13
+ };
14
+ export type TPublicationBlock = {
15
+ id: string;
16
+ label: string;
17
+ events: TEvents;
18
+ kind: TBlockNumberRange | TBlockNumberPredefined | TBlockText | TBlockList;
19
+ };
20
+ export type TBlockNumberRange = {
21
+ type: 'number-range';
22
+ value: number;
23
+ range: {
24
+ min: number;
25
+ max: number;
26
+ };
27
+ preferred: number[];
28
+ };
29
+ export type TBlockNumberPredefined = {
30
+ type: 'number-predefined';
31
+ value: number;
32
+ options: number[];
33
+ preferred: number[];
34
+ };
35
+ export type TBlockText = {
36
+ type: 'text';
37
+ value: string;
38
+ };
39
+ export type TBlockList = {
40
+ type: 'list';
41
+ style: TBlockListDropdownStyle | TBlockListButtonsStyle | TBlockListDropdownImageStyle | TBlockListButtonsImageStyle;
42
+ selected: string;
43
+ options: Array<{
44
+ value: string;
45
+ label: string;
46
+ imageId?: string;
47
+ }>;
48
+ };
49
+ export type TBlockListDropdownStyle = {
50
+ type: 'dropdown';
51
+ };
52
+ export type TBlockListButtonsStyle = {
53
+ type: 'buttons';
54
+ align: 'content' | 'responsive';
55
+ };
56
+ export type TBlockListDropdownImageStyle = {
57
+ type: 'dropdownImage';
58
+ size: 'sm' | 'md' | 'lg';
59
+ };
60
+ export type TBlockListButtonsImageStyle = {
61
+ type: 'buttonsImage';
62
+ size: 'sm' | 'md' | 'lg';
63
+ shape: 'square' | 'portrait' | 'landscape';
64
+ };
65
+ export type TEvents = {
66
+ hover?: Array<{
67
+ type: 'layer';
68
+ targetIds: unknown[];
69
+ } | {
70
+ type: 'dimension';
71
+ targetIds: unknown[];
72
+ }>;
73
+ } | undefined;
@@ -0,0 +1,3 @@
1
+ export * from './lib/vas';
2
+ export * from './lib/object-configuration';
3
+ export * from './lib/interaction';
@@ -0,0 +1,3 @@
1
+ import { type Static } from '@sinclair/typebox';
2
+ export declare const interactionModeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"select-only">, import("@sinclair/typebox").TLiteral<"select-and-drag">]>;
3
+ export type TInteractionMode = Static<typeof interactionModeSchema>;
@@ -0,0 +1,17 @@
1
+ import { type Static } from '@sinclair/typebox';
2
+ export declare const objectConfigurationSchema: import("@sinclair/typebox").TObject<{
3
+ transform: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
4
+ publication: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
5
+ blocks: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TAny>;
6
+ }>>;
7
+ materials: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
8
+ selected: import("@sinclair/typebox").TString;
9
+ }>>>;
10
+ subcomponent: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
11
+ selected: import("@sinclair/typebox").TString;
12
+ }>>>;
13
+ interaction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"select-only">, import("@sinclair/typebox").TLiteral<"select-and-drag">]>>;
14
+ draggable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
15
+ movementPlane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
16
+ }>;
17
+ export type TObjectConfiguration = Static<typeof objectConfigurationSchema>;
@@ -0,0 +1,294 @@
1
+ import { type Static } from '@sinclair/typebox';
2
+ export declare const vasFileSchema: import("@sinclair/typebox").TObject<{
3
+ id: import("@sinclair/typebox").TString;
4
+ set: import("@sinclair/typebox").TObject<{
5
+ configuration: import("@sinclair/typebox").TObject<{
6
+ settings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
7
+ assetsPalette: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
8
+ nodes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
9
+ id: import("@sinclair/typebox").TNumber;
10
+ name: import("@sinclair/typebox").TString;
11
+ tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>;
12
+ icon: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
13
+ }>>>;
14
+ roots: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
15
+ tree: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>>;
16
+ linkedProperties: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
17
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
18
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
19
+ image: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
20
+ }>>;
21
+ styleSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
22
+ image: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
23
+ size: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"sm">, import("@sinclair/typebox").TLiteral<"md">, import("@sinclair/typebox").TLiteral<"lg">]>;
24
+ orientation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"square">, import("@sinclair/typebox").TLiteral<"portrait">, import("@sinclair/typebox").TLiteral<"landscape">]>;
25
+ }>>;
26
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
27
+ visible: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
28
+ }>>;
29
+ }>>;
30
+ defaultNodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
31
+ patternType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"hierarchical">, import("@sinclair/typebox").TLiteral<"breadcrumbs">]>>;
32
+ addingAssetsMethod: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"dragAndDrop">, import("@sinclair/typebox").TLiteral<"clickToAdd">]>>;
33
+ sortingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
34
+ field: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"name">, import("@sinclair/typebox").TLiteral<"property">]>;
35
+ order: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"asc">, import("@sinclair/typebox").TLiteral<"desc">]>;
36
+ }>>;
37
+ }>>;
38
+ outline: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
39
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
40
+ edgeStrength: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
41
+ edgeGlow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
42
+ edgeThickness: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
43
+ pulsePeriod: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
44
+ visibleEdgeColor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
45
+ hiddenEdgeColor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
46
+ }>>;
47
+ highlight: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
48
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
49
+ color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
50
+ blinkDurationMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
51
+ pulseCount: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
52
+ lineOpacityStart: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
53
+ lineOpacityEnd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
54
+ boxOpacityStart: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
55
+ boxOpacityEnd: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
56
+ }>>;
57
+ dimensions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
58
+ offsetX: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
59
+ offsetY: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
60
+ offsetZ: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
61
+ }>>;
62
+ autoSnap: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
63
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
64
+ delay: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
65
+ distance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
66
+ distanceTolerance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
67
+ lookupRadiusPx: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
68
+ rotationPreviewRadiusPx: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
69
+ }>>;
70
+ drag: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
71
+ minimumDropDistance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
72
+ showGridHelper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
73
+ interactionStrategy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"directDrag">, import("@sinclair/typebox").TLiteral<"pressMoveThreshold">, import("@sinclair/typebox").TLiteral<"holdToDrag">]>>;
74
+ desktopHoldDelayMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
75
+ touchHoldDelayMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
76
+ dragStartThresholdPx: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
77
+ clickTolerancePx: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
78
+ selectDraggedObjectOnDrop: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
79
+ }>>;
80
+ postprocessing: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
81
+ gtao: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
82
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
83
+ blendIntensity: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
84
+ radius: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
85
+ samples: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
86
+ distanceFallOff: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
87
+ screenSpaceRadius: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
88
+ denoiseRadius: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
89
+ denoiseSamples: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
90
+ }>>;
91
+ outlineEffect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
92
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
93
+ thickness: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
94
+ color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
95
+ alpha: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
96
+ }>>;
97
+ }>>;
98
+ materials: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
99
+ linkedProperties: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
100
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
101
+ thumbnail: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
102
+ }>>;
103
+ styleSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
104
+ image: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
105
+ size: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"sm">, import("@sinclair/typebox").TLiteral<"md">, import("@sinclair/typebox").TLiteral<"lg">]>;
106
+ orientation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"square">, import("@sinclair/typebox").TLiteral<"portrait">, import("@sinclair/typebox").TLiteral<"landscape">]>;
107
+ }>>;
108
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
109
+ visible: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
110
+ }>>;
111
+ }>>;
112
+ materialsSortingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
113
+ field: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"name">, import("@sinclair/typebox").TLiteral<"property">]>;
114
+ order: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"asc">, import("@sinclair/typebox").TLiteral<"desc">]>;
115
+ }>>;
116
+ materialGroupsSortingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
117
+ field: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"name">, import("@sinclair/typebox").TLiteral<"property">]>;
118
+ order: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"asc">, import("@sinclair/typebox").TLiteral<"desc">]>;
119
+ }>>;
120
+ behavior: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
121
+ onInsert: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"default">, import("@sinclair/typebox").TLiteral<"last">]>>;
122
+ }>>;
123
+ }>>;
124
+ subcomponents: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
125
+ linkedProperties: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
126
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
127
+ thumbnail: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
128
+ }>>;
129
+ styleSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
130
+ image: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
131
+ size: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"sm">, import("@sinclair/typebox").TLiteral<"md">, import("@sinclair/typebox").TLiteral<"lg">]>;
132
+ orientation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"square">, import("@sinclair/typebox").TLiteral<"portrait">, import("@sinclair/typebox").TLiteral<"landscape">]>;
133
+ }>>;
134
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
135
+ visible: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
136
+ }>>;
137
+ }>>;
138
+ subcomponentsSortingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
139
+ field: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"name">, import("@sinclair/typebox").TLiteral<"property">]>;
140
+ order: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"asc">, import("@sinclair/typebox").TLiteral<"desc">]>;
141
+ }>>;
142
+ subcomponentGroupsSortingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
143
+ field: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"name">, import("@sinclair/typebox").TLiteral<"property">]>;
144
+ order: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"asc">, import("@sinclair/typebox").TLiteral<"desc">]>;
145
+ }>>;
146
+ behavior: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
147
+ onInsert: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"default">, import("@sinclair/typebox").TLiteral<"last">]>>;
148
+ }>>;
149
+ }>>;
150
+ }>>;
151
+ sceneSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
152
+ backgroundColor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
153
+ envMap: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
154
+ floor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
155
+ activeFloor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
156
+ activeFloorShadow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
157
+ useFloorInAR: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
158
+ floorSize: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
159
+ x: import("@sinclair/typebox").TNumber;
160
+ y: import("@sinclair/typebox").TNumber;
161
+ }>>;
162
+ floorSizeType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"infinity">, import("@sinclair/typebox").TLiteral<"likeObject">, import("@sinclair/typebox").TLiteral<"custom">]>>;
163
+ selectedMaterialGroup: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TNull]>>;
164
+ selectedDefaultMaterial: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TNull]>>;
165
+ }>>;
166
+ layout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
167
+ colors: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
168
+ primaryColor: import("@sinclair/typebox").TString;
169
+ secondaryColor: import("@sinclair/typebox").TString;
170
+ }>>;
171
+ defaultLayoutMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"configuration">, import("@sinclair/typebox").TLiteral<"materials">]>>;
172
+ }>>;
173
+ }>>;
174
+ pricingSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
175
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
176
+ configId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
177
+ }>>;
178
+ unitsSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
179
+ price: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
180
+ roundType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"round">, import("@sinclair/typebox").TLiteral<"ceil">, import("@sinclair/typebox").TLiteral<"floor">]>>;
181
+ precision: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
182
+ step: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
183
+ }>>;
184
+ }>>;
185
+ documentation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
186
+ fileUuid: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
187
+ parameters: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
188
+ name: import("@sinclair/typebox").TString;
189
+ type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"TEXT">, import("@sinclair/typebox").TLiteral<"PROJECTION">, import("@sinclair/typebox").TLiteral<"BOOL">, import("@sinclair/typebox").TLiteral<"SOURCE_DATA">]>;
190
+ uuid: import("@sinclair/typebox").TString;
191
+ value: import("@sinclair/typebox").TString;
192
+ }>>>;
193
+ }>>;
194
+ presetsSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
195
+ presets: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
196
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
197
+ id: import("@sinclair/typebox").TString;
198
+ name: import("@sinclair/typebox").TString;
199
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
200
+ configuration: import("@sinclair/typebox").TAny;
201
+ ignore: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
202
+ }>>>;
203
+ selectedId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
204
+ }>>;
205
+ assemblyPresets: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
206
+ items: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
207
+ id: import("@sinclair/typebox").TString;
208
+ name: import("@sinclair/typebox").TString;
209
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
210
+ configuration: import("@sinclair/typebox").TAny;
211
+ ignore: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
212
+ }>>>;
213
+ selectedId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
214
+ }>>;
215
+ }>>;
216
+ cameraSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
217
+ cameraType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"perspective">, import("@sinclair/typebox").TLiteral<"orthographic">]>>;
218
+ enablePan: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
219
+ enableRotate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
220
+ blockRotationAxes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
221
+ x: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
222
+ y: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
223
+ z: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
224
+ }>>;
225
+ infinityRotationAxes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
226
+ x: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
227
+ y: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
228
+ }>>;
229
+ blockMoveUnderFloor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
230
+ zoomBoundaries: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
231
+ min: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
232
+ max: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
233
+ }>>;
234
+ rotateBoundaries: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
235
+ x: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
236
+ min: import("@sinclair/typebox").TNumber;
237
+ max: import("@sinclair/typebox").TNumber;
238
+ }>>;
239
+ y: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
240
+ min: import("@sinclair/typebox").TNumber;
241
+ max: import("@sinclair/typebox").TNumber;
242
+ }>>;
243
+ }>>;
244
+ enableAutoRotate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
245
+ autoRotateActivationTime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
246
+ autoRotateSpeed: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
247
+ cameraProperties: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
248
+ near: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
249
+ far: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
250
+ }>>;
251
+ }>>;
252
+ flowsSettings: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
253
+ selectedFlowIds: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
254
+ }>>;
255
+ }>;
256
+ structure: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
257
+ type: import("@sinclair/typebox").TLiteral<"set-item">;
258
+ uuid: import("@sinclair/typebox").TString;
259
+ name: import("@sinclair/typebox").TString;
260
+ model: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
261
+ type: import("@sinclair/typebox").TLiteral<"cabinet">;
262
+ fileId: import("@sinclair/typebox").TString;
263
+ configuration: import("@sinclair/typebox").TObject<{
264
+ cameraAutoFitOn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
265
+ showInProductsList: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
266
+ draggable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
267
+ interaction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"select-only">, import("@sinclair/typebox").TLiteral<"select-and-drag">]>>;
268
+ transform: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
269
+ }>;
270
+ objectsConfiguration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
271
+ transform: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
272
+ publication: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
273
+ blocks: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TAny>;
274
+ }>>;
275
+ materials: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
276
+ selected: import("@sinclair/typebox").TString;
277
+ }>>>;
278
+ subcomponent: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
279
+ selected: import("@sinclair/typebox").TString;
280
+ }>>>;
281
+ interaction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"select-only">, import("@sinclair/typebox").TLiteral<"select-and-drag">]>>;
282
+ draggable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
283
+ movementPlane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
284
+ }>>>;
285
+ }>, import("@sinclair/typebox").TObject<{
286
+ type: import("@sinclair/typebox").TLiteral<"scene">;
287
+ fileId: import("@sinclair/typebox").TString;
288
+ }>, import("@sinclair/typebox").TObject<{
289
+ type: import("@sinclair/typebox").TLiteral<"space-root">;
290
+ }>]>;
291
+ }>>;
292
+ }>;
293
+ }>;
294
+ export type TVasFile = Static<typeof vasFileSchema>;
@@ -1,5 +1,6 @@
1
1
  import type Emittery from 'emittery';
2
2
  import type { TWebComponentEvents } from '@variantic/schemas/web-component-apis/player/events';
3
+ import type { TLayoutSettings } from '@variantic/schemas/web-component-apis/player/viewer';
3
4
  /**
4
5
  * @category Addons API
5
6
  */
@@ -9,5 +10,9 @@ export type TLayoutApi = {
9
10
  * Enables or disables fullscreen mode based on the given state.
10
11
  */
11
12
  toggleFullscreen: (state: boolean) => void;
13
+ /**
14
+ * Applies a subset of layout settings without remounting the addon.
15
+ */
16
+ applyLayoutSettings: (settingsPatch: Partial<TLayoutSettings>) => void;
12
17
  };
13
18
  export type TLayoutApiEvents = TWebComponentEvents;
@@ -1,4 +1,5 @@
1
1
  import type Emittery from 'emittery';
2
+ import type { TSettings } from '@variantic/schemas/engine';
2
3
  import type { TTimestampEventPayload, TWebComponentEvents, TMouseClickedPayload, TMouseMovedPayload } from '@variantic/schemas/web-component-apis/player/events';
3
4
  /**
4
5
  * @category Addons API
@@ -82,6 +83,10 @@ export type TViewerApi = {
82
83
  * Applies the specified camera settings.
83
84
  */
84
85
  setCameraSettings(settings: TCameraSettings): void;
86
+ /**
87
+ * Applies a subset of viewer settings without reloading the whole player.
88
+ */
89
+ applySettings(settings: Partial<TSettings>): Promise<void>;
85
90
  /**
86
91
  * Moves the camera based on the provided parameters.
87
92
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@variantic/player",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"