babylon.nodeEditor.d.ts 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. /// <reference types="react" />
  2. declare module NODEEDITOR {
  3. export class DataStorage {
  4. private static _InMemoryStorage;
  5. static ReadBoolean(key: string, defaultValue: boolean): boolean;
  6. static StoreBoolean(key: string, value: boolean): void;
  7. static ReadNumber(key: string, defaultValue: number): number;
  8. static StoreNumber(key: string, value: number): void;
  9. }
  10. }
  11. declare module NODEEDITOR {
  12. interface ITextLineComponentProps {
  13. label: string;
  14. value: string;
  15. color?: string;
  16. underline?: boolean;
  17. onLink?: () => void;
  18. }
  19. export class TextLineComponent extends React.Component<ITextLineComponentProps> {
  20. constructor(props: ITextLineComponentProps);
  21. onLink(): void;
  22. renderContent(): JSX.Element;
  23. render(): JSX.Element;
  24. }
  25. }
  26. declare module NODEEDITOR {
  27. interface ILineContainerComponentProps {
  28. title: string;
  29. children: any[] | any;
  30. closed?: boolean;
  31. }
  32. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, {
  33. isExpanded: boolean;
  34. }> {
  35. constructor(props: ILineContainerComponentProps);
  36. switchExpandedState(): void;
  37. renderHeader(): JSX.Element;
  38. render(): JSX.Element;
  39. }
  40. }
  41. declare module NODEEDITOR {
  42. export class PropertyChangedEvent {
  43. object: any;
  44. property: string;
  45. value: any;
  46. initialValue: any;
  47. }
  48. }
  49. declare module NODEEDITOR {
  50. interface ITextInputLineComponentProps {
  51. label: string;
  52. target?: any;
  53. propertyName?: string;
  54. value?: string;
  55. onChange?: (value: string) => void;
  56. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  57. }
  58. export class TextInputLineComponent extends React.Component<ITextInputLineComponentProps, {
  59. value: string;
  60. }> {
  61. private _localChange;
  62. constructor(props: ITextInputLineComponentProps);
  63. shouldComponentUpdate(nextProps: ITextInputLineComponentProps, nextState: {
  64. value: string;
  65. }): boolean;
  66. raiseOnPropertyChanged(newValue: string, previousValue: string): void;
  67. updateValue(value: string): void;
  68. render(): JSX.Element;
  69. }
  70. }
  71. declare module NODEEDITOR {
  72. /**
  73. * Generic node model which stores information about a node editor block
  74. */
  75. export class GenericNodeModel extends DefaultNodeModel {
  76. /**
  77. * BABYLON.Vector2 for the node if it exists
  78. */
  79. vector2: BABYLON.Nullable<BABYLON.Vector2>;
  80. /**
  81. * BABYLON.Vector3 for the node if it exists
  82. */
  83. vector3: BABYLON.Nullable<BABYLON.Vector3>;
  84. /**
  85. * BABYLON.Vector4 for the node if it exists
  86. */
  87. vector4: BABYLON.Nullable<BABYLON.Vector4>;
  88. /**
  89. * BABYLON.Matrix for the node if it exists
  90. */
  91. matrix: BABYLON.Nullable<BABYLON.Matrix>;
  92. /**
  93. * Constructs the node model
  94. */
  95. constructor();
  96. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  97. renderProperties(globalState: GlobalState): JSX.Element;
  98. }
  99. }
  100. declare module NODEEDITOR {
  101. /**
  102. * Port model
  103. */
  104. export class DefaultPortModel extends PortModel {
  105. /**
  106. * If the port is input or output
  107. */
  108. position: string | "input" | "output";
  109. /**
  110. * What the port is connected to
  111. */
  112. connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
  113. defaultValue: any;
  114. static idCounter: number;
  115. constructor(name: string, type?: string);
  116. canLinkToPort(port: DefaultPortModel): boolean;
  117. syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
  118. getNodeModel(): DefaultNodeModel;
  119. link(outPort: DefaultPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
  120. createLinkModel(): LinkModel;
  121. static SortInputOutput(a: BABYLON.Nullable<DefaultPortModel>, b: BABYLON.Nullable<DefaultPortModel>): {
  122. input: DefaultPortModel;
  123. output: DefaultPortModel;
  124. } | null;
  125. }
  126. }
  127. declare module NODEEDITOR {
  128. export class PortHelper {
  129. static GenerateOutputPorts(node: BABYLON.Nullable<DefaultNodeModel>, ignoreLabel: boolean): JSX.Element[];
  130. static GenerateInputPorts(node: BABYLON.Nullable<DefaultNodeModel>, includeOnly?: string[]): JSX.Element[];
  131. }
  132. }
  133. declare module NODEEDITOR {
  134. /**
  135. * GenericNodeWidgetProps
  136. */
  137. export interface GenericNodeWidgetProps {
  138. node: BABYLON.Nullable<GenericNodeModel>;
  139. globalState: GlobalState;
  140. }
  141. /**
  142. * GenericNodeWidgetState
  143. */
  144. export interface GenericNodeWidgetState {
  145. }
  146. /**
  147. * Used to display a node block for the node editor
  148. */
  149. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  150. /**
  151. * Creates a GenericNodeWidget
  152. * @param props
  153. */
  154. constructor(props: GenericNodeWidgetProps);
  155. render(): JSX.Element;
  156. }
  157. }
  158. declare module NODEEDITOR {
  159. /**
  160. * Node factory which creates editor nodes
  161. */
  162. export class GenericNodeFactory extends SRD.AbstractNodeFactory {
  163. private _globalState;
  164. /**
  165. * Constructs a GenericNodeFactory
  166. */
  167. constructor(globalState: GlobalState);
  168. /**
  169. * Generates a node widget
  170. * @param diagramEngine diagram engine
  171. * @param node node to generate
  172. * @returns node widget jsx
  173. */
  174. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: GenericNodeModel): JSX.Element;
  175. /**
  176. * Gets a new instance of a node model
  177. * @returns generic node model
  178. */
  179. getNewInstance(): GenericNodeModel;
  180. }
  181. }
  182. declare module NODEEDITOR {
  183. export interface IButtonLineComponentProps {
  184. data: string;
  185. }
  186. export class DraggableLineComponent extends React.Component<IButtonLineComponentProps> {
  187. constructor(props: IButtonLineComponentProps);
  188. render(): JSX.Element;
  189. }
  190. }
  191. declare module NODEEDITOR {
  192. interface INodeListComponentProps {
  193. globalState: GlobalState;
  194. }
  195. export class NodeListComponent extends React.Component<INodeListComponentProps> {
  196. render(): JSX.Element;
  197. }
  198. }
  199. declare module NODEEDITOR {
  200. export interface IButtonLineComponentProps {
  201. label: string;
  202. onClick: () => void;
  203. }
  204. export class ButtonLineComponent extends React.Component<IButtonLineComponentProps> {
  205. constructor(props: IButtonLineComponentProps);
  206. render(): JSX.Element;
  207. }
  208. }
  209. declare module NODEEDITOR {
  210. export class StringTools {
  211. /**
  212. * Gets the base math type of node material block connection point.
  213. * @param type Type to parse.
  214. */
  215. static GetBaseType(type: BABYLON.NodeMaterialBlockConnectionPointTypes): string;
  216. /**
  217. * Download a string into a file that will be saved locally by the browser
  218. * @param content defines the string to download locally as a file
  219. */
  220. static DownloadAsFile(content: string, filename: string): void;
  221. }
  222. }
  223. declare module NODEEDITOR {
  224. interface IFileButtonLineComponentProps {
  225. label: string;
  226. onClick: (file: File) => void;
  227. accept: string;
  228. }
  229. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  230. constructor(props: IFileButtonLineComponentProps);
  231. onChange(evt: any): void;
  232. render(): JSX.Element;
  233. }
  234. }
  235. declare module NODEEDITOR {
  236. interface IPropertyTabComponentProps {
  237. globalState: GlobalState;
  238. }
  239. export class PropertyTabComponent extends React.Component<IPropertyTabComponentProps, {
  240. currentNode: BABYLON.Nullable<DefaultNodeModel>;
  241. }> {
  242. constructor(props: IPropertyTabComponentProps);
  243. componentWillMount(): void;
  244. load(file: File): void;
  245. render(): JSX.Element;
  246. }
  247. }
  248. declare module NODEEDITOR {
  249. interface IPortalProps {
  250. globalState: GlobalState;
  251. }
  252. export class Portal extends React.Component<IPortalProps> {
  253. render(): React.ReactPortal;
  254. }
  255. }
  256. declare module NODEEDITOR {
  257. export interface ICheckBoxLineComponentProps {
  258. label: string;
  259. target?: any;
  260. propertyName?: string;
  261. isSelected?: () => boolean;
  262. onSelect?: (value: boolean) => void;
  263. onValueChanged?: () => void;
  264. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  265. }
  266. export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
  267. isSelected: boolean;
  268. }> {
  269. private static _UniqueIdSeed;
  270. private _uniqueId;
  271. private _localChange;
  272. constructor(props: ICheckBoxLineComponentProps);
  273. shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
  274. isSelected: boolean;
  275. }): boolean;
  276. onChange(): void;
  277. render(): JSX.Element;
  278. }
  279. }
  280. declare module NODEEDITOR {
  281. interface ITexturePropertyTabComponentProps {
  282. globalState: GlobalState;
  283. node: TextureNodeModel;
  284. }
  285. export class TexturePropertyTabComponent extends React.Component<ITexturePropertyTabComponentProps> {
  286. /**
  287. * Replaces the texture of the node
  288. * @param file the file of the texture to use
  289. */
  290. replaceTexture(file: File): void;
  291. render(): JSX.Element;
  292. }
  293. }
  294. declare module NODEEDITOR {
  295. /**
  296. * Texture node model which stores information about a node editor block
  297. */
  298. export class TextureNodeModel extends DefaultNodeModel {
  299. private _block;
  300. /**
  301. * Texture for the node if it exists
  302. */
  303. texture: BABYLON.Nullable<BABYLON.BaseTexture>;
  304. /**
  305. * Constructs the node model
  306. */
  307. constructor();
  308. renderProperties(globalState: GlobalState): JSX.Element;
  309. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  310. }
  311. }
  312. declare module NODEEDITOR {
  313. interface ITextureLineComponentProps {
  314. texture: BABYLON.BaseTexture;
  315. width: number;
  316. height: number;
  317. globalState?: any;
  318. hideChannelSelect?: boolean;
  319. }
  320. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  321. displayRed: boolean;
  322. displayGreen: boolean;
  323. displayBlue: boolean;
  324. displayAlpha: boolean;
  325. face: number;
  326. }> {
  327. constructor(props: ITextureLineComponentProps);
  328. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  329. displayRed: boolean;
  330. displayGreen: boolean;
  331. displayBlue: boolean;
  332. displayAlpha: boolean;
  333. face: number;
  334. }): boolean;
  335. componentDidMount(): void;
  336. componentDidUpdate(): void;
  337. updatePreview(): void;
  338. render(): JSX.Element;
  339. }
  340. }
  341. declare module NODEEDITOR {
  342. /**
  343. * GenericNodeWidgetProps
  344. */
  345. export interface ITextureNodeWidgetProps {
  346. node: BABYLON.Nullable<TextureNodeModel>;
  347. globalState: GlobalState;
  348. }
  349. /**
  350. * Used to display a node block for the node editor
  351. */
  352. export class TextureNodeWidget extends React.Component<ITextureNodeWidgetProps> {
  353. /**
  354. * Creates a GenericNodeWidget
  355. * @param props
  356. */
  357. constructor(props: ITextureNodeWidgetProps);
  358. render(): JSX.Element;
  359. }
  360. }
  361. declare module NODEEDITOR {
  362. /**
  363. * Node factory which creates editor nodes
  364. */
  365. export class TextureNodeFactory extends SRD.AbstractNodeFactory {
  366. private _globalState;
  367. /**
  368. * Constructs a TextureNodeFactory
  369. */
  370. constructor(globalState: GlobalState);
  371. /**
  372. * Generates a node widget
  373. * @param diagramEngine diagram engine
  374. * @param node node to generate
  375. * @returns node widget jsx
  376. */
  377. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: TextureNodeModel): JSX.Element;
  378. /**
  379. * Gets a new instance of a node model
  380. * @returns texture node model
  381. */
  382. getNewInstance(): TextureNodeModel;
  383. }
  384. }
  385. declare module NODEEDITOR {
  386. interface INumericInputComponentProps {
  387. label: string;
  388. value: number;
  389. step?: number;
  390. onChange: (value: number) => void;
  391. }
  392. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  393. value: string;
  394. }> {
  395. static defaultProps: {
  396. step: number;
  397. };
  398. private _localChange;
  399. constructor(props: INumericInputComponentProps);
  400. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  401. value: string;
  402. }): boolean;
  403. updateValue(evt: any): void;
  404. render(): JSX.Element;
  405. }
  406. }
  407. declare module NODEEDITOR {
  408. interface IVector2LineComponentProps {
  409. label: string;
  410. target: any;
  411. propertyName: string;
  412. step?: number;
  413. onChange?: (newvalue: BABYLON.Vector2) => void;
  414. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  415. }
  416. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  417. isExpanded: boolean;
  418. value: BABYLON.Vector2;
  419. }> {
  420. static defaultProps: {
  421. step: number;
  422. };
  423. private _localChange;
  424. constructor(props: IVector2LineComponentProps);
  425. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  426. isExpanded: boolean;
  427. value: BABYLON.Vector2;
  428. }): boolean;
  429. switchExpandState(): void;
  430. raiseOnPropertyChanged(previousValue: BABYLON.Vector2): void;
  431. updateStateX(value: number): void;
  432. updateStateY(value: number): void;
  433. render(): JSX.Element;
  434. }
  435. }
  436. declare module NODEEDITOR {
  437. interface IVector2PropertyTabComponentProps {
  438. globalState: GlobalState;
  439. inputBlock: BABYLON.InputBlock;
  440. }
  441. export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
  442. render(): JSX.Element;
  443. }
  444. }
  445. declare module NODEEDITOR {
  446. interface IVector3LineComponentProps {
  447. label: string;
  448. target: any;
  449. propertyName: string;
  450. step?: number;
  451. onChange?: (newvalue: BABYLON.Vector3) => void;
  452. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  453. }
  454. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  455. isExpanded: boolean;
  456. value: BABYLON.Vector3;
  457. }> {
  458. static defaultProps: {
  459. step: number;
  460. };
  461. private _localChange;
  462. constructor(props: IVector3LineComponentProps);
  463. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  464. isExpanded: boolean;
  465. value: BABYLON.Vector3;
  466. }): boolean;
  467. switchExpandState(): void;
  468. raiseOnPropertyChanged(previousValue: BABYLON.Vector3): void;
  469. updateVector3(): void;
  470. updateStateX(value: number): void;
  471. updateStateY(value: number): void;
  472. updateStateZ(value: number): void;
  473. render(): JSX.Element;
  474. }
  475. }
  476. declare module NODEEDITOR {
  477. interface IVector3PropertyTabComponentProps {
  478. globalState: GlobalState;
  479. inputBlock: BABYLON.InputBlock;
  480. }
  481. export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
  482. render(): JSX.Element;
  483. }
  484. }
  485. declare module NODEEDITOR {
  486. class ListLineOption {
  487. label: string;
  488. value: number | string;
  489. }
  490. interface IOptionsLineComponentProps {
  491. label: string;
  492. target: any;
  493. propertyName: string;
  494. options: ListLineOption[];
  495. noDirectUpdate?: boolean;
  496. onSelect?: (value: number | string) => void;
  497. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  498. valuesAreStrings?: boolean;
  499. defaultIfNull?: number;
  500. }
  501. export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, {
  502. value: number | string;
  503. }> {
  504. private _localChange;
  505. private _getValue;
  506. constructor(props: IOptionsLineComponentProps);
  507. shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: {
  508. value: number;
  509. }): boolean;
  510. raiseOnPropertyChanged(newValue: number | string, previousValue: number | string): void;
  511. updateValue(valueString: string): void;
  512. render(): JSX.Element;
  513. }
  514. }
  515. declare module NODEEDITOR {
  516. export interface IColor3LineComponentProps {
  517. label: string;
  518. target: any;
  519. propertyName: string;
  520. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  521. onChange?: () => void;
  522. }
  523. export class Color3LineComponent extends React.Component<IColor3LineComponentProps, {
  524. isExpanded: boolean;
  525. color: BABYLON.Color3;
  526. }> {
  527. private _localChange;
  528. constructor(props: IColor3LineComponentProps);
  529. shouldComponentUpdate(nextProps: IColor3LineComponentProps, nextState: {
  530. color: BABYLON.Color3;
  531. }): boolean;
  532. onChange(newValue: string): void;
  533. switchExpandState(): void;
  534. raiseOnPropertyChanged(previousValue: BABYLON.Color3): void;
  535. updateStateR(value: number): void;
  536. updateStateG(value: number): void;
  537. updateStateB(value: number): void;
  538. copyToClipboard(): void;
  539. render(): JSX.Element;
  540. }
  541. }
  542. declare module NODEEDITOR {
  543. interface IColor3PropertyTabComponentProps {
  544. globalState: GlobalState;
  545. inputBlock: BABYLON.InputBlock;
  546. }
  547. export class Color3PropertyTabComponent extends React.Component<IColor3PropertyTabComponentProps> {
  548. render(): JSX.Element;
  549. }
  550. }
  551. declare module NODEEDITOR {
  552. interface IFloatLineComponentProps {
  553. label: string;
  554. target: any;
  555. propertyName: string;
  556. onChange?: (newValue: number) => void;
  557. isInteger?: boolean;
  558. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  559. additionalClass?: string;
  560. step?: string;
  561. digits?: number;
  562. }
  563. export class FloatLineComponent extends React.Component<IFloatLineComponentProps, {
  564. value: string;
  565. }> {
  566. private _localChange;
  567. private _store;
  568. constructor(props: IFloatLineComponentProps);
  569. shouldComponentUpdate(nextProps: IFloatLineComponentProps, nextState: {
  570. value: string;
  571. }): boolean;
  572. raiseOnPropertyChanged(newValue: number, previousValue: number): void;
  573. updateValue(valueString: string): void;
  574. render(): JSX.Element;
  575. }
  576. }
  577. declare module NODEEDITOR {
  578. interface IFloatPropertyTabComponentProps {
  579. globalState: GlobalState;
  580. inputBlock: BABYLON.InputBlock;
  581. }
  582. export class FloatPropertyTabComponent extends React.Component<IFloatPropertyTabComponentProps> {
  583. render(): JSX.Element;
  584. }
  585. }
  586. declare module NODEEDITOR {
  587. interface IInputPropertyTabComponentProps {
  588. globalState: GlobalState;
  589. inputNode: InputNodeModel;
  590. }
  591. export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
  592. constructor(props: IInputPropertyTabComponentProps);
  593. renderValue(globalState: GlobalState): JSX.Element | null;
  594. setDefaultValue(): void;
  595. render(): JSX.Element;
  596. }
  597. }
  598. declare module NODEEDITOR {
  599. /**
  600. * Generic node model which stores information about a node editor block
  601. */
  602. export class InputNodeModel extends DefaultNodeModel {
  603. readonly inputBlock: BABYLON.InputBlock;
  604. /**
  605. * Constructs the node model
  606. */
  607. constructor();
  608. renderProperties(globalState: GlobalState): JSX.Element;
  609. }
  610. }
  611. declare module NODEEDITOR {
  612. /**
  613. * GenericNodeWidgetProps
  614. */
  615. export interface InputNodeWidgetProps {
  616. node: BABYLON.Nullable<InputNodeModel>;
  617. globalState: GlobalState;
  618. }
  619. /**
  620. * Used to display a node block for the node editor
  621. */
  622. export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
  623. /**
  624. * Creates a GenericNodeWidget
  625. * @param props
  626. */
  627. constructor(props: InputNodeWidgetProps);
  628. renderValue(value: string): JSX.Element | null;
  629. render(): JSX.Element | null;
  630. }
  631. }
  632. declare module NODEEDITOR {
  633. /**
  634. * Node factory which creates editor nodes
  635. */
  636. export class InputNodeFactory extends SRD.AbstractNodeFactory {
  637. private _globalState;
  638. /**
  639. * Constructs a GenericNodeFactory
  640. */
  641. constructor(globalState: GlobalState);
  642. /**
  643. * Generates a node widget
  644. * @param diagramEngine diagram engine
  645. * @param node node to generate
  646. * @returns node widget jsx
  647. */
  648. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: InputNodeModel): JSX.Element;
  649. /**
  650. * Gets a new instance of a node model
  651. * @returns input node model
  652. */
  653. getNewInstance(): InputNodeModel;
  654. }
  655. }
  656. declare module NODEEDITOR {
  657. interface ILogComponentProps {
  658. globalState: GlobalState;
  659. }
  660. export class LogEntry {
  661. message: string;
  662. isError: boolean;
  663. constructor(message: string, isError: boolean);
  664. }
  665. export class LogComponent extends React.Component<ILogComponentProps, {
  666. logs: LogEntry[];
  667. }> {
  668. constructor(props: ILogComponentProps);
  669. componentWillMount(): void;
  670. componentDidUpdate(): void;
  671. render(): JSX.Element;
  672. }
  673. }
  674. declare module NODEEDITOR {
  675. interface ILightPropertyTabComponentProps {
  676. globalState: GlobalState;
  677. node: LightNodeModel;
  678. }
  679. export class LightPropertyTabComponent extends React.Component<ILightPropertyTabComponentProps> {
  680. render(): JSX.Element;
  681. }
  682. }
  683. declare module NODEEDITOR {
  684. /**
  685. * BABYLON.Light node model which stores information about a node editor block
  686. */
  687. export class LightNodeModel extends DefaultNodeModel {
  688. private _block;
  689. /**
  690. * BABYLON.Light for the node if it exists
  691. */
  692. light: BABYLON.Nullable<BABYLON.Light>;
  693. /**
  694. * Constructs the node model
  695. */
  696. constructor();
  697. renderProperties(globalState: GlobalState): JSX.Element;
  698. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  699. }
  700. }
  701. declare module NODEEDITOR {
  702. /**
  703. * GenericNodeWidgetProps
  704. */
  705. export interface ILightNodeWidgetProps {
  706. node: BABYLON.Nullable<LightNodeModel>;
  707. globalState: GlobalState;
  708. }
  709. /**
  710. * Used to display a node block for the node editor
  711. */
  712. export class LightNodeWidget extends React.Component<ILightNodeWidgetProps> {
  713. /**
  714. * Creates a GenericNodeWidget
  715. * @param props
  716. */
  717. constructor(props: ILightNodeWidgetProps);
  718. render(): JSX.Element;
  719. }
  720. }
  721. declare module NODEEDITOR {
  722. /**
  723. * Node factory which creates editor nodes
  724. */
  725. export class LightNodeFactory extends SRD.AbstractNodeFactory {
  726. private _globalState;
  727. /**
  728. * Constructs a LightNodeFactory
  729. */
  730. constructor(globalState: GlobalState);
  731. /**
  732. * Generates a node widget
  733. * @param diagramEngine diagram engine
  734. * @param node node to generate
  735. * @returns node widget jsx
  736. */
  737. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: LightNodeModel): JSX.Element;
  738. /**
  739. * Gets a new instance of a node model
  740. * @returns light node model
  741. */
  742. getNewInstance(): LightNodeModel;
  743. }
  744. }
  745. declare module NODEEDITOR {
  746. interface IGraphEditorProps {
  747. globalState: GlobalState;
  748. }
  749. export class NodeCreationOptions {
  750. nodeMaterialBlock: BABYLON.NodeMaterialBlock;
  751. type?: string;
  752. connection?: BABYLON.NodeMaterialConnectionPoint;
  753. }
  754. export class GraphEditor extends React.Component<IGraphEditorProps> {
  755. private _engine;
  756. private _model;
  757. private _startX;
  758. private _moveInProgress;
  759. private _leftWidth;
  760. private _rightWidth;
  761. private _nodes;
  762. /** @hidden */
  763. _toAdd: LinkModel[] | null;
  764. /**
  765. * Creates a node and recursivly creates its parent nodes from it's input
  766. * @param nodeMaterialBlock
  767. */
  768. createNodeFromObject(options: NodeCreationOptions): DefaultNodeModel;
  769. componentDidMount(): void;
  770. componentWillUnmount(): void;
  771. constructor(props: IGraphEditorProps);
  772. distributeGraph(): dagre.Node[];
  773. mapElements(): {
  774. id: string;
  775. metadata: {
  776. id: string;
  777. width: number;
  778. height: number;
  779. };
  780. }[];
  781. mapEdges(): {
  782. from: import("storm-react-diagrams").NodeModel;
  783. to: import("storm-react-diagrams").NodeModel;
  784. }[];
  785. buildMaterial(): void;
  786. build(needToWait?: boolean): void;
  787. reOrganize(): void;
  788. addValueNode(type: string): DefaultNodeModel;
  789. onPointerDown(evt: React.PointerEvent<HTMLDivElement>): void;
  790. onPointerUp(evt: React.PointerEvent<HTMLDivElement>): void;
  791. resizeColumns(evt: React.PointerEvent<HTMLDivElement>, forLeft?: boolean): void;
  792. buildColumnLayout(): string;
  793. emitNewBlock(event: React.DragEvent<HTMLDivElement>): void;
  794. render(): JSX.Element;
  795. }
  796. }
  797. declare module NODEEDITOR {
  798. /**
  799. * Generic node model which stores information about a node editor block
  800. */
  801. export class DefaultNodeModel extends NodeModel {
  802. /**
  803. * The babylon block this node represents
  804. */
  805. block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
  806. ports: {
  807. [s: string]: DefaultPortModel;
  808. };
  809. /**
  810. * Constructs the node model
  811. */
  812. constructor(key: string);
  813. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  814. renderProperties(globalState: GlobalState): JSX.Element | null;
  815. }
  816. }
  817. declare module NODEEDITOR {
  818. export class GlobalState {
  819. nodeMaterial?: BABYLON.NodeMaterial;
  820. hostElement: HTMLElement;
  821. hostDocument: HTMLDocument;
  822. onSelectionChangedObservable: BABYLON.Observable<BABYLON.Nullable<DefaultNodeModel>>;
  823. onRebuildRequiredObservable: BABYLON.Observable<void>;
  824. onResetRequiredObservable: BABYLON.Observable<void>;
  825. onUpdateRequiredObservable: BABYLON.Observable<void>;
  826. onZoomToFitRequiredObservable: BABYLON.Observable<void>;
  827. onReOrganizedRequiredObservable: BABYLON.Observable<void>;
  828. onLogRequiredObservable: BABYLON.Observable<LogEntry>;
  829. }
  830. }
  831. declare module NODEEDITOR {
  832. export class Popup {
  833. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  834. private static _CopyStyles;
  835. }
  836. }
  837. declare module NODEEDITOR {
  838. /**
  839. * Interface used to specify creation options for the node editor
  840. */
  841. export interface INodeEditorOptions {
  842. nodeMaterial: BABYLON.NodeMaterial;
  843. }
  844. /**
  845. * Class used to create a node editor
  846. */
  847. export class NodeEditor {
  848. /**
  849. * Show the node editor
  850. * @param options defines the options to use to configure the node editor
  851. */
  852. static Show(options: INodeEditorOptions): void;
  853. }
  854. }