@awesome-flow/noise 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/abstract/index.cjs +1405 -2078
  2. package/dist/abstract/index.cjs.map +1 -1
  3. package/dist/abstract/index.d.cts +23 -25
  4. package/dist/abstract/index.d.ts +23 -25
  5. package/dist/abstract/index.js +1315 -1996
  6. package/dist/abstract/index.js.map +1 -1
  7. package/dist/index-BungWYrh.d.cts +49 -0
  8. package/dist/index-DsQSjZC5.d.ts +49 -0
  9. package/dist/{node-props-CeZ8Oshz.d.ts → node-props-BbqbXDXn.d.cts} +2 -22
  10. package/dist/{node-props-hKW-_KOU.d.cts → node-props-BbqbXDXn.d.ts} +2 -22
  11. package/dist/nodes/generators/index.cjs +130 -380
  12. package/dist/nodes/generators/index.cjs.map +1 -1
  13. package/dist/nodes/generators/index.d.cts +2 -8
  14. package/dist/nodes/generators/index.d.ts +2 -8
  15. package/dist/nodes/generators/index.js +112 -360
  16. package/dist/nodes/generators/index.js.map +1 -1
  17. package/dist/nodes/groups/index.cjs +25 -13
  18. package/dist/nodes/groups/index.cjs.map +1 -1
  19. package/dist/nodes/groups/index.js +26 -14
  20. package/dist/nodes/groups/index.js.map +1 -1
  21. package/dist/nodes/index.cjs +1654 -988
  22. package/dist/nodes/index.cjs.map +1 -1
  23. package/dist/nodes/index.d.cts +3 -5
  24. package/dist/nodes/index.d.ts +3 -5
  25. package/dist/nodes/index.js +1622 -960
  26. package/dist/nodes/index.js.map +1 -1
  27. package/dist/nodes/modifiers/index.cjs +17 -119
  28. package/dist/nodes/modifiers/index.cjs.map +1 -1
  29. package/dist/nodes/modifiers/index.d.cts +2 -6
  30. package/dist/nodes/modifiers/index.d.ts +2 -6
  31. package/dist/nodes/modifiers/index.js +16 -124
  32. package/dist/nodes/modifiers/index.js.map +1 -1
  33. package/dist/nodes/output/index.cjs +1271 -89
  34. package/dist/nodes/output/index.cjs.map +1 -1
  35. package/dist/nodes/output/index.js +1314 -92
  36. package/dist/nodes/output/index.js.map +1 -1
  37. package/dist/nodes/selectors/index.cjs +1296 -58
  38. package/dist/nodes/selectors/index.cjs.map +1 -1
  39. package/dist/nodes/selectors/index.d.cts +1 -3
  40. package/dist/nodes/selectors/index.d.ts +1 -3
  41. package/dist/nodes/selectors/index.js +1339 -65
  42. package/dist/nodes/selectors/index.js.map +1 -1
  43. package/dist/nodes/transformers/index.cjs +67 -206
  44. package/dist/nodes/transformers/index.cjs.map +1 -1
  45. package/dist/nodes/transformers/index.d.cts +3 -5
  46. package/dist/nodes/transformers/index.d.ts +3 -5
  47. package/dist/nodes/transformers/index.js +54 -193
  48. package/dist/nodes/transformers/index.js.map +1 -1
  49. package/dist/templates/generators/index.cjs +839 -1278
  50. package/dist/templates/generators/index.cjs.map +1 -1
  51. package/dist/templates/generators/index.d.cts +13 -50
  52. package/dist/templates/generators/index.d.ts +13 -50
  53. package/dist/templates/generators/index.js +836 -1280
  54. package/dist/templates/generators/index.js.map +1 -1
  55. package/dist/templates/groups/index.cjs +837 -1272
  56. package/dist/templates/groups/index.cjs.map +1 -1
  57. package/dist/templates/groups/index.d.cts +1 -5
  58. package/dist/templates/groups/index.d.ts +1 -5
  59. package/dist/templates/groups/index.js +835 -1277
  60. package/dist/templates/groups/index.js.map +1 -1
  61. package/dist/templates/index.cjs +839 -1280
  62. package/dist/templates/index.cjs.map +1 -1
  63. package/dist/templates/index.d.cts +4 -7
  64. package/dist/templates/index.d.ts +4 -7
  65. package/dist/templates/index.js +836 -1281
  66. package/dist/templates/index.js.map +1 -1
  67. package/dist/templates/modifiers/index.cjs +841 -1278
  68. package/dist/templates/modifiers/index.cjs.map +1 -1
  69. package/dist/templates/modifiers/index.d.cts +11 -38
  70. package/dist/templates/modifiers/index.d.ts +11 -38
  71. package/dist/templates/modifiers/index.js +838 -1281
  72. package/dist/templates/modifiers/index.js.map +1 -1
  73. package/dist/templates/output/index.cjs +839 -1274
  74. package/dist/templates/output/index.cjs.map +1 -1
  75. package/dist/templates/output/index.d.cts +4 -14
  76. package/dist/templates/output/index.d.ts +4 -14
  77. package/dist/templates/output/index.js +837 -1279
  78. package/dist/templates/output/index.js.map +1 -1
  79. package/dist/templates/selectors/index.cjs +839 -1274
  80. package/dist/templates/selectors/index.cjs.map +1 -1
  81. package/dist/templates/selectors/index.d.cts +3 -9
  82. package/dist/templates/selectors/index.d.ts +3 -9
  83. package/dist/templates/selectors/index.js +837 -1279
  84. package/dist/templates/selectors/index.js.map +1 -1
  85. package/dist/templates/transformers/index.cjs +839 -1274
  86. package/dist/templates/transformers/index.cjs.map +1 -1
  87. package/dist/templates/transformers/index.d.cts +3 -36
  88. package/dist/templates/transformers/index.d.ts +3 -36
  89. package/dist/templates/transformers/index.js +837 -1279
  90. package/dist/templates/transformers/index.js.map +1 -1
  91. package/package.json +3 -3
  92. package/dist/handle-types-D-v5S53h.d.cts +0 -22
  93. package/dist/handle-types-D-v5S53h.d.ts +0 -22
  94. package/dist/layout/index.cjs +0 -164
  95. package/dist/layout/index.cjs.map +0 -1
  96. package/dist/layout/index.d.cts +0 -26
  97. package/dist/layout/index.d.ts +0 -26
  98. package/dist/layout/index.js +0 -136
  99. package/dist/layout/index.js.map +0 -1
  100. package/dist/properties-BxwtU6i9.d.cts +0 -9
  101. package/dist/properties-BxwtU6i9.d.ts +0 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/nodes/output/noise-logger-node.tsx","../../../src/nodes/output/noise-output-node.tsx","../../../src/nodes/output/noise-raw-texture-node.tsx","../../../src/nodes/output/positions-logger-node.tsx"],"sourcesContent":["import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedNoiseData } from '../../abstract/node-props';\n\nfunction NoiseLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {noise?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {noise?.map((v, i) => (\n <Text key={i}>\n {v.position?.x}:{v.position?.y}:{v.position?.z}: {v.value}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Box, Group, LoadingOverlay, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useEffect, useState } from 'react';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport {\n ComputedModuleData,\n ComputedNoiseData,\n ComputedPositionsData,\n PositionNoiseValue,\n} from '../../abstract/node-props';\n\nfunction NoiseOutputNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const [generating, setGenerating] = useState<boolean>(false);\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseData>();\n\n const incomingModules = useIncomingComputedData<ComputedModuleData>(id, NoiseHandleFlag.module);\n\n const incomingPositions = useIncomingComputedData<ComputedPositionsData>(\n id,\n NoiseHandleFlag.position\n );\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module) {\n setGenerating(true);\n }\n }\n }, [incomingModules, incomingPositions]);\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module && generating) {\n const noise: PositionNoiseValue[] = [];\n\n for (const input of incomingPositions) {\n for (const position of input.positions) {\n const value = module.getValue(position.x, position.y, position.z);\n\n noise.push({\n position,\n value,\n });\n }\n }\n\n console.log('SET COMPUTED DATA');\n updateComputedData(id, { noise, module });\n setGenerating(false);\n }\n }\n }, [generating]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Box pos=\"relative\">\n <LoadingOverlay\n visible={generating}\n zIndex={1000}\n overlayProps={{ radius: 'sm', blur: 2 }}\n />\n <Stack>\n <Group>Position Inputs: {incomingPositions?.length}</Group>\n <Group>Module Inputs: {incomingModules?.length}</Group>\n </Stack>\n </Box>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseOutputNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Group, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedNoiseData, ComputedNoiseTextureData } from '../../abstract/node-props';\n\nfunction NoiseRawTextureNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseTextureData>();\n\n const [dataLength, setDataLength] = useState(0);\n const [resolution, setResolution] = useState(0);\n\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n useEffect(() => {\n if (noise?.length) {\n const size = Math.ceil(Math.sqrt(noise.length));\n\n const colors = noise.map((n) => [n.value * 255, n.value * 255, n.value * 255, 255]).flat();\n const dataArray = new Uint8Array(size * size * 4);\n dataArray.set(colors);\n\n setResolution(size);\n setDataLength(dataArray.length);\n\n updateComputedData(id, { textureData: dataArray, textureResolution: size });\n }\n }, [noise]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Resolution: {resolution}x{resolution}\n </Group>\n <Group>Input Length: {noise?.length || 0}</Group>\n <Group>\n Output Length ({resolution}*{resolution}*4): {dataLength}\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRawTextureNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData } from '../../abstract/node-props';\n\nfunction PositionsLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedPositionsData>(id);\n\n const positions = useMemo(() => {\n return incoming?.map((p) => p.positions).flat();\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {positions?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {positions?.map((v, i) => (\n <Text key={i}>\n {v.x}:{v.y}:{v.z}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default PositionsLoggerNode;\n"],"mappings":";AAAA,SAAS,eAAe,4BAA4B;AAEpD,SAAS,eAAe;AACxB,SAAS,SAAS,OAAO,YAAY;AAErC,SAAS,+BAA+B;AASlC,SACA,KADA;AANN,SAAS,gBAAgB,EAAE,IAAI,UAAU,MAAM,KAAK,GAAmC;AACrF,QAAM,WAAW,wBAA2C,EAAE;AAC9D,QAAM,QAAQ,QAAQ,MAAM,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC;AAE5E,SACE,qBAAC,iBAAc,IAAQ,UAAoB,MAAY,MACrD;AAAA,yBAAC,QAAK;AAAA;AAAA,MAAO,OAAO,UAAU;AAAA,OAAE;AAAA,IAChC,oBAAC,WAAQ,GAAG,GAAG;AAAA,IACf,oBAAC,SACE,iBAAO,IAAI,CAAC,GAAG,MACd,qBAAC,QACE;AAAA,QAAE,UAAU;AAAA,MAAE;AAAA,MAAE,EAAE,UAAU;AAAA,MAAE;AAAA,MAAE,EAAE,UAAU;AAAA,MAAE;AAAA,MAAG,EAAE;AAAA,SAD3C,CAEX,CACD,GACH;AAAA,IACA,oBAAC,wBAAqB,SAAS,KAAK,SAAS,QAAQ,IAAI,MAAK,UAAS;AAAA,KACzE;AAEJ;AAEA,IAAO,4BAAQ;;;AC5Bf,SAAS,iBAAAA,gBAAe,wBAAAC,6BAA4B;AAEpD,SAAS,2BAAAC,0BAAyB,iCAAiC;AACnE,SAAS,KAAK,OAAO,gBAAgB,SAAAC,cAAa;AAElD,SAAS,WAAW,gBAAgB;AA0D5B,gBAAAC,MAME,QAAAC,aANF;AAjDR,SAAS,gBAAgB,EAAE,IAAI,UAAU,MAAM,KAAK,GAAmC;AACrF,QAAM,CAAC,YAAY,aAAa,IAAI,SAAkB,KAAK;AAC3D,QAAM,qBAAqB,0BAA6C;AAExE,QAAM,kBAAkBC,yBAA4C,kBAA0B;AAE9F,QAAM,oBAAoBA;AAAA,IACxB;AAAA;AAAA,EAEF;AAEA,YAAU,MAAM;AACd,QAAI,mBAAmB,UAAU,iBAAiB,QAAQ;AACxD,YAAM,EAAE,OAAO,IAAI,gBAAgB,CAAC;AAEpC,UAAI,QAAQ;AACV,sBAAc,IAAI;AAAA,MACpB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,iBAAiB,iBAAiB,CAAC;AAEvC,YAAU,MAAM;AACd,QAAI,mBAAmB,UAAU,iBAAiB,QAAQ;AACxD,YAAM,EAAE,OAAO,IAAI,gBAAgB,CAAC;AAEpC,UAAI,UAAU,YAAY;AACxB,cAAM,QAA8B,CAAC;AAErC,mBAAW,SAAS,mBAAmB;AACrC,qBAAW,YAAY,MAAM,WAAW;AACtC,kBAAM,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhE,kBAAM,KAAK;AAAA,cACT;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAEA,gBAAQ,IAAI,mBAAmB;AAC/B,2BAAmB,IAAI,EAAE,OAAO,OAAO,CAAC;AACxC,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAEf,SACE,gBAAAD,MAACE,gBAAA,EAAc,IAAQ,UAAoB,MAAY,MACrD;AAAA,oBAAAF,MAAC,OAAI,KAAI,YACP;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,cAAc,EAAE,QAAQ,MAAM,MAAM,EAAE;AAAA;AAAA,MACxC;AAAA,MACA,gBAAAC,MAACG,QAAA,EACC;AAAA,wBAAAH,MAAC,SAAM;AAAA;AAAA,UAAkB,mBAAmB;AAAA,WAAO;AAAA,QACnD,gBAAAA,MAAC,SAAM;AAAA;AAAA,UAAgB,iBAAiB;AAAA,WAAO;AAAA,SACjD;AAAA,OACF;AAAA,IACA,gBAAAD,KAACK,uBAAA,EAAqB,SAAS,KAAK,SAAS,QAAQ,IAAI,MAAK,UAAS;AAAA,KACzE;AAEJ;AAEA,IAAO,4BAAQ;;;AC9Ef,SAAS,iBAAAC,gBAAe,wBAAAC,6BAA4B;AAEpD,SAAS,aAAAC,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAC7C,SAAS,2BAAAC,0BAAyB,6BAAAC,kCAAiC;AACnE,SAAS,SAAAC,QAAO,SAAAC,cAAa;AA+BrB,SAQF,OAAAC,MARE,QAAAC,aAAA;AA3BR,SAAS,oBAAoB,EAAE,IAAI,UAAU,MAAM,KAAK,GAAmC;AACzF,QAAM,qBAAqBJ,2BAAoD;AAE/E,QAAM,CAAC,YAAY,aAAa,IAAIF,UAAS,CAAC;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,CAAC;AAE9C,QAAM,WAAWC,yBAA2C,EAAE;AAC9D,QAAM,QAAQF,SAAQ,MAAM,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC;AAE5E,EAAAD,WAAU,MAAM;AACd,QAAI,OAAO,QAAQ;AACjB,YAAM,OAAO,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,CAAC;AAE9C,YAAM,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,KAAK;AACzF,YAAM,YAAY,IAAI,WAAW,OAAO,OAAO,CAAC;AAChD,gBAAU,IAAI,MAAM;AAEpB,oBAAc,IAAI;AAClB,oBAAc,UAAU,MAAM;AAE9B,yBAAmB,IAAI,EAAE,aAAa,WAAW,mBAAmB,KAAK,CAAC;AAAA,IAC5E;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,gBAAAQ,MAACV,gBAAA,EAAc,IAAQ,UAAoB,MAAY,MACrD;AAAA,oBAAAU,MAACF,QAAA,EACC;AAAA,sBAAAE,MAACH,QAAA,EAAM;AAAA;AAAA,QACQ;AAAA,QAAW;AAAA,QAAE;AAAA,SAC5B;AAAA,MACA,gBAAAG,MAACH,QAAA,EAAM;AAAA;AAAA,QAAe,OAAO,UAAU;AAAA,SAAE;AAAA,MACzC,gBAAAG,MAACH,QAAA,EAAM;AAAA;AAAA,QACW;AAAA,QAAW;AAAA,QAAE;AAAA,QAAW;AAAA,QAAM;AAAA,SAChD;AAAA,OACF;AAAA,IACA,gBAAAE,KAACR,uBAAA,EAAqB,SAAS,KAAK,SAAS,QAAQ,IAAI,MAAK,UAAS;AAAA,KACzE;AAEJ;AAEA,IAAO,iCAAQ;;;AChDf,SAAS,iBAAAU,gBAAe,wBAAAC,6BAA4B;AAEpD,SAAS,WAAAC,gBAAe;AACxB,SAAS,WAAAC,UAAS,SAAAC,QAAO,QAAAC,aAAY;AAErC,SAAS,2BAAAC,gCAA+B;AAYlC,SACA,OAAAC,MADA,QAAAC,aAAA;AATN,SAAS,oBAAoB,EAAE,IAAI,UAAU,MAAM,KAAK,GAAmC;AACzF,QAAM,WAAWF,yBAA+C,EAAE;AAElE,QAAM,YAAYJ,SAAQ,MAAM;AAC9B,WAAO,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK;AAAA,EAChD,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,gBAAAM,MAACR,gBAAA,EAAc,IAAQ,UAAoB,MAAY,MACrD;AAAA,oBAAAQ,MAACH,OAAA,EAAK;AAAA;AAAA,MAAO,WAAW,UAAU;AAAA,OAAE;AAAA,IACpC,gBAAAE,KAACJ,UAAA,EAAQ,GAAG,GAAG;AAAA,IACf,gBAAAI,KAACH,QAAA,EACE,qBAAW,IAAI,CAAC,GAAG,MAClB,gBAAAI,MAACH,OAAA,EACE;AAAA,QAAE;AAAA,MAAE;AAAA,MAAE,EAAE;AAAA,MAAE;AAAA,MAAE,EAAE;AAAA,SADN,CAEX,CACD,GACH;AAAA,IACA,gBAAAE,KAACN,uBAAA,EAAqB,SAAS,KAAK,SAAS,QAAQ,IAAI,MAAK,UAAS;AAAA,KACzE;AAEJ;AAEA,IAAO,gCAAQ;","names":["NodeContainer","NodeTrackConnections","useIncomingComputedData","Stack","jsx","jsxs","useIncomingComputedData","NodeContainer","Stack","NodeTrackConnections","NodeContainer","NodeTrackConnections","useEffect","useMemo","useState","useIncomingComputedData","useUpdateNodeComputedData","Group","Stack","jsx","jsxs","NodeContainer","NodeTrackConnections","useMemo","Divider","Stack","Text","useIncomingComputedData","jsx","jsxs"]}
1
+ {"version":3,"sources":["../../../src/nodes/output/noise-logger-node.tsx","../../../src/nodes/output/noise-output-node.tsx","../../../src/nodes/generators/noise-simplex-node.tsx","../../../src/modules/simplex-module.ts","../../../src/nodes/generators/position-const-node.tsx","../../../src/nodes/generators/position-grid-node.tsx","../../../src/nodes/modifiers/noise-normalize-node.tsx","../../../src/modules/normalize-noise-module.ts","../../../src/nodes/generators/noise-const-node.tsx","../../../src/nodes/generators/noise-billow-node.tsx","../../../src/nodes/output/noise-raw-texture-node.tsx","../../../src/nodes/generators/noise-checkerboard-node.tsx","../../../src/nodes/output/positions-logger-node.tsx","../../../src/nodes/generators/noise-cylinders-node.tsx","../../../src/nodes/generators/noise-perlin-node.tsx","../../../src/nodes/generators/noise-ridgedmulti-node.tsx","../../../src/nodes/generators/noise-spheres-node.tsx","../../../src/nodes/generators/noise-voronoi-node.tsx","../../../src/nodes/modifiers/noise-combine-node.tsx","../../../src/abstract/operations.ts","../../../src/nodes/modifiers/noise-clamp-node.tsx","../../../src/nodes/modifiers/noise-abs-node.tsx","../../../src/nodes/modifiers/noise-curve-node.tsx","../../../src/nodes/modifiers/noise-exponent-node.tsx","../../../src/nodes/modifiers/noise-invert-node.tsx","../../../src/nodes/modifiers/noise-scale-bias-node.tsx","../../../src/nodes/modifiers/noise-terrace-node.tsx","../../../src/nodes/selectors/noise-blend-node.tsx","../../../src/nodes/selectors/noise-select-node.tsx","../../../src/nodes/transformers/noise-displace-node.tsx","../../../src/nodes/transformers/noise-rotate-point-node.tsx","../../../src/nodes/transformers/noise-scale-point-node.tsx","../../../src/nodes/transformers/noise-translate-point-node.tsx","../../../src/nodes/transformers/noise-turbulence-node .tsx","../../../src/templates/generators/noise-checkerboard-template.ts","../../../src/templates/generators/noise-const-template.ts","../../../src/templates/generators/noise-cylinders-template.ts","../../../src/templates/generators/noise-perlin-template.ts","../../../src/templates/generators/noise-ridgedmulti-template.ts","../../../src/templates/generators/noise-simplex-template.ts","../../../src/templates/generators/noise-spheres-template.ts","../../../src/templates/generators/noise-voronoi-template.ts","../../../src/templates/generators/position-const-template.ts","../../../src/templates/generators/position-grid-template.ts","../../../src/templates/modifiers/noise-normalize-template.ts","../../../src/templates/output/noise-logger-template.ts","../../../src/templates/output/noise-raw-texture-template.ts","../../../src/templates/output/position-logger-template.ts","../../../src/templates/modifiers/noise-combine-template.ts","../../../src/templates/modifiers/noise-clamp-template.ts","../../../src/templates/modifiers/noise-abs-template.ts","../../../src/templates/output/noise-output-template.ts","../../../src/templates/modifiers/noise-curve-template.ts","../../../src/templates/modifiers/noise-exponent-template.ts","../../../src/templates/modifiers/noise-invert-template.ts","../../../src/templates/modifiers/noise-scalebias-template.ts","../../../src/templates/modifiers/noise-terrace-template.ts","../../../src/templates/selectors/noise-blend-template.ts","../../../src/templates/selectors/noise-select-template.ts","../../../src/templates/transformers/noise-displace-template.ts","../../../src/templates/transformers/noise-rotate-point-template.ts","../../../src/templates/transformers/noise-scale-point-template.ts","../../../src/templates/transformers/noise-translate-point-template.ts","../../../src/templates/transformers/noise-turbulence-template.ts","../../../src/templates/generators/noise-billow-template.ts","../../../src/templates/groups/module-group-template.ts","../../../src/nodes/groups/module-group-node.tsx","../../../src/abstract/node-types.ts"],"sourcesContent":["import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedNoiseData } from '../../abstract/node-props';\n\nfunction NoiseLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {noise?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {noise?.map((v, i) => (\n <Text key={i}>\n {v.position?.x}:{v.position?.y}:{v.position?.z}: {v.value}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useState } from 'react';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { HandlesIncomingDataStatus } from '@awesome-flow/core/components';\nimport { Text } from '@mantine/core';\nimport {\n ComputedModuleData,\n ComputedNoiseData,\n ComputedPositionsData,\n PositionNoiseValue,\n} from '../../abstract/node-props';\nimport { NoiseHandleType } from '../../abstract';\n\nfunction NoiseOutputNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const [size, setSize] = useState(0);\n\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseData>();\n\n const onDataUpdated = useCallback(\n (handleData: Record<NoiseHandleType, ComputedPositionsData[] | ComputedModuleData[]>) => {\n const incomingPositions = handleData[NoiseHandleType.position] as ComputedPositionsData[];\n const incomingModule = handleData[NoiseHandleType.module] as ComputedModuleData[];\n\n if (incomingPositions?.length && incomingModule?.length && incomingModule[0]?.module) {\n const { module } = incomingModule[0];\n\n const noise: PositionNoiseValue[] = [];\n\n for (const input of incomingPositions) {\n for (const position of input.positions) {\n const value = module.getValue(position.x, position.y, position.z);\n\n noise.push({\n position,\n value,\n });\n }\n }\n\n updateComputedData(id, { noise, module });\n setSize(noise.length);\n }\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <HandlesIncomingDataStatus\n nodeId={id}\n handles={data.handles}\n handleKey=\"dataType\"\n onDataUpdated={onDataUpdated}\n type=\"target\"\n resetComputedData\n />\n <Text mt={5}>Noise points: {size}</Text>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseOutputNode;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo } from 'react';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\nimport { SimplexModule } from '../../modules/simplex-module';\n\nfunction NoiseSimplexNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new SimplexModule(), []);\n\n useEffect(() => {\n updateComputedData(id, { module });\n }, []);\n\n return <NodeContainer id={id} selected={selected} data={data} type={type} />;\n}\n\nexport default NoiseSimplexNode;\n","import Module from 'libnoise-ts/module/Module';\nimport { NoiseFunction3D, RandomFn, createNoise3D } from 'simplex-noise';\n\nexport class SimplexModule extends Module {\n private noise: NoiseFunction3D;\n\n constructor(random?: RandomFn) {\n super();\n this.noise = createNoise3D(random);\n }\n\n getValue(x: number, y: number, z: number): number {\n return this.noise(x, y, z);\n }\n}\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData, NodePositionData } from '../../abstract/node-props';\n\nfunction PositionConstNode({ id, selected, data, type }: NodeProps<Node<NodePositionData>>) {\n const position = data.position ?? { x: 0, y: 0, z: 0 };\n\n const [x, setX] = useState(position.x);\n const [y, setY] = useState(position.y);\n const [z, setZ] = useState(position.z);\n\n const updateNodeData = useUpdateNodeData<NodePositionData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedPositionsData>();\n\n useEffect(() => {\n const position = { x, y, z };\n\n updateNodeData(id, {\n position,\n });\n\n updateComputedData(id, {\n positions: [position],\n });\n }, [x, y, z]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n x: <NumberInput size=\"xs\" w={100} value={x} onChange={(e) => setX(Number(e))} />\n </Group>\n <Group>\n y: <NumberInput size=\"xs\" w={100} value={y} onChange={(e) => setY(Number(e))} />\n </Group>\n <Group>\n z: <NumberInput size=\"xs\" w={100} value={z} onChange={(e) => setZ(Number(e))} />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default PositionConstNode;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData, NodeGridData, Position } from '../../abstract/node-props';\n\nfunction PositionGridNode({ id, selected, data, type }: NodeProps<Node<NodeGridData>>) {\n const [x, setX] = useState(data.center?.x);\n const [y, setY] = useState(data.center?.y);\n const [z, setZ] = useState(data.center?.z);\n\n const [radius, setRadius] = useState(data.radius);\n\n const updateNodeData = useUpdateNodeData<NodeGridData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedPositionsData>();\n\n useEffect(() => {\n updateNodeData(id, {\n center: { x, y, z },\n });\n }, [x, y, z]);\n\n useEffect(() => {\n updateNodeData(id, {\n radius,\n });\n }, [radius]);\n\n useEffect(() => {\n const positions: Position[] = [];\n\n for (let i = -radius; i < radius; i++) {\n for (let j = -radius; j < radius; j++) {\n positions.push({ x: x + i, y: y + j, z });\n }\n }\n\n updateComputedData(id, {\n positions,\n });\n }, [x, y, z, radius]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n x: <NumberInput size=\"xs\" w={100} value={x} onChange={(e) => setX(Number(e))} />\n </Group>\n <Group>\n y: <NumberInput size=\"xs\" w={100} value={y} onChange={(e) => setY(Number(e))} />\n </Group>\n <Group>\n z: <NumberInput size=\"xs\" w={100} value={z} onChange={(e) => setZ(Number(e))} />\n </Group>\n <Group>\n r: <NumberInput size=\"xs\" w={100} value={radius} onChange={(e) => setRadius(Number(e))} />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default PositionGridNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeNormalizeNoiseData } from '../../abstract/node-props';\nimport { NormalizeNoiseModule } from '../../modules/normalize-noise-module';\n\nfunction NoiseNormalizeNode({ id, selected, data, type }: NodeProps<Node<NodeNormalizeNoiseData>>) {\n const [intervalStart, setIntervalStart] = useState(data.intervalStart);\n const [intervalEnd, setIntervalEnd] = useState(data.intervalEnd);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeNormalizeNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const source = incoming[0].module;\n const module = new NormalizeNoiseModule(source, intervalStart, intervalEnd);\n\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { intervalStart, intervalEnd });\n }, [incoming, intervalStart, intervalEnd]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput\n size=\"xs\"\n w={100}\n value={intervalStart}\n onChange={(e) => setIntervalStart(Number(e))}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n value={intervalEnd}\n onChange={(e) => setIntervalEnd(Number(e))}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseNormalizeNode;\n","import Module from 'libnoise-ts/module/Module';\nimport ModifierModule from 'libnoise-ts/module/modifier';\n\nexport class NormalizeNoiseModule extends ModifierModule {\n constructor(\n source: Module,\n public lowerBound: number,\n public upperBound: number\n ) {\n super(source);\n }\n\n getValue(x: number, y: number, z: number): number {\n return normalize(this.sourceModule.getValue(x, y, z), this.lowerBound, this.upperBound);\n }\n}\n\nfunction normalize(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n}\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { Const } from 'libnoise-ts/module/generator';\nimport { ComputedModuleData, NodeConstNoiseData } from '../../abstract/node-props';\n\nfunction NoiseConstNode({ id, selected, data, type }: NodeProps<Node<NodeConstNoiseData>>) {\n const [min, setMin] = useState(data.min);\n const [max, setMax] = useState(data.max);\n const [noise, setNoise] = useState(data.noise);\n\n const updateNodeData = useUpdateNodeData<NodeConstNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Const(), []);\n\n useEffect(() => {\n module.value = noise;\n\n updateNodeData(id, { noise, min, max });\n updateComputedData(id, { module });\n }, [noise, min, max, module, updateNodeData, id, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput size=\"xs\" w={100} value={min} onChange={(e) => setMin(Number(e))} />\n <NumberInput size=\"xs\" w={100} value={max} onChange={(e) => setMax(Number(e))} />\n </Group>\n <Group>\n noise:\n <NumberInput\n size=\"xs\"\n value={noise}\n onChange={(e) => setNoise(Number(e))}\n max={max}\n min={min}\n step={0.1}\n />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default NoiseConstNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Billow } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeFBMNoiseData } from '../../abstract/node-props';\n\nfunction NoiseBillowNode({ id, selected, data, type }: NodeProps<Node<NodeFBMNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Billow(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n\n updateComputedData(id, { module });\n },\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseBillowNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Group, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedNoiseData, ComputedNoiseTextureData } from '../../abstract/node-props';\n\nfunction NoiseRawTextureNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseTextureData>();\n\n const [dataLength, setDataLength] = useState(0);\n const [resolution, setResolution] = useState(0);\n\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n useEffect(() => {\n if (noise?.length) {\n const size = Math.ceil(Math.sqrt(noise.length));\n\n const colors = noise.map((n) => [n.value * 255, n.value * 255, n.value * 255, 255]).flat();\n const dataArray = new Uint8Array(size * size * 4);\n dataArray.set(colors);\n\n setResolution(size);\n setDataLength(dataArray.length);\n\n updateComputedData(id, { textureData: dataArray, textureResolution: size });\n }\n }, [noise]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Resolution: {resolution}x{resolution}\n </Group>\n <Group>Input Length: {noise?.length || 0}</Group>\n <Group>\n Output Length ({resolution}*{resolution}*4): {dataLength}\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRawTextureNode;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo } from 'react';\nimport { Checkerboard } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseCheckerboardNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new Checkerboard(), []);\n\n useEffect(() => {\n updateComputedData(id, { module });\n }, [id, module, updateComputedData]);\n\n return <NodeContainer id={id} selected={selected} data={data} type={type} />;\n}\n\nexport default NoiseCheckerboardNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData } from '../../abstract/node-props';\n\nfunction PositionsLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedPositionsData>(id);\n\n const positions = useMemo(() => {\n return incoming?.map((p) => p.positions).flat();\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {positions?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {positions?.map((v, i) => (\n <Text key={i}>\n {v.x}:{v.y}:{v.z}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default PositionsLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Cylinders } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeCylindersNoiseData } from '../../abstract/node-props';\n\nfunction NoiseCylindersNode({ id, selected, data, type }: NodeProps<Node<NodeCylindersNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Cylinders(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n updateComputedData(id, { module });\n },\n\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCylindersNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Perlin } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData, NodeFBMNoiseData } from '../../abstract/node-props';\n\nfunction NoisePerlinNode({ id, selected, data, type }: NodeProps<Node<NodeFBMNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Perlin(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n\n updateComputedData(id, { module });\n },\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoisePerlinNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { RidgedMulti } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeRidgedNoiseData } from '../../abstract/node-props';\n\nfunction NoiseRidgedMultiNode({ id, selected, data, type }: NodeProps<Node<NodeRidgedNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new RidgedMulti(), []);\n\n const onPropertiesChange = useCallback((properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => (module[k] = properties[k].value));\n updateComputedData(id, { module });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRidgedMultiNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Spheres } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeSpheresNoiseData } from '../../abstract/node-props';\n\nfunction NoiseSpheresNode({ id, selected, data, type }: NodeProps<Node<NodeSpheresNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new Spheres(), []);\n\n const onPropertiesChange = useCallback((properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => (module[k] = properties[k].value));\n updateComputedData(id, { module });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseSpheresNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback } from 'react';\nimport { Voronoi } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeVoronoiNoiseData } from '../../abstract/node-props';\n\nfunction NoiseVoronoiNode({ id, selected, data, type }: NodeProps<Node<NodeVoronoiNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue<number & boolean>>) => {\n const module = new Voronoi(\n properties.frequency.value,\n properties.displacement.value,\n properties.distance.value,\n properties.seed.value\n );\n\n updateComputedData(id, { module });\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseVoronoiNode;\n","import { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ReactNode, useCallback, useEffect } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport {\n IconAsterisk,\n IconChevronLeft,\n IconChevronRight,\n IconChevronUp,\n IconPlus,\n} from '@tabler/icons-react';\nimport { ComputedModuleData, NodeCombineNoiseData } from '../../abstract/node-props';\nimport { NoiseCombineType, noiseCombineModuleMap } from '../../abstract/operations';\n\nconst options: Record<NoiseCombineType, ReactNode | string> = {\n add: <IconPlus />,\n min: <IconChevronLeft />,\n max: <IconChevronRight />,\n multiply: <IconAsterisk />,\n power: <IconChevronUp />,\n};\n\nfunction NoiseCombineNode({ id, selected, data, type }: NodeProps<Node<NodeCombineNoiseData>>) {\n const updateNodeData = useUpdateNodeData<NodeCombineNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n useEffect(() => {\n const ModuleFactory = noiseCombineModuleMap[data.operation];\n\n if (incoming?.length > 1) {\n const module = new ModuleFactory(incoming[0].module, incoming[1].module);\n updateComputedData(id, { module });\n }\n }, [data.operation, incoming]);\n\n const onChange = useCallback((operation: NoiseCombineType) => {\n updateNodeData(id, { operation });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeCombobox options={options} selected={data.operation} onChange={onChange} width={150} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCombineNode;\n","import { Add, Max, Min, Multiply, Power } from 'libnoise-ts/module/combiner';\n\nexport enum NoiseCombineType {\n add = 'add',\n max = 'max',\n min = 'min',\n multiply = 'multiply',\n power = 'power',\n}\n\nexport const noiseCombineModuleMap = {\n [NoiseCombineType.add]: Add,\n [NoiseCombineType.max]: Max,\n [NoiseCombineType.min]: Min,\n [NoiseCombineType.multiply]: Multiply,\n [NoiseCombineType.power]: Power,\n};\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Clamp } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeClampNoiseData } from '../../abstract/node-props';\n\nfunction NoiseClampNode({ id, selected, data, type }: NodeProps<Node<NodeClampNoiseData>>) {\n const [lowerBound, setLowerBound] = useState(data.lowerBound);\n const [upperBound, setUpperBound] = useState(data.upperBound);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeClampNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new Clamp(incoming[0].module, lowerBound, upperBound);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { lowerBound, upperBound });\n }, [incoming, lowerBound, upperBound]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput\n size=\"xs\"\n w={100}\n value={lowerBound}\n onChange={(e) => setLowerBound(Number(e))}\n step={0.1}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n value={upperBound}\n onChange={(e) => setUpperBound(Number(e))}\n step={0.1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseClampNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Abs } from 'libnoise-ts/module/modifier';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseAbsNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Abs(incoming[0].module);\n updateComputedData(id, { module });\n }\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseAbsNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ActionIcon, Button, Group, NumberInput, Space } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { FORM_INDEX, useForm } from '@mantine/form';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Curve } from 'libnoise-ts/module/modifier';\nimport { Tuple } from 'libnoise-ts/util';\nimport { IconX } from '@tabler/icons-react';\nimport { randomId } from '@mantine/hooks';\nimport { NodeState } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData, ControlPoint, NodeCurveNoiseData } from '../../abstract/node-props';\n\nfunction NoiseCurveNode({ id, selected, data, type }: NodeProps<Node<NodeCurveNoiseData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeCurveNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const [values, setValues] = useState([]);\n\n const form = useForm<{ points: (ControlPoint & { key: string })[] }>({\n mode: 'uncontrolled',\n initialValues: {\n points: [],\n },\n validateInputOnChange: [`points.${FORM_INDEX}.input`],\n clearInputErrorOnChange: true,\n validate: {\n points: {\n input: (value, values) => {\n const counts: Record<number, number> = {};\n\n values.points.forEach((x) => {\n counts[x.input] = (counts[x.input] || 0) + 1;\n });\n\n return counts[value] > 1;\n },\n },\n },\n onValuesChange: useCallback((values) => {\n if (form.isValid()) {\n const points = values.points.map((v) => ({ input: v.input, output: v.output }));\n setValues(points);\n updateNodeData(id, { points });\n }\n\n form.validate();\n }, []),\n });\n\n useEffect(() => {\n const points = data.points?.length\n ? data.points.map((v) => ({ input: v.input, output: v.output, key: randomId() }))\n : [1, 2, 3, 4].map(() => ({ input: 0, output: 0, key: randomId() }));\n\n form.initialize({ points });\n }, []);\n\n useEffect(() => {\n if (incoming?.length && values?.length >= 4) {\n const module = new Curve(\n incoming[0].module,\n values.map((p) => new Tuple(p.input, p.output))\n );\n\n updateComputedData(id, { module });\n }\n }, [values, incoming]);\n\n const fields = form.getValues().points.map((item, index) => (\n <Group mt=\"xs\" key={item.key}>\n <NumberInput\n size=\"xs\"\n w={100}\n placeholder=\"Input Value\"\n key={form.key(`points.${index}.input`)}\n {...form.getInputProps(`points.${index}.input`)}\n step={0.1}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n placeholder=\"Output Value\"\n key={form.key(`points.${index}.output`)}\n {...form.getInputProps(`points.${index}.output`)}\n step={0.1}\n />\n {data.state === NodeState.edit && values.length > 4 && (\n <ActionIcon\n color=\"red\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => form.removeListItem('points', index)}\n >\n <IconX size=\"1rem\" />\n </ActionIcon>\n )}\n </Group>\n ));\n\n return (\n <NodeContainer id={id} selected={selected} type={type} data={data}>\n {fields}\n {data.state === NodeState.edit && (\n <>\n <Space h={10} />\n <Button\n variant=\"outline\"\n size=\"xs\"\n fullWidth\n onClick={() => form.insertListItem('points', { input: 0, output: 0, key: randomId() })}\n >\n Add control point\n </Button>\n </>\n )}\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCurveNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Exponent } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeExponentNoiseData } from '../../abstract/node-props';\n\nfunction NoiseExponentNode({ id, selected, data, type }: NodeProps<Node<NodeExponentNoiseData>>) {\n const [exponent, setExponent] = useState(data.exponent);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeExponentNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Exponent(incoming[0].module, exponent);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { exponent });\n }, [incoming, exponent]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Exponent:\n <NumberInput\n size=\"xs\"\n value={exponent}\n onChange={(e) => setExponent(Number(e))}\n step={0.1}\n // min={1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseExponentNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Invert } from 'libnoise-ts/module/modifier';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseInvertNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Invert(incoming[0].module);\n updateComputedData(id, { module });\n }\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseInvertNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { ScaleBias } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeScaleBiasNoiseData } from '../../abstract/node-props';\n\nfunction NoiseScaleBiasNode({ id, selected, data, type }: NodeProps<Node<NodeScaleBiasNoiseData>>) {\n const [scale, setScale] = useState(data.scale);\n const [bias, setBias] = useState(data.bias);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeScaleBiasNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new ScaleBias(incoming[0].module, scale, bias);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { scale, bias });\n }, [incoming, scale, bias]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={scale}\n onChange={(e) => setScale(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Bias:\n <NumberInput\n size=\"xs\"\n w={100}\n value={bias}\n onChange={(e) => setBias(Number(e))}\n step={0.1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseScaleBiasNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ActionIcon, Button, Group, NumberInput, Space } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { FORM_INDEX, useForm } from '@mantine/form';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Terrace } from 'libnoise-ts/module/modifier';\nimport { IconX } from '@tabler/icons-react';\nimport { randomId } from '@mantine/hooks';\nimport { NodeState } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData, NodeTerraceNoiseData } from '../../abstract/node-props';\n\nfunction NoiseTerraceNode({ id, selected, data, type }: NodeProps<Node<NodeTerraceNoiseData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeTerraceNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const [values, setValues] = useState<number[]>([]);\n\n const form = useForm<{ points: { value: number; key: string }[] }>({\n mode: 'uncontrolled',\n initialValues: {\n points: [],\n },\n validateInputOnChange: [`points.${FORM_INDEX}.input`],\n clearInputErrorOnChange: true,\n onValuesChange: useCallback((values) => {\n if (form.isValid()) {\n const points = values.points.map((v) => v.value);\n setValues(points);\n updateNodeData(id, { points });\n }\n\n form.validate();\n }, []),\n });\n\n useEffect(() => {\n const points = data.points?.length\n ? data.points.map((v) => ({ value: v, key: randomId() }))\n : [1, 2].map(() => ({ value: 0, key: randomId() }));\n\n form.initialize({ points });\n }, []);\n\n useEffect(() => {\n if (incoming?.length && values?.length >= 2) {\n const module = new Terrace(incoming[0].module, values);\n updateComputedData(id, { module });\n }\n }, [values, incoming]);\n\n const fields = form.getValues().points.map((item, index) => (\n <Group mt=\"xs\" key={item.key}>\n <NumberInput\n size=\"xs\"\n placeholder=\"Input Value\"\n key={form.key(`points.${index}.value`)}\n {...form.getInputProps(`points.${index}.value`)}\n step={0.1}\n />\n {data.state === NodeState.edit && values.length > 2 && (\n <ActionIcon\n color=\"red\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => form.removeListItem('points', index)}\n >\n <IconX size=\"1rem\" />\n </ActionIcon>\n )}\n </Group>\n ));\n\n return (\n <NodeContainer id={id} selected={selected} type={type} data={data}>\n {fields}\n {data.state === NodeState.edit && (\n <>\n <Space h={10} />\n <Button\n variant=\"outline\"\n size=\"xs\"\n fullWidth\n onClick={() => form.insertListItem('points', { value: 0, key: randomId() })}\n >\n Add control point\n </Button>\n </>\n )}\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTerraceNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback } from 'react';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Blend } from 'libnoise-ts/module/selector';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { HandlesIncomingDataStatus } from '@awesome-flow/core/components';\nimport { ComputedModuleData } from '../../abstract/node-props';\nimport { NoiseSourceControlHandle } from '../../abstract';\n\nfunction NoiseBlendNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onDataUpdated = useCallback(\n (incomingData: Record<NoiseSourceControlHandle, ComputedModuleData[]>) => {\n const incomingSources = incomingData[NoiseSourceControlHandle.source];\n const incomingControl = incomingData[NoiseSourceControlHandle.control];\n\n if (incomingSources?.length >= 2 && incomingControl?.length) {\n const module = new Blend(\n incomingSources[0].module,\n incomingSources[1].module,\n incomingControl[0].module\n );\n\n updateComputedData(id, { module });\n }\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <HandlesIncomingDataStatus\n nodeId={id}\n handles={data.handles}\n handleKey=\"dataId\"\n onDataUpdated={onDataUpdated}\n type=\"target\"\n resetComputedData\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseBlendNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { Select } from 'libnoise-ts/module/selector';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { HandlesIncomingDataStatus } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeSelectNoiseData } from '../../abstract/node-props';\nimport { NoiseSourceControlHandle } from '../../abstract';\n\nfunction NoiseSelectNode({ id, selected, data, type }: NodeProps<Node<NodeSelectNoiseData>>) {\n const [edgeFalloff, setEdgeFalloff] = useState(data.edgeFalloff);\n const [lowerBound, setLowerBound] = useState(data.lowerBound);\n const [upperBound, setUpperBound] = useState(data.upperBound);\n\n const updateNodeData = useUpdateNodeData<NodeSelectNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n updateNodeData(id, { edgeFalloff, lowerBound, upperBound });\n }, [edgeFalloff, lowerBound, upperBound]);\n\n const onDataUpdated = useCallback(\n (incomingData: Record<NoiseSourceControlHandle, ComputedModuleData[]>) => {\n const incomingSources = incomingData[NoiseSourceControlHandle.source];\n const incomingControl = incomingData[NoiseSourceControlHandle.control];\n\n if (incomingSources?.length >= 2 && incomingControl?.length) {\n const module = new Select(\n incomingSources[0].module,\n incomingSources[1].module,\n incomingControl[0].module,\n edgeFalloff,\n lowerBound,\n upperBound\n );\n\n updateComputedData(id, { module });\n }\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Edge Falloff:\n <NumberInput\n size=\"xs\"\n w={100}\n value={edgeFalloff}\n onChange={(e) => setEdgeFalloff(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Lower Bound:\n <NumberInput\n size=\"xs\"\n w={100}\n value={lowerBound}\n onChange={(e) => setLowerBound(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Upper Bound:\n <NumberInput\n size=\"xs\"\n w={100}\n value={upperBound}\n onChange={(e) => setUpperBound(Number(e))}\n step={0.1}\n />\n </Group>\n <HandlesIncomingDataStatus\n nodeId={id}\n handles={data.handles}\n handleKey=\"dataId\"\n onDataUpdated={onDataUpdated}\n type=\"target\"\n resetComputedData\n />\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseSelectNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback } from 'react';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Displace } from 'libnoise-ts/module/transformer';\nimport { HandlesIncomingDataStatus } from '@awesome-flow/core/components';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\nimport { DisplacementHandle } from '../../abstract/handle-types';\n\nfunction NoiseDisplaceNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onDataUpdated = useCallback(\n (handleData: Record<DisplacementHandle, ComputedModuleData>) => {\n const sourceModule = handleData[DisplacementHandle.sourceModule];\n const xModule = handleData[DisplacementHandle.xModule];\n const yModule = handleData[DisplacementHandle.yModule];\n const zModule = handleData[DisplacementHandle.zModule];\n\n if (sourceModule && xModule && yModule && zModule) {\n const module = new Displace(\n sourceModule[0].module,\n xModule[0].module,\n yModule[0].module,\n zModule[0].module\n );\n\n updateComputedData(id, { module });\n }\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <HandlesIncomingDataStatus\n nodeId={id}\n handles={data.handles}\n handleKey=\"dataId\"\n onDataUpdated={onDataUpdated}\n type=\"target\"\n resetComputedData\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseDisplaceNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { RotatePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeRotatePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseRotatePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeRotatePointNoiseData>>) {\n const [xAngle, setXAngle] = useState(data.xAngle);\n const [yAngle, setYAngle] = useState(data.yAngle);\n const [zAngle, setZAngle] = useState(data.zAngle);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeRotatePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new RotatePoint(incoming[0].module, xAngle, yAngle, zAngle);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { xAngle, yAngle, zAngle });\n }, [id, updateComputedData, updateNodeData, incoming, xAngle, yAngle, zAngle]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n X Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={xAngle}\n onChange={(e) => setXAngle(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Y Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={yAngle}\n onChange={(e) => setYAngle(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Z Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={zAngle}\n onChange={(e) => setZAngle(Number(e))}\n step={0.01}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRotatePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { ScalePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeScalePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseScalePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeScalePointNoiseData>>) {\n const [xScale, setXScale] = useState(data.xScale);\n const [yScale, setYScale] = useState(data.yScale);\n const [zScale, setZScale] = useState(data.zScale);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeScalePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new ScalePoint(incoming[0].module, xScale, yScale, zScale);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { xScale, yScale, zScale });\n }, [id, incoming, updateComputedData, updateNodeData, xScale, yScale, zScale]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n X Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={xScale}\n onChange={(e) => setXScale(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Y Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={yScale}\n onChange={(e) => setYScale(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Z Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={zScale}\n onChange={(e) => setZScale(Number(e))}\n step={0.01}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseScalePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { TranslatePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeTranslatePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseTranslatePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeTranslatePointNoiseData>>) {\n const [translateX, setTranslateX] = useState(data.translateX);\n const [translateY, setTranslateY] = useState(data.translateY);\n const [translateZ, setTranslateZ] = useState(data.translateZ);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeTranslatePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new TranslatePoint(incoming[0].module, translateX, translateY, translateZ);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { translateX, translateY, translateZ });\n }, [id, incoming, translateX, translateY, translateZ, updateComputedData, updateNodeData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Translate X:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateX}\n onChange={(e) => setTranslateX(Number(e))}\n step={1}\n />\n </Group>\n <Group>\n Translate Y:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateY}\n onChange={(e) => setTranslateY(Number(e))}\n step={1}\n />\n </Group>\n <Group>\n Translate Z:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateZ}\n onChange={(e) => setTranslateZ(Number(e))}\n step={1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTranslatePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Turbulence } from 'libnoise-ts/module/transformer';\nimport { PropertyValue } from '@awesome-flow/core/abstract';\nimport { NodePropertyVariables } from '@awesome-flow/core/components';\nimport { ComputedModuleData, NodeTurbulenceNoiseData } from '../../abstract/node-props';\n\nfunction NoiseTurbulenceNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeTurbulenceNoiseData>>) {\n const [properties, setProperties] = useState(null);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onPropertiesChange = useCallback((props: Record<string, PropertyValue<number>>) => {\n setProperties(props);\n }, []);\n\n useEffect(() => {\n if (incoming?.length && properties) {\n const module = new Turbulence(\n incoming[0].module,\n properties.frequency.value,\n properties.power.value,\n properties.roughness.value,\n properties.seed.value\n );\n updateComputedData(id, { module });\n }\n }, [id, incoming, properties]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTurbulenceNode;\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseCheckerboardNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseCheckerboard,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Checkerboard Noise',\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeConstNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseConstNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeConstNoiseData> = {\n type: NoiseNodeType.noiseConst,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Const Value Noise',\n noise: 0,\n min: -1,\n max: 1,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCylindersNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseCylindersNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeCylindersNoiseData> = {\n type: NoiseNodeType.noiseCylinders,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Cylinders Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoisePerlinNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeFBMNoiseData> = {\n type: NoiseNodeType.noisePerlin,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Perlin Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRidgedNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseRidgedMultiNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeRidgedNoiseData> = {\n type: NoiseNodeType.noiseRidgedMulti,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Ridged Multi Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 6,\n offset: 1.0,\n gain: 2.0,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import {\n BasicNodeData,\n CoreHandleType,\n ITemplateFactory,\n NodeTemplate,\n} from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseSimplexNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseSimplex,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Simplex Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSpheresNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseSpheresNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeSpheresNoiseData> = {\n type: NoiseNodeType.noiseSpheres,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Spheres Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVoronoiNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseVoronoiNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeVoronoiNoiseData> = {\n type: NoiseNodeType.noiseVoronoi,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Voronoi Noise',\n frequency: 0.1,\n displacement: 1.0,\n distance: true,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodePositionData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class PositionConstNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodePositionData> = {\n type: NoiseNodeType.position,\n group: NoiseTemplateGroup.positions,\n data: {\n title: 'Position Output',\n position: { x: 0, y: 0, z: 0 },\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleType.position,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeGridData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class PositionGridNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeGridData> = {\n type: NoiseNodeType.grid,\n group: NoiseTemplateGroup.positions,\n data: {\n title: 'Grid Output',\n center: { x: 0, y: 0, z: 0 },\n radius: 1,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleType.position,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeNormalizeNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseNormalizeNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeNormalizeNoiseData> = {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseNormalize,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Normalize Noise',\n intervalStart: -1,\n intervalEnd: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseLoggerNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseLogger,\n group: NoiseTemplateGroup.output,\n data: {\n title: 'Noise Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.noise,\n connection: 'target',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseRawTextureTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.textureData,\n group: NoiseTemplateGroup.output,\n data: {\n title: 'Texture Data',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.noise,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.texture,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class PositionLoggerNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.positionLogger,\n group: NoiseTemplateGroup.positions,\n data: {\n title: 'Position Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.position,\n connection: 'target',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCombineNoiseData } from '../../abstract/node-props';\nimport { NoiseCombineType } from '../../abstract/operations';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseCombineNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeCombineNoiseData> = {\n type: NoiseNodeType.noiseCombine,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Combine Noise',\n operation: NoiseCombineType.add,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 2,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeClampNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseClampNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeClampNoiseData> = {\n type: NoiseNodeType.noiseClamp,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Clamp Noise',\n lowerBound: -1,\n upperBound: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseAbsNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseAbs,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Abs Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseOutputNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseOutput,\n group: NoiseTemplateGroup.output,\n data: {\n title: 'Noise Output',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.position,\n connection: 'target',\n },\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.noise,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCurveNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseCurveNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeCurveNoiseData> = {\n type: NoiseNodeType.noiseCurve,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Noise Curve',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeExponentNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseExponentNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeExponentNoiseData> = {\n type: NoiseNodeType.noiseExponent,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Noise Exponent',\n exponent: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseInvertNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseInvert,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Invert Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScaleBiasNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseScaleBiasNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeScaleBiasNoiseData> = {\n type: NoiseNodeType.noiseScaleBias,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Scale/Bias Noise',\n scale: 1.0,\n bias: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTerraceNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseTerraceNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTerraceNoiseData> = {\n type: NoiseNodeType.noiseTerrace,\n group: NoiseTemplateGroup.noiseModifiers,\n data: {\n title: 'Noise Terrace',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType, NoiseSourceControlHandle } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseBlendNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n type: NoiseNodeType.noiseBlend,\n group: NoiseTemplateGroup.noiseSelectors,\n data: {\n title: 'Noise Blend',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Modules',\n dataId: NoiseSourceControlHandle.source,\n maxConnections: 2,\n minConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.control,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.output,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType, NoiseSourceControlHandle } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSelectNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseSelectNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeSelectNoiseData> = {\n type: NoiseNodeType.noiseSelect,\n group: NoiseTemplateGroup.noiseSelectors,\n data: {\n title: 'Noise Select',\n edgeFalloff: 0.0,\n lowerBound: -1.0,\n upperBound: 1.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.source,\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n minConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.control,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.output,\n connection: 'source',\n },\n ],\n };\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport {\n DisplacementHandle,\n DisplacementModuleHandle,\n NoiseHandleType,\n} from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseDisplaceNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData, Omit<DisplacementModuleHandle, 'id'>> = {\n type: NoiseNodeType.noiseDisplace,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Displace',\n },\n handles: [\n {\n position: Position.Left,\n connection: 'target',\n label: 'Source Module',\n dataType: NoiseHandleType.module,\n dataId: DisplacementHandle.sourceModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'X Module',\n dataType: NoiseHandleType.module,\n dataId: DisplacementHandle.xModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Y Module',\n dataType: NoiseHandleType.module,\n dataId: DisplacementHandle.yModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Z Module',\n dataType: NoiseHandleType.module,\n dataId: DisplacementHandle.zModule,\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n dataId: DisplacementHandle.output,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRotatePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseRotatePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeRotatePointNoiseData> = {\n type: NoiseNodeType.noiseRotatePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Rotate Point',\n xAngle: 0.0,\n yAngle: 0.0,\n zAngle: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScalePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseScalePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeScalePointNoiseData> = {\n type: NoiseNodeType.noiseScalePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Scale Point',\n xScale: 1.0,\n yScale: 1.0,\n zScale: 1.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTranslatePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseTranslatePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTranslatePointNoiseData> = {\n type: NoiseNodeType.noiseTranslatePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Translate Point',\n translateX: 0.0,\n translateY: 0.0,\n translateZ: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTurbulenceNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseTurbulenceNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTurbulenceNoiseData> = {\n type: NoiseNodeType.noiseTurbulence,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Turbulence',\n frequency: 1.0,\n power: 1.0,\n roughness: 1.0,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n label: 'Variable Properties',\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseBillowNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeFBMNoiseData> = {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBillow,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Billow Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import {\n BasicNodeData,\n CoreTemplateGroup,\n ITemplateFactory,\n NodeTemplate,\n} from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class ModuleGroupNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n id: IDGenerator.template(),\n type: NoiseNodeType.groupModule,\n group: CoreTemplateGroup.groups,\n data: {\n title: 'Modules Group',\n isGroup: true,\n initialSize: {\n width: 300,\n height: 200,\n },\n collapsedSize: {\n width: 300,\n height: 80,\n },\n },\n handles: [\n {\n position: Position.Bottom,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n hideOnCollapse: true,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { NodeContainer, NodeCollapse, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps, NodeResizer, useStore, useUpdateNodeInternals } from '@xyflow/react';\nimport { BasicNodeData, FlowContext } from '@awesome-flow/core/abstract';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\nimport { shallow } from 'zustand/shallow';\nimport { Badge, Group } from '@mantine/core';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction ModuleGroupNode({\n id,\n selected,\n data,\n type,\n width,\n height,\n}: NodeProps<Node<BasicNodeData>>) {\n const context = useContext(FlowContext);\n const updateNodeInternals = useUpdateNodeInternals();\n const triggerNodeChanges = useStore((s) => s.triggerNodeChanges);\n\n const { groupNodes, setGroupCollapsed } = context.useFlowStore(\n useCallback(\n (state) => ({ groupNodes: state.groups[id], setGroupCollapsed: state.setGroupCollapsed }),\n []\n )\n );\n\n const intersectingNode = context.useInteractivityStore(\n useCallback((state) => state.nodeIntersectionTargets[id], [id]),\n shallow\n );\n\n useEffect(() => {\n updateNodeInternals(id);\n }, [width, height]);\n\n useEffect(() => {\n triggerNodeChanges([\n {\n id,\n type: 'select',\n selected: !!intersectingNode,\n },\n ]);\n }, [intersectingNode]);\n\n const onCollapsed = useCallback((collapsed: boolean) => {\n setGroupCollapsed(id, collapsed);\n }, []);\n\n const size = useMemo(() => {\n return {\n width: data.initialSize?.width || 100,\n height: data.initialSize?.height || 50,\n };\n }, [data.initialSize]);\n\n const incomingModules = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incomingModules?.length) {\n const { module } = incomingModules[0];\n updateComputedData(id, { module });\n }\n }, [incomingModules]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Badge size=\"xs\" variant=\"outline\" radius=\"xs\" color=\"gray\">\n {groupNodes?.length || 0}\n </Badge>\n <NodeCollapse nodeId={id} isCollapsed={data.isCollapsed} onCollapsed={onCollapsed} />\n </Group>\n </Group>\n }\n type={type}\n >\n <NodeResizer\n nodeId={id}\n minWidth={size.width}\n minHeight={size.height}\n isVisible={selected && !data.isCollapsed}\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default ModuleGroupNode;\n","import { NodeTypes } from '@xyflow/react';\nimport { ITemplateFactory } from '@awesome-flow/core/abstract';\nimport NoiseSimplexNode from '../nodes/generators/noise-simplex-node';\nimport PositionConstNode from '../nodes/generators/position-const-node';\nimport PositionGridNode from '../nodes/generators/position-grid-node';\nimport NoiseNormalizeNode from '../nodes/modifiers/noise-normalize-node';\nimport NoiseConstNode from '../nodes/generators/noise-const-node';\nimport NoiseBillowNode from '../nodes/generators/noise-billow-node';\nimport NoiseLoggerNode from '../nodes/output/noise-logger-node';\nimport NoiseRawTextureNode from '../nodes/output/noise-raw-texture-node';\nimport NoiseCheckerboardNode from '../nodes/generators/noise-checkerboard-node';\nimport PositionsLoggerNode from '../nodes/output/positions-logger-node';\nimport NoiseCylindersNode from '../nodes/generators/noise-cylinders-node';\nimport NoisePerlinNode from '../nodes/generators/noise-perlin-node';\nimport NoiseRidgedMultiNode from '../nodes/generators/noise-ridgedmulti-node';\nimport NoiseSpheresNode from '../nodes/generators/noise-spheres-node';\nimport NoiseVoronoiNode from '../nodes/generators/noise-voronoi-node';\nimport NoiseCombineNode from '../nodes/modifiers/noise-combine-node';\nimport NoiseClampNode from '../nodes/modifiers/noise-clamp-node';\nimport NoiseAbsNode from '../nodes/modifiers/noise-abs-node';\nimport NoiseOutputNode from '../nodes/output/noise-output-node';\nimport NoiseCurveNode from '../nodes/modifiers/noise-curve-node';\nimport NoiseExponentNode from '../nodes/modifiers/noise-exponent-node';\nimport NoiseInvertNode from '../nodes/modifiers/noise-invert-node';\nimport NoiseScaleBiasNode from '../nodes/modifiers/noise-scale-bias-node';\nimport NoiseTerraceNode from '../nodes/modifiers/noise-terrace-node';\nimport NoiseBlendNode from '../nodes/selectors/noise-blend-node';\nimport NoiseSelectNode from '../nodes/selectors/noise-select-node';\nimport NoiseDisplaceNode from '../nodes/transformers/noise-displace-node';\nimport NoiseRotatePointNode from '../nodes/transformers/noise-rotate-point-node';\nimport NoiseScalePointNode from '../nodes/transformers/noise-scale-point-node';\nimport NoiseTranslatePointNode from '../nodes/transformers/noise-translate-point-node';\nimport NoiseTurbulenceNode from '../nodes/transformers/noise-turbulence-node ';\nimport { NoiseCheckerboardNodeTemplateFactory } from '../templates/generators/noise-checkerboard-template';\nimport { NoiseConstNodeTemplateFactory } from '../templates/generators/noise-const-template';\nimport { NoiseCylindersNodeTemplateFactory } from '../templates/generators/noise-cylinders-template';\nimport { NoisePerlinNodeTemplateFactory } from '../templates/generators/noise-perlin-template';\nimport { NoiseRidgedMultiNodeTemplateFactory } from '../templates/generators/noise-ridgedmulti-template';\nimport { NoiseSimplexNodeTemplateFactory } from '../templates/generators/noise-simplex-template';\nimport { NoiseSpheresNodeTemplateFactory } from '../templates/generators/noise-spheres-template';\nimport { NoiseVoronoiNodeTemplateFactory } from '../templates/generators/noise-voronoi-template';\nimport { PositionConstNodeTemplateFactory } from '../templates/generators/position-const-template';\nimport { PositionGridNodeTemplateFactory } from '../templates/generators/position-grid-template';\nimport { NoiseNormalizeNodeTemplateFactory } from '../templates/modifiers/noise-normalize-template';\nimport { NoiseLoggerNodeTemplateFactory } from '../templates/output/noise-logger-template';\nimport { NoiseRawTextureTemplateFactory } from '../templates/output/noise-raw-texture-template';\nimport { PositionLoggerNodeTemplateFactory } from '../templates/output/position-logger-template';\nimport { NoiseCombineNodeTemplateFactory } from '../templates/modifiers/noise-combine-template';\nimport { NoiseClampNodeTemplateFactory } from '../templates/modifiers/noise-clamp-template';\nimport { NoiseAbsNodeTemplateFactory } from '../templates/modifiers/noise-abs-template';\nimport { NoiseOutputNodeTemplateFactory } from '../templates/output/noise-output-template';\nimport { NoiseCurveNodeTemplateFactory } from '../templates/modifiers/noise-curve-template';\nimport { NoiseExponentNodeTemplateFactory } from '../templates/modifiers/noise-exponent-template';\nimport { NoiseInvertNodeTemplateFactory } from '../templates/modifiers/noise-invert-template';\nimport { NoiseScaleBiasNodeTemplateFactory } from '../templates/modifiers/noise-scalebias-template';\nimport { NoiseTerraceNodeTemplateFactory } from '../templates/modifiers/noise-terrace-template';\nimport { NoiseBlendNodeTemplateFactory } from '../templates/selectors/noise-blend-template';\nimport { NoiseSelectNodeTemplateFactory } from '../templates/selectors/noise-select-template';\nimport { NoiseDisplaceNodeTemplateFactory } from '../templates/transformers/noise-displace-template';\nimport { NoiseRotatePointNodeTemplateFactory } from '../templates/transformers/noise-rotate-point-template';\nimport { NoiseScalePointNodeTemplateFactory } from '../templates/transformers/noise-scale-point-template';\nimport { NoiseTranslatePointNodeTemplateFactory } from '../templates/transformers/noise-translate-point-template';\nimport { NoiseTurbulenceNodeTemplateFactory } from '../templates/transformers/noise-turbulence-template';\nimport { NoiseBillowNodeTemplateFactory } from '../templates/generators/noise-billow-template';\nimport { ModuleGroupNodeTemplateFactory } from '../templates/groups/module-group-template';\nimport { ModuleGroupNode } from '../nodes';\n\nexport enum NoiseNodeType {\n position = 'position',\n grid = 'grid',\n textureData = 'texture-data',\n groupModule = 'group-module',\n positionLogger = 'position-logger',\n noiseLogger = 'noise-logger',\n noiseOutput = 'noise-output',\n noiseConst = 'noise-constant',\n noiseSimplex = 'noise-simplex',\n noiseBillow = 'noise-billow',\n noiseCheckerboard = 'noise-checkerboard',\n noiseNormalize = 'noise-normalize',\n noiseCylinders = 'noise-cylinders',\n noisePerlin = 'noise-perlin',\n noiseRidgedMulti = 'noise-ridged-multi',\n noiseSpheres = 'noise-spheres',\n noiseVoronoi = 'noise-voronoi',\n noiseCombine = 'noise-combiner',\n noiseClamp = 'noise-clamp',\n noiseAbs = 'noise-abs',\n noiseCurve = 'noise-curve',\n noiseExponent = 'noise-exponent',\n noiseInvert = 'noise-invert',\n noiseScaleBias = 'noise-scale-bias',\n noiseTerrace = 'noise-terrace',\n noiseBlend = 'noise-blend',\n noiseSelect = 'noise-select',\n noiseDisplace = 'noise-displace',\n noiseRotatePoint = 'noise-rotate-point',\n noiseScalePoint = 'noise-scale-point',\n noiseTranslatePoint = 'noise-translate-point',\n noiseTurbulence = 'noise-turbulence',\n}\n\nexport const noiseNodeTypes = {\n [NoiseNodeType.groupModule]: ModuleGroupNode,\n [NoiseNodeType.position]: PositionConstNode,\n [NoiseNodeType.grid]: PositionGridNode,\n [NoiseNodeType.noiseOutput]: NoiseOutputNode,\n [NoiseNodeType.textureData]: NoiseRawTextureNode,\n [NoiseNodeType.noiseLogger]: NoiseLoggerNode,\n [NoiseNodeType.positionLogger]: PositionsLoggerNode,\n [NoiseNodeType.noiseConst]: NoiseConstNode,\n [NoiseNodeType.noiseBillow]: NoiseBillowNode,\n [NoiseNodeType.noiseSimplex]: NoiseSimplexNode,\n [NoiseNodeType.noiseCheckerboard]: NoiseCheckerboardNode,\n [NoiseNodeType.noiseCylinders]: NoiseCylindersNode,\n [NoiseNodeType.noisePerlin]: NoisePerlinNode,\n [NoiseNodeType.noiseRidgedMulti]: NoiseRidgedMultiNode,\n [NoiseNodeType.noiseSpheres]: NoiseSpheresNode,\n [NoiseNodeType.noiseVoronoi]: NoiseVoronoiNode,\n [NoiseNodeType.noiseCombine]: NoiseCombineNode,\n [NoiseNodeType.noiseClamp]: NoiseClampNode,\n [NoiseNodeType.noiseAbs]: NoiseAbsNode,\n [NoiseNodeType.noiseNormalize]: NoiseNormalizeNode,\n [NoiseNodeType.noiseCurve]: NoiseCurveNode,\n [NoiseNodeType.noiseExponent]: NoiseExponentNode,\n [NoiseNodeType.noiseInvert]: NoiseInvertNode,\n [NoiseNodeType.noiseScaleBias]: NoiseScaleBiasNode,\n [NoiseNodeType.noiseTerrace]: NoiseTerraceNode,\n [NoiseNodeType.noiseBlend]: NoiseBlendNode,\n [NoiseNodeType.noiseSelect]: NoiseSelectNode,\n [NoiseNodeType.noiseDisplace]: NoiseDisplaceNode,\n [NoiseNodeType.noiseRotatePoint]: NoiseRotatePointNode,\n [NoiseNodeType.noiseScalePoint]: NoiseScalePointNode,\n [NoiseNodeType.noiseTranslatePoint]: NoiseTranslatePointNode,\n [NoiseNodeType.noiseTurbulence]: NoiseTurbulenceNode,\n} satisfies NodeTypes;\n\nexport const noiseNodeTemplates = {\n [NoiseNodeType.noiseOutput]: new NoiseOutputNodeTemplateFactory(),\n [NoiseNodeType.noiseSimplex]: new NoiseSimplexNodeTemplateFactory(),\n [NoiseNodeType.noiseBillow]: new NoiseBillowNodeTemplateFactory(),\n [NoiseNodeType.noiseCheckerboard]: new NoiseCheckerboardNodeTemplateFactory(),\n [NoiseNodeType.noiseNormalize]: new NoiseNormalizeNodeTemplateFactory(),\n [NoiseNodeType.noiseLogger]: new NoiseLoggerNodeTemplateFactory(),\n [NoiseNodeType.noiseConst]: new NoiseConstNodeTemplateFactory(),\n [NoiseNodeType.position]: new PositionConstNodeTemplateFactory(),\n [NoiseNodeType.positionLogger]: new PositionLoggerNodeTemplateFactory(),\n [NoiseNodeType.grid]: new PositionGridNodeTemplateFactory(),\n [NoiseNodeType.textureData]: new NoiseRawTextureTemplateFactory(),\n [NoiseNodeType.noiseCylinders]: new NoiseCylindersNodeTemplateFactory(),\n [NoiseNodeType.noisePerlin]: new NoisePerlinNodeTemplateFactory(),\n [NoiseNodeType.noiseRidgedMulti]: new NoiseRidgedMultiNodeTemplateFactory(),\n [NoiseNodeType.noiseSpheres]: new NoiseSpheresNodeTemplateFactory(),\n [NoiseNodeType.noiseVoronoi]: new NoiseVoronoiNodeTemplateFactory(),\n [NoiseNodeType.noiseCombine]: new NoiseCombineNodeTemplateFactory(),\n [NoiseNodeType.noiseClamp]: new NoiseClampNodeTemplateFactory(),\n [NoiseNodeType.noiseAbs]: new NoiseAbsNodeTemplateFactory(),\n [NoiseNodeType.noiseCurve]: new NoiseCurveNodeTemplateFactory(),\n [NoiseNodeType.noiseExponent]: new NoiseExponentNodeTemplateFactory(),\n [NoiseNodeType.noiseInvert]: new NoiseInvertNodeTemplateFactory(),\n [NoiseNodeType.noiseScaleBias]: new NoiseScaleBiasNodeTemplateFactory(),\n [NoiseNodeType.noiseTerrace]: new NoiseTerraceNodeTemplateFactory(),\n [NoiseNodeType.noiseBlend]: new NoiseBlendNodeTemplateFactory(),\n [NoiseNodeType.noiseSelect]: new NoiseSelectNodeTemplateFactory(),\n [NoiseNodeType.noiseDisplace]: new NoiseDisplaceNodeTemplateFactory(),\n [NoiseNodeType.noiseRotatePoint]: new NoiseRotatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseScalePoint]: new NoiseScalePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTranslatePoint]: new NoiseTranslatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTurbulence]: new NoiseTurbulenceNodeTemplateFactory(),\n [NoiseNodeType.groupModule]: new ModuleGroupNodeTemplateFactory(),\n} satisfies Record<NoiseNodeType, ITemplateFactory>;\n"],"mappings":"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","names":["NodeContainer","NodeTrackConnections","useCallback","useState","useUpdateNodeComputedData","HandlesIncomingDataStatus","Text","NodeContainer","useMemo","jsx","NodeContainer","useEffect","Stack","useUpdateNodeComputedData","jsx","jsxs","NodeContainer","useEffect","useState","Group","NumberInput","Stack","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","useEffect","useMemo","useState","Group","NumberInput","Stack","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useMemo","useUpdateNodeComputedData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useMemo","useState","useIncomingComputedData","useUpdateNodeComputedData","Group","Stack","jsx","jsxs","NodeContainer","useEffect","useMemo","useUpdateNodeComputedData","jsx","NodeContainer","NodeTrackConnections","useMemo","Divider","Stack","Text","useIncomingComputedData","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useMemo","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useMemo","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useMemo","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useMemo","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useEffect","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useIncomingComputedData","useUpdateNodeComputedData","jsx","NodeContainer","NodeTrackConnections","Group","NumberInput","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","useCallback","useEffect","useState","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useIncomingComputedData","useUpdateNodeComputedData","jsx","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","ActionIcon","Button","Group","NumberInput","Space","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","useCallback","useEffect","useState","IconX","randomId","NodeState","Fragment","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useUpdateNodeComputedData","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useEffect","useState","useUpdateNodeComputedData","useUpdateNodeData","Group","NumberInput","Stack","HandlesIncomingDataStatus","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useUpdateNodeComputedData","HandlesIncomingDataStatus","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","Group","NumberInput","Stack","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","Group","NumberInput","Stack","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useState","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","Group","NumberInput","Stack","jsx","jsxs","NodeContainer","NodeTrackConnections","useCallback","useEffect","useState","useIncomingComputedData","useUpdateNodeComputedData","NodePropertyVariables","jsx","jsxs","Position","Position","Position","Position","CoreHandleType","Position","Position","CoreHandleType","CoreHandleType","Position","Position","CoreHandleType","CoreHandleType","Position","Position","CoreHandleType","CoreHandleType","Position","Position","CoreHandleType","CoreHandleType","Position","Position","CoreHandleType","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","CoreHandleType","Position","Position","CoreHandleType","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","Position","CoreHandleType","Position","Position","CoreHandleType","CoreHandleType","IDGenerator","Position","IDGenerator","Position","CoreHandleType","IDGenerator","Position","IDGenerator","Position","NodeContainer","NodeTrackConnections","useCallback","useEffect","useMemo","Group","useIncomingComputedData","useUpdateNodeComputedData","jsx","jsxs","jsx","jsxs","useState","useUpdateNodeComputedData","useCallback","NodeContainer","HandlesIncomingDataStatus","Text","NodeTrackConnections"]}