interface AsukaState {
    activeModuleId: null | string;
    activeRenderEngineKind: AsukaRenderEngineKind;
    activeViewId: null | string;
    addCustomFont: ((payload: AsukaCustomFontConfig) => string);
    addElement: ((name: string, element: AsukaElement) => void);
    addFixedSlot: ((slot: FixedSlot) => void);
    addGoogleFont: ((payload: string | AsukaGoogleFontConfig) => string);
    addPricingRule: ((rule?: any) => string);
    addShapeSvgAsset: ((payload: {
        id?: string;
        name: string;
        svgText: string;
    }) => string);
    addSystemFont: ((payload: string | AsukaSystemFontConfig) => string);
    addView: ((payload?: string | Partial<Pick<AsukaView,
        | "width"
        | "height"
        | "name"
        | "unit"
        | "dpi"
        | "physicalSize"
        | "engine"
        | "scene3d">>) => string);
    aiRuntime: any;
    applyElementVariation: ((args: AsukaElementVariationApplyInput) => Promise<boolean>);
    backModuleOverlay: (() => void);
    beginPlaceFixedSlot: ((payload: {
        bringToFront?: boolean;
        color?: string;
        constraints?: FixedSlotConstraints;
        label?: string;
        targetHeight?: number;
        targetWidth?: number;
        type: FixedSlotType;
    }) => void);
    beginPlaceShape: ((payload: ShapePlaceKind) => void);
    blocksByZone: Record<LayoutZoneId, LayoutBlock[]>;
    bootReady: boolean;
    bootStatus: string;
    bumpI18nVersion: (() => void);
    cancelPlaceFixedSlot: (() => void);
    cancelPlaceShape: (() => void);
    canUseLicenseFeature: ((feature: string) => boolean);
    clearPendingOpenCreateViewModal: (() => void);
    clearPermissionsForView: ((viewId: string) => void);
    clearUploadedAssets: (() => void);
    closeElementEditor: (() => void);
    closeElementVariationPicker: (() => void);
    closeMenu: (() => void);
    closeModule: (() => void);
    closeSelectionMenu: (() => void);
    colors: any[];
    colorScope: ColorScope;
    defaultRenderEngineKind: AsukaRenderEngineKind;
    defaults: {
        priceFormat: {
            code: string;
            decimalSeparator: string;
            precision: number;
            priceFormat: string;
            symbol: string;
            thousandSeparator: string;
            trimZeros: boolean;
        };
        uiScaling: {
            baseControlSize: number;
            baseTouchControlSize: number;
            keepControlsReadable: boolean;
            keepHelpersReadable: boolean;
            maxCompensationMultiplier: number;
            minHelperStrokeWidth: number;
        };
    };
    document3dHistoryByView: Record<string, Asuka3DHistoryTrackState>;
    document3dScenesByView: Record<string, Asuka3DSceneState>;
    documentDrawingAreas: DocumentDrawingAreaState[];
    documentFabricHistoryByView: Record<string, Asuka3DHistoryTrackState>;
    documentHistoryInfo: DocumentHistoryInfoState;
    documentHistoryInfoByView: Record<string, DocumentHistoryInfoState>;
    documentObjectsByView: Record<string, any[]>;
    documentSelection: DocumentSelectionState;
    documentViewportByView: Record<string, DocumentViewportState>;
    documentViews: AsukaView[];
    draggedBlockId: null | string;
    duplicatePricingRule: ((id: string) => string);
    editElement: ((name: string, patch: Partial<AsukaElement>) => void);
    elementEditor: null | {
        initialValues?: Partial<AsukaElement>;
        mode: "add" | "edit";
    };
    elements: AsukaElement[];
    elementSelection: null | ElementSelection;
    elementVariationPicker: null | {
        elementId?: string;
        elementName: string;
        focusOnOpen?: boolean;
        objectId: string;
        objectSrc?: string;
        partId?: string;
        partLabel?: string;
        partMaterialId?: string;
        partMeshId?: string;
        source?: string;
        variationId?: string;
    };
    endDraggingBlock: (() => void);
    exitingModules: Partial<Record<string, true>>;
    exportRuntime: any;
    finalizeModuleExit: ((id: string) => void);
    findElement: ((name: string) => null | AsukaElement);
    findElementVariation: ((name: string, variationId: string) => null | ElementVariation);
    fixedSlotActiveId: null | string;
    fixedSlots: FixedSlot[];
    fixedSlotsPlacing: null | {
        bringToFront?: boolean;
        color?: string;
        constraints: FixedSlotConstraints;
        label?: string;
        targetHeight?: number;
        targetWidth?: number;
        type: FixedSlotType;
    };
    fontsCatalog: AsukaRegisteredFont[];
    hiddenModules: Partial<Record<string, true>>;
    i18nVersion: number;
    initializeLayoutFromConfig: ((config: any) => void);
    integrations: IntegrationsConfig;
    isListenerEnabled: ((id: AsukaListenerId) => boolean);
    license: AsukaLicenseEntitlements;
    licenseResolution: AsukaLicenseResolutionResult;
    licenseToken: null | AsukaLicenseTokenInput;
    listenersEnabled: Record<AsukaListenerId, boolean>;
    listenerSettings: AsukaListenerSettings;
    magnifierActive: boolean;
    magnifierEnabled: boolean;
    magnifierSize: number;
    magnifierX: number;
    magnifierY: number;
    magnifierZoom: number;
    markerEditorState: null | {
        mode: "edit" | "create";
        slotId: null | string;
    };
    markFontState: ((id: string, patch: Partial<Pick<AsukaRegisteredFont, "loading" | "loaded" | "error">>) => void);
    moduleConfig: ModuleConfig;
    moduleDisplayModeOverrides: Partial<Record<string, ModuleDisplayMode>>;
    moduleMountTargetOverrides: Partial<Record<string, string>>;
    moduleOverlayAnchorBox: null | {
        height: number;
        left: number;
        top: number;
        width: number;
    };
    moduleOverlayStack: string[];
    moduleOverlayType:
        | "floating"
        | "popover"
        | "panel-left"
        | "panel-right"
        | "panel-bottom"
        | "panel-top"
        | "modal"
        | "drawer";
    mountedModules: Partial<Record<string, true>>;
    moveBlock: ((blockId: string, targetZone: LayoutZoneId, targetIndex?: number) => void);
    movePricingRule: ((id: string, delta: number) => void);
    openElementEditor: ((mode: "add" | "edit", initialValues?: Partial<AsukaElement>) => void);
    openElementVariationPicker: ((payload: {
        elementId?: string;
        elementName: string;
        focusOnOpen?: boolean;
        objectId: string;
        objectSrc?: string;
        partId?: string;
        partLabel?: string;
        partMaterialId?: string;
        partMeshId?: string;
        source?: string;
        variationId?: string;
    }) => void);
    openMenu: ((id: string) => void);
    openModule: ((id: string) => void);
    openSelectionMenu: (() => void);
    pendingOpenCreateViewModal: boolean;
    pendingRestoreSelectionMenu: boolean;
    permissions: AsukaPermissions;
    permissionsByView: Record<string, Partial<AsukaPermissions>>;
    price: number;
    pricingRules: any[];
    pricingTotals: {
        base: number;
        rules: number;
        standard: number;
        total: number;
        updatedAt: number;
    };
    printingMethods: PrintingMethod[];
    pushModuleOverlay: ((id: string) => void);
    registerUploadedAsset: ((input: RegisterUploadedAssetInput) => UploadedAsset);
    removeElement: ((name: string) => void);
    removeFixedSlot: ((slotId: string) => void);
    removeFont: ((id: string) => void);
    removePricingRule: ((id: string) => void);
    removeShapeSvgAsset: ((id: string) => void);
    removeUploadedAsset: ((id: string) => void);
    removeView: ((id: string) => void);
    renderEngineOptionsByKind: AsukaRenderEngineOptionsByKind;
    requestOpenCreateViewModal: (() => void);
    resetSelectionMenuNav: (() => void);
    responsiveBreakpoint: AsukaResponsiveBreakpoint;
    responsiveConfig: NormalizedAsukaResponsiveConfig;
    responsiveWidth: number;
    role: AsukaRole;
    rulerDpi: number;
    rulerEnabled: boolean;
    rulerProduct: RulerProductConfig;
    rulerUnit: RulerUnit;
    selectionMenuAnchorBox: null | {
        height: number;
        left: number;
        top: number;
        width: number;
    };
    selectionMenuBack: (() => void);
    selectionMenuGoTo: ((id: string, options?: {
        type?: SelectionMenuType;
    }) => void);
    selectionMenuItems: string[];
    selectionMenuOpen: boolean;
    selectionMenuRootType: SelectionMenuType;
    selectionMenuStack: string[];
    selectionMenuType: SelectionMenuType;
    setActiveRenderEngineKind: ((kind: AsukaRenderEngineKind) => void);
    setActiveView: ((id: string) => void);
    setAiRuntime: ((runtime: any) => void);
    setBlockCollapsed: ((blockId: string, value: boolean) => void);
    setBlockCollapsible: ((blockId: string, value: boolean) => void);
    setBootReady: ((ready: boolean) => void);
    setBootStatus: ((status: string) => void);
    setColors: ((colors: any[]) => void);
    setColorScope: ((scope: ColorScope) => void);
    setDefaultRenderEngineKind: ((kind: AsukaRenderEngineKind) => void);
    setDefaults: ((patch: Partial<{
        priceFormat: {
            code: string;
            decimalSeparator: string;
            precision: number;
            priceFormat: string;
            symbol: string;
            thousandSeparator: string;
            trimZeros: boolean;
        };
        uiScaling: {
            baseControlSize: number;
            baseTouchControlSize: number;
            keepControlsReadable: boolean;
            keepHelpersReadable: boolean;
            maxCompensationMultiplier: number;
            minHelperStrokeWidth: number;
        };
    }>) => void);
    setDocument3dCameraForView: ((viewId: string, camera: undefined | null | {
        alpha?: number;
        beta?: number;
        fov?: number;
        position?: [number, number, number];
        radius?: number;
        target?: [number, number, number];
    }) => void);
    setDocument3dHistoryForView: ((viewId: string, history: undefined | null | Asuka3DHistoryTrackState) => void);
    setDocument3dSceneForView: ((viewId: string, scene: undefined | null | Asuka3DSceneState) => void);
    setDocumentDrawingAreas: ((zones: DocumentDrawingAreaState[]) => void);
    setDocumentFabricHistoryForView: ((viewId: string, history: undefined | null | Asuka3DHistoryTrackState) => void);
    setDocumentHistoryInfo: ((info: Partial<DocumentHistoryInfoState>) => void);
    setDocumentObjectsForView: ((viewId: string, objects: any[]) => void);
    setDocumentSelection: ((selection: Partial<DocumentSelectionState>) => void);
    setDocumentViewportForView: ((viewId: string, viewport: Partial<DocumentViewportState>) => void);
    setDocumentViews: ((views: AsukaView[]) => void);
    setElementActiveVariation: ((name: string, variationId: string) => void);
    setElementSelection: ((sel: null | ElementSelection) => void);
    setElementVariationCamera: ((elementId: string, variationId: string, camera: null | Partial<AsukaCameraView>) => boolean);
    setExportRuntime: ((runtime: any) => void);
    setFixedSlotActive: ((slotId: null | string) => void);
    setFixedSlotPosition: ((slotId: string, x: number, y: number) => void);
    setFontsCatalog: ((fonts: AsukaRegisteredFont[]) => void);
    setIntegrations: ((patch: Partial<IntegrationsConfig>) => void);
    setLicenseState: ((patch: {
        license?: AsukaLicenseEntitlements;
        resolution?: AsukaLicenseResolutionResult;
        token?: null | AsukaLicenseTokenInput;
    }) => void);
    setListenerEnabled: ((id: AsukaListenerId, enabled: boolean) => void);
    setListenersEnabled: ((patch: Partial<Record<AsukaListenerId, boolean>>) => void);
    setListenerSettings: ((patch: Partial<AsukaListenerSettings>) => void);
    setMagnifierActive: ((active: boolean) => void);
    setMagnifierEnabled: ((enabled: boolean) => void);
    setMagnifierPosition: ((x: number, y: number) => void);
    setMagnifierSize: ((size: number) => void);
    setMagnifierZoom: ((zoom: number) => void);
    setMarkerEditorState: ((state: null | {
        mode: "edit" | "create";
        slotId: null | string;
    }) => void);
    setModuleConfig: ((patch: Partial<ModuleConfig>) => void);
    setModuleDisplayModeOverride: ((id: string, mode: null | ModuleDisplayMode) => void);
    setModuleMountTargetOverride: ((id: string, target: null | string) => void);
    setModuleOverlayAnchorBox: ((box: null | {
        height: number;
        left: number;
        top: number;
        width: number;
    }) => void);
    setPendingRestoreSelectionMenu: ((value: boolean) => void);
    setPermissions: ((patch: Partial<AsukaPermissions>) => void);
    setPermissionsForView: ((viewId: string, patch: Partial<AsukaPermissions>) => void);
    setPrice: ((price: string | number) => void);
    setPricingRules: ((rules: any[]) => void);
    setPricingTotals: ((totals: Partial<{
        base: number;
        rules: number;
        standard: number;
        total: number;
        updatedAt: number;
    }> & {
        updatedAt?: number;
    }) => void);
    setPrintingMethods: ((methods: PrintingMethod[]) => void);
    setProductPartActiveVariation: ((name: string, partId: string, variationId: string) => void);
    setRenderEngineOptionsByKind: ((options: AsukaRenderEngineOptionsByKind) => void);
    setResponsiveConfig: ((config: undefined | null | AsukaResponsiveConfig) => void);
    setResponsiveMetrics: ((width: number) => void);
    setRole: ((role: AsukaRole) => void);
    setRulerDpi: ((dpi: number) => void);
    setRulerEnabled: ((enabled: boolean) => void);
    setRulerProduct: ((patch: Partial<RulerProductConfig>) => void);
    setRulerUnit: ((unit: RulerUnit) => void);
    setSelectionMenuAnchorBox: ((box: null | {
        height: number;
        left: number;
        top: number;
        width: number;
    }) => void);
    setSelectionMenuItems: ((items: string[]) => void);
    setSelectionMenuType: ((type: SelectionMenuType) => void);
    setShapeEditDefaults: ((patch: Partial<{
        rectRadius: number;
        starInnerRatio: number;
        starSpikes: number;
    }>) => void);
    setShapeStyle: ((patch: Partial<{
        fill: string;
        opacity: number;
        stroke: string;
        strokeWidth: number;
    }>) => void);
    setUiConfig: ((config: undefined | null | AsukaUiOptions) => void);
    setViewThumbnail: ((viewId: string, dataUrl: string) => void);
    setZoneCollapsed: ((zone: LayoutZoneId, value: boolean) => void);
    setZoneCollapsible: ((zone: LayoutZoneId, value: boolean) => void);
    setZoneType: ((zone: LayoutZoneId, type: "panels" | "default" | "inline") => void);
    shapeEditDefaults: {
        rectRadius: number;
        starInnerRatio: number;
        starSpikes: number;
    };
    shapePlacing: null | ShapePlaceKind;
    shapeStyle: {
        fill: string;
        opacity: number;
        stroke: string;
        strokeWidth: number;
    };
    shapeSvgAssets: SvgShapeAsset[];
    startDraggingBlock: ((blockId: string) => void);
    toggleBlockCollapsed: ((blockId: string) => void);
    toggleMenu: ((id: string) => void);
    togglePricingRule: ((id: string) => void);
    toggleRuler: (() => void);
    toggleZoneCollapsed: ((zone: LayoutZoneId) => void);
    uiConfig: NormalizedAsukaUiOptions;
    updateFixedSlot: ((slotId: string, patch: Partial<FixedSlot>) => void);
    updatePricingRule: ((id: string, patch: any) => void);
    updateUploadedAsset: ((id: string, patch: Partial<UploadedAsset>) => void);
    updateView: ((id: string, patch: Partial<Pick<AsukaView,
        | "width"
        | "height"
        | "name"
        | "unit"
        | "dpi"
        | "physicalSize"
        | "engine"
        | "scene3d">>) => void);
    uploadedAssets: UploadedAsset[];
    views: AsukaView[];
    viewThumbnails: Record<string, string>;
    zoneCollapsed: Record<LayoutZoneId, boolean>;
    zoneCollapsible: Record<LayoutZoneId, boolean>;
    zoneType: Record<LayoutZoneId, "panels" | "default" | "inline">;
}

Hierarchy (view full)

  • LayoutState
  • UiConfigState
  • ResponsiveState
  • ModuleState
  • IntegrationsState
  • LicenseState
  • ModuleConfigState
  • UploadedAssetsState
  • DesignerState
  • AiRuntimeState
  • ExportRuntimeState
  • I18nState
  • ListenersState
  • FixedSlotsState
  • ElementsState
  • ViewState
  • DocumentState
  • SelectionMenuState
  • MagnifierState
  • RulerState
  • ShapesState
  • FontsState
  • DefaultsState
  • ColorScopeState
  • ColorsState
  • PricingState
  • PrintingConfigState
    • AsukaState

Properties

activeModuleId activeRenderEngineKind activeViewId addCustomFont addElement addFixedSlot addGoogleFont addPricingRule addShapeSvgAsset addSystemFont addView aiRuntime applyElementVariation backModuleOverlay beginPlaceFixedSlot beginPlaceShape blocksByZone bootReady bootStatus bumpI18nVersion cancelPlaceFixedSlot cancelPlaceShape canUseLicenseFeature clearPendingOpenCreateViewModal clearPermissionsForView clearUploadedAssets closeElementEditor closeElementVariationPicker closeMenu closeModule closeSelectionMenu colors colorScope defaultRenderEngineKind defaults document3dHistoryByView document3dScenesByView documentDrawingAreas documentFabricHistoryByView documentHistoryInfo documentHistoryInfoByView documentObjectsByView documentSelection documentViewportByView documentViews draggedBlockId duplicatePricingRule editElement elementEditor elements elementSelection elementVariationPicker endDraggingBlock exitingModules exportRuntime finalizeModuleExit findElement findElementVariation fixedSlotActiveId fixedSlots fixedSlotsPlacing fontsCatalog hiddenModules i18nVersion initializeLayoutFromConfig integrations isListenerEnabled license licenseResolution licenseToken listenersEnabled listenerSettings magnifierActive magnifierEnabled magnifierSize magnifierX magnifierY magnifierZoom markerEditorState markFontState moduleConfig moduleDisplayModeOverrides moduleMountTargetOverrides moduleOverlayAnchorBox moduleOverlayStack moduleOverlayType mountedModules moveBlock movePricingRule openElementEditor openElementVariationPicker openMenu openModule openSelectionMenu pendingOpenCreateViewModal pendingRestoreSelectionMenu permissions permissionsByView price pricingRules pricingTotals printingMethods pushModuleOverlay registerUploadedAsset removeElement removeFixedSlot removeFont removePricingRule removeShapeSvgAsset removeUploadedAsset removeView renderEngineOptionsByKind requestOpenCreateViewModal resetSelectionMenuNav responsiveBreakpoint responsiveConfig responsiveWidth role rulerDpi rulerEnabled rulerProduct rulerUnit selectionMenuAnchorBox selectionMenuBack selectionMenuGoTo selectionMenuItems selectionMenuOpen selectionMenuRootType selectionMenuStack selectionMenuType setActiveRenderEngineKind setActiveView setAiRuntime setBlockCollapsed setBlockCollapsible setBootReady setBootStatus setColors setColorScope setDefaultRenderEngineKind setDefaults setDocument3dCameraForView setDocument3dHistoryForView setDocument3dSceneForView setDocumentDrawingAreas setDocumentFabricHistoryForView setDocumentHistoryInfo setDocumentObjectsForView setDocumentSelection setDocumentViewportForView setDocumentViews setElementActiveVariation setElementSelection setElementVariationCamera setExportRuntime setFixedSlotActive setFixedSlotPosition setFontsCatalog setIntegrations setLicenseState setListenerEnabled setListenersEnabled setListenerSettings setMagnifierActive setMagnifierEnabled setMagnifierPosition setMagnifierSize setMagnifierZoom setMarkerEditorState setModuleConfig setModuleDisplayModeOverride setModuleMountTargetOverride setModuleOverlayAnchorBox setPendingRestoreSelectionMenu setPermissions setPermissionsForView setPrice setPricingRules setPricingTotals setPrintingMethods setProductPartActiveVariation setRenderEngineOptionsByKind setResponsiveConfig setResponsiveMetrics setRole setRulerDpi setRulerEnabled setRulerProduct setRulerUnit setSelectionMenuAnchorBox setSelectionMenuItems setSelectionMenuType setShapeEditDefaults setShapeStyle setUiConfig setViewThumbnail setZoneCollapsed setZoneCollapsible setZoneType shapeEditDefaults shapePlacing shapeStyle shapeSvgAssets startDraggingBlock toggleBlockCollapsed toggleMenu togglePricingRule toggleRuler toggleZoneCollapsed uiConfig updateFixedSlot updatePricingRule updateUploadedAsset updateView uploadedAssets views viewThumbnails zoneCollapsed zoneCollapsible zoneType

Properties

activeModuleId: null | string
activeRenderEngineKind: AsukaRenderEngineKind
activeViewId: null | string
addCustomFont: ((payload: AsukaCustomFontConfig) => string)
addElement: ((name: string, element: AsukaElement) => void)
addFixedSlot: ((slot: FixedSlot) => void)
addGoogleFont: ((payload: string | AsukaGoogleFontConfig) => string)
addPricingRule: ((rule?: any) => string)
addShapeSvgAsset: ((payload: {
    id?: string;
    name: string;
    svgText: string;
}) => string)
addSystemFont: ((payload: string | AsukaSystemFontConfig) => string)
addView: ((payload?: string | Partial<Pick<AsukaView,
    | "width"
    | "height"
    | "name"
    | "unit"
    | "dpi"
    | "physicalSize"
    | "engine"
    | "scene3d">>) => string)
aiRuntime: any
applyElementVariation: ((args: AsukaElementVariationApplyInput) => Promise<boolean>)

Apply a variation through the active designer runtime. Product-part variation calls may include partId.

backModuleOverlay: (() => void)
beginPlaceFixedSlot: ((payload: {
    bringToFront?: boolean;
    color?: string;
    constraints?: FixedSlotConstraints;
    label?: string;
    targetHeight?: number;
    targetWidth?: number;
    type: FixedSlotType;
}) => void)
beginPlaceShape: ((payload: ShapePlaceKind) => void)
blocksByZone: Record<LayoutZoneId, LayoutBlock[]>
bootReady: boolean
bootStatus: string
bumpI18nVersion: (() => void)
cancelPlaceFixedSlot: (() => void)
cancelPlaceShape: (() => void)
canUseLicenseFeature: ((feature: string) => boolean)
clearPendingOpenCreateViewModal: (() => void)
clearPermissionsForView: ((viewId: string) => void)
clearUploadedAssets: (() => void)
closeElementEditor: (() => void)
closeElementVariationPicker: (() => void)
closeMenu: (() => void)
closeModule: (() => void)
closeSelectionMenu: (() => void)
colors: any[]
colorScope: ColorScope
defaultRenderEngineKind: AsukaRenderEngineKind
defaults: {
    priceFormat: {
        code: string;
        decimalSeparator: string;
        precision: number;
        priceFormat: string;
        symbol: string;
        thousandSeparator: string;
        trimZeros: boolean;
    };
    uiScaling: {
        baseControlSize: number;
        baseTouchControlSize: number;
        keepControlsReadable: boolean;
        keepHelpersReadable: boolean;
        maxCompensationMultiplier: number;
        minHelperStrokeWidth: number;
    };
}
document3dHistoryByView: Record<string, Asuka3DHistoryTrackState>
document3dScenesByView: Record<string, Asuka3DSceneState>
documentDrawingAreas: DocumentDrawingAreaState[]
documentFabricHistoryByView: Record<string, Asuka3DHistoryTrackState>
documentHistoryInfo: DocumentHistoryInfoState
documentHistoryInfoByView: Record<string, DocumentHistoryInfoState>
documentObjectsByView: Record<string, any[]>
documentSelection: DocumentSelectionState
documentViewportByView: Record<string, DocumentViewportState>
documentViews: AsukaView[]
draggedBlockId: null | string

Id du bloc actuellement en cours de drag & drop.

duplicatePricingRule: ((id: string) => string)
editElement: ((name: string, patch: Partial<AsukaElement>) => void)
elementEditor: null | {
    initialValues?: Partial<AsukaElement>;
    mode: "add" | "edit";
}

Element editor modal state (opened from Elements module).

elements: AsukaElement[]

Global elements catalog (can be recursive).

elementSelection: null | ElementSelection

Currently selected element on canvas (if any).

elementVariationPicker: null | {
    elementId?: string;
    elementName: string;
    focusOnOpen?: boolean;
    objectId: string;
    objectSrc?: string;
    partId?: string;
    partLabel?: string;
    partMaterialId?: string;
    partMeshId?: string;
    source?: string;
    variationId?: string;
}

Overlay state for per-instance variation picker (opened when clicking a non-selectable element on canvas).

endDraggingBlock: (() => void)
exitingModules: Partial<Record<string, true>>

Modules currently playing an exit animation.

exportRuntime: any
finalizeModuleExit: ((id: string) => void)

Called once an exit animation has finished.

findElement: ((name: string) => null | AsukaElement)

Convenience: find element by name (deep).

findElementVariation: ((name: string, variationId: string) => null | ElementVariation)

Convenience: find variation by id in an element.

fixedSlotActiveId: null | string
fixedSlots: FixedSlot[]
fixedSlotsPlacing: null | {
    bringToFront?: boolean;
    color?: string;
    constraints: FixedSlotConstraints;
    label?: string;
    targetHeight?: number;
    targetWidth?: number;
    type: FixedSlotType;
}
fontsCatalog: AsukaRegisteredFont[]
hiddenModules: Partial<Record<string, true>>

Visibility flag for mounted modules.

  • true => the module is mounted but hidden
  • false => mounted and visible
i18nVersion: number
initializeLayoutFromConfig: ((config: any) => void)

Initialize the layout from the configuration passed to createAsukaDesigner.

integrations: IntegrationsConfig
isListenerEnabled: ((id: AsukaListenerId) => boolean)
licenseResolution: AsukaLicenseResolutionResult
licenseToken: null | AsukaLicenseTokenInput
listenersEnabled: Record<AsukaListenerId, boolean>

Enabled flags for each behaviour. Defaults are applied at init.

listenerSettings: AsukaListenerSettings

Tuning values for some behaviours (snap tolerance/step...).

magnifierActive: boolean
magnifierEnabled: boolean
magnifierSize: number
magnifierX: number
magnifierY: number
magnifierZoom: number
markerEditorState: null | {
    mode: "edit" | "create";
    slotId: null | string;
}

Marker editor modal state (create/edit).

markFontState: ((id: string, patch: Partial<Pick<AsukaRegisteredFont, "loading" | "loaded" | "error">>) => void)
moduleConfig: ModuleConfig
moduleDisplayModeOverrides: Partial<Record<string, ModuleDisplayMode>>

Runtime overrides for module display mode (e.g. panel-right, modal...).

moduleMountTargetOverrides: Partial<Record<string, string>>

Runtime overrides for module mount target (CSS selector).

moduleOverlayAnchorBox: null | {
    height: number;
    left: number;
    top: number;
    width: number;
}
moduleOverlayStack: string[]

Internal navigation (F8) for module overlays.

moduleOverlayType:
    | "floating"
    | "popover"
    | "panel-left"
    | "panel-right"
    | "panel-bottom"
    | "panel-top"
    | "modal"
    | "drawer"
mountedModules: Partial<Record<string, true>>

Modules currently mounted in the DOM. Used to support keepMounted.

moveBlock: ((blockId: string, targetZone: LayoutZoneId, targetIndex?: number) => void)

Move a menu block to another zone / position.

movePricingRule: ((id: string, delta: number) => void)
openElementEditor: ((mode: "add" | "edit", initialValues?: Partial<AsukaElement>) => void)
openElementVariationPicker: ((payload: {
    elementId?: string;
    elementName: string;
    focusOnOpen?: boolean;
    objectId: string;
    objectSrc?: string;
    partId?: string;
    partLabel?: string;
    partMaterialId?: string;
    partMeshId?: string;
    source?: string;
    variationId?: string;
}) => void)
openMenu: ((id: string) => void)
openModule: ((id: string) => void)
openSelectionMenu: (() => void)
pendingOpenCreateViewModal: boolean

When true, the Views module should open its "Create view" form on mount. Used by the empty-state CTA (no views) to reuse the existing add-view form.

pendingRestoreSelectionMenu: boolean
permissions: AsukaPermissions
permissionsByView: Record<string, Partial<AsukaPermissions>>

Per-view permission overrides.

price: number
pricingRules: any[]
pricingTotals: {
    base: number;
    rules: number;
    standard: number;
    total: number;
    updatedAt: number;
}
printingMethods: PrintingMethod[]
pushModuleOverlay: ((id: string) => void)
registerUploadedAsset: ((input: RegisterUploadedAssetInput) => UploadedAsset)
removeElement: ((name: string) => void)
removeFixedSlot: ((slotId: string) => void)
removeFont: ((id: string) => void)
removePricingRule: ((id: string) => void)
removeShapeSvgAsset: ((id: string) => void)
removeUploadedAsset: ((id: string) => void)
removeView: ((id: string) => void)
renderEngineOptionsByKind: AsukaRenderEngineOptionsByKind
requestOpenCreateViewModal: (() => void)
resetSelectionMenuNav: (() => void)
responsiveBreakpoint: AsukaResponsiveBreakpoint
responsiveWidth: number
role: AsukaRole

Current role (dev/editor/viewer).

rulerDpi: number

Pixels per inch used when rulerUnit is 'mm'/'cm'. Default: 96.

rulerEnabled: boolean
rulerProduct: RulerProductConfig

Product-specific unit mapping (used when rulerUnit is 'product').

rulerUnit: RulerUnit
selectionMenuAnchorBox: null | {
    height: number;
    left: number;
    top: number;
    width: number;
}
selectionMenuBack: (() => void)
selectionMenuGoTo: ((id: string, options?: {
    type?: SelectionMenuType;
}) => void)
selectionMenuItems: string[]
selectionMenuOpen: boolean
selectionMenuRootType: SelectionMenuType
selectionMenuStack: string[]
selectionMenuType: SelectionMenuType
setActiveRenderEngineKind: ((kind: AsukaRenderEngineKind) => void)
setActiveView: ((id: string) => void)
setAiRuntime: ((runtime: any) => void)
setBlockCollapsed: ((blockId: string, value: boolean) => void)

Update the collapsed state of a block (mainly used in inline mode).

setBlockCollapsible: ((blockId: string, value: boolean) => void)

Update whether a block can be collapsed.

setBootReady: ((ready: boolean) => void)
setBootStatus: ((status: string) => void)
setColors: ((colors: any[]) => void)
setColorScope: ((scope: ColorScope) => void)
setDefaultRenderEngineKind: ((kind: AsukaRenderEngineKind) => void)
setDefaults: ((patch: Partial<{
    priceFormat: {
        code: string;
        decimalSeparator: string;
        precision: number;
        priceFormat: string;
        symbol: string;
        thousandSeparator: string;
        trimZeros: boolean;
    };
    uiScaling: {
        baseControlSize: number;
        baseTouchControlSize: number;
        keepControlsReadable: boolean;
        keepHelpersReadable: boolean;
        maxCompensationMultiplier: number;
        minHelperStrokeWidth: number;
    };
}>) => void)
setDocument3dCameraForView: ((viewId: string, camera: undefined | null | {
    alpha?: number;
    beta?: number;
    fov?: number;
    position?: [number, number, number];
    radius?: number;
    target?: [number, number, number];
}) => void)
setDocument3dHistoryForView: ((viewId: string, history: undefined | null | Asuka3DHistoryTrackState) => void)
setDocument3dSceneForView: ((viewId: string, scene: undefined | null | Asuka3DSceneState) => void)
setDocumentDrawingAreas: ((zones: DocumentDrawingAreaState[]) => void)
setDocumentFabricHistoryForView: ((viewId: string, history: undefined | null | Asuka3DHistoryTrackState) => void)
setDocumentHistoryInfo: ((info: Partial<DocumentHistoryInfoState>) => void)
setDocumentObjectsForView: ((viewId: string, objects: any[]) => void)
setDocumentSelection: ((selection: Partial<DocumentSelectionState>) => void)
setDocumentViewportForView: ((viewId: string, viewport: Partial<DocumentViewportState>) => void)
setDocumentViews: ((views: AsukaView[]) => void)
setElementActiveVariation: ((name: string, variationId: string) => void)

Update which variation is active for the element definition.

setElementSelection: ((sel: null | ElementSelection) => void)
setElementVariationCamera: ((elementId: string, variationId: string, camera: null | Partial<AsukaCameraView>) => boolean)

Save or clear the camera preset attached to one recursive variation.

setExportRuntime: ((runtime: any) => void)
setFixedSlotActive: ((slotId: null | string) => void)
setFixedSlotPosition: ((slotId: string, x: number, y: number) => void)
setFontsCatalog: ((fonts: AsukaRegisteredFont[]) => void)
setIntegrations: ((patch: Partial<IntegrationsConfig>) => void)
setLicenseState: ((patch: {
    license?: AsukaLicenseEntitlements;
    resolution?: AsukaLicenseResolutionResult;
    token?: null | AsukaLicenseTokenInput;
}) => void)
setListenerEnabled: ((id: AsukaListenerId, enabled: boolean) => void)
setListenersEnabled: ((patch: Partial<Record<AsukaListenerId, boolean>>) => void)
setListenerSettings: ((patch: Partial<AsukaListenerSettings>) => void)
setMagnifierActive: ((active: boolean) => void)
setMagnifierEnabled: ((enabled: boolean) => void)
setMagnifierPosition: ((x: number, y: number) => void)
setMagnifierSize: ((size: number) => void)
setMagnifierZoom: ((zoom: number) => void)
setMarkerEditorState: ((state: null | {
    mode: "edit" | "create";
    slotId: null | string;
}) => void)
setModuleConfig: ((patch: Partial<ModuleConfig>) => void)
setModuleDisplayModeOverride: ((id: string, mode: null | ModuleDisplayMode) => void)
setModuleMountTargetOverride: ((id: string, target: null | string) => void)
setModuleOverlayAnchorBox: ((box: null | {
    height: number;
    left: number;
    top: number;
    width: number;
}) => void)
setPendingRestoreSelectionMenu: ((value: boolean) => void)
setPermissions: ((patch: Partial<AsukaPermissions>) => void)
setPermissionsForView: ((viewId: string, patch: Partial<AsukaPermissions>) => void)
setPrice: ((price: string | number) => void)
setPricingRules: ((rules: any[]) => void)
setPricingTotals: ((totals: Partial<{
    base: number;
    rules: number;
    standard: number;
    total: number;
    updatedAt: number;
}> & {
    updatedAt?: number;
}) => void)
setPrintingMethods: ((methods: PrintingMethod[]) => void)
setProductPartActiveVariation: ((name: string, partId: string, variationId: string) => void)

Update one 3D product-part variation group without resetting other active part groups.

setRenderEngineOptionsByKind: ((options: AsukaRenderEngineOptionsByKind) => void)
setResponsiveConfig: ((config: undefined | null | AsukaResponsiveConfig) => void)
setResponsiveMetrics: ((width: number) => void)
setRole: ((role: AsukaRole) => void)
setRulerDpi: ((dpi: number) => void)
setRulerEnabled: ((enabled: boolean) => void)
setRulerProduct: ((patch: Partial<RulerProductConfig>) => void)
setRulerUnit: ((unit: RulerUnit) => void)
setSelectionMenuAnchorBox: ((box: null | {
    height: number;
    left: number;
    top: number;
    width: number;
}) => void)
setSelectionMenuItems: ((items: string[]) => void)
setSelectionMenuType: ((type: SelectionMenuType) => void)
setShapeEditDefaults: ((patch: Partial<{
    rectRadius: number;
    starInnerRatio: number;
    starSpikes: number;
}>) => void)
setShapeStyle: ((patch: Partial<{
    fill: string;
    opacity: number;
    stroke: string;
    strokeWidth: number;
}>) => void)
setUiConfig: ((config: undefined | null | AsukaUiOptions) => void)
setViewThumbnail: ((viewId: string, dataUrl: string) => void)
setZoneCollapsed: ((zone: LayoutZoneId, value: boolean) => void)

Update the collapsed state of a zone.

setZoneCollapsible: ((zone: LayoutZoneId, value: boolean) => void)

Update whether a zone can be collapsed.

setZoneType: ((zone: LayoutZoneId, type: "panels" | "default" | "inline") => void)

Update the type of a zone (default / panels / inline).

shapeEditDefaults: {
    rectRadius: number;
    starInnerRatio: number;
    starSpikes: number;
}

Editing defaults for parameterized shapes.

Type declaration

  • rectRadius: number

    Rectangle corner radius (px).

  • starInnerRatio: number

    Star inner radius ratio (0..1).

  • starSpikes: number

    Star spikes count.

shapePlacing: null | ShapePlaceKind

Current placement mode for shapes (click-drag on canvas).

shapeStyle: {
    fill: string;
    opacity: number;
    stroke: string;
    strokeWidth: number;
}

Default style applied to newly created shapes.

Type declaration

  • fill: string

    Fill color. Use 'transparent' for none.

  • opacity: number

    Opacity (0..1).

  • stroke: string

    Stroke color. Use 'transparent' for none.

  • strokeWidth: number

    Stroke width in px.

shapeSvgAssets: SvgShapeAsset[]

Library of custom SVG shapes available in the Shapes module.

startDraggingBlock: ((blockId: string) => void)
toggleBlockCollapsed: ((blockId: string) => void)

Toggle the collapsed state of a block (mainly used in inline mode).

toggleMenu: ((id: string) => void)
togglePricingRule: ((id: string) => void)
toggleRuler: (() => void)
toggleZoneCollapsed: ((zone: LayoutZoneId) => void)

Toggle the collapsed state of a zone.

updateFixedSlot: ((slotId: string, patch: Partial<FixedSlot>) => void)

Merge/update slot + constraints. Also attempts to update already-created canvas objects.

updatePricingRule: ((id: string, patch: any) => void)
updateUploadedAsset: ((id: string, patch: Partial<UploadedAsset>) => void)
updateView: ((id: string, patch: Partial<Pick<AsukaView,
    | "width"
    | "height"
    | "name"
    | "unit"
    | "dpi"
    | "physicalSize"
    | "engine"
    | "scene3d">>) => void)
uploadedAssets: UploadedAsset[]
views: AsukaView[]
viewThumbnails: Record<string, string>

Optional thumbnails per view (data URLs). Used by the pagination UI.

zoneCollapsed: Record<LayoutZoneId, boolean>

Whether a zone is currently collapsed.

zoneCollapsible: Record<LayoutZoneId, boolean>

Whether a zone can be collapsed.

zoneType: Record<LayoutZoneId, "panels" | "default" | "inline">

Display style of each layout zone.

  • 'default': current sidebar style (expanded list + header)
  • 'inline': compact icon bar (Figma-like)