babylon.nodeEditor.d.ts 28 KB

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