@awesome-flow/noise 0.1.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 (102) hide show
  1. package/LICENSE.md +201 -0
  2. package/dist/abstract/index.cjs +1405 -2078
  3. package/dist/abstract/index.cjs.map +1 -1
  4. package/dist/abstract/index.d.cts +23 -25
  5. package/dist/abstract/index.d.ts +23 -25
  6. package/dist/abstract/index.js +1315 -1996
  7. package/dist/abstract/index.js.map +1 -1
  8. package/dist/index-BungWYrh.d.cts +49 -0
  9. package/dist/index-DsQSjZC5.d.ts +49 -0
  10. package/dist/{node-props-CeZ8Oshz.d.ts → node-props-BbqbXDXn.d.cts} +2 -22
  11. package/dist/{node-props-hKW-_KOU.d.cts → node-props-BbqbXDXn.d.ts} +2 -22
  12. package/dist/nodes/generators/index.cjs +130 -380
  13. package/dist/nodes/generators/index.cjs.map +1 -1
  14. package/dist/nodes/generators/index.d.cts +2 -8
  15. package/dist/nodes/generators/index.d.ts +2 -8
  16. package/dist/nodes/generators/index.js +112 -360
  17. package/dist/nodes/generators/index.js.map +1 -1
  18. package/dist/nodes/groups/index.cjs +25 -13
  19. package/dist/nodes/groups/index.cjs.map +1 -1
  20. package/dist/nodes/groups/index.js +26 -14
  21. package/dist/nodes/groups/index.js.map +1 -1
  22. package/dist/nodes/index.cjs +1654 -988
  23. package/dist/nodes/index.cjs.map +1 -1
  24. package/dist/nodes/index.d.cts +3 -5
  25. package/dist/nodes/index.d.ts +3 -5
  26. package/dist/nodes/index.js +1622 -960
  27. package/dist/nodes/index.js.map +1 -1
  28. package/dist/nodes/modifiers/index.cjs +17 -119
  29. package/dist/nodes/modifiers/index.cjs.map +1 -1
  30. package/dist/nodes/modifiers/index.d.cts +2 -6
  31. package/dist/nodes/modifiers/index.d.ts +2 -6
  32. package/dist/nodes/modifiers/index.js +16 -124
  33. package/dist/nodes/modifiers/index.js.map +1 -1
  34. package/dist/nodes/output/index.cjs +1271 -89
  35. package/dist/nodes/output/index.cjs.map +1 -1
  36. package/dist/nodes/output/index.js +1314 -92
  37. package/dist/nodes/output/index.js.map +1 -1
  38. package/dist/nodes/selectors/index.cjs +1296 -58
  39. package/dist/nodes/selectors/index.cjs.map +1 -1
  40. package/dist/nodes/selectors/index.d.cts +1 -3
  41. package/dist/nodes/selectors/index.d.ts +1 -3
  42. package/dist/nodes/selectors/index.js +1339 -65
  43. package/dist/nodes/selectors/index.js.map +1 -1
  44. package/dist/nodes/transformers/index.cjs +67 -206
  45. package/dist/nodes/transformers/index.cjs.map +1 -1
  46. package/dist/nodes/transformers/index.d.cts +3 -5
  47. package/dist/nodes/transformers/index.d.ts +3 -5
  48. package/dist/nodes/transformers/index.js +54 -193
  49. package/dist/nodes/transformers/index.js.map +1 -1
  50. package/dist/templates/generators/index.cjs +839 -1278
  51. package/dist/templates/generators/index.cjs.map +1 -1
  52. package/dist/templates/generators/index.d.cts +13 -50
  53. package/dist/templates/generators/index.d.ts +13 -50
  54. package/dist/templates/generators/index.js +836 -1280
  55. package/dist/templates/generators/index.js.map +1 -1
  56. package/dist/templates/groups/index.cjs +837 -1272
  57. package/dist/templates/groups/index.cjs.map +1 -1
  58. package/dist/templates/groups/index.d.cts +1 -5
  59. package/dist/templates/groups/index.d.ts +1 -5
  60. package/dist/templates/groups/index.js +835 -1277
  61. package/dist/templates/groups/index.js.map +1 -1
  62. package/dist/templates/index.cjs +839 -1280
  63. package/dist/templates/index.cjs.map +1 -1
  64. package/dist/templates/index.d.cts +4 -7
  65. package/dist/templates/index.d.ts +4 -7
  66. package/dist/templates/index.js +836 -1281
  67. package/dist/templates/index.js.map +1 -1
  68. package/dist/templates/modifiers/index.cjs +841 -1278
  69. package/dist/templates/modifiers/index.cjs.map +1 -1
  70. package/dist/templates/modifiers/index.d.cts +11 -38
  71. package/dist/templates/modifiers/index.d.ts +11 -38
  72. package/dist/templates/modifiers/index.js +838 -1281
  73. package/dist/templates/modifiers/index.js.map +1 -1
  74. package/dist/templates/output/index.cjs +839 -1274
  75. package/dist/templates/output/index.cjs.map +1 -1
  76. package/dist/templates/output/index.d.cts +4 -14
  77. package/dist/templates/output/index.d.ts +4 -14
  78. package/dist/templates/output/index.js +837 -1279
  79. package/dist/templates/output/index.js.map +1 -1
  80. package/dist/templates/selectors/index.cjs +839 -1274
  81. package/dist/templates/selectors/index.cjs.map +1 -1
  82. package/dist/templates/selectors/index.d.cts +3 -9
  83. package/dist/templates/selectors/index.d.ts +3 -9
  84. package/dist/templates/selectors/index.js +837 -1279
  85. package/dist/templates/selectors/index.js.map +1 -1
  86. package/dist/templates/transformers/index.cjs +839 -1274
  87. package/dist/templates/transformers/index.cjs.map +1 -1
  88. package/dist/templates/transformers/index.d.cts +3 -36
  89. package/dist/templates/transformers/index.d.ts +3 -36
  90. package/dist/templates/transformers/index.js +837 -1279
  91. package/dist/templates/transformers/index.js.map +1 -1
  92. package/package.json +5 -4
  93. package/dist/handle-types-D-v5S53h.d.cts +0 -22
  94. package/dist/handle-types-D-v5S53h.d.ts +0 -22
  95. package/dist/layout/index.cjs +0 -164
  96. package/dist/layout/index.cjs.map +0 -1
  97. package/dist/layout/index.d.cts +0 -26
  98. package/dist/layout/index.d.ts +0 -26
  99. package/dist/layout/index.js +0 -136
  100. package/dist/layout/index.js.map +0 -1
  101. package/dist/properties-BxwtU6i9.d.cts +0 -9
  102. package/dist/properties-BxwtU6i9.d.ts +0 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/templates/generators/index.ts","../../../src/templates/generators/noise-billow-template.ts","../../../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/layout/node-property-variables.tsx","../../../src/layout/node-value-input.tsx","../../../src/layout/node-property-input.tsx","../../../src/nodes/output/noise-logger-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/output/noise-output-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/nodes/generators/variable-property-node.tsx","../../../src/nodes/modifiers/variable-combine-node.tsx","../../../src/nodes/generators/variable-value-node.tsx","../../../src/nodes/groups/node-module-group.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/variable-property-template.ts","../../../src/templates/modifiers/variable-combine-template.ts","../../../src/templates/generators/variable-value-template.ts","../../../src/templates/groups/module-group-template.ts","../../../src/abstract/node-types.ts"],"sourcesContent":["export * from './noise-billow-template';\nexport * from './noise-checkerboard-template';\nexport * from './noise-const-template';\nexport * from './noise-cylinders-template';\nexport * from './noise-perlin-template';\nexport * from './noise-ridgedmulti-template';\nexport * from './noise-simplex-template';\nexport * from './noise-spheres-template';\nexport * from './noise-voronoi-template';\nexport * from './position-const-template';\nexport * from './position-grid-template';\nexport * from './variable-property-template';\nexport * from './variable-value-template';\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\n\nexport class NoiseBillowNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeFBMNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBillow,\n removable: false,\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: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\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 { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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\n data={data}\n except={nodeDataPropertyExcept}\n nodeId={id}\n onPropertiesChange={onPropertiesChange}\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseBillowNode;\n","import { useIncomingNodeData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Group, Stack } from '@mantine/core';\nimport { getObjectKeys } from '@awesome-flow/core/utils';\nimport { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { NodeVariablePropertyData } from '../abstract/node-props';\nimport { PropertyValue, ValueType } from '../abstract/properties';\nimport NodePropertyInput from './node-property-input';\n\nexport type NodeTrackVariablesProps = {\n nodeId: string;\n data: Record<string, any>;\n except?: Set<string>;\n onPropertiesChange?: (properties: Record<string, PropertyValue>) => void;\n};\n\nfunction NodePropertyVariables({\n data,\n nodeId,\n onPropertiesChange,\n except = nodeDataPropertyExcept,\n}: Readonly<NodeTrackVariablesProps>) {\n const [properties, setProperties] = useState<Record<string, PropertyValue>>(() => {\n const keys = getObjectKeys(data, except);\n\n const dataProps = {};\n\n for (const key of keys) {\n dataProps[key] = {\n name: key,\n value: data[key],\n } satisfies PropertyValue;\n }\n\n return dataProps;\n });\n\n const updateNodeData = useUpdateNodeData();\n const incoming = useIncomingNodeData<NodeVariablePropertyData>(nodeId);\n\n const resetAllDisabled = useCallback(() => {\n const keys = Object.keys(properties);\n\n keys.forEach((k) => {\n properties[k].disabled = false;\n });\n\n setProperties(properties);\n }, []);\n\n const updatePropertyValue = useCallback((name: string, value: ValueType, disabled?: boolean) => {\n let property = properties[name];\n\n if (property) {\n property.value = value;\n } else {\n property = {\n name,\n value,\n };\n }\n\n property.disabled = disabled;\n\n setProperties({ ...properties, [name]: property });\n updateNodeData(nodeId, { [name]: value });\n }, []);\n\n useEffect(() => {\n resetAllDisabled();\n\n if (incoming?.length) {\n for (const connection of incoming) {\n if (connection.property && properties[connection.property.name] !== undefined) {\n updatePropertyValue(connection.property.name, connection.property.value, true);\n }\n }\n }\n }, [incoming]);\n\n useEffect(() => {\n if (onPropertiesChange) {\n onPropertiesChange(properties);\n }\n }, [onPropertiesChange, properties]);\n\n const nodes = useMemo(() => {\n return Object.keys(properties).map((key) => {\n const property = properties[key];\n\n return (\n <Group key={key}>\n {property.name}:<NodePropertyInput property={property} onChange={updatePropertyValue} />\n </Group>\n );\n });\n }, [properties, updatePropertyValue]);\n\n return <Stack>{nodes}</Stack>;\n}\n\nexport default NodePropertyVariables;\n","import { Input, NumberInput, Switch } from '@mantine/core';\nimport { ValueType } from '../abstract/properties';\n\nexport type NodeValueInputProps = {\n value: ValueType;\n disabled?: boolean;\n step?: number;\n onChange: (value: ValueType) => void;\n};\n\nfunction NodeValueInput({ value, disabled, step, onChange }: Readonly<NodeValueInputProps>) {\n if (value === undefined || value === null) {\n return <></>;\n }\n\n switch (typeof value) {\n case 'boolean': {\n return (\n <Switch\n checked={value}\n disabled={disabled}\n onChange={(e) => onChange(e.currentTarget.checked)}\n />\n );\n }\n\n case 'number': {\n return (\n <NumberInput value={value} disabled={disabled} step={step} onChange={(e) => onChange(e)} />\n );\n }\n\n case 'string': {\n return (\n <Input\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.currentTarget.value)}\n />\n );\n }\n\n default:\n throw new Error(`Unknown input node for value of type: ${typeof value} (${value})`);\n }\n}\n\nexport default NodeValueInput;\n","import { ValueType, PropertyValue } from '../abstract/properties';\nimport NodeValueInput from './node-value-input';\n\nexport type NodePropertyInputProps = {\n property: PropertyValue;\n onChange: (name: string, value: ValueType) => void;\n};\n\nfunction NodePropertyInput({ property, onChange }: Readonly<NodePropertyInputProps>) {\n if (!property) {\n return <></>;\n }\n\n return (\n <NodeValueInput\n value={property.value}\n disabled={property.disabled}\n step={property.step}\n onChange={(value) => onChange(property.name, value)}\n />\n );\n}\n\nexport default NodePropertyInput;\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 { 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 { 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 { ComputedModuleData, NodeCylindersNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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 { ComputedModuleData, NodeFBMNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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 { ComputedModuleData, NodeRidgedNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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 { ComputedModuleData, NodeSpheresNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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 { ComputedModuleData, NodeVoronoiNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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} />\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 enum VariableCombineType {\n add = 'add',\n divide = 'divide',\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 { 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 { 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 { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Blend } from 'libnoise-ts/module/selector';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { Group } from '@mantine/core';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseBlendNode({ 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 > 2) {\n const module = new Blend(incoming[0].module, incoming[1].module, incoming[2].module);\n updateComputedData(id, { module });\n }\n }, [id, incoming, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Group>Modules: {incoming?.length}</Group>\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 { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Select } from 'libnoise-ts/module/selector';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { ComputedModuleData, NodeSelectNoiseData } from '../../abstract/node-props';\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 incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeSelectNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 2) {\n const module = new Select(\n incoming[0].module,\n incoming[1].module,\n incoming[2].module,\n edgeFalloff,\n lowerBound,\n upperBound\n );\n\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { edgeFalloff, lowerBound, upperBound });\n }, [incoming, edgeFalloff, lowerBound, upperBound, updateNodeData, id, updateComputedData]);\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 <Group>Modules: {incoming?.length}</Group>\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 { useEffect, useMemo } from 'react';\nimport { useIncomingHandleData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Displace } from 'libnoise-ts/module/transformer';\nimport { Badge, Stack } from '@mantine/core';\nimport { ComputedModuleData, NodeDisplaceNoiseData } from '../../abstract/node-props';\nimport { DisplacementModule } from '../../abstract/handle-types';\n\nfunction NoiseDisplaceNode({ id, selected, data, type }: NodeProps<Node<NodeDisplaceNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const incomingHandleData = useIncomingHandleData<ComputedModuleData>(id, data.handles);\n\n const { sourceModule, xModule, yModule, zModule } = useMemo(() => {\n return {\n sourceModule: incomingHandleData[DisplacementModule.sourceModule],\n xModule: incomingHandleData[DisplacementModule.xModule],\n yModule: incomingHandleData[DisplacementModule.yModule],\n zModule: incomingHandleData[DisplacementModule.zModule],\n };\n }, [incomingHandleData]);\n\n useEffect(() => {\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 }, [id, updateComputedData, sourceModule, xModule, yModule, zModule]);\n\n const { sourceColor, xColor, yColor, zColor } = useMemo(() => {\n return {\n sourceColor: sourceModule ? 'green' : 'orange',\n xColor: xModule ? 'green' : 'orange',\n yColor: yModule ? 'green' : 'orange',\n zColor: zModule ? 'green' : 'orange',\n };\n }, [sourceModule, xModule, yModule, zModule]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack align=\"center\">\n <Badge color={sourceColor}>Source Module</Badge>\n <Badge color={xColor}>X Module</Badge>\n <Badge color={yColor}>Y Module</Badge>\n <Badge color={zColor}>Z Module</Badge>\n </Stack>\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 { ComputedModuleData, NodeTurbulenceNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\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) {\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, updateComputedData]);\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 { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Stack } from '@mantine/core';\nimport { useIncomingNodeData, useOutgoingNodes, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { getObjectPropertyMap } from '@awesome-flow/core/utils';\nimport { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { NodeVariablePropertyData, NodeVariableValueData } from '../../abstract/node-props';\nimport { PropertyValue, ValueType } from '../../abstract/properties';\nimport NodePropertyInput from '../../layout/node-property-input';\n\nfunction VariablePropertyNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeVariablePropertyData>>) {\n const [options, setOptions] = useState<Record<string, number>>({});\n const [selectedProperty, setSelectedProperty] = useState<PropertyValue>(data.property);\n\n const updateNodeData = useUpdateNodeData<NodeVariablePropertyData>();\n const outgoing = useOutgoingNodes<NodeVariablePropertyData>(id);\n const incoming = useIncomingNodeData<NodeVariableValueData>(id);\n\n useEffect(() => {\n if (outgoing?.length) {\n // todo: only show common properties from all outgoing connections\n const { data } = outgoing[0];\n const properties = getObjectPropertyMap(data, nodeDataPropertyExcept);\n\n setOptions(properties);\n\n if (!selectedProperty) {\n const keys = Object.keys(properties);\n\n if (keys.length) {\n setSelectedProperty({\n name: keys[0],\n value: properties[keys[0]],\n });\n }\n }\n } else {\n setSelectedProperty(null);\n }\n }, [outgoing]);\n\n useEffect(() => {\n if (!incoming?.length && selectedProperty?.disabled) {\n setSelectedProperty({ ...selectedProperty, disabled: false });\n } else if (incoming?.length && selectedProperty) {\n const incomingValue = incoming[0].value;\n\n if (incomingValue !== undefined && incomingValue !== null) {\n setSelectedProperty({\n name: selectedProperty.name,\n value: incomingValue,\n disabled: true,\n });\n }\n }\n }, [incoming]);\n\n useEffect(() => {\n if (selectedProperty) {\n updateNodeData(id, { property: selectedProperty });\n }\n }, [selectedProperty]);\n\n const onPropertyChange = useCallback(\n (selected: string) => {\n setSelectedProperty({\n name: selected,\n value: options[selected],\n });\n },\n [options]\n );\n\n const onValueChange = useCallback((name: string, value: ValueType) => {\n setSelectedProperty({\n name,\n value,\n });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack align=\"center\">\n <NodeCombobox\n options={options}\n onChange={onPropertyChange}\n selected={selectedProperty?.name}\n hideListValues\n />\n <NodePropertyInput property={selectedProperty} onChange={onValueChange} />\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} />\n </NodeContainer>\n );\n}\n\nexport default VariablePropertyNode;\n","import { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport { useIncomingNodeData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport {\n IconAsterisk,\n IconChevronLeft,\n IconChevronRight,\n IconChevronUp,\n IconDivide,\n IconPlus,\n} from '@tabler/icons-react';\nimport { NodeCombineVariableData, NodeVariableValueData } from '../../abstract/node-props';\nimport { VariableCombineType } from '../../abstract/operations';\nimport { ValueType } from '../../abstract/properties';\nimport { NodeValueInput } from '../../layout';\n\nconst options: Record<VariableCombineType, ReactNode | string> = {\n add: <IconPlus />,\n divide: <IconDivide />,\n min: <IconChevronLeft />,\n max: <IconChevronRight />,\n multiply: <IconAsterisk />,\n power: <IconChevronUp />,\n};\n\nfunction VariableCombineNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeCombineVariableData>>) {\n const [operation, setOperation] = useState(data.operation);\n const [value, setValue] = useState(data.value);\n\n const updateNodeData = useUpdateNodeData<NodeCombineVariableData>();\n const incoming = useIncomingNodeData<NodeVariableValueData>(id);\n\n useEffect(() => {\n if (incoming?.length > 1) {\n const result = getOperationResult(operation, incoming[0].value, incoming[1].value);\n setValue(result);\n updateNodeData(id, { value: result });\n }\n }, [operation, incoming]);\n\n const onChange = useCallback((op: VariableCombineType) => {\n updateNodeData(id, { operation: op });\n setOperation(op);\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeCombobox options={options} selected={operation} onChange={onChange} />\n <NodeValueInput value={value} onChange={() => {}} disabled />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nfunction getOperationResult(\n operation: VariableCombineType,\n value1: ValueType,\n value2: ValueType\n): ValueType {\n switch (operation) {\n case VariableCombineType.add:\n return Number(value1) + Number(value2);\n\n case VariableCombineType.divide:\n return Number(value1) / (Number(value2) || 1);\n\n case VariableCombineType.max:\n return Number(value1) > Number(value2) ? value1 : value2;\n\n case VariableCombineType.min:\n return Number(value1) < Number(value2) ? value1 : value2;\n\n case VariableCombineType.multiply:\n return Number(value1) * Number(value2);\n\n case VariableCombineType.power:\n return Number(value1) ** Number(value2);\n }\n}\n\nexport default VariableCombineNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useState } from 'react';\nimport { useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { NodeVariableValueData } from '../../abstract/node-props';\nimport { ValueType } from '../../abstract/properties';\nimport NodeValueInput from '../../layout/node-value-input';\n\nfunction VariableValueNode({ id, selected, data, type }: NodeProps<Node<NodeVariableValueData>>) {\n const [value, setValue] = useState<ValueType>(data.value || 0.0);\n const updateNodeData = useUpdateNodeData<NodeVariableValueData>();\n\n const onValueChange = useCallback((newValue: ValueType) => {\n updateNodeData(id, { value: newValue });\n setValue(newValue);\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeValueInput value={value} onChange={onValueChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"source\" />\n </NodeContainer>\n );\n}\n\nexport default VariableValueNode;\n","import { NodeContainer, NodeCollapse } 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';\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 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 </NodeContainer>\n );\n}\n\nexport default ModuleGroupNode;\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseCheckerboardNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCheckerboard,\n removable: false,\n data: {\n title: 'Checkerboard Noise',\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeConstNoiseData } from '../../abstract/node-props';\n\nexport class NoiseConstNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeConstNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseConst,\n removable: false,\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: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCylindersNoiseData } from '../../abstract/node-props';\n\nexport class NoiseCylindersNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCylindersNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCylinders,\n removable: false,\n data: {\n title: 'Cylinders Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\n\nexport class NoisePerlinNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeFBMNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noisePerlin,\n removable: false,\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: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRidgedNoiseData } from '../../abstract/node-props';\n\nexport class NoiseRidgedMultiNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeRidgedNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseRidgedMulti,\n removable: false,\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: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseSimplexNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSimplex,\n removable: false,\n data: {\n title: 'Simplex Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSpheresNoiseData } from '../../abstract/node-props';\n\nexport class NoiseSpheresNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeSpheresNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSpheres,\n removable: false,\n data: {\n title: 'Spheres Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVoronoiNoiseData } from '../../abstract/node-props';\n\nexport class NoiseVoronoiNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVoronoiNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseVoronoi,\n removable: false,\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: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodePositionData } from '../../abstract/node-props';\n\nexport class PositionConstNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodePositionData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.position,\n removable: false,\n data: {\n title: 'Position Output',\n position: { x: 0, y: 0, z: 0 },\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.position,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeGridData } from '../../abstract/node-props';\n\nexport class PositionGridNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeGridData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.grid,\n removable: false,\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: NoiseHandleFlag.position,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\n\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeNormalizeNoiseData } from '../../abstract/node-props';\n\nexport class NoiseNormalizeNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeNormalizeNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseNormalize,\n data: {\n title: 'Normalize Noise',\n intervalStart: -1,\n intervalEnd: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseLoggerNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseLogger,\n removable: false,\n data: {\n title: 'Noise Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.noise,\n connection: 'target',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'target';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.noise;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseRawTextureTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.textureData,\n removable: false,\n data: {\n title: 'Texture Data',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.noise,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.texture,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.texture;\n\n case 'target':\n return NoiseHandleFlag.noise;\n }\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class PositionLoggerNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.positionLogger,\n removable: false,\n data: {\n title: 'Position Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.position,\n connection: 'target',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'target';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCombineNoiseData } from '../../abstract/node-props';\nimport { NoiseCombineType } from '../../abstract/operations';\n\nexport class NoiseCombineNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCombineNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCombine,\n removable: false,\n data: {\n title: 'Combine Noise',\n operation: NoiseCombineType.add,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 2,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeClampNoiseData } from '../../abstract/node-props';\n\nexport class NoiseClampNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeClampNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseClamp,\n removable: false,\n data: {\n title: 'Clamp Noise',\n lowerBound: -1,\n upperBound: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseAbsNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseAbs,\n removable: false,\n data: {\n title: 'Abs Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseOutputNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseOutput,\n removable: false,\n data: {\n title: 'Noise Output',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.position,\n connection: 'target',\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.noise,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.noise;\n\n case 'target':\n return NoiseHandleFlag.module & NoiseHandleFlag.position;\n }\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCurveNoiseData } from '../../abstract/node-props';\n\nexport class NoiseCurveNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCurveNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCurve,\n removable: false,\n data: {\n title: 'Noise Curve',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeExponentNoiseData } from '../../abstract/node-props';\n\nexport class NoiseExponentNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeExponentNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseExponent,\n removable: false,\n data: {\n title: 'Noise Exponent',\n exponent: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseInvertNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseInvert,\n removable: false,\n data: {\n title: 'Invert Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScaleBiasNoiseData } from '../../abstract/node-props';\n\nexport class NoiseScaleBiasNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeScaleBiasNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseScaleBias,\n removable: false,\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: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTerraceNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTerraceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTerraceNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTerrace,\n removable: false,\n data: {\n title: 'Noise Terrace',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseBlendNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBlend,\n removable: false,\n data: {\n title: 'Noise Blend',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSelectNoiseData } from '../../abstract/node-props';\n\nexport class NoiseSelectNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeSelectNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSelect,\n removable: false,\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: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport {\n DisplacementModule,\n DisplacementModuleHandle,\n NoiseHandleFlag,\n} from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseDisplaceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData, Omit<DisplacementModuleHandle, 'id'>> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseDisplace,\n data: {\n title: 'Noise Displace',\n },\n handles: [\n {\n position: Position.Left,\n connection: 'target',\n label: 'Source Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.sourceModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'X Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.xModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Y Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.yModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Z Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.zModule,\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.output,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRotatePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseRotatePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeRotatePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseRotatePoint,\n removable: false,\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: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScalePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseScalePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeScalePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseScalePoint,\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: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTranslatePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTranslatePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTranslatePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTranslatePoint,\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: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTurbulenceNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTurbulenceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTurbulenceNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTurbulence,\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: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n label: 'Variable Properties',\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVariablePropertyData } from '../../abstract/node-props';\n\nexport class VariablePropertyNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVariablePropertyData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableProperty,\n data: {\n title: 'Variable Property',\n property: null,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.variableProperty;\n case 'target':\n return NoiseHandleFlag.variableValue;\n }\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCombineVariableData } from '../../abstract/node-props';\nimport { VariableCombineType } from '../../abstract/operations';\n\nexport class VariableCombineNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCombineVariableData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableCombine,\n removable: false,\n data: {\n title: 'Combine Values',\n operation: VariableCombineType.add,\n value: null,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVariableValueData } from '../../abstract/node-props';\n\nexport class VariableValueNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVariableValueData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableValue,\n data: {\n title: 'Variable Value',\n value: null,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.variableValue;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\n\nexport class ModuleGroupNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.groupModule,\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: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n hideOnCollapse: true,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { NodeTypes } from '@xyflow/react';\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 VariablePropertyNode from '../nodes/generators/variable-property-node';\nimport VariableCombineNode from '../nodes/modifiers/variable-combine-node';\nimport VariableValueNode from '../nodes/generators/variable-value-node';\nimport ModuleGroupNode from '../nodes/groups/node-module-group';\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 { VariablePropertyNodeTemplateFactory } from '../templates/generators/variable-property-template';\nimport { VariableCombineNodeTemplateFactory } from '../templates/modifiers/variable-combine-template';\nimport { VariableValueNodeTemplateFactory } from '../templates/generators/variable-value-template';\nimport { ModuleGroupNodeTemplateFactory } from '../templates/groups/module-group-template';\nimport { NoiseBillowNodeTemplateFactory } from '../templates/generators/noise-billow-template';\n\nexport enum NoiseNodeType {\n position = 'position',\n grid = 'grid',\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 textureData = 'texture-data',\n noiseLogger = 'noise-logger',\n positionLogger = 'position-logger',\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 variableProperty = 'variable-property',\n variableValue = 'variable-value',\n variableCombine = 'variable-combine',\n groupModule = 'group-module',\n}\n\nexport const noiseNodeTypes = {\n [NoiseNodeType.variableValue]: VariableValueNode,\n [NoiseNodeType.variableProperty]: VariablePropertyNode,\n [NoiseNodeType.variableCombine]: VariableCombineNode,\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.variableProperty]: new VariablePropertyNodeTemplateFactory(),\n [NoiseNodeType.variableCombine]: new VariableCombineNodeTemplateFactory(),\n [NoiseNodeType.variableValue]: new VariableValueNodeTemplateFactory(),\n [NoiseNodeType.groupModule]: new ModuleGroupNodeTemplateFactory(),\n};\n"],"mappings":"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","names":["import_utils","import_system","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_abstract","import_hooks","import_react","import_core","import_core","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_hooks","import_core","import_react","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_selector","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_transformer","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_utils","import_abstract","import_jsx_runtime","import_layout","import_react","import_hooks","import_icons_react","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_abstract","import_core","import_jsx_runtime","import_utils","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system"]}
1
+ {"version":3,"sources":["../../../src/templates/generators/index.ts","../../../src/templates/generators/noise-billow-template.ts","../../../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-logger-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/output/noise-output-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/groups/module-group-template.ts","../../../src/nodes/groups/module-group-node.tsx","../../../src/abstract/node-types.ts"],"sourcesContent":["export * from './noise-billow-template';\nexport * from './noise-checkerboard-template';\nexport * from './noise-const-template';\nexport * from './noise-cylinders-template';\nexport * from './noise-perlin-template';\nexport * from './noise-ridgedmulti-template';\nexport * from './noise-simplex-template';\nexport * from './noise-spheres-template';\nexport * from './noise-voronoi-template';\nexport * from './position-const-template';\nexport * from './position-grid-template';\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 { 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 { 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 { 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 { 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, 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 {\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":["import_abstract","import_utils","import_system","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_components","import_core","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_hooks","import_selector","import_core","import_components","import_jsx_runtime","import_layout","import_react","import_hooks","import_components","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_transformer","import_components","import_jsx_runtime","import_system","import_abstract","import_system","import_abstract","import_system","import_abstract","import_system","import_abstract","import_system","import_abstract","import_system","import_abstract","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_abstract","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_system","import_abstract","import_system","import_abstract","import_utils","import_system","import_layout","import_react","import_abstract","import_core","import_hooks","import_jsx_runtime"]}