import { EffectSchema, EffectValues, MaterialEffectClass } from "../materials/MaterialEffect.js"; import { Sprite2DMaterial } from "../materials/Sprite2DMaterial.js"; import { Light2D } from "../lights/Light2D.js"; import { LightEffectClass } from "../lights/LightEffect.js"; import { Sprite2D } from "../sprites/Sprite2D.js"; import { SpriteGroup } from "../pipeline/SpriteGroup.js"; import { Flatland } from "../Flatland.js"; import { AnimatedSprite2D } from "../sprites/AnimatedSprite2D.js"; import { SortLayerGroup } from "../pipeline/SortLayerGroup.js"; import { TileLayer } from "../tilemap/TileLayer.js"; import { TileMap2D } from "../tilemap/TileMap2D.js"; import { ThreeElement } from "@react-three/fiber"; //#region src/react/types.d.ts /** * JSX element type for a MaterialEffect with schema-derived props. * * `ThreeElement` can't always resolve dynamic properties defined via * `Object.defineProperty` in `createMaterialEffect`. This helper explicitly * surfaces the schema fields so they appear in VS Code autocomplete. * * @example * ```tsx * declare module '@react-three/fiber' { * interface ThreeElements { * dissolveEffect: EffectElement * } * } * * // Now `progress` shows up as a valid prop: * * ``` */ type EffectElement> = ThreeElement & (T extends MaterialEffectClass ? Partial> : Record); /** * JSX element type for a LightEffect with schema-derived props. * Surfaces uniform (settable) schema fields as JSX props. */ type LightEffectElement> = ThreeElement & (T extends LightEffectClass ? Partial> : Record); /** * R3F ThreeElements type augmentation for three-flatland objects. * * This enables proper TypeScript support for JSX elements like: * - * - * - * * Users must call extend() from '@react-three/fiber' before using these elements: * * @example * ```tsx * import { extend } from '@react-three/fiber' * import { Sprite2D, Sprite2DMaterial, AnimatedSprite2D } from 'three-flatland' * * // Register only what you need (tree-shakeable) * extend({ Sprite2D }) * // or extend({ Sprite2D, Sprite2DMaterial, AnimatedSprite2D }) * ``` */ declare module '@react-three/fiber' { interface ThreeElements { sprite2D: ThreeElement; sprite2DMaterial: ThreeElement; animatedSprite2D: ThreeElement; spriteGroup: ThreeElement; sortLayerGroup: ThreeElement; flatland: ThreeElement; tileMap2D: ThreeElement; tileLayer: ThreeElement; light2D: ThreeElement; } } //#endregion export { EffectElement, LightEffectElement }; //# sourceMappingURL=types.d.ts.map