@awesome-flow/noise 0.4.0 → 0.6.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.
- package/dist/abstract/index.cjs +42 -42
- package/dist/abstract/index.js +59 -54
- package/dist/modules/index.cjs +0 -1
- package/dist/modules/index.js +0 -1
- package/dist/nodes/generators/index.cjs +0 -1
- package/dist/nodes/generators/index.js +0 -1
- package/dist/nodes/groups/index.cjs +2 -5
- package/dist/nodes/groups/index.js +9 -7
- package/dist/nodes/index.cjs +68 -68
- package/dist/nodes/index.js +59 -54
- package/dist/nodes/modifiers/index.cjs +40 -38
- package/dist/nodes/modifiers/index.js +50 -48
- package/dist/nodes/output/index.cjs +0 -2
- package/dist/nodes/output/index.js +7 -4
- package/dist/nodes/selectors/index.cjs +0 -2
- package/dist/nodes/selectors/index.js +7 -4
- package/dist/nodes/transformers/index.cjs +0 -1
- package/dist/nodes/transformers/index.js +0 -1
- package/dist/templates/generators/index.cjs +2 -4
- package/dist/templates/generators/index.js +7 -4
- package/dist/templates/groups/index.cjs +2 -4
- package/dist/templates/groups/index.js +7 -4
- package/dist/templates/index.cjs +2 -4
- package/dist/templates/index.js +7 -4
- package/dist/templates/modifiers/index.cjs +0 -2
- package/dist/templates/modifiers/index.js +7 -4
- package/dist/templates/output/index.cjs +0 -2
- package/dist/templates/output/index.js +7 -4
- package/dist/templates/selectors/index.cjs +0 -2
- package/dist/templates/selectors/index.js +7 -4
- package/dist/templates/transformers/index.cjs +0 -2
- package/dist/templates/transformers/index.js +7 -4
- package/package.json +3 -3
- package/dist/abstract/index.cjs.map +0 -1
- package/dist/abstract/index.js.map +0 -1
- package/dist/modules/index.cjs.map +0 -1
- package/dist/modules/index.js.map +0 -1
- package/dist/nodes/generators/index.cjs.map +0 -1
- package/dist/nodes/generators/index.js.map +0 -1
- package/dist/nodes/groups/index.cjs.map +0 -1
- package/dist/nodes/groups/index.js.map +0 -1
- package/dist/nodes/index.cjs.map +0 -1
- package/dist/nodes/index.js.map +0 -1
- package/dist/nodes/modifiers/index.cjs.map +0 -1
- package/dist/nodes/modifiers/index.js.map +0 -1
- package/dist/nodes/output/index.cjs.map +0 -1
- package/dist/nodes/output/index.js.map +0 -1
- package/dist/nodes/selectors/index.cjs.map +0 -1
- package/dist/nodes/selectors/index.js.map +0 -1
- package/dist/nodes/transformers/index.cjs.map +0 -1
- package/dist/nodes/transformers/index.js.map +0 -1
- package/dist/templates/generators/index.cjs.map +0 -1
- package/dist/templates/generators/index.js.map +0 -1
- package/dist/templates/groups/index.cjs.map +0 -1
- package/dist/templates/groups/index.js.map +0 -1
- package/dist/templates/index.cjs.map +0 -1
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/modifiers/index.cjs.map +0 -1
- package/dist/templates/modifiers/index.js.map +0 -1
- package/dist/templates/output/index.cjs.map +0 -1
- package/dist/templates/output/index.js.map +0 -1
- package/dist/templates/selectors/index.cjs.map +0 -1
- package/dist/templates/selectors/index.js.map +0 -1
- package/dist/templates/transformers/index.cjs.map +0 -1
- package/dist/templates/transformers/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/templates/transformers/index.ts","../../../src/templates/transformers/noise-displace-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-rotate-point-template.ts","../../../src/templates/transformers/noise-scale-point-template.ts","../../../src/templates/transformers/noise-translate-point-template.ts","../../../src/templates/transformers/noise-turbulence-template.ts","../../../src/templates/generators/noise-billow-template.ts","../../../src/templates/groups/module-group-template.ts","../../../src/nodes/groups/module-group-node.tsx","../../../src/abstract/node-types.ts"],"sourcesContent":["export * from './noise-displace-template';\nexport * from './noise-rotate-point-template';\nexport * from './noise-scale-point-template';\nexport * from './noise-translate-point-template';\nexport * from './noise-turbulence-template';\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 { 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 { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRotatePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseRotatePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeRotatePointNoiseData> = {\n type: NoiseNodeType.noiseRotatePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Rotate Point',\n xAngle: 0.0,\n yAngle: 0.0,\n zAngle: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScalePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseScalePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeScalePointNoiseData> = {\n type: NoiseNodeType.noiseScalePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Scale Point',\n xScale: 1.0,\n yScale: 1.0,\n zScale: 1.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTranslatePointNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseTranslatePointNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTranslatePointNoiseData> = {\n type: NoiseNodeType.noiseTranslatePoint,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Translate Point',\n translateX: 0.0,\n translateY: 0.0,\n translateZ: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTurbulenceNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract';\n\nexport class NoiseTurbulenceNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTurbulenceNoiseData> = {\n type: NoiseNodeType.noiseTurbulence,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Turbulence',\n frequency: 1.0,\n power: 1.0,\n roughness: 1.0,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n label: 'Variable Properties',\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\n\nexport class NoiseBillowNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeFBMNoiseData> = {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBillow,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Billow Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import {\n BasicNodeData,\n CoreTemplateGroup,\n ITemplateFactory,\n NodeTemplate,\n} from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class ModuleGroupNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<BasicNodeData> = {\n id: IDGenerator.template(),\n type: NoiseNodeType.groupModule,\n group: CoreTemplateGroup.groups,\n data: {\n title: 'Modules Group',\n isGroup: true,\n initialSize: {\n width: 300,\n height: 200,\n },\n collapsedSize: {\n width: 300,\n height: 80,\n },\n },\n handles: [\n {\n position: Position.Bottom,\n dataType: NoiseHandleType.module,\n connection: 'target',\n maxConnections: 1,\n hideOnCollapse: true,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source',\n },\n ],\n };\n}\n","import { NodeContainer, NodeCollapse, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps, NodeResizer, useStore, useUpdateNodeInternals } from '@xyflow/react';\nimport { BasicNodeData, FlowContext } from '@awesome-flow/core/abstract';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\nimport { shallow } from 'zustand/shallow';\nimport { Badge, Group } from '@mantine/core';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction ModuleGroupNode({\n id,\n selected,\n data,\n type,\n width,\n height,\n}: NodeProps<Node<BasicNodeData>>) {\n const context = useContext(FlowContext);\n const updateNodeInternals = useUpdateNodeInternals();\n const triggerNodeChanges = useStore((s) => s.triggerNodeChanges);\n\n const { groupNodes, setGroupCollapsed } = context.useFlowStore(\n useCallback(\n (state) => ({ groupNodes: state.groups[id], setGroupCollapsed: state.setGroupCollapsed }),\n []\n )\n );\n\n const intersectingNode = context.useInteractivityStore(\n useCallback((state) => state.nodeIntersectionTargets[id], [id]),\n shallow\n );\n\n useEffect(() => {\n updateNodeInternals(id);\n }, [width, height]);\n\n useEffect(() => {\n triggerNodeChanges([\n {\n id,\n type: 'select',\n selected: !!intersectingNode,\n },\n ]);\n }, [intersectingNode]);\n\n const onCollapsed = useCallback((collapsed: boolean) => {\n setGroupCollapsed(id, collapsed);\n }, []);\n\n const size = useMemo(() => {\n return {\n width: data.initialSize?.width || 100,\n height: data.initialSize?.height || 50,\n };\n }, [data.initialSize]);\n\n const incomingModules = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incomingModules?.length) {\n const { module } = incomingModules[0];\n updateComputedData(id, { module });\n }\n }, [incomingModules]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Badge size=\"xs\" variant=\"outline\" radius=\"xs\" color=\"gray\">\n {groupNodes?.length || 0}\n </Badge>\n <NodeCollapse nodeId={id} isCollapsed={data.isCollapsed} onCollapsed={onCollapsed} />\n </Group>\n </Group>\n }\n type={type}\n >\n <NodeResizer\n nodeId={id}\n minWidth={size.width}\n minHeight={size.height}\n isVisible={selected && !data.isCollapsed}\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default ModuleGroupNode;\n","import { NodeTypes } from '@xyflow/react';\nimport { ITemplateFactory } from '@awesome-flow/core/abstract';\nimport NoiseSimplexNode from '../nodes/generators/noise-simplex-node';\nimport PositionConstNode from '../nodes/generators/position-const-node';\nimport PositionGridNode from '../nodes/generators/position-grid-node';\nimport NoiseNormalizeNode from '../nodes/modifiers/noise-normalize-node';\nimport NoiseConstNode from '../nodes/generators/noise-const-node';\nimport NoiseBillowNode from '../nodes/generators/noise-billow-node';\nimport NoiseLoggerNode from '../nodes/output/noise-logger-node';\nimport NoiseRawTextureNode from '../nodes/output/noise-raw-texture-node';\nimport NoiseCheckerboardNode from '../nodes/generators/noise-checkerboard-node';\nimport PositionsLoggerNode from '../nodes/output/positions-logger-node';\nimport NoiseCylindersNode from '../nodes/generators/noise-cylinders-node';\nimport NoisePerlinNode from '../nodes/generators/noise-perlin-node';\nimport NoiseRidgedMultiNode from '../nodes/generators/noise-ridgedmulti-node';\nimport NoiseSpheresNode from '../nodes/generators/noise-spheres-node';\nimport NoiseVoronoiNode from '../nodes/generators/noise-voronoi-node';\nimport NoiseCombineNode from '../nodes/modifiers/noise-combine-node';\nimport NoiseClampNode from '../nodes/modifiers/noise-clamp-node';\nimport NoiseAbsNode from '../nodes/modifiers/noise-abs-node';\nimport NoiseOutputNode from '../nodes/output/noise-output-node';\nimport NoiseCurveNode from '../nodes/modifiers/noise-curve-node';\nimport NoiseExponentNode from '../nodes/modifiers/noise-exponent-node';\nimport NoiseInvertNode from '../nodes/modifiers/noise-invert-node';\nimport NoiseScaleBiasNode from '../nodes/modifiers/noise-scale-bias-node';\nimport NoiseTerraceNode from '../nodes/modifiers/noise-terrace-node';\nimport NoiseBlendNode from '../nodes/selectors/noise-blend-node';\nimport NoiseSelectNode from '../nodes/selectors/noise-select-node';\nimport NoiseDisplaceNode from '../nodes/transformers/noise-displace-node';\nimport NoiseRotatePointNode from '../nodes/transformers/noise-rotate-point-node';\nimport NoiseScalePointNode from '../nodes/transformers/noise-scale-point-node';\nimport NoiseTranslatePointNode from '../nodes/transformers/noise-translate-point-node';\nimport NoiseTurbulenceNode from '../nodes/transformers/noise-turbulence-node ';\nimport { NoiseCheckerboardNodeTemplateFactory } from '../templates/generators/noise-checkerboard-template';\nimport { NoiseConstNodeTemplateFactory } from '../templates/generators/noise-const-template';\nimport { NoiseCylindersNodeTemplateFactory } from '../templates/generators/noise-cylinders-template';\nimport { NoisePerlinNodeTemplateFactory } from '../templates/generators/noise-perlin-template';\nimport { NoiseRidgedMultiNodeTemplateFactory } from '../templates/generators/noise-ridgedmulti-template';\nimport { NoiseSimplexNodeTemplateFactory } from '../templates/generators/noise-simplex-template';\nimport { NoiseSpheresNodeTemplateFactory } from '../templates/generators/noise-spheres-template';\nimport { NoiseVoronoiNodeTemplateFactory } from '../templates/generators/noise-voronoi-template';\nimport { PositionConstNodeTemplateFactory } from '../templates/generators/position-const-template';\nimport { PositionGridNodeTemplateFactory } from '../templates/generators/position-grid-template';\nimport { NoiseNormalizeNodeTemplateFactory } from '../templates/modifiers/noise-normalize-template';\nimport { NoiseLoggerNodeTemplateFactory } from '../templates/output/noise-logger-template';\nimport { NoiseRawTextureTemplateFactory } from '../templates/output/noise-raw-texture-template';\nimport { PositionLoggerNodeTemplateFactory } from '../templates/output/position-logger-template';\nimport { NoiseCombineNodeTemplateFactory } from '../templates/modifiers/noise-combine-template';\nimport { NoiseClampNodeTemplateFactory } from '../templates/modifiers/noise-clamp-template';\nimport { NoiseAbsNodeTemplateFactory } from '../templates/modifiers/noise-abs-template';\nimport { NoiseOutputNodeTemplateFactory } from '../templates/output/noise-output-template';\nimport { NoiseCurveNodeTemplateFactory } from '../templates/modifiers/noise-curve-template';\nimport { NoiseExponentNodeTemplateFactory } from '../templates/modifiers/noise-exponent-template';\nimport { NoiseInvertNodeTemplateFactory } from '../templates/modifiers/noise-invert-template';\nimport { NoiseScaleBiasNodeTemplateFactory } from '../templates/modifiers/noise-scalebias-template';\nimport { NoiseTerraceNodeTemplateFactory } from '../templates/modifiers/noise-terrace-template';\nimport { NoiseBlendNodeTemplateFactory } from '../templates/selectors/noise-blend-template';\nimport { NoiseSelectNodeTemplateFactory } from '../templates/selectors/noise-select-template';\nimport { NoiseDisplaceNodeTemplateFactory } from '../templates/transformers/noise-displace-template';\nimport { NoiseRotatePointNodeTemplateFactory } from '../templates/transformers/noise-rotate-point-template';\nimport { NoiseScalePointNodeTemplateFactory } from '../templates/transformers/noise-scale-point-template';\nimport { NoiseTranslatePointNodeTemplateFactory } from '../templates/transformers/noise-translate-point-template';\nimport { NoiseTurbulenceNodeTemplateFactory } from '../templates/transformers/noise-turbulence-template';\nimport { NoiseBillowNodeTemplateFactory } from '../templates/generators/noise-billow-template';\nimport { ModuleGroupNodeTemplateFactory } from '../templates/groups/module-group-template';\nimport { ModuleGroupNode } from '../nodes';\n\nexport enum NoiseNodeType {\n position = 'position',\n grid = 'grid',\n textureData = 'texture-data',\n groupModule = 'group-module',\n positionLogger = 'position-logger',\n noiseLogger = 'noise-logger',\n noiseOutput = 'noise-output',\n noiseConst = 'noise-constant',\n noiseSimplex = 'noise-simplex',\n noiseBillow = 'noise-billow',\n noiseCheckerboard = 'noise-checkerboard',\n noiseNormalize = 'noise-normalize',\n noiseCylinders = 'noise-cylinders',\n noisePerlin = 'noise-perlin',\n noiseRidgedMulti = 'noise-ridged-multi',\n noiseSpheres = 'noise-spheres',\n noiseVoronoi = 'noise-voronoi',\n noiseCombine = 'noise-combiner',\n noiseClamp = 'noise-clamp',\n noiseAbs = 'noise-abs',\n noiseCurve = 'noise-curve',\n noiseExponent = 'noise-exponent',\n noiseInvert = 'noise-invert',\n noiseScaleBias = 'noise-scale-bias',\n noiseTerrace = 'noise-terrace',\n noiseBlend = 'noise-blend',\n noiseSelect = 'noise-select',\n noiseDisplace = 'noise-displace',\n noiseRotatePoint = 'noise-rotate-point',\n noiseScalePoint = 'noise-scale-point',\n noiseTranslatePoint = 'noise-translate-point',\n noiseTurbulence = 'noise-turbulence',\n}\n\nexport const noiseNodeTypes = {\n [NoiseNodeType.groupModule]: ModuleGroupNode,\n [NoiseNodeType.position]: PositionConstNode,\n [NoiseNodeType.grid]: PositionGridNode,\n [NoiseNodeType.noiseOutput]: NoiseOutputNode,\n [NoiseNodeType.textureData]: NoiseRawTextureNode,\n [NoiseNodeType.noiseLogger]: NoiseLoggerNode,\n [NoiseNodeType.positionLogger]: PositionsLoggerNode,\n [NoiseNodeType.noiseConst]: NoiseConstNode,\n [NoiseNodeType.noiseBillow]: NoiseBillowNode,\n [NoiseNodeType.noiseSimplex]: NoiseSimplexNode,\n [NoiseNodeType.noiseCheckerboard]: NoiseCheckerboardNode,\n [NoiseNodeType.noiseCylinders]: NoiseCylindersNode,\n [NoiseNodeType.noisePerlin]: NoisePerlinNode,\n [NoiseNodeType.noiseRidgedMulti]: NoiseRidgedMultiNode,\n [NoiseNodeType.noiseSpheres]: NoiseSpheresNode,\n [NoiseNodeType.noiseVoronoi]: NoiseVoronoiNode,\n [NoiseNodeType.noiseCombine]: NoiseCombineNode,\n [NoiseNodeType.noiseClamp]: NoiseClampNode,\n [NoiseNodeType.noiseAbs]: NoiseAbsNode,\n [NoiseNodeType.noiseNormalize]: NoiseNormalizeNode,\n [NoiseNodeType.noiseCurve]: NoiseCurveNode,\n [NoiseNodeType.noiseExponent]: NoiseExponentNode,\n [NoiseNodeType.noiseInvert]: NoiseInvertNode,\n [NoiseNodeType.noiseScaleBias]: NoiseScaleBiasNode,\n [NoiseNodeType.noiseTerrace]: NoiseTerraceNode,\n [NoiseNodeType.noiseBlend]: NoiseBlendNode,\n [NoiseNodeType.noiseSelect]: NoiseSelectNode,\n [NoiseNodeType.noiseDisplace]: NoiseDisplaceNode,\n [NoiseNodeType.noiseRotatePoint]: NoiseRotatePointNode,\n [NoiseNodeType.noiseScalePoint]: NoiseScalePointNode,\n [NoiseNodeType.noiseTranslatePoint]: NoiseTranslatePointNode,\n [NoiseNodeType.noiseTurbulence]: NoiseTurbulenceNode,\n} satisfies NodeTypes;\n\nexport const noiseNodeTemplates = {\n [NoiseNodeType.noiseOutput]: new NoiseOutputNodeTemplateFactory(),\n [NoiseNodeType.noiseSimplex]: new NoiseSimplexNodeTemplateFactory(),\n [NoiseNodeType.noiseBillow]: new NoiseBillowNodeTemplateFactory(),\n [NoiseNodeType.noiseCheckerboard]: new NoiseCheckerboardNodeTemplateFactory(),\n [NoiseNodeType.noiseNormalize]: new NoiseNormalizeNodeTemplateFactory(),\n [NoiseNodeType.noiseLogger]: new NoiseLoggerNodeTemplateFactory(),\n [NoiseNodeType.noiseConst]: new NoiseConstNodeTemplateFactory(),\n [NoiseNodeType.position]: new PositionConstNodeTemplateFactory(),\n [NoiseNodeType.positionLogger]: new PositionLoggerNodeTemplateFactory(),\n [NoiseNodeType.grid]: new PositionGridNodeTemplateFactory(),\n [NoiseNodeType.textureData]: new NoiseRawTextureTemplateFactory(),\n [NoiseNodeType.noiseCylinders]: new NoiseCylindersNodeTemplateFactory(),\n [NoiseNodeType.noisePerlin]: new NoisePerlinNodeTemplateFactory(),\n [NoiseNodeType.noiseRidgedMulti]: new NoiseRidgedMultiNodeTemplateFactory(),\n [NoiseNodeType.noiseSpheres]: new NoiseSpheresNodeTemplateFactory(),\n [NoiseNodeType.noiseVoronoi]: new NoiseVoronoiNodeTemplateFactory(),\n [NoiseNodeType.noiseCombine]: new NoiseCombineNodeTemplateFactory(),\n [NoiseNodeType.noiseClamp]: new NoiseClampNodeTemplateFactory(),\n [NoiseNodeType.noiseAbs]: new NoiseAbsNodeTemplateFactory(),\n [NoiseNodeType.noiseCurve]: new NoiseCurveNodeTemplateFactory(),\n [NoiseNodeType.noiseExponent]: new NoiseExponentNodeTemplateFactory(),\n [NoiseNodeType.noiseInvert]: new NoiseInvertNodeTemplateFactory(),\n [NoiseNodeType.noiseScaleBias]: new NoiseScaleBiasNodeTemplateFactory(),\n [NoiseNodeType.noiseTerrace]: new NoiseTerraceNodeTemplateFactory(),\n [NoiseNodeType.noiseBlend]: new NoiseBlendNodeTemplateFactory(),\n [NoiseNodeType.noiseSelect]: new NoiseSelectNodeTemplateFactory(),\n [NoiseNodeType.noiseDisplace]: new NoiseDisplaceNodeTemplateFactory(),\n [NoiseNodeType.noiseRotatePoint]: new NoiseRotatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseScalePoint]: new NoiseScalePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTranslatePoint]: new NoiseTranslatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTurbulence]: new NoiseTurbulenceNodeTemplateFactory(),\n [NoiseNodeType.groupModule]: new ModuleGroupNodeTemplateFactory(),\n} satisfies Record<NoiseNodeType, ITemplateFactory>;\n"],"mappings":"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","names":["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_abstract","import_system","import_abstract","import_utils","import_system","import_abstract","import_utils","import_system","import_layout","import_react","import_abstract","import_core","import_hooks","import_jsx_runtime"]}
|