///
import { FocusAttributesEventListener } from '@zakeke/zakeke-3d-core';
import _ from 'lodash';
import { EventMessage, ExtensionFields, NftForm, NftSettings, OnBeforeSendDataToParent, SceneAnimationsConfig, TryOnMode, TryOnProvidersTypesMapping, VisibleEventMessage } from '.';
import { PlatformAttributeSelection } from './integrations/Integration';
import { BootParameters, Camera, Composition, FontFamily, Group, ImageMacroCategory, Item, Product, ProductQuantityRule, SellerSettings, Settings, Template, TemplateMacroCategory, TryOnGenericFineTuningSettings, TryOnProduct, TryOnSeller, AIPresetCategory, AIPreset, AIProductStagingRule, AIProductStagingOptions, AIProductStagingResult, AIVirtualTryOnOptions, AIVirtualTryOnResult, AIVirtualModelRule } from './models';
import { AxiosResponse } from 'axios';
import { DAMViewerAnalyticsEventType, PrintingMethodsRestrictions, TextSanitationResult, UIConfig, ZakekeImage } from './models';
declare global {
interface Window {
token: string;
isOwin: boolean;
}
}
interface RestrictionColor {
colorCode: string;
isDefault: boolean;
}
interface CustomPreviewSize {
customCartPreviewWidth: number;
customCartPreviewHeight: number;
}
interface ThemeCompositions {
name: string;
docID: string;
previewImageUrl: string;
tags: string[];
}
interface CurrentCompositionInfo {
compositionId: string | null;
compositionName: string | null;
compositionTags: string[] | null;
}
export declare class ZakekeEnvironment {
private booted;
private token;
private platformAttributesSelection;
private settings;
private platform;
private viewer;
private selection;
private integration;
private previewWidth;
private previewHeight;
private clientPreviewWidth;
private clientPreviewHeight;
private shareUrlPrefix;
private events;
private zkProduct;
private zkScene;
private zkCurrentTemplate;
private zkTemplates;
private internalIsFullscreen;
private highlightSettings;
private previousMeshesVisibleStates;
private lastCameraLocation;
private enableShareCompositionUrl;
private sharedCompositionDocId;
private templateId;
deepARsceneGLBUrl: string | null;
loadedComposition: {
templateName: string;
attributesOptions: Map;
selectedCategoryID: number | null;
} | null;
private savedCompositions;
private isDraftEditor;
private isViewerMode;
private isDAMViewer;
private isPresetConfigurationEditor;
shouldLoadDesign: boolean | null;
private debugMode;
private draftCompositionDocId;
private initialSelection;
private undoStack;
private redoStack;
private pricingCalculator;
currentAttributesSelection: Object | null;
currentCompositionInfo: CurrentCompositionInfo | null;
private copyrightMessageLocalStorageKey;
private isPupillaryDistanceMandatory;
isAIEnabled: boolean;
isAIStudioShoppingPreviewEnabled: boolean;
isAIStudioEditorEnabled: boolean;
isAIStudioEnabled: boolean;
isAiProductStagingEnabled: boolean;
isAiVtoEnabled: boolean;
private lastProductStagingGenerationTime;
private lastVirtualTryonGenerationTime;
/** Session ID (GUID) persisted for the lifetime of this environment instance, sent as ZKK-Session-ID header */
private readonly aiSessionId;
sellerSettings: SellerSettings | null;
get internalProduct(): MPlaza.Model | null;
get internalScene(): Zakeke.Scene | null;
get internalCurrentTemplate(): MPlaza.Design | null | undefined;
themeCompositions: ThemeCompositions[] | null;
currency: string;
groups: Group[];
fonts: FontFamily[];
defaultFontID: number | null;
disableTextColors: boolean;
textColors: RestrictionColor[];
/**
* Get the current text default color.
*/
defaultColor: string;
quantity: number;
quantityRule: ProductQuantityRule | null;
culture: string;
productCode: string;
productName: string;
price: number;
isOutOfStock: boolean;
composition: any;
compositionId: string | null;
templates: Template[];
currentTemplate: Template | null;
product: Product | null;
templateMacroCategories: TemplateMacroCategory[] | null;
selectedTemplateCategory: string | null;
cameras: Camera[];
isExplodedMode: boolean;
isAssetsLoading: boolean;
additionalCustomProperties: ExtensionFields[];
nftSettings: NftSettings | null;
eventMessages: EventMessage[] | null;
personalizedMessages: EventMessage[] | null;
visibleEventMessages: VisibleEventMessage[];
tryOnProvidersSettings: TryOnProvidersTypesMapping | null;
tryOnProductSettings: TryOnProduct | null;
tryOnSellerSettings: TryOnSeller | null;
pdSettings: number;
isInfoPointContentVisible: boolean;
imagesMacroCategories: ImageMacroCategory[];
isCompositionSaving: boolean;
private internalTranslations;
areTranslationsLoaded: boolean;
private integrationVersion;
useLegacyScreenshot: boolean;
visibleCustomizer: MPlaza.Customizer | null;
get isFullscreenMode(): boolean;
get userSettings(): Settings;
get isViewerReady(): boolean;
get isShoppingPreview(): boolean;
uiConfig: UIConfig | null;
animationsConfig: SceneAnimationsConfig | null;
backgroundColor: string | null;
removeBackground: boolean;
constructor();
private fetchVisitorToken;
private parseParameters;
makeDAMAnalyticsView(type: DAMViewerAnalyticsEventType): Promise>;
private getProduct;
private getScene;
private getComposerModels;
private getFonts;
getFontWeights: (font: FontFamily) => {
normal: boolean;
bold: boolean;
italic: boolean;
italicBold: boolean;
normalWeight: number;
boldWeight: number;
italicWeight: number;
italicBoldWeight: number;
};
private updateFontWeightForTextItem;
checkFontSupports: (fontName: string, needsBold: boolean, needsItalic: boolean) => {
canKeepStyles: boolean;
supportsBold: boolean;
supportsItalic: boolean;
};
private getSettings;
private getSellerSetting;
createQuote: (formData: any) => Promise;
private getPrice;
private getTranslations;
private loadLocalization;
getTemplateMacroCategories: () => Promise;
private loadScript;
validationNFTEmail: (email: string) => boolean;
validationNFTWalletAddress: (address: string) => boolean;
private saveCustomerWalletInfo;
setCopyrightMessageAccepted: (copyrightMandatoryCheckbox: boolean) => void;
getCopyrightMessageAccepted: () => boolean;
/**
* @private
*/
boot: (parameters: BootParameters | null) => Promise;
private buildDeepARSceneGLBUrl;
stopAllAnimations: () => void;
hasAnimations: () => boolean;
playAnimations: () => void;
loadSceneFromGlbUrl: (glbUrl: string, sceneConfig: Zakeke.SceneConfig) => Promise;
appendViewer: (container: HTMLElement) => void;
/**
* Forces a resize of the 3D viewer canvas to match its container.
* Call this from the theme after all UI components have finished rendering
* to fix canvas buffer/display size mismatches caused by layout reflows.
*/
forceViewerResize: () => void;
setHighlightSettings: (settings: {
color: string;
size: number;
}) => void;
renderDesign: () => Promise;
debouncedRefresh: _.DebouncedFunc<() => Promise>;
private updateDesignFast;
private debouncedChange;
restoreLastCameraLocation: () => void;
private buildRecapProps;
updateRecapAndExtensionField: () => void;
private getCurrentExtensionFields;
private handleSceneLoaded;
private getComposition;
private getDesign;
private internalLoadDesign;
private addHotjarScript;
private addGoogleTagManagerID;
loadComposition: (id: string | null) => Promise;
private internalLoadComposition;
sync3DAndPlatformSelectionWithCurrentSelection: () => Promise;
private cloneSelection;
undo: () => Promise;
redo: () => Promise;
/**
* Reset the platform attributes selection to the current selection
*/
private resetPlatformAttributesSelection;
reset: () => Promise;
private handleAttributeSelectionChanged;
private handleAttributeEnabled;
private handleAttributeDisabled;
private handleAttributeOptionEnabled;
private handleAttributeOptionDisabled;
private setAttributeSelectionEnabled;
private setOptionSelectionEnabled;
private isOptionEnabled;
private updateComposition;
setQuantity(quantity: number): void;
private _updatePrice;
private updatePrice;
private buildStructure;
private createGroupFromSelection;
private createStep;
private createAttributeFromSelection;
private createOptionFromSelection;
private createTemplateGroupFromSelection;
private saveDesignBackbone;
private saveCompositionBackbone;
private trigger;
on: (event: string, callback: any) => void;
off: (event: string, callback: any) => void;
setTemplate: (templateId: number) => Promise;
getTemplateUploadRestrictions: (areaId: number) => {
isUserImageAllowed: boolean;
isJpgAllowed: boolean;
isPngAllowed: boolean;
isSvgAllowed: boolean;
isPdfAllowed: boolean;
isEpsAllowed: boolean;
isPdfWithRasterAllowed: boolean;
};
private getTemplates;
private saveProduct;
private getTemplate;
updateView: () => void;
selectOption: (optionId: number) => void;
selectOptionsbyPrompt(prompt: string): Promise;
focusGroup: (groupId: number) => void;
focusAttribute: (attributeId: number) => Promise;
setCamera(cameraLocationId: string, onlyAngleOfView?: boolean, animate?: boolean): void;
getCameraByName(name: string): Zakeke.SceneCameraLocation | undefined;
setCameraLocation(name: string, animate?: boolean): void;
private base64StringToFile;
saveTemplate: (templateName: string, selectedCategoryID: number | null, attributeOptions: Map, save2dDesign?: boolean) => Promise;
addToCart: (additionalProperties: Record, onBeforeSendDataToParent?: ((data: OnBeforeSendDataToParent) => Promise>) | undefined, legacyScreenshot?: boolean, nftForm?: NftForm, saveDesignFromTemplateEditor?: boolean) => Promise;
zoomIn: () => void;
zoomOut: () => void;
isFullscreenEnabled: () => boolean;
getDesignItemsInfo(): Item[];
switchFullscreen: () => void;
openSecondScreen: () => void;
private extendedUpdate;
exportSceneToUsdz: (hash: string) => Promise | undefined>;
exportSceneToGlb: () => Promise;
setExplodedMode: (explodedMode: boolean) => Promise;
hasExplodedMode: () => boolean;
setBackgroundColor: (color: string, alpha: number) => void;
getCurrentSelection: () => PlatformAttributeSelection[];
getScreenshot: (width?: number, height?: number, legacyScreenshot?: boolean, backgroundColor?: string | null, padding?: number, camera?: Zakeke.SceneCameraLocation | null) => Promise;
private fireItemsChange;
isAreaVisible(areaId: number): boolean;
removeItem: (guid: string) => Promise;
addItemText(settings: {
text: string;
fontFamily: string;
}, areaId: number): Promise;
setPrintingMethod(printingMethodId: number, areaId: number): Promise;
getPrintingMethods(): Array<{
printMethodId: number;
name: string;
}>;
moveItemUp: (guid: string) => void;
moveItemDown: (guid: string) => void;
setItemText: (guid: string, text: string) => string;
setItemItalic: (guid: string, italic: boolean, font?: FontFamily) => void;
setItemBold: (guid: string, bold: boolean, font?: FontFamily) => void;
setItemColor: (guid: string, color: string) => void;
setItemFontFamily: (guid: string, fontFamily: string) => Promise;
setItemTextOnPath: (guid: string, areaId: number, value: boolean) => void;
fullyLoadFont(font: string | FontFamily): Promise;
sanitizeString: (family: FontFamily, text: string) => string;
getSanitationText: (family: FontFamily, text: string) => TextSanitationResult;
createImage: (file: File, progress?: ((percentage: number) => void) | undefined) => Promise;
createImageFromUrl: (url: string) => Promise;
addItemImage: (id: number, areaId: number) => Promise;
setItemImageFromFile: (guid: string, file: File, progress?: ((percentage: number) => void) | undefined) => Promise;
setItemImageFromBase64: (guid: string, base64: string) => Promise;
setItemImage: (guid: string, id: number) => Promise;
setItemSize: (guid: string, width: number, height: number) => Promise;
setItemConstraints: (guid: string, constraints: {
canMove?: boolean;
canResize?: boolean;
canRotate?: boolean;
canDelete?: boolean;
}) => Promise;
T_static: (str: string) => any;
T_dynamic: (str: string) => string;
getMacroCategories: () => Promise;
getImages: (categoryId: number) => Promise;
setCameraPivot(meshID: string): void;
resetCameraPivot(): void;
setCameraZoomEnabled(enabled: boolean): void;
setCameraByName(name: string, onlyAngleOfView?: boolean, animate?: boolean): void;
findObjectByName(name: string): BABYLON.AbstractMesh | null | undefined;
getPDF: () => Promise;
private rewriteShareUrl;
getShareCompositionUrl: () => Promise;
saveCompositionCopy: (isSharing?: boolean) => Promise;
getOnlineScreenshot: (width: number, height: number, legacyScreenshot?: boolean, backgroundColor?: string, padding?: number) => Promise<{
originalUrl: string;
rewrittenUrl: string;
}>;
isSceneArOnTheFly: () => boolean | undefined;
isArDeviceCompliant: () => boolean;
isAndroidOrIOS: () => boolean;
isAndroid: boolean;
isIOS: boolean;
private buildModelViewerUrl;
isSceneArEnabled: () => boolean;
private getPregeneratedARUrl;
getQrCodeArUrl: (device: 'iOS' | 'Android') => Promise;
getMobileArUrl: () => Promise;
getMobileLocalArUrl: () => Promise;
openArMobile: (url: string) => void;
private registerView;
getMeshIDbyName: (name: string) => string | undefined;
hightlightGroup(groupId: number): void;
highlightAttribute(attributeId: number): void;
/**
* Hide a mesh and its children and save the state
* @param meshId The mesh and childs to hide
*/
hideMeshAndSaveState: (meshId: string) => void;
/**
* Restore a mesh visibility state from a previous saved one (see hideMeshAndSaveState)
* @param meshId The mesh and childs to show
*/
restoreMeshVisibility: (meshId: string) => void;
/**
* Change opacity for a specific mesh
* @param meshId The mesh to change the opacity
* @param opacity The opacity to set
*/
setMeshDesignVisibility: (meshId: string, visible: boolean) => void;
addFocusAttributesListener: (listenerFunction: FocusAttributesEventListener) => void;
clearListeners: () => void;
setCameraLocked: (isBlocked?: boolean) => void;
isSceneTryOnEnabled: () => boolean;
getTryOnUrl: (tryOnUrl?: string) => Promise;
saveComposition: (customPreviewSize?: CustomPreviewSize, legacyScreenshot?: boolean, isSharing?: boolean, saveDesignFromTemplateEditor?: boolean) => Promise;
private bootstrapComposition;
loadSavedComposition: (docID: string) => Promise;
private updateSavedCompositions;
themeCompositionsFromSavedCompositions: (compositions: Composition[]) => {
name: string;
docID: string;
previewImageUrl: string;
tags: string[];
}[];
saveDraftsComposition: (name: string, tags: string[], isCopy?: boolean) => Promise;
deleteSavedComposition: (docId: string) => Promise;
applyTemplate: (templateGroupCompositionId: number) => Promise;
configureByAI: (text: string) => Promise;
getTryOnProvidersList: () => Promise;
getTryOnProductInfo: () => Promise;
getTryOnSellerInfo: (typeID: number, providerID: number) => Promise;
private getMessagesByProductCode;
get hasVTryOnEnabled(): boolean;
get canUseTryOn(): boolean;
get canUsePD(): boolean;
get isVisibleMeshShownForTryOn(): boolean;
get isMandatoryPD(): boolean;
get isTryOnMeshVisible(): boolean;
get tryOnMeshVisibleSettings(): TryOnGenericFineTuningSettings | undefined;
setPDDistance: (distance: number) => void;
pdDistance: () => number;
exportTryOnMeshToGlb: () => Promise;
getTryOnSettings: () => Zakeke.TryOnSettings | undefined;
getDeepARDesktopIframeUrl: () => Promise;
tryOnCountView: (sellerID: number, providerID: number, modeChosen: TryOnMode) => Promise;
/**
* Ottiene le restrizioni sul printing method (che nel caso di un prodotto configuratore 3D c'è sempre ed è 1 solo).
* @remarks
* Se non ci sono restrizioni, ritorna quelle di default
* @returns
* Le restrizioni sul printing method o quelle di default
*/
getPrintingMethodsRestrictions: () => PrintingMethodsRestrictions;
setMouseWheelZoomEnabled: (enabled: boolean) => void;
setCameraPinchingZoom: (toggle: boolean) => void;
get isAiEditorEnabled(): boolean;
startAIStudio: () => Promise;
private _aiPresetCategoriesPromise;
private _aiPresetPresetsPromise;
private fetchAllAIPresetCategories;
private fetchAllAIPresetPresets;
getAIPresetCategories: (presetType: string) => Promise;
getAIPresetPresets: (presetType: string) => Promise;
getApplicableAIStagingRules: (options: {
productID?: number;
printTypeID?: number;
}) => Promise;
getApplicableAIVirtualModelRules: (options: {
productID?: number;
printTypeID?: number;
}) => Promise;
private fetchServicesAvailability;
private createAIProductStagingTask;
private pollAIProductStagingTask;
generateAIProductStaging: (options: AIProductStagingOptions) => Promise;
private createAIVirtualTryonTask;
private pollAIVirtualTryonTask;
generateAIVirtualTryon: (options: AIVirtualTryOnOptions) => Promise;
}
export {};