import { create } from 'zustand'; export type MappingMode = 'imported' | 'planar' | 'box' | 'cylindrical' | 'triplanar'; export interface UVTransforms { scale: [number, number]; repeat: [number, number]; offset: [number, number]; rotation: number; } export interface TriplanarTransforms { scale: number; blendSharpness: number; rotation: [number, number, number]; worldSpace: boolean; } interface ConfiguratorState { mappingMode: MappingMode; uvTransforms: UVTransforms; triplanarTransforms: TriplanarTransforms; projectionAxis: 'x' | 'y' | 'z'; // Actions setMappingMode: (mode: MappingMode) => void; setUVTransforms: (transforms: Partial) => void; setTriplanarTransforms: (transforms: Partial) => void; setProjectionAxis: (axis: 'x' | 'y' | 'z') => void; } export const useConfiguratorStore = create((set) => ({ mappingMode: 'imported', projectionAxis: 'z', uvTransforms: { scale: [1, 1], repeat: [1, 1], offset: [0, 0], rotation: 0, }, triplanarTransforms: { scale: 1, blendSharpness: 5.0, rotation: [0, 0, 0], worldSpace: false, }, setMappingMode: (mode) => set({ mappingMode: mode }), setUVTransforms: (transforms) => set((state) => ({ uvTransforms: { ...state.uvTransforms, ...transforms } })), setTriplanarTransforms: (transforms) => set((state) => ({ triplanarTransforms: { ...state.triplanarTransforms, ...transforms } })), setProjectionAxis: (axis) => set({ projectionAxis: axis }), }));