@awesome-flow/noise 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/abstract/index.cjs +4234 -0
  2. package/dist/abstract/index.cjs.map +1 -0
  3. package/dist/abstract/index.d.cts +137 -0
  4. package/dist/abstract/index.d.ts +137 -0
  5. package/dist/abstract/index.js +4271 -0
  6. package/dist/abstract/index.js.map +1 -0
  7. package/dist/handle-types-D-v5S53h.d.cts +22 -0
  8. package/dist/handle-types-D-v5S53h.d.ts +22 -0
  9. package/dist/layout/index.cjs +164 -0
  10. package/dist/layout/index.cjs.map +1 -0
  11. package/dist/layout/index.d.cts +26 -0
  12. package/dist/layout/index.d.ts +26 -0
  13. package/dist/layout/index.js +136 -0
  14. package/dist/layout/index.js.map +1 -0
  15. package/dist/modules/index.cjs +71 -0
  16. package/dist/modules/index.cjs.map +1 -0
  17. package/dist/modules/index.d.cts +18 -0
  18. package/dist/modules/index.d.ts +18 -0
  19. package/dist/modules/index.js +34 -0
  20. package/dist/modules/index.js.map +1 -0
  21. package/dist/node-props-CeZ8Oshz.d.ts +161 -0
  22. package/dist/node-props-hKW-_KOU.d.cts +161 -0
  23. package/dist/nodes/generators/index.cjs +640 -0
  24. package/dist/nodes/generators/index.cjs.map +1 -0
  25. package/dist/nodes/generators/index.d.cts +38 -0
  26. package/dist/nodes/generators/index.d.ts +38 -0
  27. package/dist/nodes/generators/index.js +592 -0
  28. package/dist/nodes/generators/index.js.map +1 -0
  29. package/dist/nodes/groups/index.cjs +104 -0
  30. package/dist/nodes/groups/index.cjs.map +1 -0
  31. package/dist/nodes/groups/index.d.cts +7 -0
  32. package/dist/nodes/groups/index.d.ts +7 -0
  33. package/dist/nodes/groups/index.js +78 -0
  34. package/dist/nodes/groups/index.js.map +1 -0
  35. package/dist/nodes/index.cjs +2830 -0
  36. package/dist/nodes/index.cjs.map +1 -0
  37. package/dist/nodes/index.d.cts +16 -0
  38. package/dist/nodes/index.d.ts +16 -0
  39. package/dist/nodes/index.js +2840 -0
  40. package/dist/nodes/index.js.map +1 -0
  41. package/dist/nodes/modifiers/index.cjs +1593 -0
  42. package/dist/nodes/modifiers/index.cjs.map +1 -0
  43. package/dist/nodes/modifiers/index.d.cts +32 -0
  44. package/dist/nodes/modifiers/index.d.ts +32 -0
  45. package/dist/nodes/modifiers/index.js +1612 -0
  46. package/dist/nodes/modifiers/index.js.map +1 -0
  47. package/dist/nodes/output/index.cjs +210 -0
  48. package/dist/nodes/output/index.cjs.map +1 -0
  49. package/dist/nodes/output/index.d.cts +13 -0
  50. package/dist/nodes/output/index.d.ts +13 -0
  51. package/dist/nodes/output/index.js +181 -0
  52. package/dist/nodes/output/index.js.map +1 -0
  53. package/dist/nodes/selectors/index.cjs +136 -0
  54. package/dist/nodes/selectors/index.cjs.map +1 -0
  55. package/dist/nodes/selectors/index.d.cts +16 -0
  56. package/dist/nodes/selectors/index.d.ts +16 -0
  57. package/dist/nodes/selectors/index.js +113 -0
  58. package/dist/nodes/selectors/index.js.map +1 -0
  59. package/dist/nodes/transformers/index.cjs +477 -0
  60. package/dist/nodes/transformers/index.cjs.map +1 -0
  61. package/dist/nodes/transformers/index.d.cts +22 -0
  62. package/dist/nodes/transformers/index.d.ts +22 -0
  63. package/dist/nodes/transformers/index.js +459 -0
  64. package/dist/nodes/transformers/index.js.map +1 -0
  65. package/dist/properties-BxwtU6i9.d.cts +9 -0
  66. package/dist/properties-BxwtU6i9.d.ts +9 -0
  67. package/dist/templates/generators/index.cjs +1714 -0
  68. package/dist/templates/generators/index.cjs.map +1 -0
  69. package/dist/templates/generators/index.d.cts +89 -0
  70. package/dist/templates/generators/index.d.ts +89 -0
  71. package/dist/templates/generators/index.js +1723 -0
  72. package/dist/templates/generators/index.js.map +1 -0
  73. package/dist/templates/groups/index.cjs +1690 -0
  74. package/dist/templates/groups/index.cjs.map +1 -0
  75. package/dist/templates/groups/index.d.cts +11 -0
  76. package/dist/templates/groups/index.d.ts +11 -0
  77. package/dist/templates/groups/index.js +1711 -0
  78. package/dist/templates/groups/index.js.map +1 -0
  79. package/dist/templates/index.cjs +1758 -0
  80. package/dist/templates/index.cjs.map +1 -0
  81. package/dist/templates/index.d.cts +15 -0
  82. package/dist/templates/index.d.ts +15 -0
  83. package/dist/templates/index.js +1745 -0
  84. package/dist/templates/index.js.map +1 -0
  85. package/dist/templates/modifiers/index.cjs +1708 -0
  86. package/dist/templates/modifiers/index.cjs.map +1 -0
  87. package/dist/templates/modifiers/index.d.cts +71 -0
  88. package/dist/templates/modifiers/index.d.ts +71 -0
  89. package/dist/templates/modifiers/index.js +1720 -0
  90. package/dist/templates/modifiers/index.js.map +1 -0
  91. package/dist/templates/output/index.cjs +1696 -0
  92. package/dist/templates/output/index.cjs.map +1 -0
  93. package/dist/templates/output/index.d.cts +29 -0
  94. package/dist/templates/output/index.d.ts +29 -0
  95. package/dist/templates/output/index.js +1714 -0
  96. package/dist/templates/output/index.js.map +1 -0
  97. package/dist/templates/selectors/index.cjs +1692 -0
  98. package/dist/templates/selectors/index.cjs.map +1 -0
  99. package/dist/templates/selectors/index.d.cts +22 -0
  100. package/dist/templates/selectors/index.d.ts +22 -0
  101. package/dist/templates/selectors/index.js +1712 -0
  102. package/dist/templates/selectors/index.js.map +1 -0
  103. package/dist/templates/transformers/index.cjs +1698 -0
  104. package/dist/templates/transformers/index.cjs.map +1 -0
  105. package/dist/templates/transformers/index.d.cts +40 -0
  106. package/dist/templates/transformers/index.d.ts +40 -0
  107. package/dist/templates/transformers/index.js +1715 -0
  108. package/dist/templates/transformers/index.js.map +1 -0
  109. package/package.json +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/templates/selectors/index.ts","../../../src/templates/selectors/noise-blend-template.ts","../../../src/nodes/generators/noise-simplex-node.tsx","../../../src/modules/simplex-module.ts","../../../src/nodes/generators/position-const-node.tsx","../../../src/nodes/generators/position-grid-node.tsx","../../../src/nodes/modifiers/noise-normalize-node.tsx","../../../src/modules/normalize-noise-module.ts","../../../src/nodes/generators/noise-const-node.tsx","../../../src/nodes/generators/noise-billow-node.tsx","../../../src/layout/node-property-variables.tsx","../../../src/layout/node-value-input.tsx","../../../src/layout/node-property-input.tsx","../../../src/nodes/output/noise-logger-node.tsx","../../../src/nodes/output/noise-raw-texture-node.tsx","../../../src/nodes/generators/noise-checkerboard-node.tsx","../../../src/nodes/output/positions-logger-node.tsx","../../../src/nodes/generators/noise-cylinders-node.tsx","../../../src/nodes/generators/noise-perlin-node.tsx","../../../src/nodes/generators/noise-ridgedmulti-node.tsx","../../../src/nodes/generators/noise-spheres-node.tsx","../../../src/nodes/generators/noise-voronoi-node.tsx","../../../src/nodes/modifiers/noise-combine-node.tsx","../../../src/abstract/operations.ts","../../../src/nodes/modifiers/noise-clamp-node.tsx","../../../src/nodes/modifiers/noise-abs-node.tsx","../../../src/nodes/output/noise-output-node.tsx","../../../src/nodes/modifiers/noise-curve-node.tsx","../../../src/nodes/modifiers/noise-exponent-node.tsx","../../../src/nodes/modifiers/noise-invert-node.tsx","../../../src/nodes/modifiers/noise-scale-bias-node.tsx","../../../src/nodes/modifiers/noise-terrace-node.tsx","../../../src/nodes/selectors/noise-blend-node.tsx","../../../src/nodes/selectors/noise-select-node.tsx","../../../src/nodes/transformers/noise-displace-node.tsx","../../../src/nodes/transformers/noise-rotate-point-node.tsx","../../../src/nodes/transformers/noise-scale-point-node.tsx","../../../src/nodes/transformers/noise-translate-point-node.tsx","../../../src/nodes/transformers/noise-turbulence-node .tsx","../../../src/nodes/generators/variable-property-node.tsx","../../../src/nodes/modifiers/variable-combine-node.tsx","../../../src/nodes/generators/variable-value-node.tsx","../../../src/nodes/groups/node-module-group.tsx","../../../src/templates/generators/noise-checkerboard-template.ts","../../../src/templates/generators/noise-const-template.ts","../../../src/templates/generators/noise-cylinders-template.ts","../../../src/templates/generators/noise-perlin-template.ts","../../../src/templates/generators/noise-ridgedmulti-template.ts","../../../src/templates/generators/noise-simplex-template.ts","../../../src/templates/generators/noise-spheres-template.ts","../../../src/templates/generators/noise-voronoi-template.ts","../../../src/templates/generators/position-const-template.ts","../../../src/templates/generators/position-grid-template.ts","../../../src/templates/modifiers/noise-normalize-template.ts","../../../src/templates/output/noise-logger-template.ts","../../../src/templates/output/noise-raw-texture-template.ts","../../../src/templates/output/position-logger-template.ts","../../../src/templates/modifiers/noise-combine-template.ts","../../../src/templates/modifiers/noise-clamp-template.ts","../../../src/templates/modifiers/noise-abs-template.ts","../../../src/templates/output/noise-output-template.ts","../../../src/templates/modifiers/noise-curve-template.ts","../../../src/templates/modifiers/noise-exponent-template.ts","../../../src/templates/modifiers/noise-invert-template.ts","../../../src/templates/modifiers/noise-scalebias-template.ts","../../../src/templates/modifiers/noise-terrace-template.ts","../../../src/templates/selectors/noise-select-template.ts","../../../src/templates/transformers/noise-displace-template.ts","../../../src/templates/transformers/noise-rotate-point-template.ts","../../../src/templates/transformers/noise-scale-point-template.ts","../../../src/templates/transformers/noise-translate-point-template.ts","../../../src/templates/transformers/noise-turbulence-template.ts","../../../src/templates/generators/variable-property-template.ts","../../../src/templates/modifiers/variable-combine-template.ts","../../../src/templates/generators/variable-value-template.ts","../../../src/templates/groups/module-group-template.ts","../../../src/templates/generators/noise-billow-template.ts","../../../src/abstract/node-types.ts"],"sourcesContent":["export * from './noise-blend-template';\nexport * from './noise-select-template';\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseBlendNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBlend,\n removable: false,\n data: {\n title: 'Noise Blend',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo } from 'react';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\nimport { SimplexModule } from '../../modules/simplex-module';\n\nfunction NoiseSimplexNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new SimplexModule(), []);\n\n useEffect(() => {\n updateComputedData(id, { module });\n }, []);\n\n return <NodeContainer id={id} selected={selected} data={data} type={type} />;\n}\n\nexport default NoiseSimplexNode;\n","import Module from 'libnoise-ts/module/Module';\nimport { NoiseFunction3D, RandomFn, createNoise3D } from 'simplex-noise';\n\nexport class SimplexModule extends Module {\n private noise: NoiseFunction3D;\n\n constructor(random?: RandomFn) {\n super();\n this.noise = createNoise3D(random);\n }\n\n getValue(x: number, y: number, z: number): number {\n return this.noise(x, y, z);\n }\n}\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData, NodePositionData } from '../../abstract/node-props';\n\nfunction PositionConstNode({ id, selected, data, type }: NodeProps<Node<NodePositionData>>) {\n const position = data.position ?? { x: 0, y: 0, z: 0 };\n\n const [x, setX] = useState(position.x);\n const [y, setY] = useState(position.y);\n const [z, setZ] = useState(position.z);\n\n const updateNodeData = useUpdateNodeData<NodePositionData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedPositionsData>();\n\n useEffect(() => {\n const position = { x, y, z };\n\n updateNodeData(id, {\n position,\n });\n\n updateComputedData(id, {\n positions: [position],\n });\n }, [x, y, z]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n x: <NumberInput size=\"xs\" w={100} value={x} onChange={(e) => setX(Number(e))} />\n </Group>\n <Group>\n y: <NumberInput size=\"xs\" w={100} value={y} onChange={(e) => setY(Number(e))} />\n </Group>\n <Group>\n z: <NumberInput size=\"xs\" w={100} value={z} onChange={(e) => setZ(Number(e))} />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default PositionConstNode;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData, NodeGridData, Position } from '../../abstract/node-props';\n\nfunction PositionGridNode({ id, selected, data, type }: NodeProps<Node<NodeGridData>>) {\n const [x, setX] = useState(data.center?.x);\n const [y, setY] = useState(data.center?.y);\n const [z, setZ] = useState(data.center?.z);\n\n const [radius, setRadius] = useState(data.radius);\n\n const updateNodeData = useUpdateNodeData<NodeGridData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedPositionsData>();\n\n useEffect(() => {\n updateNodeData(id, {\n center: { x, y, z },\n });\n }, [x, y, z]);\n\n useEffect(() => {\n updateNodeData(id, {\n radius,\n });\n }, [radius]);\n\n useEffect(() => {\n const positions: Position[] = [];\n\n for (let i = -radius; i < radius; i++) {\n for (let j = -radius; j < radius; j++) {\n positions.push({ x: x + i, y: y + j, z });\n }\n }\n\n updateComputedData(id, {\n positions,\n });\n }, [x, y, z, radius]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n x: <NumberInput size=\"xs\" w={100} value={x} onChange={(e) => setX(Number(e))} />\n </Group>\n <Group>\n y: <NumberInput size=\"xs\" w={100} value={y} onChange={(e) => setY(Number(e))} />\n </Group>\n <Group>\n z: <NumberInput size=\"xs\" w={100} value={z} onChange={(e) => setZ(Number(e))} />\n </Group>\n <Group>\n r: <NumberInput size=\"xs\" w={100} value={radius} onChange={(e) => setRadius(Number(e))} />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default PositionGridNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeNormalizeNoiseData } from '../../abstract/node-props';\nimport { NormalizeNoiseModule } from '../../modules/normalize-noise-module';\n\nfunction NoiseNormalizeNode({ id, selected, data, type }: NodeProps<Node<NodeNormalizeNoiseData>>) {\n const [intervalStart, setIntervalStart] = useState(data.intervalStart);\n const [intervalEnd, setIntervalEnd] = useState(data.intervalEnd);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeNormalizeNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const source = incoming[0].module;\n const module = new NormalizeNoiseModule(source, intervalStart, intervalEnd);\n\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { intervalStart, intervalEnd });\n }, [incoming, intervalStart, intervalEnd]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput\n size=\"xs\"\n w={100}\n value={intervalStart}\n onChange={(e) => setIntervalStart(Number(e))}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n value={intervalEnd}\n onChange={(e) => setIntervalEnd(Number(e))}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseNormalizeNode;\n","import Module from 'libnoise-ts/module/Module';\nimport ModifierModule from 'libnoise-ts/module/modifier';\n\nexport class NormalizeNoiseModule extends ModifierModule {\n constructor(\n source: Module,\n public lowerBound: number,\n public upperBound: number\n ) {\n super(source);\n }\n\n getValue(x: number, y: number, z: number): number {\n return normalize(this.sourceModule.getValue(x, y, z), this.lowerBound, this.upperBound);\n }\n}\n\nfunction normalize(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n}\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { useUpdateNodeComputedData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { Const } from 'libnoise-ts/module/generator';\nimport { ComputedModuleData, NodeConstNoiseData } from '../../abstract/node-props';\n\nfunction NoiseConstNode({ id, selected, data, type }: NodeProps<Node<NodeConstNoiseData>>) {\n const [min, setMin] = useState(data.min);\n const [max, setMax] = useState(data.max);\n const [noise, setNoise] = useState(data.noise);\n\n const updateNodeData = useUpdateNodeData<NodeConstNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Const(), []);\n\n useEffect(() => {\n module.value = noise;\n\n updateNodeData(id, { noise, min, max });\n updateComputedData(id, { module });\n }, [noise, min, max, module, updateNodeData, id, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput size=\"xs\" w={100} value={min} onChange={(e) => setMin(Number(e))} />\n <NumberInput size=\"xs\" w={100} value={max} onChange={(e) => setMax(Number(e))} />\n </Group>\n <Group>\n noise:\n <NumberInput\n size=\"xs\"\n value={noise}\n onChange={(e) => setNoise(Number(e))}\n max={max}\n min={min}\n step={0.1}\n />\n </Group>\n </Stack>\n </NodeContainer>\n );\n}\n\nexport default NoiseConstNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Billow } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\nimport { ComputedModuleData, NodeFBMNoiseData } from '../../abstract/node-props';\n\nfunction NoiseBillowNode({ id, selected, data, type }: NodeProps<Node<NodeFBMNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Billow(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n\n updateComputedData(id, { module });\n },\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables\n data={data}\n except={nodeDataPropertyExcept}\n nodeId={id}\n onPropertiesChange={onPropertiesChange}\n />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseBillowNode;\n","import { useIncomingNodeData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Group, Stack } from '@mantine/core';\nimport { getObjectKeys } from '@awesome-flow/core/utils';\nimport { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { NodeVariablePropertyData } from '../abstract/node-props';\nimport { PropertyValue, ValueType } from '../abstract/properties';\nimport NodePropertyInput from './node-property-input';\n\nexport type NodeTrackVariablesProps = {\n nodeId: string;\n data: Record<string, any>;\n except?: Set<string>;\n onPropertiesChange?: (properties: Record<string, PropertyValue>) => void;\n};\n\nfunction NodePropertyVariables({\n data,\n nodeId,\n onPropertiesChange,\n except = nodeDataPropertyExcept,\n}: Readonly<NodeTrackVariablesProps>) {\n const [properties, setProperties] = useState<Record<string, PropertyValue>>(() => {\n const keys = getObjectKeys(data, except);\n\n const dataProps = {};\n\n for (const key of keys) {\n dataProps[key] = {\n name: key,\n value: data[key],\n } satisfies PropertyValue;\n }\n\n return dataProps;\n });\n\n const updateNodeData = useUpdateNodeData();\n const incoming = useIncomingNodeData<NodeVariablePropertyData>(nodeId);\n\n const resetAllDisabled = useCallback(() => {\n const keys = Object.keys(properties);\n\n keys.forEach((k) => {\n properties[k].disabled = false;\n });\n\n setProperties(properties);\n }, []);\n\n const updatePropertyValue = useCallback((name: string, value: ValueType, disabled?: boolean) => {\n let property = properties[name];\n\n if (property) {\n property.value = value;\n } else {\n property = {\n name,\n value,\n };\n }\n\n property.disabled = disabled;\n\n setProperties({ ...properties, [name]: property });\n updateNodeData(nodeId, { [name]: value });\n }, []);\n\n useEffect(() => {\n resetAllDisabled();\n\n if (incoming?.length) {\n for (const connection of incoming) {\n if (connection.property && properties[connection.property.name] !== undefined) {\n updatePropertyValue(connection.property.name, connection.property.value, true);\n }\n }\n }\n }, [incoming]);\n\n useEffect(() => {\n if (onPropertiesChange) {\n onPropertiesChange(properties);\n }\n }, [onPropertiesChange, properties]);\n\n const nodes = useMemo(() => {\n return Object.keys(properties).map((key) => {\n const property = properties[key];\n\n return (\n <Group key={key}>\n {property.name}:<NodePropertyInput property={property} onChange={updatePropertyValue} />\n </Group>\n );\n });\n }, [properties, updatePropertyValue]);\n\n return <Stack>{nodes}</Stack>;\n}\n\nexport default NodePropertyVariables;\n","import { Input, NumberInput, Switch } from '@mantine/core';\nimport { ValueType } from '../abstract/properties';\n\nexport type NodeValueInputProps = {\n value: ValueType;\n disabled?: boolean;\n step?: number;\n onChange: (value: ValueType) => void;\n};\n\nfunction NodeValueInput({ value, disabled, step, onChange }: Readonly<NodeValueInputProps>) {\n if (value === undefined || value === null) {\n return <></>;\n }\n\n switch (typeof value) {\n case 'boolean': {\n return (\n <Switch\n checked={value}\n disabled={disabled}\n onChange={(e) => onChange(e.currentTarget.checked)}\n />\n );\n }\n\n case 'number': {\n return (\n <NumberInput value={value} disabled={disabled} step={step} onChange={(e) => onChange(e)} />\n );\n }\n\n case 'string': {\n return (\n <Input\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.currentTarget.value)}\n />\n );\n }\n\n default:\n throw new Error(`Unknown input node for value of type: ${typeof value} (${value})`);\n }\n}\n\nexport default NodeValueInput;\n","import { ValueType, PropertyValue } from '../abstract/properties';\nimport NodeValueInput from './node-value-input';\n\nexport type NodePropertyInputProps = {\n property: PropertyValue;\n onChange: (name: string, value: ValueType) => void;\n};\n\nfunction NodePropertyInput({ property, onChange }: Readonly<NodePropertyInputProps>) {\n if (!property) {\n return <></>;\n }\n\n return (\n <NodeValueInput\n value={property.value}\n disabled={property.disabled}\n step={property.step}\n onChange={(value) => onChange(property.name, value)}\n />\n );\n}\n\nexport default NodePropertyInput;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedNoiseData } from '../../abstract/node-props';\n\nfunction NoiseLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {noise?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {noise?.map((v, i) => (\n <Text key={i}>\n {v.position?.x}:{v.position?.y}:{v.position?.z}: {v.value}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Group, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedNoiseData, ComputedNoiseTextureData } from '../../abstract/node-props';\n\nfunction NoiseRawTextureNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseTextureData>();\n\n const [dataLength, setDataLength] = useState(0);\n const [resolution, setResolution] = useState(0);\n\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n useEffect(() => {\n if (noise?.length) {\n const size = Math.ceil(Math.sqrt(noise.length));\n\n const colors = noise.map((n) => [n.value * 255, n.value * 255, n.value * 255, 255]).flat();\n const dataArray = new Uint8Array(size * size * 4);\n dataArray.set(colors);\n\n setResolution(size);\n setDataLength(dataArray.length);\n\n updateComputedData(id, { textureData: dataArray, textureResolution: size });\n }\n }, [noise]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Resolution: {resolution}x{resolution}\n </Group>\n <Group>Input Length: {noise?.length || 0}</Group>\n <Group>\n Output Length ({resolution}*{resolution}*4): {dataLength}\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRawTextureNode;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo } from 'react';\nimport { Checkerboard } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseCheckerboardNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new Checkerboard(), []);\n\n useEffect(() => {\n updateComputedData(id, { module });\n }, [id, module, updateComputedData]);\n\n return <NodeContainer id={id} selected={selected} data={data} type={type} />;\n}\n\nexport default NoiseCheckerboardNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData } from '../../abstract/node-props';\n\nfunction PositionsLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedPositionsData>(id);\n\n const positions = useMemo(() => {\n return incoming?.map((p) => p.positions).flat();\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {positions?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {positions?.map((v, i) => (\n <Text key={i}>\n {v.x}:{v.y}:{v.z}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default PositionsLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Cylinders } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeCylindersNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoiseCylindersNode({ id, selected, data, type }: NodeProps<Node<NodeCylindersNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Cylinders(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n updateComputedData(id, { module });\n },\n\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCylindersNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Perlin } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeFBMNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoisePerlinNode({ id, selected, data, type }: NodeProps<Node<NodeFBMNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const module = useMemo(() => new Perlin(), []);\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => {\n module[k] = properties[k].value;\n });\n\n updateComputedData(id, { module });\n },\n [id, module, updateComputedData]\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoisePerlinNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { RidgedMulti } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeRidgedNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoiseRidgedMultiNode({ id, selected, data, type }: NodeProps<Node<NodeRidgedNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new RidgedMulti(), []);\n\n const onPropertiesChange = useCallback((properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => (module[k] = properties[k].value));\n updateComputedData(id, { module });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRidgedMultiNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useMemo } from 'react';\nimport { Spheres } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeSpheresNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoiseSpheresNode({ id, selected, data, type }: NodeProps<Node<NodeSpheresNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const module = useMemo(() => new Spheres(), []);\n\n const onPropertiesChange = useCallback((properties: Record<string, PropertyValue>) => {\n Object.keys(properties).forEach((k) => (module[k] = properties[k].value));\n updateComputedData(id, { module });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseSpheresNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback } from 'react';\nimport { Voronoi } from 'libnoise-ts/module/generator';\nimport { useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedModuleData, NodeVoronoiNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoiseVoronoiNode({ id, selected, data, type }: NodeProps<Node<NodeVoronoiNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onPropertiesChange = useCallback(\n (properties: Record<string, PropertyValue<number & boolean>>) => {\n const module = new Voronoi(\n properties.frequency.value,\n properties.displacement.value,\n properties.distance.value,\n properties.seed.value\n );\n\n updateComputedData(id, { module });\n },\n []\n );\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseVoronoiNode;\n","import { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ReactNode, useCallback, useEffect } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport {\n IconAsterisk,\n IconChevronLeft,\n IconChevronRight,\n IconChevronUp,\n IconPlus,\n} from '@tabler/icons-react';\nimport { ComputedModuleData, NodeCombineNoiseData } from '../../abstract/node-props';\nimport { NoiseCombineType, noiseCombineModuleMap } from '../../abstract/operations';\n\nconst options: Record<NoiseCombineType, ReactNode | string> = {\n add: <IconPlus />,\n min: <IconChevronLeft />,\n max: <IconChevronRight />,\n multiply: <IconAsterisk />,\n power: <IconChevronUp />,\n};\n\nfunction NoiseCombineNode({ id, selected, data, type }: NodeProps<Node<NodeCombineNoiseData>>) {\n const updateNodeData = useUpdateNodeData<NodeCombineNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n useEffect(() => {\n const ModuleFactory = noiseCombineModuleMap[data.operation];\n\n if (incoming?.length > 1) {\n const module = new ModuleFactory(incoming[0].module, incoming[1].module);\n updateComputedData(id, { module });\n }\n }, [data.operation, incoming]);\n\n const onChange = useCallback((operation: NoiseCombineType) => {\n updateNodeData(id, { operation });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeCombobox options={options} selected={data.operation} onChange={onChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCombineNode;\n","import { Add, Max, Min, Multiply, Power } from 'libnoise-ts/module/combiner';\n\nexport enum NoiseCombineType {\n add = 'add',\n max = 'max',\n min = 'min',\n multiply = 'multiply',\n power = 'power',\n}\n\nexport enum VariableCombineType {\n add = 'add',\n divide = 'divide',\n max = 'max',\n min = 'min',\n multiply = 'multiply',\n power = 'power',\n}\n\nexport const noiseCombineModuleMap = {\n [NoiseCombineType.add]: Add,\n [NoiseCombineType.max]: Max,\n [NoiseCombineType.min]: Min,\n [NoiseCombineType.multiply]: Multiply,\n [NoiseCombineType.power]: Power,\n};\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Clamp } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeClampNoiseData } from '../../abstract/node-props';\n\nfunction NoiseClampNode({ id, selected, data, type }: NodeProps<Node<NodeClampNoiseData>>) {\n const [lowerBound, setLowerBound] = useState(data.lowerBound);\n const [upperBound, setUpperBound] = useState(data.upperBound);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeClampNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new Clamp(incoming[0].module, lowerBound, upperBound);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { lowerBound, upperBound });\n }, [incoming, lowerBound, upperBound]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n <NumberInput\n size=\"xs\"\n w={100}\n value={lowerBound}\n onChange={(e) => setLowerBound(Number(e))}\n step={0.1}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n value={upperBound}\n onChange={(e) => setUpperBound(Number(e))}\n step={0.1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseClampNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Abs } from 'libnoise-ts/module/modifier';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseAbsNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Abs(incoming[0].module);\n updateComputedData(id, { module });\n }\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseAbsNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Box, Group, LoadingOverlay, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useEffect, useState } from 'react';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport {\n ComputedModuleData,\n ComputedNoiseData,\n ComputedPositionsData,\n PositionNoiseValue,\n} from '../../abstract/node-props';\n\nfunction NoiseOutputNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const [generating, setGenerating] = useState<boolean>(false);\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseData>();\n\n const incomingModules = useIncomingComputedData<ComputedModuleData>(id, NoiseHandleFlag.module);\n\n const incomingPositions = useIncomingComputedData<ComputedPositionsData>(\n id,\n NoiseHandleFlag.position\n );\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module) {\n setGenerating(true);\n }\n }\n }, [incomingModules, incomingPositions]);\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module && generating) {\n const noise: PositionNoiseValue[] = [];\n\n for (const input of incomingPositions) {\n for (const position of input.positions) {\n const value = module.getValue(position.x, position.y, position.z);\n\n noise.push({\n position,\n value,\n });\n }\n }\n\n console.log('SET COMPUTED DATA');\n updateComputedData(id, { noise, module });\n setGenerating(false);\n }\n }\n }, [generating]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Box pos=\"relative\">\n <LoadingOverlay\n visible={generating}\n zIndex={1000}\n overlayProps={{ radius: 'sm', blur: 2 }}\n />\n <Stack>\n <Group>Position Inputs: {incomingPositions?.length}</Group>\n <Group>Module Inputs: {incomingModules?.length}</Group>\n </Stack>\n </Box>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseOutputNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ActionIcon, Button, Group, NumberInput, Space } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { FORM_INDEX, useForm } from '@mantine/form';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Curve } from 'libnoise-ts/module/modifier';\nimport { Tuple } from 'libnoise-ts/util';\nimport { IconX } from '@tabler/icons-react';\nimport { randomId } from '@mantine/hooks';\nimport { NodeState } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData, ControlPoint, NodeCurveNoiseData } from '../../abstract/node-props';\n\nfunction NoiseCurveNode({ id, selected, data, type }: NodeProps<Node<NodeCurveNoiseData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeCurveNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const [values, setValues] = useState([]);\n\n const form = useForm<{ points: (ControlPoint & { key: string })[] }>({\n mode: 'uncontrolled',\n initialValues: {\n points: [],\n },\n validateInputOnChange: [`points.${FORM_INDEX}.input`],\n clearInputErrorOnChange: true,\n validate: {\n points: {\n input: (value, values) => {\n const counts: Record<number, number> = {};\n\n values.points.forEach((x) => {\n counts[x.input] = (counts[x.input] || 0) + 1;\n });\n\n return counts[value] > 1;\n },\n },\n },\n onValuesChange: useCallback((values) => {\n if (form.isValid()) {\n const points = values.points.map((v) => ({ input: v.input, output: v.output }));\n setValues(points);\n updateNodeData(id, { points });\n }\n\n form.validate();\n }, []),\n });\n\n useEffect(() => {\n const points = data.points?.length\n ? data.points.map((v) => ({ input: v.input, output: v.output, key: randomId() }))\n : [1, 2, 3, 4].map(() => ({ input: 0, output: 0, key: randomId() }));\n\n form.initialize({ points });\n }, []);\n\n useEffect(() => {\n if (incoming?.length && values?.length >= 4) {\n const module = new Curve(\n incoming[0].module,\n values.map((p) => new Tuple(p.input, p.output))\n );\n\n updateComputedData(id, { module });\n }\n }, [values, incoming]);\n\n const fields = form.getValues().points.map((item, index) => (\n <Group mt=\"xs\" key={item.key}>\n <NumberInput\n size=\"xs\"\n w={100}\n placeholder=\"Input Value\"\n key={form.key(`points.${index}.input`)}\n {...form.getInputProps(`points.${index}.input`)}\n step={0.1}\n />\n <NumberInput\n size=\"xs\"\n w={100}\n placeholder=\"Output Value\"\n key={form.key(`points.${index}.output`)}\n {...form.getInputProps(`points.${index}.output`)}\n step={0.1}\n />\n {data.state === NodeState.edit && values.length > 4 && (\n <ActionIcon\n color=\"red\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => form.removeListItem('points', index)}\n >\n <IconX size=\"1rem\" />\n </ActionIcon>\n )}\n </Group>\n ));\n\n return (\n <NodeContainer id={id} selected={selected} type={type} data={data}>\n {fields}\n {data.state === NodeState.edit && (\n <>\n <Space h={10} />\n <Button\n variant=\"outline\"\n size=\"xs\"\n fullWidth\n onClick={() => form.insertListItem('points', { input: 0, output: 0, key: randomId() })}\n >\n Add control point\n </Button>\n </>\n )}\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseCurveNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Exponent } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeExponentNoiseData } from '../../abstract/node-props';\n\nfunction NoiseExponentNode({ id, selected, data, type }: NodeProps<Node<NodeExponentNoiseData>>) {\n const [exponent, setExponent] = useState(data.exponent);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeExponentNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Exponent(incoming[0].module, exponent);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { exponent });\n }, [incoming, exponent]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Exponent:\n <NumberInput\n size=\"xs\"\n value={exponent}\n onChange={(e) => setExponent(Number(e))}\n step={0.1}\n // min={1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseExponentNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Invert } from 'libnoise-ts/module/modifier';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseInvertNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new Invert(incoming[0].module);\n updateComputedData(id, { module });\n }\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseInvertNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { ScaleBias } from 'libnoise-ts/module/modifier';\nimport { ComputedModuleData, NodeScaleBiasNoiseData } from '../../abstract/node-props';\n\nfunction NoiseScaleBiasNode({ id, selected, data, type }: NodeProps<Node<NodeScaleBiasNoiseData>>) {\n const [scale, setScale] = useState(data.scale);\n const [bias, setBias] = useState(data.bias);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeScaleBiasNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 0) {\n const module = new ScaleBias(incoming[0].module, scale, bias);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { scale, bias });\n }, [incoming, scale, bias]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={scale}\n onChange={(e) => setScale(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Bias:\n <NumberInput\n size=\"xs\"\n w={100}\n value={bias}\n onChange={(e) => setBias(Number(e))}\n step={0.1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseScaleBiasNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ActionIcon, Button, Group, NumberInput, Space } from '@mantine/core';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { FORM_INDEX, useForm } from '@mantine/form';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Terrace } from 'libnoise-ts/module/modifier';\nimport { IconX } from '@tabler/icons-react';\nimport { randomId } from '@mantine/hooks';\nimport { NodeState } from '@awesome-flow/core/abstract';\nimport { ComputedModuleData, NodeTerraceNoiseData } from '../../abstract/node-props';\n\nfunction NoiseTerraceNode({ id, selected, data, type }: NodeProps<Node<NodeTerraceNoiseData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeTerraceNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const [values, setValues] = useState<number[]>([]);\n\n const form = useForm<{ points: { value: number; key: string }[] }>({\n mode: 'uncontrolled',\n initialValues: {\n points: [],\n },\n validateInputOnChange: [`points.${FORM_INDEX}.input`],\n clearInputErrorOnChange: true,\n onValuesChange: useCallback((values) => {\n if (form.isValid()) {\n const points = values.points.map((v) => v.value);\n setValues(points);\n updateNodeData(id, { points });\n }\n\n form.validate();\n }, []),\n });\n\n useEffect(() => {\n const points = data.points?.length\n ? data.points.map((v) => ({ value: v, key: randomId() }))\n : [1, 2].map(() => ({ value: 0, key: randomId() }));\n\n form.initialize({ points });\n }, []);\n\n useEffect(() => {\n if (incoming?.length && values?.length >= 2) {\n const module = new Terrace(incoming[0].module, values);\n updateComputedData(id, { module });\n }\n }, [values, incoming]);\n\n const fields = form.getValues().points.map((item, index) => (\n <Group mt=\"xs\" key={item.key}>\n <NumberInput\n size=\"xs\"\n placeholder=\"Input Value\"\n key={form.key(`points.${index}.value`)}\n {...form.getInputProps(`points.${index}.value`)}\n step={0.1}\n />\n {data.state === NodeState.edit && values.length > 2 && (\n <ActionIcon\n color=\"red\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => form.removeListItem('points', index)}\n >\n <IconX size=\"1rem\" />\n </ActionIcon>\n )}\n </Group>\n ));\n\n return (\n <NodeContainer id={id} selected={selected} type={type} data={data}>\n {fields}\n {data.state === NodeState.edit && (\n <>\n <Space h={10} />\n <Button\n variant=\"outline\"\n size=\"xs\"\n fullWidth\n onClick={() => form.insertListItem('points', { value: 0, key: randomId() })}\n >\n Add control point\n </Button>\n </>\n )}\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTerraceNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Blend } from 'libnoise-ts/module/selector';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { Group } from '@mantine/core';\nimport { ComputedModuleData } from '../../abstract/node-props';\n\nfunction NoiseBlendNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 2) {\n const module = new Blend(incoming[0].module, incoming[1].module, incoming[2].module);\n updateComputedData(id, { module });\n }\n }, [id, incoming, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Group>Modules: {incoming?.length}</Group>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseBlendNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Select } from 'libnoise-ts/module/selector';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { ComputedModuleData, NodeSelectNoiseData } from '../../abstract/node-props';\n\nfunction NoiseSelectNode({ id, selected, data, type }: NodeProps<Node<NodeSelectNoiseData>>) {\n const [edgeFalloff, setEdgeFalloff] = useState(data.edgeFalloff);\n const [lowerBound, setLowerBound] = useState(data.lowerBound);\n const [upperBound, setUpperBound] = useState(data.upperBound);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeSelectNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length > 2) {\n const module = new Select(\n incoming[0].module,\n incoming[1].module,\n incoming[2].module,\n edgeFalloff,\n lowerBound,\n upperBound\n );\n\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { edgeFalloff, lowerBound, upperBound });\n }, [incoming, edgeFalloff, lowerBound, upperBound, updateNodeData, id, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Edge Falloff:\n <NumberInput\n size=\"xs\"\n w={100}\n value={edgeFalloff}\n onChange={(e) => setEdgeFalloff(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Lower Bound:\n <NumberInput\n size=\"xs\"\n w={100}\n value={lowerBound}\n onChange={(e) => setLowerBound(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>\n Upper Bound:\n <NumberInput\n size=\"xs\"\n w={100}\n value={upperBound}\n onChange={(e) => setUpperBound(Number(e))}\n step={0.1}\n />\n </Group>\n <Group>Modules: {incoming?.length}</Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseSelectNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo } from 'react';\nimport { useIncomingHandleData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Displace } from 'libnoise-ts/module/transformer';\nimport { Badge, Stack } from '@mantine/core';\nimport { ComputedModuleData, NodeDisplaceNoiseData } from '../../abstract/node-props';\nimport { DisplacementModule } from '../../abstract/handle-types';\n\nfunction NoiseDisplaceNode({ id, selected, data, type }: NodeProps<Node<NodeDisplaceNoiseData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n const incomingHandleData = useIncomingHandleData<ComputedModuleData>(id, data.handles);\n\n const { sourceModule, xModule, yModule, zModule } = useMemo(() => {\n return {\n sourceModule: incomingHandleData[DisplacementModule.sourceModule],\n xModule: incomingHandleData[DisplacementModule.xModule],\n yModule: incomingHandleData[DisplacementModule.yModule],\n zModule: incomingHandleData[DisplacementModule.zModule],\n };\n }, [incomingHandleData]);\n\n useEffect(() => {\n if (sourceModule && xModule && yModule && zModule) {\n const module = new Displace(\n sourceModule[0].module,\n xModule[0].module,\n yModule[0].module,\n zModule[0].module\n );\n\n updateComputedData(id, { module });\n }\n }, [id, updateComputedData, sourceModule, xModule, yModule, zModule]);\n\n const { sourceColor, xColor, yColor, zColor } = useMemo(() => {\n return {\n sourceColor: sourceModule ? 'green' : 'orange',\n xColor: xModule ? 'green' : 'orange',\n yColor: yModule ? 'green' : 'orange',\n zColor: zModule ? 'green' : 'orange',\n };\n }, [sourceModule, xModule, yModule, zModule]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack align=\"center\">\n <Badge color={sourceColor}>Source Module</Badge>\n <Badge color={xColor}>X Module</Badge>\n <Badge color={yColor}>Y Module</Badge>\n <Badge color={zColor}>Z Module</Badge>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseDisplaceNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { RotatePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeRotatePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseRotatePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeRotatePointNoiseData>>) {\n const [xAngle, setXAngle] = useState(data.xAngle);\n const [yAngle, setYAngle] = useState(data.yAngle);\n const [zAngle, setZAngle] = useState(data.zAngle);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeRotatePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new RotatePoint(incoming[0].module, xAngle, yAngle, zAngle);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { xAngle, yAngle, zAngle });\n }, [id, updateComputedData, updateNodeData, incoming, xAngle, yAngle, zAngle]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n X Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={xAngle}\n onChange={(e) => setXAngle(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Y Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={yAngle}\n onChange={(e) => setYAngle(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Z Angle:\n <NumberInput\n size=\"xs\"\n w={100}\n value={zAngle}\n onChange={(e) => setZAngle(Number(e))}\n step={0.01}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRotatePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { ScalePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeScalePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseScalePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeScalePointNoiseData>>) {\n const [xScale, setXScale] = useState(data.xScale);\n const [yScale, setYScale] = useState(data.yScale);\n const [zScale, setZScale] = useState(data.zScale);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeScalePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new ScalePoint(incoming[0].module, xScale, yScale, zScale);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { xScale, yScale, zScale });\n }, [id, incoming, updateComputedData, updateNodeData, xScale, yScale, zScale]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n X Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={xScale}\n onChange={(e) => setXScale(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Y Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={yScale}\n onChange={(e) => setYScale(Number(e))}\n step={0.01}\n />\n </Group>\n <Group>\n Z Scale:\n <NumberInput\n size=\"xs\"\n w={100}\n value={zScale}\n onChange={(e) => setZScale(Number(e))}\n step={0.01}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseScalePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useState } from 'react';\nimport {\n useIncomingComputedData,\n useUpdateNodeComputedData,\n useUpdateNodeData,\n} from '@awesome-flow/core/hooks';\nimport { Group, NumberInput, Stack } from '@mantine/core';\nimport { TranslatePoint } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeTranslatePointNoiseData } from '../../abstract/node-props';\n\nfunction NoiseTranslatePointNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeTranslatePointNoiseData>>) {\n const [translateX, setTranslateX] = useState(data.translateX);\n const [translateY, setTranslateY] = useState(data.translateY);\n const [translateZ, setTranslateZ] = useState(data.translateZ);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n\n const updateNodeData = useUpdateNodeData<NodeTranslatePointNoiseData>();\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new TranslatePoint(incoming[0].module, translateX, translateY, translateZ);\n updateComputedData(id, { module });\n }\n\n updateNodeData(id, { translateX, translateY, translateZ });\n }, [id, incoming, translateX, translateY, translateZ, updateComputedData, updateNodeData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Translate X:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateX}\n onChange={(e) => setTranslateX(Number(e))}\n step={1}\n />\n </Group>\n <Group>\n Translate Y:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateY}\n onChange={(e) => setTranslateY(Number(e))}\n step={1}\n />\n </Group>\n <Group>\n Translate Z:\n <NumberInput\n size=\"xs\"\n w={100}\n value={translateZ}\n onChange={(e) => setTranslateZ(Number(e))}\n step={1}\n />\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTranslatePointNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Turbulence } from 'libnoise-ts/module/transformer';\nimport { ComputedModuleData, NodeTurbulenceNoiseData } from '../../abstract/node-props';\nimport { PropertyValue } from '../../abstract/properties';\nimport NodePropertyVariables from '../../layout/node-property-variables';\n\nfunction NoiseTurbulenceNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeTurbulenceNoiseData>>) {\n const [properties, setProperties] = useState(null);\n\n const incoming = useIncomingComputedData<ComputedModuleData>(id);\n const updateComputedData = useUpdateNodeComputedData<ComputedModuleData>();\n\n const onPropertiesChange = useCallback((props: Record<string, PropertyValue<number>>) => {\n setProperties(props);\n }, []);\n\n useEffect(() => {\n if (incoming?.length) {\n const module = new Turbulence(\n incoming[0].module,\n properties.frequency.value,\n properties.power.value,\n properties.roughness.value,\n properties.seed.value\n );\n updateComputedData(id, { module });\n }\n }, [id, incoming, properties, updateComputedData]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodePropertyVariables data={data} nodeId={id} onPropertiesChange={onPropertiesChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseTurbulenceNode;\n","import { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Stack } from '@mantine/core';\nimport { useIncomingNodeData, useOutgoingNodes, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { getObjectPropertyMap } from '@awesome-flow/core/utils';\nimport { nodeDataPropertyExcept } from '@awesome-flow/core/abstract';\nimport { NodeVariablePropertyData, NodeVariableValueData } from '../../abstract/node-props';\nimport { PropertyValue, ValueType } from '../../abstract/properties';\nimport NodePropertyInput from '../../layout/node-property-input';\n\nfunction VariablePropertyNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeVariablePropertyData>>) {\n const [options, setOptions] = useState<Record<string, number>>({});\n const [selectedProperty, setSelectedProperty] = useState<PropertyValue>(data.property);\n\n const updateNodeData = useUpdateNodeData<NodeVariablePropertyData>();\n const outgoing = useOutgoingNodes<NodeVariablePropertyData>(id);\n const incoming = useIncomingNodeData<NodeVariableValueData>(id);\n\n useEffect(() => {\n if (outgoing?.length) {\n // todo: only show common properties from all outgoing connections\n const { data } = outgoing[0];\n const properties = getObjectPropertyMap(data, nodeDataPropertyExcept);\n\n setOptions(properties);\n\n if (!selectedProperty) {\n const keys = Object.keys(properties);\n\n if (keys.length) {\n setSelectedProperty({\n name: keys[0],\n value: properties[keys[0]],\n });\n }\n }\n } else {\n setSelectedProperty(null);\n }\n }, [outgoing]);\n\n useEffect(() => {\n if (!incoming?.length && selectedProperty?.disabled) {\n setSelectedProperty({ ...selectedProperty, disabled: false });\n } else if (incoming?.length && selectedProperty) {\n const incomingValue = incoming[0].value;\n\n if (incomingValue !== undefined && incomingValue !== null) {\n setSelectedProperty({\n name: selectedProperty.name,\n value: incomingValue,\n disabled: true,\n });\n }\n }\n }, [incoming]);\n\n useEffect(() => {\n if (selectedProperty) {\n updateNodeData(id, { property: selectedProperty });\n }\n }, [selectedProperty]);\n\n const onPropertyChange = useCallback(\n (selected: string) => {\n setSelectedProperty({\n name: selected,\n value: options[selected],\n });\n },\n [options]\n );\n\n const onValueChange = useCallback((name: string, value: ValueType) => {\n setSelectedProperty({\n name,\n value,\n });\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack align=\"center\">\n <NodeCombobox\n options={options}\n onChange={onPropertyChange}\n selected={selectedProperty?.name}\n hideListValues\n />\n <NodePropertyInput property={selectedProperty} onChange={onValueChange} />\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} />\n </NodeContainer>\n );\n}\n\nexport default VariablePropertyNode;\n","import { NodeCombobox, NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport { useIncomingNodeData, useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport {\n IconAsterisk,\n IconChevronLeft,\n IconChevronRight,\n IconChevronUp,\n IconDivide,\n IconPlus,\n} from '@tabler/icons-react';\nimport { NodeCombineVariableData, NodeVariableValueData } from '../../abstract/node-props';\nimport { VariableCombineType } from '../../abstract/operations';\nimport { ValueType } from '../../abstract/properties';\nimport { NodeValueInput } from '../../layout';\n\nconst options: Record<VariableCombineType, ReactNode | string> = {\n add: <IconPlus />,\n divide: <IconDivide />,\n min: <IconChevronLeft />,\n max: <IconChevronRight />,\n multiply: <IconAsterisk />,\n power: <IconChevronUp />,\n};\n\nfunction VariableCombineNode({\n id,\n selected,\n data,\n type,\n}: NodeProps<Node<NodeCombineVariableData>>) {\n const [operation, setOperation] = useState(data.operation);\n const [value, setValue] = useState(data.value);\n\n const updateNodeData = useUpdateNodeData<NodeCombineVariableData>();\n const incoming = useIncomingNodeData<NodeVariableValueData>(id);\n\n useEffect(() => {\n if (incoming?.length > 1) {\n const result = getOperationResult(operation, incoming[0].value, incoming[1].value);\n setValue(result);\n updateNodeData(id, { value: result });\n }\n }, [operation, incoming]);\n\n const onChange = useCallback((op: VariableCombineType) => {\n updateNodeData(id, { operation: op });\n setOperation(op);\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeCombobox options={options} selected={operation} onChange={onChange} />\n <NodeValueInput value={value} onChange={() => {}} disabled />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nfunction getOperationResult(\n operation: VariableCombineType,\n value1: ValueType,\n value2: ValueType\n): ValueType {\n switch (operation) {\n case VariableCombineType.add:\n return Number(value1) + Number(value2);\n\n case VariableCombineType.divide:\n return Number(value1) / (Number(value2) || 1);\n\n case VariableCombineType.max:\n return Number(value1) > Number(value2) ? value1 : value2;\n\n case VariableCombineType.min:\n return Number(value1) < Number(value2) ? value1 : value2;\n\n case VariableCombineType.multiply:\n return Number(value1) * Number(value2);\n\n case VariableCombineType.power:\n return Number(value1) ** Number(value2);\n }\n}\n\nexport default VariableCombineNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useCallback, useState } from 'react';\nimport { useUpdateNodeData } from '@awesome-flow/core/hooks';\nimport { NodeVariableValueData } from '../../abstract/node-props';\nimport { ValueType } from '../../abstract/properties';\nimport NodeValueInput from '../../layout/node-value-input';\n\nfunction VariableValueNode({ id, selected, data, type }: NodeProps<Node<NodeVariableValueData>>) {\n const [value, setValue] = useState<ValueType>(data.value || 0.0);\n const updateNodeData = useUpdateNodeData<NodeVariableValueData>();\n\n const onValueChange = useCallback((newValue: ValueType) => {\n updateNodeData(id, { value: newValue });\n setValue(newValue);\n }, []);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <NodeValueInput value={value} onChange={onValueChange} />\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"source\" />\n </NodeContainer>\n );\n}\n\nexport default VariableValueNode;\n","import { NodeContainer, NodeCollapse } from '@awesome-flow/core/layout';\nimport { Node, NodeProps, NodeResizer, useStore, useUpdateNodeInternals } from '@xyflow/react';\nimport { BasicNodeData, FlowContext } from '@awesome-flow/core/abstract';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\nimport { shallow } from 'zustand/shallow';\nimport { Badge, Group } from '@mantine/core';\n\nfunction ModuleGroupNode({\n id,\n selected,\n data,\n type,\n width,\n height,\n}: NodeProps<Node<BasicNodeData>>) {\n const context = useContext(FlowContext);\n const updateNodeInternals = useUpdateNodeInternals();\n const triggerNodeChanges = useStore((s) => s.triggerNodeChanges);\n\n const { groupNodes, setGroupCollapsed } = context.useFlowStore(\n useCallback(\n (state) => ({ groupNodes: state.groups[id], setGroupCollapsed: state.setGroupCollapsed }),\n []\n )\n );\n\n const intersectingNode = context.useInteractivityStore(\n useCallback((state) => state.nodeIntersectionTargets[id], [id]),\n shallow\n );\n\n useEffect(() => {\n updateNodeInternals(id);\n }, [width, height]);\n\n useEffect(() => {\n triggerNodeChanges([\n {\n id,\n type: 'select',\n selected: !!intersectingNode,\n },\n ]);\n }, [intersectingNode]);\n\n const onCollapsed = useCallback((collapsed: boolean) => {\n setGroupCollapsed(id, collapsed);\n }, []);\n\n const size = useMemo(() => {\n return {\n width: data.initialSize?.width || 100,\n height: data.initialSize?.height || 50,\n };\n }, [data.initialSize]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Badge size=\"xs\" variant=\"outline\" radius=\"xs\" color=\"gray\">\n {groupNodes?.length || 0}\n </Badge>\n <NodeCollapse nodeId={id} isCollapsed={data.isCollapsed} onCollapsed={onCollapsed} />\n </Group>\n </Group>\n }\n type={type}\n >\n <NodeResizer\n nodeId={id}\n minWidth={size.width}\n minHeight={size.height}\n isVisible={selected && !data.isCollapsed}\n />\n </NodeContainer>\n );\n}\n\nexport default ModuleGroupNode;\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseCheckerboardNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCheckerboard,\n removable: false,\n data: {\n title: 'Checkerboard Noise',\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeConstNoiseData } from '../../abstract/node-props';\n\nexport class NoiseConstNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeConstNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseConst,\n removable: false,\n data: {\n title: 'Const Value Noise',\n noise: 0,\n min: -1,\n max: 1,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCylindersNoiseData } from '../../abstract/node-props';\n\nexport class NoiseCylindersNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCylindersNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCylinders,\n removable: false,\n data: {\n title: 'Cylinders Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\n\nexport class NoisePerlinNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeFBMNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noisePerlin,\n removable: false,\n data: {\n title: 'Perlin Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRidgedNoiseData } from '../../abstract/node-props';\n\nexport class NoiseRidgedMultiNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeRidgedNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseRidgedMulti,\n removable: false,\n data: {\n title: 'Ridged Multi Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 6,\n offset: 1.0,\n gain: 2.0,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseSimplexNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSimplex,\n removable: false,\n data: {\n title: 'Simplex Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSpheresNoiseData } from '../../abstract/node-props';\n\nexport class NoiseSpheresNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeSpheresNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSpheres,\n removable: false,\n data: {\n title: 'Spheres Noise',\n frequency: 0.1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVoronoiNoiseData } from '../../abstract/node-props';\n\nexport class NoiseVoronoiNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVoronoiNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseVoronoi,\n removable: false,\n data: {\n title: 'Voronoi Noise',\n frequency: 0.1,\n displacement: 1.0,\n distance: true,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodePositionData } from '../../abstract/node-props';\n\nexport class PositionConstNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodePositionData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.position,\n removable: false,\n data: {\n title: 'Position Output',\n position: { x: 0, y: 0, z: 0 },\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.position,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeGridData } from '../../abstract/node-props';\n\nexport class PositionGridNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeGridData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.grid,\n removable: false,\n data: {\n title: 'Grid Output',\n center: { x: 0, y: 0, z: 0 },\n radius: 1,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.position,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\n\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeNormalizeNoiseData } from '../../abstract/node-props';\n\nexport class NoiseNormalizeNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeNormalizeNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseNormalize,\n data: {\n title: 'Normalize Noise',\n intervalStart: -1,\n intervalEnd: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseLoggerNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseLogger,\n removable: false,\n data: {\n title: 'Noise Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.noise,\n connection: 'target',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'target';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.noise;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseRawTextureTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.textureData,\n removable: false,\n data: {\n title: 'Texture Data',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.noise,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.texture,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.texture;\n\n case 'target':\n return NoiseHandleFlag.noise;\n }\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class PositionLoggerNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.positionLogger,\n removable: false,\n data: {\n title: 'Position Logger',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.position,\n connection: 'target',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'target';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.position;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCombineNoiseData } from '../../abstract/node-props';\nimport { NoiseCombineType } from '../../abstract/operations';\n\nexport class NoiseCombineNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCombineNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCombine,\n removable: false,\n data: {\n title: 'Combine Noise',\n operation: NoiseCombineType.add,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 2,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeClampNoiseData } from '../../abstract/node-props';\n\nexport class NoiseClampNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeClampNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseClamp,\n removable: false,\n data: {\n title: 'Clamp Noise',\n lowerBound: -1,\n upperBound: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseAbsNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseAbs,\n removable: false,\n data: {\n title: 'Abs Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseOutputNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseOutput,\n removable: false,\n data: {\n title: 'Noise Output',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.position,\n connection: 'target',\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.noise,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.noise;\n\n case 'target':\n return NoiseHandleFlag.module & NoiseHandleFlag.position;\n }\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCurveNoiseData } from '../../abstract/node-props';\n\nexport class NoiseCurveNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCurveNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseCurve,\n removable: false,\n data: {\n title: 'Noise Curve',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeExponentNoiseData } from '../../abstract/node-props';\n\nexport class NoiseExponentNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeExponentNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseExponent,\n removable: false,\n data: {\n title: 'Noise Exponent',\n exponent: 1,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseInvertNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseInvert,\n removable: false,\n data: {\n title: 'Invert Noise',\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScaleBiasNoiseData } from '../../abstract/node-props';\n\nexport class NoiseScaleBiasNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeScaleBiasNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseScaleBias,\n removable: false,\n data: {\n title: 'Scale/Bias Noise',\n scale: 1.0,\n bias: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTerraceNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTerraceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTerraceNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTerrace,\n removable: false,\n data: {\n title: 'Noise Terrace',\n points: [],\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeSelectNoiseData } from '../../abstract/node-props';\n\nexport class NoiseSelectNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeSelectNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseSelect,\n removable: false,\n data: {\n title: 'Noise Select',\n edgeFalloff: 0.0,\n lowerBound: -1.0,\n upperBound: 1.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport {\n DisplacementModule,\n DisplacementModuleHandle,\n NoiseHandleFlag,\n} from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport class NoiseDisplaceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData, Omit<DisplacementModuleHandle, 'id'>> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseDisplace,\n data: {\n title: 'Noise Displace',\n },\n handles: [\n {\n position: Position.Left,\n connection: 'target',\n label: 'Source Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.sourceModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'X Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.xModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Y Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.yModule,\n maxConnections: 1,\n },\n {\n position: Position.Left,\n connection: 'target',\n label: 'Z Module',\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.zModule,\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n dataId: DisplacementModule.output,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeRotatePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseRotatePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeRotatePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseRotatePoint,\n removable: false,\n data: {\n title: 'Noise Rotate Point',\n xAngle: 0.0,\n yAngle: 0.0,\n zAngle: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeScalePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseScalePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeScalePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseScalePoint,\n data: {\n title: 'Noise Scale Point',\n xScale: 1.0,\n yScale: 1.0,\n zScale: 1.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTranslatePointNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTranslatePointNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTranslatePointNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTranslatePoint,\n data: {\n title: 'Noise Translate Point',\n translateX: 0.0,\n translateY: 0.0,\n translateZ: 0.0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeTurbulenceNoiseData } from '../../abstract/node-props';\n\nexport class NoiseTurbulenceNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeTurbulenceNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseTurbulence,\n data: {\n title: 'Noise Turbulence',\n frequency: 1.0,\n power: 1.0,\n roughness: 1.0,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1,\n },\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n label: 'Variable Properties',\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVariablePropertyData } from '../../abstract/node-props';\n\nexport class VariablePropertyNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVariablePropertyData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableProperty,\n data: {\n title: 'Variable Property',\n property: null,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'target',\n maxConnections: 1,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n switch (type) {\n case 'source':\n return NoiseHandleFlag.variableProperty;\n case 'target':\n return NoiseHandleFlag.variableValue;\n }\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeCombineVariableData } from '../../abstract/node-props';\nimport { VariableCombineType } from '../../abstract/operations';\n\nexport class VariableCombineNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeCombineVariableData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableCombine,\n removable: false,\n data: {\n title: 'Combine Values',\n operation: VariableCombineType.add,\n value: null,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeVariableValueData } from '../../abstract/node-props';\n\nexport class VariableValueNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeVariableValueData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.variableValue,\n data: {\n title: 'Variable Value',\n value: null,\n },\n handles: [\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.variableValue,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.variableValue;\n }\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\n\nexport class ModuleGroupNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<BasicNodeData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.groupModule,\n data: {\n title: 'Modules Group',\n isGroup: true,\n initialSize: {\n width: 300,\n height: 200,\n },\n collapsedSize: {\n width: 300,\n height: 80,\n },\n },\n handles: [\n {\n position: Position.Bottom,\n dataType: NoiseHandleFlag.module,\n connection: 'target',\n maxConnections: 1,\n hideOnCollapse: true,\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return true;\n }\n\n getHandleAllowedDataType(type: HandleType): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { IDGenerator } from '@awesome-flow/core/utils';\nimport { HandleType, Position } from '@xyflow/system';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NodeFBMNoiseData } from '../../abstract/node-props';\n\nexport class NoiseBillowNodeTemplateFactory implements ITemplateFactory {\n create(): NodeTemplate<NodeFBMNoiseData> {\n return {\n id: IDGenerator.template(),\n type: NoiseNodeType.noiseBillow,\n removable: false,\n data: {\n title: 'Billow Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0,\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleFlag.variableProperty,\n connection: 'target',\n },\n {\n position: Position.Right,\n dataType: NoiseHandleFlag.module,\n connection: 'source',\n },\n ],\n };\n }\n\n isHandleAllowed(type: HandleType): boolean {\n return type === 'source';\n }\n\n getHandleAllowedDataType(): NoiseHandleFlag {\n return NoiseHandleFlag.module;\n }\n}\n","import { NodeTypes } from '@xyflow/react';\nimport NoiseSimplexNode from '../nodes/generators/noise-simplex-node';\nimport PositionConstNode from '../nodes/generators/position-const-node';\nimport PositionGridNode from '../nodes/generators/position-grid-node';\nimport NoiseNormalizeNode from '../nodes/modifiers/noise-normalize-node';\nimport NoiseConstNode from '../nodes/generators/noise-const-node';\nimport NoiseBillowNode from '../nodes/generators/noise-billow-node';\nimport NoiseLoggerNode from '../nodes/output/noise-logger-node';\nimport NoiseRawTextureNode from '../nodes/output/noise-raw-texture-node';\nimport NoiseCheckerboardNode from '../nodes/generators/noise-checkerboard-node';\nimport PositionsLoggerNode from '../nodes/output/positions-logger-node';\nimport NoiseCylindersNode from '../nodes/generators/noise-cylinders-node';\nimport NoisePerlinNode from '../nodes/generators/noise-perlin-node';\nimport NoiseRidgedMultiNode from '../nodes/generators/noise-ridgedmulti-node';\nimport NoiseSpheresNode from '../nodes/generators/noise-spheres-node';\nimport NoiseVoronoiNode from '../nodes/generators/noise-voronoi-node';\nimport NoiseCombineNode from '../nodes/modifiers/noise-combine-node';\nimport NoiseClampNode from '../nodes/modifiers/noise-clamp-node';\nimport NoiseAbsNode from '../nodes/modifiers/noise-abs-node';\nimport NoiseOutputNode from '../nodes/output/noise-output-node';\nimport NoiseCurveNode from '../nodes/modifiers/noise-curve-node';\nimport NoiseExponentNode from '../nodes/modifiers/noise-exponent-node';\nimport NoiseInvertNode from '../nodes/modifiers/noise-invert-node';\nimport NoiseScaleBiasNode from '../nodes/modifiers/noise-scale-bias-node';\nimport NoiseTerraceNode from '../nodes/modifiers/noise-terrace-node';\nimport NoiseBlendNode from '../nodes/selectors/noise-blend-node';\nimport NoiseSelectNode from '../nodes/selectors/noise-select-node';\nimport NoiseDisplaceNode from '../nodes/transformers/noise-displace-node';\nimport NoiseRotatePointNode from '../nodes/transformers/noise-rotate-point-node';\nimport NoiseScalePointNode from '../nodes/transformers/noise-scale-point-node';\nimport NoiseTranslatePointNode from '../nodes/transformers/noise-translate-point-node';\nimport NoiseTurbulenceNode from '../nodes/transformers/noise-turbulence-node ';\nimport VariablePropertyNode from '../nodes/generators/variable-property-node';\nimport VariableCombineNode from '../nodes/modifiers/variable-combine-node';\nimport VariableValueNode from '../nodes/generators/variable-value-node';\nimport ModuleGroupNode from '../nodes/groups/node-module-group';\nimport { NoiseCheckerboardNodeTemplateFactory } from '../templates/generators/noise-checkerboard-template';\nimport { NoiseConstNodeTemplateFactory } from '../templates/generators/noise-const-template';\nimport { NoiseCylindersNodeTemplateFactory } from '../templates/generators/noise-cylinders-template';\nimport { NoisePerlinNodeTemplateFactory } from '../templates/generators/noise-perlin-template';\nimport { NoiseRidgedMultiNodeTemplateFactory } from '../templates/generators/noise-ridgedmulti-template';\nimport { NoiseSimplexNodeTemplateFactory } from '../templates/generators/noise-simplex-template';\nimport { NoiseSpheresNodeTemplateFactory } from '../templates/generators/noise-spheres-template';\nimport { NoiseVoronoiNodeTemplateFactory } from '../templates/generators/noise-voronoi-template';\nimport { PositionConstNodeTemplateFactory } from '../templates/generators/position-const-template';\nimport { PositionGridNodeTemplateFactory } from '../templates/generators/position-grid-template';\nimport { NoiseNormalizeNodeTemplateFactory } from '../templates/modifiers/noise-normalize-template';\nimport { NoiseLoggerNodeTemplateFactory } from '../templates/output/noise-logger-template';\nimport { NoiseRawTextureTemplateFactory } from '../templates/output/noise-raw-texture-template';\nimport { PositionLoggerNodeTemplateFactory } from '../templates/output/position-logger-template';\nimport { NoiseCombineNodeTemplateFactory } from '../templates/modifiers/noise-combine-template';\nimport { NoiseClampNodeTemplateFactory } from '../templates/modifiers/noise-clamp-template';\nimport { NoiseAbsNodeTemplateFactory } from '../templates/modifiers/noise-abs-template';\nimport { NoiseOutputNodeTemplateFactory } from '../templates/output/noise-output-template';\nimport { NoiseCurveNodeTemplateFactory } from '../templates/modifiers/noise-curve-template';\nimport { NoiseExponentNodeTemplateFactory } from '../templates/modifiers/noise-exponent-template';\nimport { NoiseInvertNodeTemplateFactory } from '../templates/modifiers/noise-invert-template';\nimport { NoiseScaleBiasNodeTemplateFactory } from '../templates/modifiers/noise-scalebias-template';\nimport { NoiseTerraceNodeTemplateFactory } from '../templates/modifiers/noise-terrace-template';\nimport { NoiseBlendNodeTemplateFactory } from '../templates/selectors/noise-blend-template';\nimport { NoiseSelectNodeTemplateFactory } from '../templates/selectors/noise-select-template';\nimport { NoiseDisplaceNodeTemplateFactory } from '../templates/transformers/noise-displace-template';\nimport { NoiseRotatePointNodeTemplateFactory } from '../templates/transformers/noise-rotate-point-template';\nimport { NoiseScalePointNodeTemplateFactory } from '../templates/transformers/noise-scale-point-template';\nimport { NoiseTranslatePointNodeTemplateFactory } from '../templates/transformers/noise-translate-point-template';\nimport { NoiseTurbulenceNodeTemplateFactory } from '../templates/transformers/noise-turbulence-template';\nimport { VariablePropertyNodeTemplateFactory } from '../templates/generators/variable-property-template';\nimport { VariableCombineNodeTemplateFactory } from '../templates/modifiers/variable-combine-template';\nimport { VariableValueNodeTemplateFactory } from '../templates/generators/variable-value-template';\nimport { ModuleGroupNodeTemplateFactory } from '../templates/groups/module-group-template';\nimport { NoiseBillowNodeTemplateFactory } from '../templates/generators/noise-billow-template';\n\nexport enum NoiseNodeType {\n position = 'position',\n grid = 'grid',\n noiseOutput = 'noise-output',\n noiseConst = 'noise-constant',\n noiseSimplex = 'noise-simplex',\n noiseBillow = 'noise-billow',\n noiseCheckerboard = 'noise-checkerboard',\n noiseNormalize = 'noise-normalize',\n noiseCylinders = 'noise-cylinders',\n noisePerlin = 'noise-perlin',\n noiseRidgedMulti = 'noise-ridged-multi',\n noiseSpheres = 'noise-spheres',\n noiseVoronoi = 'noise-voronoi',\n textureData = 'texture-data',\n noiseLogger = 'noise-logger',\n positionLogger = 'position-logger',\n noiseCombine = 'noise-combiner',\n noiseClamp = 'noise-clamp',\n noiseAbs = 'noise-abs',\n noiseCurve = 'noise-curve',\n noiseExponent = 'noise-exponent',\n noiseInvert = 'noise-invert',\n noiseScaleBias = 'noise-scale-bias',\n noiseTerrace = 'noise-terrace',\n noiseBlend = 'noise-blend',\n noiseSelect = 'noise-select',\n noiseDisplace = 'noise-displace',\n noiseRotatePoint = 'noise-rotate-point',\n noiseScalePoint = 'noise-scale-point',\n noiseTranslatePoint = 'noise-translate-point',\n noiseTurbulence = 'noise-turbulence',\n variableProperty = 'variable-property',\n variableValue = 'variable-value',\n variableCombine = 'variable-combine',\n groupModule = 'group-module',\n}\n\nexport const noiseNodeTypes = {\n [NoiseNodeType.variableValue]: VariableValueNode,\n [NoiseNodeType.variableProperty]: VariablePropertyNode,\n [NoiseNodeType.variableCombine]: VariableCombineNode,\n [NoiseNodeType.groupModule]: ModuleGroupNode,\n [NoiseNodeType.position]: PositionConstNode,\n [NoiseNodeType.grid]: PositionGridNode,\n [NoiseNodeType.noiseOutput]: NoiseOutputNode,\n [NoiseNodeType.textureData]: NoiseRawTextureNode,\n [NoiseNodeType.noiseLogger]: NoiseLoggerNode,\n [NoiseNodeType.positionLogger]: PositionsLoggerNode,\n [NoiseNodeType.noiseConst]: NoiseConstNode,\n [NoiseNodeType.noiseBillow]: NoiseBillowNode,\n [NoiseNodeType.noiseSimplex]: NoiseSimplexNode,\n [NoiseNodeType.noiseCheckerboard]: NoiseCheckerboardNode,\n [NoiseNodeType.noiseCylinders]: NoiseCylindersNode,\n [NoiseNodeType.noisePerlin]: NoisePerlinNode,\n [NoiseNodeType.noiseRidgedMulti]: NoiseRidgedMultiNode,\n [NoiseNodeType.noiseSpheres]: NoiseSpheresNode,\n [NoiseNodeType.noiseVoronoi]: NoiseVoronoiNode,\n [NoiseNodeType.noiseCombine]: NoiseCombineNode,\n [NoiseNodeType.noiseClamp]: NoiseClampNode,\n [NoiseNodeType.noiseAbs]: NoiseAbsNode,\n [NoiseNodeType.noiseNormalize]: NoiseNormalizeNode,\n [NoiseNodeType.noiseCurve]: NoiseCurveNode,\n [NoiseNodeType.noiseExponent]: NoiseExponentNode,\n [NoiseNodeType.noiseInvert]: NoiseInvertNode,\n [NoiseNodeType.noiseScaleBias]: NoiseScaleBiasNode,\n [NoiseNodeType.noiseTerrace]: NoiseTerraceNode,\n [NoiseNodeType.noiseBlend]: NoiseBlendNode,\n [NoiseNodeType.noiseSelect]: NoiseSelectNode,\n [NoiseNodeType.noiseDisplace]: NoiseDisplaceNode,\n [NoiseNodeType.noiseRotatePoint]: NoiseRotatePointNode,\n [NoiseNodeType.noiseScalePoint]: NoiseScalePointNode,\n [NoiseNodeType.noiseTranslatePoint]: NoiseTranslatePointNode,\n [NoiseNodeType.noiseTurbulence]: NoiseTurbulenceNode,\n} satisfies NodeTypes;\n\nexport const noiseNodeTemplates = {\n [NoiseNodeType.noiseOutput]: new NoiseOutputNodeTemplateFactory(),\n [NoiseNodeType.noiseSimplex]: new NoiseSimplexNodeTemplateFactory(),\n [NoiseNodeType.noiseBillow]: new NoiseBillowNodeTemplateFactory(),\n [NoiseNodeType.noiseCheckerboard]: new NoiseCheckerboardNodeTemplateFactory(),\n [NoiseNodeType.noiseNormalize]: new NoiseNormalizeNodeTemplateFactory(),\n [NoiseNodeType.noiseLogger]: new NoiseLoggerNodeTemplateFactory(),\n [NoiseNodeType.noiseConst]: new NoiseConstNodeTemplateFactory(),\n [NoiseNodeType.position]: new PositionConstNodeTemplateFactory(),\n [NoiseNodeType.positionLogger]: new PositionLoggerNodeTemplateFactory(),\n [NoiseNodeType.grid]: new PositionGridNodeTemplateFactory(),\n [NoiseNodeType.textureData]: new NoiseRawTextureTemplateFactory(),\n [NoiseNodeType.noiseCylinders]: new NoiseCylindersNodeTemplateFactory(),\n [NoiseNodeType.noisePerlin]: new NoisePerlinNodeTemplateFactory(),\n [NoiseNodeType.noiseRidgedMulti]: new NoiseRidgedMultiNodeTemplateFactory(),\n [NoiseNodeType.noiseSpheres]: new NoiseSpheresNodeTemplateFactory(),\n [NoiseNodeType.noiseVoronoi]: new NoiseVoronoiNodeTemplateFactory(),\n [NoiseNodeType.noiseCombine]: new NoiseCombineNodeTemplateFactory(),\n [NoiseNodeType.noiseClamp]: new NoiseClampNodeTemplateFactory(),\n [NoiseNodeType.noiseAbs]: new NoiseAbsNodeTemplateFactory(),\n [NoiseNodeType.noiseCurve]: new NoiseCurveNodeTemplateFactory(),\n [NoiseNodeType.noiseExponent]: new NoiseExponentNodeTemplateFactory(),\n [NoiseNodeType.noiseInvert]: new NoiseInvertNodeTemplateFactory(),\n [NoiseNodeType.noiseScaleBias]: new NoiseScaleBiasNodeTemplateFactory(),\n [NoiseNodeType.noiseTerrace]: new NoiseTerraceNodeTemplateFactory(),\n [NoiseNodeType.noiseBlend]: new NoiseBlendNodeTemplateFactory(),\n [NoiseNodeType.noiseSelect]: new NoiseSelectNodeTemplateFactory(),\n [NoiseNodeType.noiseDisplace]: new NoiseDisplaceNodeTemplateFactory(),\n [NoiseNodeType.noiseRotatePoint]: new NoiseRotatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseScalePoint]: new NoiseScalePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTranslatePoint]: new NoiseTranslatePointNodeTemplateFactory(),\n [NoiseNodeType.noiseTurbulence]: new NoiseTurbulenceNodeTemplateFactory(),\n [NoiseNodeType.variableProperty]: new VariablePropertyNodeTemplateFactory(),\n [NoiseNodeType.variableCombine]: new VariableCombineNodeTemplateFactory(),\n [NoiseNodeType.variableValue]: new VariableValueNodeTemplateFactory(),\n [NoiseNodeType.groupModule]: new ModuleGroupNodeTemplateFactory(),\n};\n"],"mappings":"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","names":["import_utils","import_system","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_abstract","import_hooks","import_react","import_core","import_core","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_hooks","import_core","import_react","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_selector","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","import_layout","import_react","import_hooks","import_transformer","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_utils","import_abstract","import_jsx_runtime","import_layout","import_react","import_hooks","import_icons_react","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_abstract","import_core","import_jsx_runtime","import_utils","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system","import_utils","import_system"]}
@@ -0,0 +1,22 @@
1
+ import { ITemplateFactory, NodeTemplate, BasicNodeData } from '@awesome-flow/core/abstract';
2
+ import { N as NoiseHandleFlag } from '../../handle-types-D-v5S53h.cjs';
3
+ import { w as NodeSelectNoiseData } from '../../node-props-hKW-_KOU.cjs';
4
+ import 'libnoise-ts/module/generator';
5
+ import 'libnoise-ts/noisegen';
6
+ import 'libnoise-ts/module/Module';
7
+ import 'libnoise-ts/module/combiner';
8
+ import '../../properties-BxwtU6i9.cjs';
9
+
10
+ declare class NoiseBlendNodeTemplateFactory implements ITemplateFactory {
11
+ create(): NodeTemplate<BasicNodeData>;
12
+ isHandleAllowed(): boolean;
13
+ getHandleAllowedDataType(): NoiseHandleFlag;
14
+ }
15
+
16
+ declare class NoiseSelectNodeTemplateFactory implements ITemplateFactory {
17
+ create(): NodeTemplate<NodeSelectNoiseData>;
18
+ isHandleAllowed(): boolean;
19
+ getHandleAllowedDataType(): NoiseHandleFlag;
20
+ }
21
+
22
+ export { NoiseBlendNodeTemplateFactory, NoiseSelectNodeTemplateFactory };
@@ -0,0 +1,22 @@
1
+ import { ITemplateFactory, NodeTemplate, BasicNodeData } from '@awesome-flow/core/abstract';
2
+ import { N as NoiseHandleFlag } from '../../handle-types-D-v5S53h.js';
3
+ import { w as NodeSelectNoiseData } from '../../node-props-CeZ8Oshz.js';
4
+ import 'libnoise-ts/module/generator';
5
+ import 'libnoise-ts/noisegen';
6
+ import 'libnoise-ts/module/Module';
7
+ import 'libnoise-ts/module/combiner';
8
+ import '../../properties-BxwtU6i9.js';
9
+
10
+ declare class NoiseBlendNodeTemplateFactory implements ITemplateFactory {
11
+ create(): NodeTemplate<BasicNodeData>;
12
+ isHandleAllowed(): boolean;
13
+ getHandleAllowedDataType(): NoiseHandleFlag;
14
+ }
15
+
16
+ declare class NoiseSelectNodeTemplateFactory implements ITemplateFactory {
17
+ create(): NodeTemplate<NodeSelectNoiseData>;
18
+ isHandleAllowed(): boolean;
19
+ getHandleAllowedDataType(): NoiseHandleFlag;
20
+ }
21
+
22
+ export { NoiseBlendNodeTemplateFactory, NoiseSelectNodeTemplateFactory };