babylon.nodeEditor.module.d.ts 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039
  1. /// <reference types="react" />
  2. declare module "babylonjs-node-editor/components/diagram/generic/genericNodeWidget" {
  3. import * as React from "react";
  4. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  5. import { Nullable } from 'babylonjs/types';
  6. import { GlobalState } from "babylonjs-node-editor/globalState";
  7. /**
  8. * GenericNodeWidgetProps
  9. */
  10. export interface GenericNodeWidgetProps {
  11. node: Nullable<GenericNodeModel>;
  12. globalState: GlobalState;
  13. }
  14. /**
  15. * GenericNodeWidgetState
  16. */
  17. export interface GenericNodeWidgetState {
  18. }
  19. /**
  20. * Used to display a node block for the node editor
  21. */
  22. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  23. /**
  24. * Creates a GenericNodeWidget
  25. * @param props
  26. */
  27. constructor(props: GenericNodeWidgetProps);
  28. render(): JSX.Element;
  29. }
  30. }
  31. declare module "babylonjs-node-editor/components/diagram/generic/genericNodeFactory" {
  32. import * as SRD from "storm-react-diagrams";
  33. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  34. import { GlobalState } from "babylonjs-node-editor/globalState";
  35. /**
  36. * Node factory which creates editor nodes
  37. */
  38. export class GenericNodeFactory extends SRD.AbstractNodeFactory {
  39. private _globalState;
  40. /**
  41. * Constructs a GenericNodeFactory
  42. */
  43. constructor(globalState: GlobalState);
  44. /**
  45. * Generates a node widget
  46. * @param diagramEngine diagram engine
  47. * @param node node to generate
  48. * @returns node widget jsx
  49. */
  50. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: GenericNodeModel): JSX.Element;
  51. /**
  52. * Gets a new instance of a node model
  53. * @returns generic node model
  54. */
  55. getNewInstance(): GenericNodeModel;
  56. }
  57. }
  58. declare module "babylonjs-node-editor/sharedComponents/lineContainerComponent" {
  59. import * as React from "react";
  60. interface ILineContainerComponentProps {
  61. title: string;
  62. children: any[] | any;
  63. closed?: boolean;
  64. }
  65. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, {
  66. isExpanded: boolean;
  67. }> {
  68. private static _InMemoryStorage;
  69. constructor(props: ILineContainerComponentProps);
  70. switchExpandedState(): void;
  71. renderHeader(): JSX.Element;
  72. render(): JSX.Element;
  73. }
  74. }
  75. declare module "babylonjs-node-editor/sharedComponents/buttonLineComponent" {
  76. import * as React from "react";
  77. export interface IButtonLineComponentProps {
  78. label: string;
  79. onClick: () => void;
  80. }
  81. export class ButtonLineComponent extends React.Component<IButtonLineComponentProps> {
  82. constructor(props: IButtonLineComponentProps);
  83. render(): JSX.Element;
  84. }
  85. }
  86. declare module "babylonjs-node-editor/components/nodeList/nodeListComponent" {
  87. import * as React from "react";
  88. import { GlobalState } from "babylonjs-node-editor/globalState";
  89. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  90. interface INodeListComponentProps {
  91. globalState: GlobalState;
  92. onAddValueNode: (b: string) => void;
  93. onAddNodeFromClass: (ObjectClass: typeof NodeMaterialBlock) => void;
  94. }
  95. export class NodeListComponent extends React.Component<INodeListComponentProps> {
  96. render(): JSX.Element;
  97. }
  98. }
  99. declare module "babylonjs-node-editor/components/propertyTab/propertyTabComponent" {
  100. import * as React from "react";
  101. import { GlobalState } from "babylonjs-node-editor/globalState";
  102. import { Nullable } from 'babylonjs/types';
  103. import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
  104. interface IPropertyTabComponentProps {
  105. globalState: GlobalState;
  106. }
  107. export class PropertyTabComponent extends React.Component<IPropertyTabComponentProps, {
  108. currentNode: Nullable<DefaultNodeModel>;
  109. }> {
  110. constructor(props: IPropertyTabComponentProps);
  111. componentWillMount(): void;
  112. render(): JSX.Element;
  113. }
  114. }
  115. declare module "babylonjs-node-editor/portal" {
  116. import * as React from "react";
  117. import { GlobalState } from "babylonjs-node-editor/globalState";
  118. interface IPortalProps {
  119. globalState: GlobalState;
  120. }
  121. export class Portal extends React.Component<IPortalProps> {
  122. render(): React.ReactPortal;
  123. }
  124. }
  125. declare module "babylonjs-node-editor/sharedComponents/fileButtonLineComponent" {
  126. import * as React from "react";
  127. interface IFileButtonLineComponentProps {
  128. label: string;
  129. onClick: (file: File) => void;
  130. accept: string;
  131. }
  132. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  133. constructor(props: IFileButtonLineComponentProps);
  134. onChange(evt: any): void;
  135. render(): JSX.Element;
  136. }
  137. }
  138. declare module "babylonjs-node-editor/components/propertyTab/properties/texturePropertyTabComponent" {
  139. import * as React from "react";
  140. import { GlobalState } from "babylonjs-node-editor/globalState";
  141. import { TextureNodeModel } from "babylonjs-node-editor/components/diagram/texture/textureNodeModel";
  142. interface ITexturePropertyTabComponentProps {
  143. globalState: GlobalState;
  144. node: TextureNodeModel;
  145. }
  146. export class TexturePropertyTabComponent extends React.Component<ITexturePropertyTabComponentProps> {
  147. /**
  148. * Replaces the texture of the node
  149. * @param file the file of the texture to use
  150. */
  151. replaceTexture(file: File): void;
  152. render(): JSX.Element;
  153. }
  154. }
  155. declare module "babylonjs-node-editor/components/diagram/texture/textureNodeModel" {
  156. import { Nullable } from 'babylonjs/types';
  157. import { Texture } from 'babylonjs/Materials/Textures/texture';
  158. import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
  159. import { GlobalState } from "babylonjs-node-editor/globalState";
  160. /**
  161. * Texture node model which stores information about a node editor block
  162. */
  163. export class TextureNodeModel extends DefaultNodeModel {
  164. /**
  165. * Texture for the node if it exists
  166. */
  167. texture: Nullable<Texture>;
  168. /**
  169. * Constructs the node model
  170. */
  171. constructor();
  172. renderProperties(globalState: GlobalState): JSX.Element;
  173. }
  174. }
  175. declare module "babylonjs-node-editor/sharedComponents/textureLineComponent" {
  176. import * as React from "react";
  177. import { BaseTexture } from "babylonjs/Materials/Textures/baseTexture";
  178. interface ITextureLineComponentProps {
  179. texture: BaseTexture;
  180. width: number;
  181. height: number;
  182. globalState?: any;
  183. hideChannelSelect?: boolean;
  184. }
  185. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  186. displayRed: boolean;
  187. displayGreen: boolean;
  188. displayBlue: boolean;
  189. displayAlpha: boolean;
  190. face: number;
  191. }> {
  192. constructor(props: ITextureLineComponentProps);
  193. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  194. displayRed: boolean;
  195. displayGreen: boolean;
  196. displayBlue: boolean;
  197. displayAlpha: boolean;
  198. face: number;
  199. }): boolean;
  200. componentDidMount(): void;
  201. componentDidUpdate(): void;
  202. updatePreview(): void;
  203. render(): JSX.Element;
  204. }
  205. }
  206. declare module "babylonjs-node-editor/components/diagram/texture/textureNodeWidget" {
  207. import * as React from "react";
  208. import { TextureNodeModel } from "babylonjs-node-editor/components/diagram/texture/textureNodeModel";
  209. import { Nullable } from 'babylonjs/types';
  210. import { GlobalState } from "babylonjs-node-editor/globalState";
  211. /**
  212. * GenericNodeWidgetProps
  213. */
  214. export interface TextureNodeWidgetProps {
  215. node: Nullable<TextureNodeModel>;
  216. globalState: GlobalState;
  217. }
  218. /**
  219. * Used to display a node block for the node editor
  220. */
  221. export class TextureNodeWidget extends React.Component<TextureNodeWidgetProps> {
  222. /**
  223. * Creates a GenericNodeWidget
  224. * @param props
  225. */
  226. constructor(props: TextureNodeWidgetProps);
  227. render(): JSX.Element;
  228. }
  229. }
  230. declare module "babylonjs-node-editor/components/diagram/texture/textureNodeFactory" {
  231. import * as SRD from "storm-react-diagrams";
  232. import { TextureNodeModel } from "babylonjs-node-editor/components/diagram/texture/textureNodeModel";
  233. import { GlobalState } from "babylonjs-node-editor/globalState";
  234. /**
  235. * Node factory which creates editor nodes
  236. */
  237. export class TextureNodeFactory extends SRD.AbstractNodeFactory {
  238. private _globalState;
  239. /**
  240. * Constructs a TextureNodeFactory
  241. */
  242. constructor(globalState: GlobalState);
  243. /**
  244. * Generates a node widget
  245. * @param diagramEngine diagram engine
  246. * @param node node to generate
  247. * @returns node widget jsx
  248. */
  249. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: TextureNodeModel): JSX.Element;
  250. /**
  251. * Gets a new instance of a node model
  252. * @returns texture node model
  253. */
  254. getNewInstance(): TextureNodeModel;
  255. }
  256. }
  257. declare module "babylonjs-node-editor/graphEditor" {
  258. import * as React from "react";
  259. import { GlobalState } from "babylonjs-node-editor/globalState";
  260. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  261. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  262. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  263. import { TextureNodeModel } from "babylonjs-node-editor/components/diagram/texture/textureNodeModel";
  264. interface IGraphEditorProps {
  265. globalState: GlobalState;
  266. }
  267. export class NodeCreationOptions {
  268. column: number;
  269. nodeMaterialBlock?: NodeMaterialBlock;
  270. type?: string;
  271. }
  272. export class GraphEditor extends React.Component<IGraphEditorProps> {
  273. private _engine;
  274. private _model;
  275. private _nodes;
  276. /**
  277. * Current row/column position used when adding new nodes
  278. */
  279. private _rowPos;
  280. /**
  281. * Creates a node and recursivly creates its parent nodes from it's input
  282. * @param nodeMaterialBlock
  283. */
  284. createNodeFromObject(options: NodeCreationOptions): GenericNodeModel | TextureNodeModel;
  285. componentDidMount(): void;
  286. componentWillUnmount(): void;
  287. constructor(props: IGraphEditorProps);
  288. addNodeFromClass(ObjectClass: typeof NodeMaterialBlock): GenericNodeModel | TextureNodeModel;
  289. addValueNode(type: string, column?: number, connection?: NodeMaterialConnectionPoint): GenericNodeModel | TextureNodeModel | null;
  290. render(): JSX.Element;
  291. }
  292. }
  293. declare module "babylonjs-node-editor/sharedComponents/numericInputComponent" {
  294. import * as React from "react";
  295. interface INumericInputComponentProps {
  296. label: string;
  297. value: number;
  298. step?: number;
  299. onChange: (value: number) => void;
  300. }
  301. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  302. value: string;
  303. }> {
  304. static defaultProps: {
  305. step: number;
  306. };
  307. private _localChange;
  308. constructor(props: INumericInputComponentProps);
  309. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  310. value: string;
  311. }): boolean;
  312. updateValue(evt: any): void;
  313. render(): JSX.Element;
  314. }
  315. }
  316. declare module "babylonjs-node-editor/sharedComponents/propertyChangedEvent" {
  317. export class PropertyChangedEvent {
  318. object: any;
  319. property: string;
  320. value: any;
  321. initialValue: any;
  322. }
  323. }
  324. declare module "babylonjs-node-editor/sharedComponents/vector2LineComponent" {
  325. import * as React from "react";
  326. import { Vector2 } from "babylonjs/Maths/math";
  327. import { Observable } from "babylonjs/Misc/observable";
  328. import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
  329. interface IVector2LineComponentProps {
  330. label: string;
  331. target: any;
  332. propertyName: string;
  333. step?: number;
  334. onChange?: (newvalue: Vector2) => void;
  335. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  336. }
  337. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  338. isExpanded: boolean;
  339. value: Vector2;
  340. }> {
  341. static defaultProps: {
  342. step: number;
  343. };
  344. private _localChange;
  345. constructor(props: IVector2LineComponentProps);
  346. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  347. isExpanded: boolean;
  348. value: Vector2;
  349. }): boolean;
  350. switchExpandState(): void;
  351. raiseOnPropertyChanged(previousValue: Vector2): void;
  352. updateStateX(value: number): void;
  353. updateStateY(value: number): void;
  354. render(): JSX.Element;
  355. }
  356. }
  357. declare module "babylonjs-node-editor/components/propertyTab/properties/vector2PropertyTabComponent" {
  358. import * as React from "react";
  359. import { GlobalState } from "babylonjs-node-editor/globalState";
  360. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  361. interface IVector2PropertyTabComponentProps {
  362. globalState: GlobalState;
  363. node: GenericNodeModel;
  364. }
  365. export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
  366. render(): JSX.Element;
  367. }
  368. }
  369. declare module "babylonjs-node-editor/sharedComponents/vector3LineComponent" {
  370. import * as React from "react";
  371. import { Vector3 } from "babylonjs/Maths/math";
  372. import { Observable } from "babylonjs/Misc/observable";
  373. import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
  374. interface IVector3LineComponentProps {
  375. label: string;
  376. target: any;
  377. propertyName: string;
  378. step?: number;
  379. onChange?: (newvalue: Vector3) => void;
  380. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  381. }
  382. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  383. isExpanded: boolean;
  384. value: Vector3;
  385. }> {
  386. static defaultProps: {
  387. step: number;
  388. };
  389. private _localChange;
  390. constructor(props: IVector3LineComponentProps);
  391. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  392. isExpanded: boolean;
  393. value: Vector3;
  394. }): boolean;
  395. switchExpandState(): void;
  396. raiseOnPropertyChanged(previousValue: Vector3): void;
  397. updateVector3(): void;
  398. updateStateX(value: number): void;
  399. updateStateY(value: number): void;
  400. updateStateZ(value: number): void;
  401. render(): JSX.Element;
  402. }
  403. }
  404. declare module "babylonjs-node-editor/components/propertyTab/properties/vector3PropertyTabComponent" {
  405. import * as React from "react";
  406. import { GlobalState } from "babylonjs-node-editor/globalState";
  407. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  408. interface IVector3PropertyTabComponentProps {
  409. globalState: GlobalState;
  410. node: GenericNodeModel;
  411. }
  412. export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
  413. render(): JSX.Element;
  414. }
  415. }
  416. declare module "babylonjs-node-editor/components/diagram/generic/genericNodeModel" {
  417. import { Nullable } from 'babylonjs/types';
  418. import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
  419. import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
  420. import { DiagramModel } from 'storm-react-diagrams/dist/@types/src/models/DiagramModel';
  421. import { GraphEditor, NodeCreationOptions } from "babylonjs-node-editor/graphEditor";
  422. import { GenericPortModel } from "babylonjs-node-editor/components/diagram/generic/genericPortModel";
  423. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  424. import { GlobalState } from "babylonjs-node-editor/globalState";
  425. /**
  426. * Generic node model which stores information about a node editor block
  427. */
  428. export class GenericNodeModel extends DefaultNodeModel {
  429. /**
  430. * Labels for the block
  431. */
  432. headerLabels: Array<{
  433. text: string;
  434. }>;
  435. /**
  436. * Vector2 for the node if it exists
  437. */
  438. vector2: Nullable<Vector2>;
  439. /**
  440. * Vector3 for the node if it exists
  441. */
  442. vector3: Nullable<Vector3>;
  443. /**
  444. * Vector4 for the node if it exists
  445. */
  446. vector4: Nullable<Vector4>;
  447. /**
  448. * Matrix for the node if it exists
  449. */
  450. matrix: Nullable<Matrix>;
  451. /**
  452. * Constructs the node model
  453. */
  454. constructor();
  455. prepareConnection(type: string, outPort: GenericPortModel, connection?: NodeMaterialConnectionPoint): void;
  456. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
  457. renderProperties(globalState: GlobalState): JSX.Element | null;
  458. }
  459. }
  460. declare module "babylonjs-node-editor/components/diagram/generic/genericPortModel" {
  461. import { LinkModel, PortModel } from "storm-react-diagrams";
  462. import { Nullable } from 'babylonjs/types';
  463. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  464. import { GenericNodeModel } from "babylonjs-node-editor/components/diagram/generic/genericNodeModel";
  465. /**
  466. * Port model for the generic node
  467. */
  468. export class GenericPortModel extends PortModel {
  469. /**
  470. * If the port is input or output
  471. */
  472. position: string | "input" | "output";
  473. /**
  474. * What the port is connected to
  475. */
  476. connection: Nullable<NodeMaterialConnectionPoint>;
  477. static idCounter: number;
  478. constructor(name: string, type?: string);
  479. syncWithNodeMaterialConnectionPoint(connection: NodeMaterialConnectionPoint): void;
  480. getNodeModel(): GenericNodeModel;
  481. link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
  482. getInputFromBlock(): void;
  483. createLinkModel(): LinkModel;
  484. getValue: Function;
  485. static SortInputOutput(a: Nullable<GenericPortModel>, b: Nullable<GenericPortModel>): {
  486. input: GenericPortModel;
  487. output: GenericPortModel;
  488. } | null;
  489. }
  490. }
  491. declare module "babylonjs-node-editor/components/diagram/defaultNodeModel" {
  492. import { NodeModel, DiagramModel } from "storm-react-diagrams";
  493. import { Nullable } from 'babylonjs/types';
  494. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  495. import { GenericPortModel } from "babylonjs-node-editor/components/diagram/generic/genericPortModel";
  496. import { GraphEditor, NodeCreationOptions } from "babylonjs-node-editor/graphEditor";
  497. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  498. import { GlobalState } from "babylonjs-node-editor/globalState";
  499. /**
  500. * Generic node model which stores information about a node editor block
  501. */
  502. export class DefaultNodeModel extends NodeModel {
  503. /**
  504. * The babylon block this node represents
  505. */
  506. block: Nullable<NodeMaterialBlock>;
  507. ports: {
  508. [s: string]: GenericPortModel;
  509. };
  510. /**
  511. * Constructs the node model
  512. */
  513. constructor(key: string);
  514. prepareConnection(type: string, outPort: GenericPortModel, connection?: NodeMaterialConnectionPoint): void;
  515. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
  516. renderProperties(globalState: GlobalState): JSX.Element | null;
  517. }
  518. }
  519. declare module "babylonjs-node-editor/globalState" {
  520. import { NodeMaterial } from "babylonjs/Materials/Node/nodeMaterial";
  521. import { Nullable } from "babylonjs/types";
  522. import { Observable } from 'babylonjs/Misc/observable';
  523. import { DefaultNodeModel } from "babylonjs-node-editor/components/diagram/defaultNodeModel";
  524. export class GlobalState {
  525. nodeMaterial?: NodeMaterial;
  526. hostElement: HTMLElement;
  527. hostDocument: HTMLDocument;
  528. onSelectionChangedObservable: Observable<Nullable<DefaultNodeModel>>;
  529. }
  530. }
  531. declare module "babylonjs-node-editor/sharedComponents/popup" {
  532. export class Popup {
  533. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  534. private static _CopyStyles;
  535. }
  536. }
  537. declare module "babylonjs-node-editor/nodeEditor" {
  538. import { NodeMaterial } from "babylonjs/Materials/Node/nodeMaterial";
  539. /**
  540. * Interface used to specify creation options for the node editor
  541. */
  542. export interface INodeEditorOptions {
  543. nodeMaterial: NodeMaterial;
  544. }
  545. /**
  546. * Class used to create a node editor
  547. */
  548. export class NodeEditor {
  549. /**
  550. * Show the node editor
  551. * @param options defines the options to use to configure the node editor
  552. */
  553. static Show(options: INodeEditorOptions): void;
  554. }
  555. }
  556. declare module "babylonjs-node-editor/index" {
  557. export * from "babylonjs-node-editor/nodeEditor";
  558. }
  559. declare module "babylonjs-node-editor/legacy/legacy" {
  560. export * from "babylonjs-node-editor/index";
  561. }
  562. declare module "babylonjs-node-editor" {
  563. export * from "babylonjs-node-editor/legacy/legacy";
  564. }
  565. /// <reference types="react" />
  566. declare module NODEEDITOR {
  567. /**
  568. * GenericNodeWidgetProps
  569. */
  570. export interface GenericNodeWidgetProps {
  571. node: BABYLON.Nullable<GenericNodeModel>;
  572. globalState: GlobalState;
  573. }
  574. /**
  575. * GenericNodeWidgetState
  576. */
  577. export interface GenericNodeWidgetState {
  578. }
  579. /**
  580. * Used to display a node block for the node editor
  581. */
  582. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  583. /**
  584. * Creates a GenericNodeWidget
  585. * @param props
  586. */
  587. constructor(props: GenericNodeWidgetProps);
  588. render(): JSX.Element;
  589. }
  590. }
  591. declare module NODEEDITOR {
  592. /**
  593. * Node factory which creates editor nodes
  594. */
  595. export class GenericNodeFactory extends SRD.AbstractNodeFactory {
  596. private _globalState;
  597. /**
  598. * Constructs a GenericNodeFactory
  599. */
  600. constructor(globalState: GlobalState);
  601. /**
  602. * Generates a node widget
  603. * @param diagramEngine diagram engine
  604. * @param node node to generate
  605. * @returns node widget jsx
  606. */
  607. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: GenericNodeModel): JSX.Element;
  608. /**
  609. * Gets a new instance of a node model
  610. * @returns generic node model
  611. */
  612. getNewInstance(): GenericNodeModel;
  613. }
  614. }
  615. declare module NODEEDITOR {
  616. interface ILineContainerComponentProps {
  617. title: string;
  618. children: any[] | any;
  619. closed?: boolean;
  620. }
  621. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, {
  622. isExpanded: boolean;
  623. }> {
  624. private static _InMemoryStorage;
  625. constructor(props: ILineContainerComponentProps);
  626. switchExpandedState(): void;
  627. renderHeader(): JSX.Element;
  628. render(): JSX.Element;
  629. }
  630. }
  631. declare module NODEEDITOR {
  632. export interface IButtonLineComponentProps {
  633. label: string;
  634. onClick: () => void;
  635. }
  636. export class ButtonLineComponent extends React.Component<IButtonLineComponentProps> {
  637. constructor(props: IButtonLineComponentProps);
  638. render(): JSX.Element;
  639. }
  640. }
  641. declare module NODEEDITOR {
  642. interface INodeListComponentProps {
  643. globalState: GlobalState;
  644. onAddValueNode: (b: string) => void;
  645. onAddNodeFromClass: (ObjectClass: typeof BABYLON.NodeMaterialBlock) => void;
  646. }
  647. export class NodeListComponent extends React.Component<INodeListComponentProps> {
  648. render(): JSX.Element;
  649. }
  650. }
  651. declare module NODEEDITOR {
  652. interface IPropertyTabComponentProps {
  653. globalState: GlobalState;
  654. }
  655. export class PropertyTabComponent extends React.Component<IPropertyTabComponentProps, {
  656. currentNode: BABYLON.Nullable<DefaultNodeModel>;
  657. }> {
  658. constructor(props: IPropertyTabComponentProps);
  659. componentWillMount(): void;
  660. render(): JSX.Element;
  661. }
  662. }
  663. declare module NODEEDITOR {
  664. interface IPortalProps {
  665. globalState: GlobalState;
  666. }
  667. export class Portal extends React.Component<IPortalProps> {
  668. render(): React.ReactPortal;
  669. }
  670. }
  671. declare module NODEEDITOR {
  672. interface IFileButtonLineComponentProps {
  673. label: string;
  674. onClick: (file: File) => void;
  675. accept: string;
  676. }
  677. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  678. constructor(props: IFileButtonLineComponentProps);
  679. onChange(evt: any): void;
  680. render(): JSX.Element;
  681. }
  682. }
  683. declare module NODEEDITOR {
  684. interface ITexturePropertyTabComponentProps {
  685. globalState: GlobalState;
  686. node: TextureNodeModel;
  687. }
  688. export class TexturePropertyTabComponent extends React.Component<ITexturePropertyTabComponentProps> {
  689. /**
  690. * Replaces the texture of the node
  691. * @param file the file of the texture to use
  692. */
  693. replaceTexture(file: File): void;
  694. render(): JSX.Element;
  695. }
  696. }
  697. declare module NODEEDITOR {
  698. /**
  699. * BABYLON.Texture node model which stores information about a node editor block
  700. */
  701. export class TextureNodeModel extends DefaultNodeModel {
  702. /**
  703. * BABYLON.Texture for the node if it exists
  704. */
  705. texture: BABYLON.Nullable<BABYLON.Texture>;
  706. /**
  707. * Constructs the node model
  708. */
  709. constructor();
  710. renderProperties(globalState: GlobalState): JSX.Element;
  711. }
  712. }
  713. declare module NODEEDITOR {
  714. interface ITextureLineComponentProps {
  715. texture: BABYLON.BaseTexture;
  716. width: number;
  717. height: number;
  718. globalState?: any;
  719. hideChannelSelect?: boolean;
  720. }
  721. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  722. displayRed: boolean;
  723. displayGreen: boolean;
  724. displayBlue: boolean;
  725. displayAlpha: boolean;
  726. face: number;
  727. }> {
  728. constructor(props: ITextureLineComponentProps);
  729. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  730. displayRed: boolean;
  731. displayGreen: boolean;
  732. displayBlue: boolean;
  733. displayAlpha: boolean;
  734. face: number;
  735. }): boolean;
  736. componentDidMount(): void;
  737. componentDidUpdate(): void;
  738. updatePreview(): void;
  739. render(): JSX.Element;
  740. }
  741. }
  742. declare module NODEEDITOR {
  743. /**
  744. * GenericNodeWidgetProps
  745. */
  746. export interface TextureNodeWidgetProps {
  747. node: BABYLON.Nullable<TextureNodeModel>;
  748. globalState: GlobalState;
  749. }
  750. /**
  751. * Used to display a node block for the node editor
  752. */
  753. export class TextureNodeWidget extends React.Component<TextureNodeWidgetProps> {
  754. /**
  755. * Creates a GenericNodeWidget
  756. * @param props
  757. */
  758. constructor(props: TextureNodeWidgetProps);
  759. render(): JSX.Element;
  760. }
  761. }
  762. declare module NODEEDITOR {
  763. /**
  764. * Node factory which creates editor nodes
  765. */
  766. export class TextureNodeFactory extends SRD.AbstractNodeFactory {
  767. private _globalState;
  768. /**
  769. * Constructs a TextureNodeFactory
  770. */
  771. constructor(globalState: GlobalState);
  772. /**
  773. * Generates a node widget
  774. * @param diagramEngine diagram engine
  775. * @param node node to generate
  776. * @returns node widget jsx
  777. */
  778. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: TextureNodeModel): JSX.Element;
  779. /**
  780. * Gets a new instance of a node model
  781. * @returns texture node model
  782. */
  783. getNewInstance(): TextureNodeModel;
  784. }
  785. }
  786. declare module NODEEDITOR {
  787. interface IGraphEditorProps {
  788. globalState: GlobalState;
  789. }
  790. export class NodeCreationOptions {
  791. column: number;
  792. nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
  793. type?: string;
  794. }
  795. export class GraphEditor extends React.Component<IGraphEditorProps> {
  796. private _engine;
  797. private _model;
  798. private _nodes;
  799. /**
  800. * Current row/column position used when adding new nodes
  801. */
  802. private _rowPos;
  803. /**
  804. * Creates a node and recursivly creates its parent nodes from it's input
  805. * @param nodeMaterialBlock
  806. */
  807. createNodeFromObject(options: NodeCreationOptions): GenericNodeModel | TextureNodeModel;
  808. componentDidMount(): void;
  809. componentWillUnmount(): void;
  810. constructor(props: IGraphEditorProps);
  811. addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): GenericNodeModel | TextureNodeModel;
  812. addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): GenericNodeModel | TextureNodeModel | null;
  813. render(): JSX.Element;
  814. }
  815. }
  816. declare module NODEEDITOR {
  817. interface INumericInputComponentProps {
  818. label: string;
  819. value: number;
  820. step?: number;
  821. onChange: (value: number) => void;
  822. }
  823. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  824. value: string;
  825. }> {
  826. static defaultProps: {
  827. step: number;
  828. };
  829. private _localChange;
  830. constructor(props: INumericInputComponentProps);
  831. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  832. value: string;
  833. }): boolean;
  834. updateValue(evt: any): void;
  835. render(): JSX.Element;
  836. }
  837. }
  838. declare module NODEEDITOR {
  839. export class PropertyChangedEvent {
  840. object: any;
  841. property: string;
  842. value: any;
  843. initialValue: any;
  844. }
  845. }
  846. declare module NODEEDITOR {
  847. interface IVector2LineComponentProps {
  848. label: string;
  849. target: any;
  850. propertyName: string;
  851. step?: number;
  852. onChange?: (newvalue: BABYLON.Vector2) => void;
  853. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  854. }
  855. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  856. isExpanded: boolean;
  857. value: BABYLON.Vector2;
  858. }> {
  859. static defaultProps: {
  860. step: number;
  861. };
  862. private _localChange;
  863. constructor(props: IVector2LineComponentProps);
  864. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  865. isExpanded: boolean;
  866. value: BABYLON.Vector2;
  867. }): boolean;
  868. switchExpandState(): void;
  869. raiseOnPropertyChanged(previousValue: BABYLON.Vector2): void;
  870. updateStateX(value: number): void;
  871. updateStateY(value: number): void;
  872. render(): JSX.Element;
  873. }
  874. }
  875. declare module NODEEDITOR {
  876. interface IVector2PropertyTabComponentProps {
  877. globalState: GlobalState;
  878. node: GenericNodeModel;
  879. }
  880. export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
  881. render(): JSX.Element;
  882. }
  883. }
  884. declare module NODEEDITOR {
  885. interface IVector3LineComponentProps {
  886. label: string;
  887. target: any;
  888. propertyName: string;
  889. step?: number;
  890. onChange?: (newvalue: BABYLON.Vector3) => void;
  891. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  892. }
  893. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  894. isExpanded: boolean;
  895. value: BABYLON.Vector3;
  896. }> {
  897. static defaultProps: {
  898. step: number;
  899. };
  900. private _localChange;
  901. constructor(props: IVector3LineComponentProps);
  902. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  903. isExpanded: boolean;
  904. value: BABYLON.Vector3;
  905. }): boolean;
  906. switchExpandState(): void;
  907. raiseOnPropertyChanged(previousValue: BABYLON.Vector3): void;
  908. updateVector3(): void;
  909. updateStateX(value: number): void;
  910. updateStateY(value: number): void;
  911. updateStateZ(value: number): void;
  912. render(): JSX.Element;
  913. }
  914. }
  915. declare module NODEEDITOR {
  916. interface IVector3PropertyTabComponentProps {
  917. globalState: GlobalState;
  918. node: GenericNodeModel;
  919. }
  920. export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
  921. render(): JSX.Element;
  922. }
  923. }
  924. declare module NODEEDITOR {
  925. /**
  926. * Generic node model which stores information about a node editor block
  927. */
  928. export class GenericNodeModel extends DefaultNodeModel {
  929. /**
  930. * Labels for the block
  931. */
  932. headerLabels: Array<{
  933. text: string;
  934. }>;
  935. /**
  936. * BABYLON.Vector2 for the node if it exists
  937. */
  938. vector2: BABYLON.Nullable<BABYLON.Vector2>;
  939. /**
  940. * BABYLON.Vector3 for the node if it exists
  941. */
  942. vector3: BABYLON.Nullable<BABYLON.Vector3>;
  943. /**
  944. * BABYLON.Vector4 for the node if it exists
  945. */
  946. vector4: BABYLON.Nullable<BABYLON.Vector4>;
  947. /**
  948. * BABYLON.Matrix for the node if it exists
  949. */
  950. matrix: BABYLON.Nullable<BABYLON.Matrix>;
  951. /**
  952. * Constructs the node model
  953. */
  954. constructor();
  955. prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
  956. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
  957. renderProperties(globalState: GlobalState): JSX.Element | null;
  958. }
  959. }
  960. declare module NODEEDITOR {
  961. /**
  962. * Port model for the generic node
  963. */
  964. export class GenericPortModel extends PortModel {
  965. /**
  966. * If the port is input or output
  967. */
  968. position: string | "input" | "output";
  969. /**
  970. * What the port is connected to
  971. */
  972. connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
  973. static idCounter: number;
  974. constructor(name: string, type?: string);
  975. syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
  976. getNodeModel(): GenericNodeModel;
  977. link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
  978. getInputFromBlock(): void;
  979. createLinkModel(): LinkModel;
  980. getValue: Function;
  981. static SortInputOutput(a: BABYLON.Nullable<GenericPortModel>, b: BABYLON.Nullable<GenericPortModel>): {
  982. input: GenericPortModel;
  983. output: GenericPortModel;
  984. } | null;
  985. }
  986. }
  987. declare module NODEEDITOR {
  988. /**
  989. * Generic node model which stores information about a node editor block
  990. */
  991. export class DefaultNodeModel extends NodeModel {
  992. /**
  993. * The babylon block this node represents
  994. */
  995. block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
  996. ports: {
  997. [s: string]: GenericPortModel;
  998. };
  999. /**
  1000. * Constructs the node model
  1001. */
  1002. constructor(key: string);
  1003. prepareConnection(type: string, outPort: GenericPortModel, connection?: BABYLON.NodeMaterialConnectionPoint): void;
  1004. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor): void;
  1005. renderProperties(globalState: GlobalState): JSX.Element | null;
  1006. }
  1007. }
  1008. declare module NODEEDITOR {
  1009. export class GlobalState {
  1010. nodeMaterial?: BABYLON.NodeMaterial;
  1011. hostElement: HTMLElement;
  1012. hostDocument: HTMLDocument;
  1013. onSelectionChangedObservable: BABYLON.Observable<BABYLON.Nullable<DefaultNodeModel>>;
  1014. }
  1015. }
  1016. declare module NODEEDITOR {
  1017. export class Popup {
  1018. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  1019. private static _CopyStyles;
  1020. }
  1021. }
  1022. declare module NODEEDITOR {
  1023. /**
  1024. * Interface used to specify creation options for the node editor
  1025. */
  1026. export interface INodeEditorOptions {
  1027. nodeMaterial: BABYLON.NodeMaterial;
  1028. }
  1029. /**
  1030. * Class used to create a node editor
  1031. */
  1032. export class NodeEditor {
  1033. /**
  1034. * Show the node editor
  1035. * @param options defines the options to use to configure the node editor
  1036. */
  1037. static Show(options: INodeEditorOptions): void;
  1038. }
  1039. }