import { CreatedInstance } from './CreatedInstance'; /** * Props passed from controls that are not part of generated props and custom handling. Typically used to aid declarative composition. */ export type CustomProps = { /** * Assign to this property on the parent. Parent property is cleared on umnount. */ assignTo?: string | string[]; /** * Assigned from this existing property on the parent. Will assign this host element to a parent property that contains an existing instance (no new instances created and no dispose called). */ assignFrom?: string; /** * allows components to use instances of objects created non-declaratively */ fromInstance?: any; /** * To automatically dispose of the underlying object when "fromInstance" is used. Is not applied for regularly instanced objects. * * Default: false */ disposeInstanceOnUnmount?: boolean; }; export type AbstractMeshCustomProps = { /** * Signal to reconciler that child meshes are not tracked and are not part of tree. ie: children need to be explicitly added to GlowLayer/ShadowGenerator. */ childMeshesNotTracked?: boolean; } & CustomProps; export type Control3DCustomProps = { /** * for 3D control ".content" (which is 2D) */ childrenAsContent?: boolean; /** * for Control3D, which has position, but not other properties like rotation. */ linkToTransformNodeByName?: string; /** * See manager and Control lifecycle listener for details. */ onControlAdded?: (instance: CreatedInstance) => void; } & CustomProps; export type Control2DCustomProps = { /** * ??? */ gridColumn?: number; /** * ??? */ gridRow?: number; } & CustomProps; export type MaterialCustomProps = { /** * For attaching the same material to multiple meshes (by mesh name) */ attachToMeshesByName?: string[]; } & CustomProps; export type ShadowGeneratorCustomProps = { /** * List of mesh names to search for, which will be added as shadow casters. */ shadowCasters?: string[]; /** * List of mesh names to exclude from casting shadows (all other meshes by name will cast shadows) */ shadowCastersExcluding?: string[]; /** * Adds all child nodes as shadow casters. */ shadowCastChildren?: boolean; } & CustomProps; export type VRExperienceHelperCustomProps = { enableInteractions?: boolean; } & CustomProps; /** * Custom Gizmo props used for declaratively attaching. */ export type GizmoCustomProps = { /** * Attach to nearest node (as opposed to a restricting mesh) */ attachGizmoToNode?: boolean; /** * Attach to nearest node */ attachGizmoToMesh?: boolean; /** * Do not automatically attach to a mesh/node */ skipAutoAttach?: boolean; /** * Try to set 'gizmoLayer' automatically. */ skipUtilityLayerAttach?: boolean; } & CustomProps; /** * The below Custom Props are added explicitly and not automatically by inheritance, so do not need union type "& CustomProps" * These are more useful when applicalbe to only part of the inheritance chain. */ /** * Currently only extra prop for controlling attaching camera */ export type CameraCustomProps = { /** * Passed through when attachControl(..) is called. Defines whether event caught by the controls should call preventdefault() * (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) */ noPreventDefault?: boolean; }; /** * Same functionality as Advanced Dynamic Texture factory method "createForMesh" (and for first parent mesh). */ export type ADTCustomProps = { /** * Only applicable for AdvanceDynamicTexture to attach to a mesh. ADT.CreateForMesh(parent, ...) */ createForParentMesh?: boolean; }; /** * This is a subset of the EffectLayer classes. */ export type GlowLayerCustomProps = { /** * Adds all child nodes to the glow layer. */ addIncludeOnlyChildren?: boolean; }; export type VirtualKeyboardCustomProps = { /** * for VirtualKeyboard (2d input control names) */ connectControlNames?: string[]; /** * for VirtualKeyboard */ defaultKeyboard?: boolean; }; /** * A union of all CustomProps as a convenience typing and easier maintenance in other areas of code (ie: CreatedInstance and HostConfig) */ export type AnyCustomProps = CustomProps & (AbstractMeshCustomProps & ADTCustomProps & CameraCustomProps & Control2DCustomProps & Control3DCustomProps & GizmoCustomProps & GlowLayerCustomProps & VirtualKeyboardCustomProps & ShadowGeneratorCustomProps & MaterialCustomProps);