babylon.nodeEditor.d.ts 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  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 IPropertyTabComponentProps {
  225. globalState: GlobalState;
  226. }
  227. export class PropertyTabComponent extends React.Component<IPropertyTabComponentProps, {
  228. currentNode: BABYLON.Nullable<DefaultNodeModel>;
  229. }> {
  230. constructor(props: IPropertyTabComponentProps);
  231. componentWillMount(): void;
  232. render(): JSX.Element;
  233. }
  234. }
  235. declare module NODEEDITOR {
  236. interface IPortalProps {
  237. globalState: GlobalState;
  238. }
  239. export class Portal extends React.Component<IPortalProps> {
  240. render(): React.ReactPortal;
  241. }
  242. }
  243. declare module NODEEDITOR {
  244. interface IFileButtonLineComponentProps {
  245. label: string;
  246. onClick: (file: File) => void;
  247. accept: string;
  248. }
  249. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  250. constructor(props: IFileButtonLineComponentProps);
  251. onChange(evt: any): void;
  252. render(): JSX.Element;
  253. }
  254. }
  255. declare module NODEEDITOR {
  256. export interface ICheckBoxLineComponentProps {
  257. label: string;
  258. target?: any;
  259. propertyName?: string;
  260. isSelected?: () => boolean;
  261. onSelect?: (value: boolean) => void;
  262. onValueChanged?: () => void;
  263. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  264. }
  265. export class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, {
  266. isSelected: boolean;
  267. }> {
  268. private static _UniqueIdSeed;
  269. private _uniqueId;
  270. private _localChange;
  271. constructor(props: ICheckBoxLineComponentProps);
  272. shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: {
  273. isSelected: boolean;
  274. }): boolean;
  275. onChange(): void;
  276. render(): JSX.Element;
  277. }
  278. }
  279. declare module NODEEDITOR {
  280. interface ITexturePropertyTabComponentProps {
  281. globalState: GlobalState;
  282. node: TextureNodeModel;
  283. }
  284. export class TexturePropertyTabComponent extends React.Component<ITexturePropertyTabComponentProps> {
  285. /**
  286. * Replaces the texture of the node
  287. * @param file the file of the texture to use
  288. */
  289. replaceTexture(file: File): void;
  290. render(): JSX.Element;
  291. }
  292. }
  293. declare module NODEEDITOR {
  294. /**
  295. * Texture node model which stores information about a node editor block
  296. */
  297. export class TextureNodeModel extends DefaultNodeModel {
  298. private _block;
  299. /**
  300. * Texture for the node if it exists
  301. */
  302. texture: BABYLON.Nullable<BABYLON.BaseTexture>;
  303. /**
  304. * Constructs the node model
  305. */
  306. constructor();
  307. renderProperties(globalState: GlobalState): JSX.Element;
  308. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  309. }
  310. }
  311. declare module NODEEDITOR {
  312. interface ITextureLineComponentProps {
  313. texture: BABYLON.BaseTexture;
  314. width: number;
  315. height: number;
  316. globalState?: any;
  317. hideChannelSelect?: boolean;
  318. }
  319. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  320. displayRed: boolean;
  321. displayGreen: boolean;
  322. displayBlue: boolean;
  323. displayAlpha: boolean;
  324. face: number;
  325. }> {
  326. constructor(props: ITextureLineComponentProps);
  327. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  328. displayRed: boolean;
  329. displayGreen: boolean;
  330. displayBlue: boolean;
  331. displayAlpha: boolean;
  332. face: number;
  333. }): boolean;
  334. componentDidMount(): void;
  335. componentDidUpdate(): void;
  336. updatePreview(): void;
  337. render(): JSX.Element;
  338. }
  339. }
  340. declare module NODEEDITOR {
  341. /**
  342. * GenericNodeWidgetProps
  343. */
  344. export interface ITextureNodeWidgetProps {
  345. node: BABYLON.Nullable<TextureNodeModel>;
  346. globalState: GlobalState;
  347. }
  348. /**
  349. * Used to display a node block for the node editor
  350. */
  351. export class TextureNodeWidget extends React.Component<ITextureNodeWidgetProps> {
  352. /**
  353. * Creates a GenericNodeWidget
  354. * @param props
  355. */
  356. constructor(props: ITextureNodeWidgetProps);
  357. render(): JSX.Element;
  358. }
  359. }
  360. declare module NODEEDITOR {
  361. /**
  362. * Node factory which creates editor nodes
  363. */
  364. export class TextureNodeFactory extends SRD.AbstractNodeFactory {
  365. private _globalState;
  366. /**
  367. * Constructs a TextureNodeFactory
  368. */
  369. constructor(globalState: GlobalState);
  370. /**
  371. * Generates a node widget
  372. * @param diagramEngine diagram engine
  373. * @param node node to generate
  374. * @returns node widget jsx
  375. */
  376. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: TextureNodeModel): JSX.Element;
  377. /**
  378. * Gets a new instance of a node model
  379. * @returns texture node model
  380. */
  381. getNewInstance(): TextureNodeModel;
  382. }
  383. }
  384. declare module NODEEDITOR {
  385. interface INumericInputComponentProps {
  386. label: string;
  387. value: number;
  388. step?: number;
  389. onChange: (value: number) => void;
  390. }
  391. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  392. value: string;
  393. }> {
  394. static defaultProps: {
  395. step: number;
  396. };
  397. private _localChange;
  398. constructor(props: INumericInputComponentProps);
  399. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  400. value: string;
  401. }): boolean;
  402. updateValue(evt: any): void;
  403. render(): JSX.Element;
  404. }
  405. }
  406. declare module NODEEDITOR {
  407. interface IVector2LineComponentProps {
  408. label: string;
  409. target: any;
  410. propertyName: string;
  411. step?: number;
  412. onChange?: (newvalue: BABYLON.Vector2) => void;
  413. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  414. }
  415. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  416. isExpanded: boolean;
  417. value: BABYLON.Vector2;
  418. }> {
  419. static defaultProps: {
  420. step: number;
  421. };
  422. private _localChange;
  423. constructor(props: IVector2LineComponentProps);
  424. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  425. isExpanded: boolean;
  426. value: BABYLON.Vector2;
  427. }): boolean;
  428. switchExpandState(): void;
  429. raiseOnPropertyChanged(previousValue: BABYLON.Vector2): void;
  430. updateStateX(value: number): void;
  431. updateStateY(value: number): void;
  432. render(): JSX.Element;
  433. }
  434. }
  435. declare module NODEEDITOR {
  436. interface IVector2PropertyTabComponentProps {
  437. globalState: GlobalState;
  438. inputBlock: BABYLON.InputBlock;
  439. }
  440. export class Vector2PropertyTabComponent extends React.Component<IVector2PropertyTabComponentProps> {
  441. render(): JSX.Element;
  442. }
  443. }
  444. declare module NODEEDITOR {
  445. interface IVector3LineComponentProps {
  446. label: string;
  447. target: any;
  448. propertyName: string;
  449. step?: number;
  450. onChange?: (newvalue: BABYLON.Vector3) => void;
  451. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  452. }
  453. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  454. isExpanded: boolean;
  455. value: BABYLON.Vector3;
  456. }> {
  457. static defaultProps: {
  458. step: number;
  459. };
  460. private _localChange;
  461. constructor(props: IVector3LineComponentProps);
  462. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  463. isExpanded: boolean;
  464. value: BABYLON.Vector3;
  465. }): boolean;
  466. switchExpandState(): void;
  467. raiseOnPropertyChanged(previousValue: BABYLON.Vector3): void;
  468. updateVector3(): void;
  469. updateStateX(value: number): void;
  470. updateStateY(value: number): void;
  471. updateStateZ(value: number): void;
  472. render(): JSX.Element;
  473. }
  474. }
  475. declare module NODEEDITOR {
  476. interface IVector3PropertyTabComponentProps {
  477. globalState: GlobalState;
  478. inputBlock: BABYLON.InputBlock;
  479. }
  480. export class Vector3PropertyTabComponent extends React.Component<IVector3PropertyTabComponentProps> {
  481. render(): JSX.Element;
  482. }
  483. }
  484. declare module NODEEDITOR {
  485. class ListLineOption {
  486. label: string;
  487. value: number | string;
  488. }
  489. interface IOptionsLineComponentProps {
  490. label: string;
  491. target: any;
  492. propertyName: string;
  493. options: ListLineOption[];
  494. noDirectUpdate?: boolean;
  495. onSelect?: (value: number | string) => void;
  496. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  497. valuesAreStrings?: boolean;
  498. defaultIfNull?: number;
  499. }
  500. export class OptionsLineComponent extends React.Component<IOptionsLineComponentProps, {
  501. value: number | string;
  502. }> {
  503. private _localChange;
  504. private _getValue;
  505. constructor(props: IOptionsLineComponentProps);
  506. shouldComponentUpdate(nextProps: IOptionsLineComponentProps, nextState: {
  507. value: number;
  508. }): boolean;
  509. raiseOnPropertyChanged(newValue: number | string, previousValue: number | string): void;
  510. updateValue(valueString: string): void;
  511. render(): JSX.Element;
  512. }
  513. }
  514. declare module NODEEDITOR {
  515. export interface IColor3LineComponentProps {
  516. label: string;
  517. target: any;
  518. propertyName: string;
  519. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  520. onChange?: () => void;
  521. }
  522. export class Color3LineComponent extends React.Component<IColor3LineComponentProps, {
  523. isExpanded: boolean;
  524. color: BABYLON.Color3;
  525. }> {
  526. private _localChange;
  527. constructor(props: IColor3LineComponentProps);
  528. shouldComponentUpdate(nextProps: IColor3LineComponentProps, nextState: {
  529. color: BABYLON.Color3;
  530. }): boolean;
  531. onChange(newValue: string): void;
  532. switchExpandState(): void;
  533. raiseOnPropertyChanged(previousValue: BABYLON.Color3): void;
  534. updateStateR(value: number): void;
  535. updateStateG(value: number): void;
  536. updateStateB(value: number): void;
  537. copyToClipboard(): void;
  538. render(): JSX.Element;
  539. }
  540. }
  541. declare module NODEEDITOR {
  542. interface IColor3PropertyTabComponentProps {
  543. globalState: GlobalState;
  544. inputBlock: BABYLON.InputBlock;
  545. }
  546. export class Color3PropertyTabComponent extends React.Component<IColor3PropertyTabComponentProps> {
  547. render(): JSX.Element;
  548. }
  549. }
  550. declare module NODEEDITOR {
  551. interface IFloatLineComponentProps {
  552. label: string;
  553. target: any;
  554. propertyName: string;
  555. onChange?: (newValue: number) => void;
  556. isInteger?: boolean;
  557. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  558. additionalClass?: string;
  559. step?: string;
  560. digits?: number;
  561. }
  562. export class FloatLineComponent extends React.Component<IFloatLineComponentProps, {
  563. value: string;
  564. }> {
  565. private _localChange;
  566. private _store;
  567. constructor(props: IFloatLineComponentProps);
  568. shouldComponentUpdate(nextProps: IFloatLineComponentProps, nextState: {
  569. value: string;
  570. }): boolean;
  571. raiseOnPropertyChanged(newValue: number, previousValue: number): void;
  572. updateValue(valueString: string): void;
  573. render(): JSX.Element;
  574. }
  575. }
  576. declare module NODEEDITOR {
  577. interface IFloatPropertyTabComponentProps {
  578. globalState: GlobalState;
  579. inputBlock: BABYLON.InputBlock;
  580. }
  581. export class FloatPropertyTabComponent extends React.Component<IFloatPropertyTabComponentProps> {
  582. render(): JSX.Element;
  583. }
  584. }
  585. declare module NODEEDITOR {
  586. interface IInputPropertyTabComponentProps {
  587. globalState: GlobalState;
  588. inputNode: InputNodeModel;
  589. }
  590. export class InputPropertyTabComponentProps extends React.Component<IInputPropertyTabComponentProps> {
  591. constructor(props: IInputPropertyTabComponentProps);
  592. renderValue(globalState: GlobalState): JSX.Element | null;
  593. setDefaultValue(): void;
  594. render(): JSX.Element;
  595. }
  596. }
  597. declare module NODEEDITOR {
  598. /**
  599. * Generic node model which stores information about a node editor block
  600. */
  601. export class InputNodeModel extends DefaultNodeModel {
  602. readonly inputBlock: BABYLON.InputBlock;
  603. /**
  604. * Constructs the node model
  605. */
  606. constructor();
  607. renderProperties(globalState: GlobalState): JSX.Element;
  608. }
  609. }
  610. declare module NODEEDITOR {
  611. /**
  612. * GenericNodeWidgetProps
  613. */
  614. export interface InputNodeWidgetProps {
  615. node: BABYLON.Nullable<InputNodeModel>;
  616. globalState: GlobalState;
  617. }
  618. /**
  619. * Used to display a node block for the node editor
  620. */
  621. export class InputNodeWidget extends React.Component<InputNodeWidgetProps> {
  622. /**
  623. * Creates a GenericNodeWidget
  624. * @param props
  625. */
  626. constructor(props: InputNodeWidgetProps);
  627. renderValue(value: string): JSX.Element | null;
  628. render(): JSX.Element | null;
  629. }
  630. }
  631. declare module NODEEDITOR {
  632. /**
  633. * Node factory which creates editor nodes
  634. */
  635. export class InputNodeFactory extends SRD.AbstractNodeFactory {
  636. private _globalState;
  637. /**
  638. * Constructs a GenericNodeFactory
  639. */
  640. constructor(globalState: GlobalState);
  641. /**
  642. * Generates a node widget
  643. * @param diagramEngine diagram engine
  644. * @param node node to generate
  645. * @returns node widget jsx
  646. */
  647. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: InputNodeModel): JSX.Element;
  648. /**
  649. * Gets a new instance of a node model
  650. * @returns input node model
  651. */
  652. getNewInstance(): InputNodeModel;
  653. }
  654. }
  655. declare module NODEEDITOR {
  656. interface ILogComponentProps {
  657. globalState: GlobalState;
  658. }
  659. export class LogEntry {
  660. message: string;
  661. isError: boolean;
  662. constructor(message: string, isError: boolean);
  663. }
  664. export class LogComponent extends React.Component<ILogComponentProps, {
  665. logs: LogEntry[];
  666. }> {
  667. constructor(props: ILogComponentProps);
  668. componentWillMount(): void;
  669. componentDidUpdate(): void;
  670. render(): JSX.Element;
  671. }
  672. }
  673. declare module NODEEDITOR {
  674. interface ILightPropertyTabComponentProps {
  675. globalState: GlobalState;
  676. node: LightNodeModel;
  677. }
  678. export class LightPropertyTabComponent extends React.Component<ILightPropertyTabComponentProps> {
  679. render(): JSX.Element;
  680. }
  681. }
  682. declare module NODEEDITOR {
  683. /**
  684. * BABYLON.Light node model which stores information about a node editor block
  685. */
  686. export class LightNodeModel extends DefaultNodeModel {
  687. private _block;
  688. /**
  689. * BABYLON.Light for the node if it exists
  690. */
  691. light: BABYLON.Nullable<BABYLON.Light>;
  692. /**
  693. * Constructs the node model
  694. */
  695. constructor();
  696. renderProperties(globalState: GlobalState): JSX.Element;
  697. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  698. }
  699. }
  700. declare module NODEEDITOR {
  701. /**
  702. * GenericNodeWidgetProps
  703. */
  704. export interface ILightNodeWidgetProps {
  705. node: BABYLON.Nullable<LightNodeModel>;
  706. globalState: GlobalState;
  707. }
  708. /**
  709. * Used to display a node block for the node editor
  710. */
  711. export class LightNodeWidget extends React.Component<ILightNodeWidgetProps> {
  712. /**
  713. * Creates a GenericNodeWidget
  714. * @param props
  715. */
  716. constructor(props: ILightNodeWidgetProps);
  717. render(): JSX.Element;
  718. }
  719. }
  720. declare module NODEEDITOR {
  721. /**
  722. * Node factory which creates editor nodes
  723. */
  724. export class LightNodeFactory extends SRD.AbstractNodeFactory {
  725. private _globalState;
  726. /**
  727. * Constructs a LightNodeFactory
  728. */
  729. constructor(globalState: GlobalState);
  730. /**
  731. * Generates a node widget
  732. * @param diagramEngine diagram engine
  733. * @param node node to generate
  734. * @returns node widget jsx
  735. */
  736. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: LightNodeModel): JSX.Element;
  737. /**
  738. * Gets a new instance of a node model
  739. * @returns light node model
  740. */
  741. getNewInstance(): LightNodeModel;
  742. }
  743. }
  744. declare module NODEEDITOR {
  745. interface IGraphEditorProps {
  746. globalState: GlobalState;
  747. }
  748. export class NodeCreationOptions {
  749. nodeMaterialBlock: BABYLON.NodeMaterialBlock;
  750. type?: string;
  751. connection?: BABYLON.NodeMaterialConnectionPoint;
  752. }
  753. export class GraphEditor extends React.Component<IGraphEditorProps> {
  754. private _engine;
  755. private _model;
  756. private _startX;
  757. private _moveInProgress;
  758. private _leftWidth;
  759. private _rightWidth;
  760. private _nodes;
  761. /** @hidden */
  762. _toAdd: LinkModel[] | null;
  763. /**
  764. * Creates a node and recursivly creates its parent nodes from it's input
  765. * @param nodeMaterialBlock
  766. */
  767. createNodeFromObject(options: NodeCreationOptions): DefaultNodeModel;
  768. componentDidMount(): void;
  769. componentWillUnmount(): void;
  770. constructor(props: IGraphEditorProps);
  771. distributeGraph(): dagre.Node[];
  772. mapElements(): {
  773. id: string;
  774. metadata: {
  775. id: string;
  776. width: number;
  777. height: number;
  778. };
  779. }[];
  780. mapEdges(): {
  781. from: import("storm-react-diagrams").NodeModel;
  782. to: import("storm-react-diagrams").NodeModel;
  783. }[];
  784. buildMaterial(): void;
  785. build(): void;
  786. reOrganize(): void;
  787. addValueNode(type: string): DefaultNodeModel;
  788. onPointerDown(evt: React.PointerEvent<HTMLDivElement>): void;
  789. onPointerUp(evt: React.PointerEvent<HTMLDivElement>): void;
  790. resizeColumns(evt: React.PointerEvent<HTMLDivElement>, forLeft?: boolean): void;
  791. buildColumnLayout(): string;
  792. emitNewBlock(event: React.DragEvent<HTMLDivElement>): void;
  793. render(): JSX.Element;
  794. }
  795. }
  796. declare module NODEEDITOR {
  797. /**
  798. * Generic node model which stores information about a node editor block
  799. */
  800. export class DefaultNodeModel extends NodeModel {
  801. /**
  802. * The babylon block this node represents
  803. */
  804. block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
  805. ports: {
  806. [s: string]: DefaultPortModel;
  807. };
  808. /**
  809. * Constructs the node model
  810. */
  811. constructor(key: string);
  812. prepare(options: NodeCreationOptions, nodes: Array<DefaultNodeModel>, model: DiagramModel, graphEditor: GraphEditor, filterInputs: string[]): void;
  813. renderProperties(globalState: GlobalState): JSX.Element | null;
  814. }
  815. }
  816. declare module NODEEDITOR {
  817. export class GlobalState {
  818. nodeMaterial?: BABYLON.NodeMaterial;
  819. hostElement: HTMLElement;
  820. hostDocument: HTMLDocument;
  821. onSelectionChangedObservable: BABYLON.Observable<BABYLON.Nullable<DefaultNodeModel>>;
  822. onRebuildRequiredObservable: BABYLON.Observable<void>;
  823. onResetRequiredObservable: BABYLON.Observable<void>;
  824. onUpdateRequiredObservable: BABYLON.Observable<void>;
  825. onZoomToFitRequiredObservable: BABYLON.Observable<void>;
  826. onReOrganizedRequiredObservable: BABYLON.Observable<void>;
  827. onLogRequiredObservable: BABYLON.Observable<LogEntry>;
  828. }
  829. }
  830. declare module NODEEDITOR {
  831. export class Popup {
  832. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  833. private static _CopyStyles;
  834. }
  835. }
  836. declare module NODEEDITOR {
  837. /**
  838. * Interface used to specify creation options for the node editor
  839. */
  840. export interface INodeEditorOptions {
  841. nodeMaterial: BABYLON.NodeMaterial;
  842. }
  843. /**
  844. * Class used to create a node editor
  845. */
  846. export class NodeEditor {
  847. /**
  848. * Show the node editor
  849. * @param options defines the options to use to configure the node editor
  850. */
  851. static Show(options: INodeEditorOptions): void;
  852. }
  853. }