@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":["../../../../node_modules/fast-deep-equal/index.js","../../src/nodes/index.ts","../../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/generators/noise-checkerboard-node.tsx","../../src/nodes/generators/noise-const-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-simplex-node.tsx","../../src/modules/simplex-module.ts","../../src/nodes/generators/noise-spheres-node.tsx","../../src/nodes/generators/noise-voronoi-node.tsx","../../src/nodes/generators/position-const-node.tsx","../../src/nodes/generators/position-grid-node.tsx","../../src/nodes/generators/variable-property-node.tsx","../../src/nodes/generators/variable-value-node.tsx","../../src/nodes/groups/node-module-group.tsx","../../src/nodes/modifiers/noise-abs-node.tsx","../../src/nodes/modifiers/noise-clamp-node.tsx","../../src/nodes/modifiers/noise-combine-node.tsx","../../src/abstract/operations.ts","../../src/nodes/modifiers/noise-curve-node.tsx","../../../../node_modules/@mantine/form/src/actions/actions.ts","../../../../node_modules/@mantine/form/src/get-input-on-change/get-input-on-change.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-errors/filter-errors/filter-errors.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-errors/use-form-errors.ts","../../../../node_modules/@mantine/form/src/lists/clear-list-state.ts","../../../../node_modules/@mantine/form/src/lists/change-error-indices.ts","../../../../node_modules/@mantine/form/src/lists/reorder-errors.ts","../../../../node_modules/klona/full/index.mjs","../../../../node_modules/@mantine/form/src/paths/get-splitted-path.ts","../../../../node_modules/@mantine/form/src/paths/get-path.ts","../../../../node_modules/@mantine/form/src/paths/set-path.ts","../../../../node_modules/@mantine/form/src/paths/reorder-path.ts","../../../../node_modules/@mantine/form/src/paths/insert-path.ts","../../../../node_modules/@mantine/form/src/paths/remove-path.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-list/use-form-list.ts","../../../../node_modules/@mantine/form/src/get-status/get-status.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-status/use-form-status.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-values/use-form-values.ts","../../../../node_modules/@mantine/form/src/hooks/use-form-watch/use-form-watch.ts","../../../../node_modules/@mantine/form/src/validate/validate-values.ts","../../../../node_modules/@mantine/form/src/validate/validate-field-value.ts","../../../../node_modules/@mantine/form/src/form-index.ts","../../../../node_modules/@mantine/form/src/validate/should-validate-on-change.ts","../../../../node_modules/@mantine/form/src/use-form.ts","../../src/nodes/modifiers/noise-exponent-node.tsx","../../src/nodes/modifiers/noise-invert-node.tsx","../../src/nodes/modifiers/noise-normalize-node.tsx","../../src/modules/normalize-noise-module.ts","../../src/nodes/modifiers/noise-scale-bias-node.tsx","../../src/nodes/modifiers/noise-terrace-node.tsx","../../src/nodes/modifiers/variable-combine-node.tsx","../../src/nodes/output/noise-logger-node.tsx","../../src/nodes/output/noise-output-node.tsx","../../src/nodes/output/noise-raw-texture-node.tsx","../../src/nodes/output/positions-logger-node.tsx","../../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"],"sourcesContent":["'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","export * from './generators';\nexport * from './groups';\nexport * from './modifiers';\nexport * from './output';\nexport * from './selectors';\nexport * from './transformers';\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 } 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 } 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 { 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 } 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, 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { useEffect, useLayoutEffect } from 'react';\nimport type {\n _TransformValues,\n ClearErrors,\n ClearFieldError,\n InsertListItem,\n RemoveListItem,\n ReorderListItem,\n Reset,\n ResetDirty,\n ResetStatus,\n SetErrors,\n SetFieldError,\n SetFieldValue,\n SetFormStatus,\n SetInitialValues,\n SetValues,\n UseFormReturnType,\n ValidateField,\n} from '../types';\n\nfunction dispatchEvent(type: string, detail?: any): any {\n window.dispatchEvent(new CustomEvent(type, { detail }));\n}\n\nfunction validateFormName(name: string) {\n if (!/^[0-9a-zA-Z-]+$/.test(name)) {\n throw new Error(\n `[@mantine/use-form] Form name \"${name}\" is invalid, it should contain only letters, numbers and dashes`\n );\n }\n}\n\nexport const useIsomorphicEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport function createFormActions<FormValues extends Record<string, any> = Record<string, any>>(\n name: string\n) {\n validateFormName(name);\n\n const setFieldValue: SetFieldValue<FormValues> = (path, value) =>\n dispatchEvent(`mantine-form:${name}:set-field-value`, { path, value });\n\n const setValues: SetValues<FormValues> = (values) =>\n dispatchEvent(`mantine-form:${name}:set-values`, values);\n\n const setInitialValues: SetInitialValues<FormValues> = (values) =>\n dispatchEvent(`mantine-form:${name}:set-initial-values`, values);\n\n const setErrors: SetErrors = (errors) => dispatchEvent(`mantine-form:${name}:set-errors`, errors);\n\n const setFieldError: SetFieldError<FormValues> = (path, error) =>\n dispatchEvent(`mantine-form:${name}:set-field-error`, { path, error });\n\n const clearFieldError: ClearFieldError = (path) =>\n dispatchEvent(`mantine-form:${name}:clear-field-error`, path);\n\n const clearErrors: ClearErrors = () => dispatchEvent(`mantine-form:${name}:clear-errors`);\n\n const reset: Reset = () => dispatchEvent(`mantine-form:${name}:reset`);\n\n const validate: () => void = () => dispatchEvent(`mantine-form:${name}:validate`);\n\n const validateField: ValidateField<FormValues> = (path) =>\n dispatchEvent(`mantine-form:${name}:validate-field`, path);\n\n const reorderListItem: ReorderListItem<FormValues> = (path, payload) =>\n dispatchEvent(`mantine-form:${name}:reorder-list-item`, { path, payload });\n\n const removeListItem: RemoveListItem<FormValues> = (path, index) =>\n dispatchEvent(`mantine-form:${name}:remove-list-item`, { path, index });\n\n const insertListItem: InsertListItem<FormValues> = (path, item, index) =>\n dispatchEvent(`mantine-form:${name}:insert-list-item`, { path, index, item });\n\n const setDirty: SetFormStatus = (value) => dispatchEvent(`mantine-form:${name}:set-dirty`, value);\n\n const setTouched: SetFormStatus = (value) =>\n dispatchEvent(`mantine-form:${name}:set-touched`, value);\n\n const resetDirty: ResetDirty<FormValues> = (values) =>\n dispatchEvent(`mantine-form:${name}:reset-dirty`, values);\n\n const resetTouched: ResetStatus = () => dispatchEvent(`mantine-form:${name}:reset-touched`);\n\n return {\n setFieldValue,\n setValues,\n setInitialValues,\n setErrors,\n setFieldError,\n clearFieldError,\n clearErrors,\n reset,\n validate,\n validateField,\n reorderListItem,\n removeListItem,\n insertListItem,\n setDirty,\n setTouched,\n resetDirty,\n resetTouched,\n };\n}\n\nfunction useFormEvent(eventKey: string | undefined, handler: Function) {\n useIsomorphicEffect(() => {\n if (eventKey) {\n window.addEventListener(eventKey, handler as any);\n return () => window.removeEventListener(eventKey, handler as any);\n }\n return undefined;\n }, [eventKey]);\n}\n\nexport function useFormActions<\n Values = Record<string, unknown>,\n TransformValues extends _TransformValues<Values> = (values: Values) => Values,\n>(name: string | undefined, form: UseFormReturnType<Values, TransformValues>) {\n if (name) {\n validateFormName(name);\n }\n\n useFormEvent(`mantine-form:${name}:set-field-value`, (event: CustomEvent) =>\n form.setFieldValue(event.detail.path, event.detail.value)\n );\n\n useFormEvent(`mantine-form:${name}:set-values`, (event: CustomEvent) =>\n form.setValues(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:set-initial-values`, (event: CustomEvent) =>\n form.setInitialValues(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:set-errors`, (event: CustomEvent) =>\n form.setErrors(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:set-field-error`, (event: CustomEvent) =>\n form.setFieldError(event.detail.path, event.detail.error)\n );\n\n useFormEvent(`mantine-form:${name}:clear-field-error`, (event: CustomEvent) =>\n form.clearFieldError(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:clear-errors`, form.clearErrors);\n useFormEvent(`mantine-form:${name}:reset`, form.reset);\n useFormEvent(`mantine-form:${name}:validate`, form.validate);\n\n useFormEvent(`mantine-form:${name}:validate-field`, (event: CustomEvent) =>\n form.validateField(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:reorder-list-item`, (event: CustomEvent) =>\n form.reorderListItem(event.detail.path, event.detail.payload)\n );\n\n useFormEvent(`mantine-form:${name}:remove-list-item`, (event: CustomEvent) =>\n form.removeListItem(event.detail.path, event.detail.index)\n );\n\n useFormEvent(`mantine-form:${name}:insert-list-item`, (event: CustomEvent) =>\n form.insertListItem(event.detail.path, event.detail.item, event.detail.index)\n );\n\n useFormEvent(`mantine-form:${name}:set-dirty`, (event: CustomEvent) =>\n form.setDirty(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:set-touched`, (event: CustomEvent) =>\n form.setTouched(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:reset-dirty`, (event: CustomEvent) =>\n form.resetDirty(event.detail)\n );\n\n useFormEvent(`mantine-form:${name}:reset-touched`, form.resetTouched);\n}\n","export function getInputOnChange<Value>(\n setValue: (value: Value | ((current: Value) => Value)) => void\n) {\n return (val: Value | React.ChangeEvent<unknown> | ((current: Value) => Value)) => {\n if (!val) {\n setValue(val as Value);\n } else if (typeof val === 'function') {\n setValue(val);\n } else if (typeof val === 'object' && 'nativeEvent' in val) {\n const { currentTarget } = val;\n if (currentTarget instanceof HTMLInputElement) {\n if (currentTarget.type === 'checkbox') {\n setValue(currentTarget.checked as any);\n } else {\n setValue(currentTarget.value as any);\n }\n } else if (\n currentTarget instanceof HTMLTextAreaElement ||\n currentTarget instanceof HTMLSelectElement\n ) {\n setValue(currentTarget.value as any);\n }\n } else {\n setValue(val);\n }\n };\n}\n","import type { FormErrors } from '../../../types';\n\nexport function filterErrors(errors: FormErrors): FormErrors {\n if (errors === null || typeof errors !== 'object') {\n return {};\n }\n\n return Object.keys(errors).reduce<FormErrors>((acc, key) => {\n const errorValue = errors[key];\n\n if (errorValue !== undefined && errorValue !== null && errorValue !== false) {\n acc[key] = errorValue;\n }\n\n return acc;\n }, {});\n}\n","import { useCallback, useState } from 'react';\nimport { ClearErrors, ClearFieldError, FormErrors, SetErrors, SetFieldError } from '../../types';\nimport { filterErrors } from './filter-errors/filter-errors';\n\nexport interface $FormErrors<Values extends Record<string, any>> {\n errorsState: FormErrors;\n setErrors: SetErrors;\n clearErrors: ClearErrors;\n setFieldError: SetFieldError<Values>;\n clearFieldError: ClearFieldError;\n}\n\nexport function useFormErrors<Values extends Record<string, any>>(\n initialErrors: FormErrors\n): $FormErrors<Values> {\n const [errorsState, setErrorsState] = useState(filterErrors(initialErrors));\n\n const setErrors: SetErrors = useCallback((errors) => {\n setErrorsState((current) =>\n filterErrors(typeof errors === 'function' ? errors(current) : errors)\n );\n }, []);\n\n const clearErrors: ClearErrors = useCallback(() => setErrorsState({}), []);\n\n const clearFieldError: ClearFieldError = useCallback(\n (path) => {\n if (errorsState[path as string] === undefined) {\n return;\n }\n\n setErrors((current) => {\n const errors = { ...current };\n delete errors[path as string];\n return errors;\n });\n },\n [errorsState]\n );\n\n const setFieldError: SetFieldError<Values> = useCallback(\n (path, error) => {\n if (error == null || error === false) {\n clearFieldError(path);\n } else if (errorsState[path as string] !== error) {\n setErrors((current) => ({ ...current, [path]: error }));\n }\n },\n [errorsState]\n );\n\n return {\n errorsState,\n setErrors,\n clearErrors,\n setFieldError,\n clearFieldError,\n };\n}\n","export function clearListState<T extends Record<PropertyKey, any>>(\n field: PropertyKey,\n state: T\n): T {\n if (state === null || typeof state !== 'object') {\n return {} as T;\n }\n\n const clone = { ...state };\n Object.keys(state).forEach((errorKey) => {\n if (errorKey.includes(`${String(field)}.`)) {\n delete clone[errorKey];\n }\n });\n\n return clone;\n}\n","import { clearListState } from './clear-list-state';\n\n/**\n * Gets the part of the key after the path which can be an index\n */\nfunction getIndexFromKeyAfterPath(key: string, path: string): number {\n const split = key.substring(path.length + 1).split('.')[0];\n return parseInt(split, 10);\n}\n\n/**\n * Changes the indices of every error that is after the given `index` with the given `change` at the given `path`.\n * This requires that the errors are in the format of `path.index` and that the index is a number.\n */\nexport function changeErrorIndices<T extends Record<PropertyKey, any>>(\n path: PropertyKey,\n index: number | undefined,\n errors: T,\n change: 1 | -1\n): T {\n if (index === undefined) {\n return errors;\n }\n const pathString = `${String(path)}`;\n let clearedErrors = errors;\n // Remove all errors if the corresponding item was removed\n if (change === -1) {\n clearedErrors = clearListState(`${pathString}.${index}`, clearedErrors);\n }\n\n const cloned = { ...clearedErrors };\n const changedKeys = new Set<string>();\n Object.entries(clearedErrors)\n .filter(([key]) => {\n if (!key.startsWith(`${pathString}.`)) {\n return false;\n }\n const currIndex = getIndexFromKeyAfterPath(key, pathString);\n if (Number.isNaN(currIndex)) {\n return false;\n }\n return currIndex >= index;\n })\n .forEach(([key, value]) => {\n const currIndex = getIndexFromKeyAfterPath(key, pathString);\n\n const newKey: keyof T = key.replace(\n `${pathString}.${currIndex}`,\n `${pathString}.${currIndex + change}`\n );\n cloned[newKey] = value;\n changedKeys.add(newKey);\n if (!changedKeys.has(key)) {\n delete cloned[key];\n }\n });\n\n return cloned;\n}\n","import { ReorderPayload } from '../types';\n\nexport function reorderErrors<T>(path: unknown, { from, to }: ReorderPayload, errors: T): T {\n const oldKeyStart = `${path}.${from}`;\n const newKeyStart = `${path}.${to}`;\n\n const clone: any = { ...errors };\n Object.keys(errors as any).every((key) => {\n let oldKey;\n let newKey;\n if (key.startsWith(oldKeyStart)) {\n oldKey = key;\n newKey = key.replace(oldKeyStart, newKeyStart);\n }\n if (key.startsWith(newKeyStart)) {\n oldKey = key.replace(newKeyStart, oldKeyStart);\n newKey = key;\n }\n if (oldKey && newKey) {\n const value1 = clone[oldKey];\n const value2 = clone[newKey];\n value2 === undefined ? delete clone[oldKey] : (clone[oldKey] = value2);\n value1 === undefined ? delete clone[newKey] : (clone[newKey] = value1);\n return false;\n }\n return true;\n });\n\n return clone;\n}\n","function set(obj, key, val) {\n\tif (typeof val.value === 'object') val.value = klona(val.value);\n\tif (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n\t\tObject.defineProperty(obj, key, val);\n\t} else obj[key] = val.value;\n}\n\nexport function klona(x) {\n\tif (typeof x !== 'object') return x;\n\n\tvar i=0, k, list, tmp, str=Object.prototype.toString.call(x);\n\n\tif (str === '[object Object]') {\n\t\ttmp = Object.create(x.__proto__ || null);\n\t} else if (str === '[object Array]') {\n\t\ttmp = Array(x.length);\n\t} else if (str === '[object Set]') {\n\t\ttmp = new Set;\n\t\tx.forEach(function (val) {\n\t\t\ttmp.add(klona(val));\n\t\t});\n\t} else if (str === '[object Map]') {\n\t\ttmp = new Map;\n\t\tx.forEach(function (val, key) {\n\t\t\ttmp.set(klona(key), klona(val));\n\t\t});\n\t} else if (str === '[object Date]') {\n\t\ttmp = new Date(+x);\n\t} else if (str === '[object RegExp]') {\n\t\ttmp = new RegExp(x.source, x.flags);\n\t} else if (str === '[object DataView]') {\n\t\ttmp = new x.constructor( klona(x.buffer) );\n\t} else if (str === '[object ArrayBuffer]') {\n\t\ttmp = x.slice(0);\n\t} else if (str.slice(-6) === 'Array]') {\n\t\t// ArrayBuffer.isView(x)\n\t\t// ~> `new` bcuz `Buffer.slice` => ref\n\t\ttmp = new x.constructor(x);\n\t}\n\n\tif (tmp) {\n\t\tfor (list=Object.getOwnPropertySymbols(x); i < list.length; i++) {\n\t\t\tset(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n\t\t}\n\n\t\tfor (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) {\n\t\t\tif (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue;\n\t\t\tset(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n\t\t}\n\t}\n\n\treturn tmp || x;\n}\n","export function getSplittedPath(path: unknown) {\n if (typeof path !== 'string') {\n return [];\n }\n\n return path.split('.');\n}\n","import { getSplittedPath } from './get-splitted-path';\n\nexport function getPath(path: unknown, values: unknown): unknown {\n const splittedPath = getSplittedPath(path);\n\n if (splittedPath.length === 0 || typeof values !== 'object' || values === null) {\n return undefined;\n }\n\n let value = values[splittedPath[0] as keyof typeof values];\n for (let i = 1; i < splittedPath.length; i += 1) {\n if (value === undefined) {\n break;\n }\n\n value = value[splittedPath[i]];\n }\n\n return value;\n}\n","import { klona } from 'klona/full';\nimport { getSplittedPath } from './get-splitted-path';\n\nexport function setPath<T>(path: unknown, value: unknown, values: T): T {\n const splittedPath = getSplittedPath(path);\n\n if (splittedPath.length === 0) {\n return values;\n }\n\n const cloned: any = klona(values);\n\n if (splittedPath.length === 1) {\n cloned[splittedPath[0]] = value;\n return cloned;\n }\n\n let val = cloned[splittedPath[0]];\n\n for (let i = 1; i < splittedPath.length - 1; i += 1) {\n if (val === undefined) {\n return cloned;\n }\n\n val = val[splittedPath[i]];\n }\n\n val[splittedPath[splittedPath.length - 1]] = value;\n\n return cloned;\n}\n","import { ReorderPayload } from '../types';\nimport { getPath } from './get-path';\nimport { setPath } from './set-path';\n\nexport function reorderPath<T>(path: unknown, { from, to }: ReorderPayload, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n const cloned = [...currentValue];\n const item = currentValue[from];\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n\n return setPath(path, cloned, values);\n}\n","import { getPath } from './get-path';\nimport { setPath } from './set-path';\n\nexport function insertPath<T>(path: unknown, value: unknown, index: number | undefined, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n const cloned = [...currentValue];\n cloned.splice(typeof index === 'number' ? index : cloned.length, 0, value);\n\n return setPath(path, cloned, values);\n}\n","import { getPath } from './get-path';\nimport { setPath } from './set-path';\n\nexport function removePath<T>(path: unknown, index: number, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n return setPath(\n path,\n currentValue.filter((_, itemIndex) => itemIndex !== index),\n values\n );\n}\n","import { useCallback } from 'react';\nimport { changeErrorIndices, reorderErrors } from '../../lists';\nimport { insertPath, removePath, reorderPath } from '../../paths';\nimport { InsertListItem, RemoveListItem, ReorderListItem } from '../../types';\nimport type { $FormErrors } from '../use-form-errors/use-form-errors';\nimport type { $FormStatus } from '../use-form-status/use-form-status';\nimport type { $FormValues } from '../use-form-values/use-form-values';\n\ninterface UseFormListInput<Values extends Record<string, any>> {\n $values: $FormValues<Values>;\n $errors: $FormErrors<Values>;\n $status: $FormStatus<Values>;\n}\n\nexport function useFormList<Values extends Record<string, any>>({\n $values,\n $errors,\n $status,\n}: UseFormListInput<Values>) {\n const reorderListItem: ReorderListItem<Values> = useCallback((path, payload) => {\n $status.clearFieldDirty(path);\n $errors.setErrors((errs) => reorderErrors(path, payload, errs));\n $values.setValues({\n values: reorderPath(path, payload, $values.refValues.current),\n updateState: true,\n });\n }, []);\n\n const removeListItem: RemoveListItem<Values> = useCallback((path, index) => {\n $status.clearFieldDirty(path);\n $errors.setErrors((errs) => changeErrorIndices(path, index, errs, -1));\n $values.setValues({\n values: removePath(path, index, $values.refValues.current),\n updateState: true,\n });\n }, []);\n\n const insertListItem: InsertListItem<Values> = useCallback((path, item, index) => {\n $status.clearFieldDirty(path);\n $errors.setErrors((errs) => changeErrorIndices(path, index, errs, 1));\n $values.setValues({\n values: insertPath(path, item, index, $values.refValues.current),\n updateState: true,\n });\n }, []);\n\n return { reorderListItem, removeListItem, insertListItem };\n}\n","import { FormStatus } from '../types';\n\nexport function getStatus(status: FormStatus, path?: unknown) {\n const paths = Object.keys(status);\n\n if (typeof path === 'string') {\n const nestedPaths = paths.filter((statusPath) => statusPath.startsWith(`${path}.`));\n return status[path] || nestedPaths.some((statusPath) => status[statusPath]) || false;\n }\n\n return paths.some((statusPath) => status[statusPath]);\n}\n","import { useCallback, useRef, useState } from 'react';\nimport isEqual from 'fast-deep-equal';\nimport { getStatus } from '../../get-status';\nimport { clearListState } from '../../lists';\nimport { getPath } from '../../paths';\nimport {\n ClearFieldDirty,\n FormMode,\n FormStatus,\n GetFieldStatus,\n ResetDirty,\n ResetStatus,\n SetFieldDirty,\n SetFieldTouched,\n} from '../../types';\nimport type { $FormValues } from '../use-form-values/use-form-values';\n\nexport interface $FormStatus<Values extends Record<string, any>> {\n touchedState: FormStatus;\n dirtyState: FormStatus;\n touchedRef: React.MutableRefObject<FormStatus>;\n dirtyRef: React.MutableRefObject<FormStatus>;\n setTouched: React.Dispatch<React.SetStateAction<FormStatus>>;\n setDirty: React.Dispatch<React.SetStateAction<FormStatus>>;\n resetDirty: ResetStatus;\n resetTouched: ResetStatus;\n isTouched: GetFieldStatus<Values>;\n setFieldTouched: SetFieldTouched<Values>;\n setFieldDirty: SetFieldDirty<Values>;\n setTouchedState: React.Dispatch<React.SetStateAction<FormStatus>>;\n setDirtyState: React.Dispatch<React.SetStateAction<FormStatus>>;\n clearFieldDirty: ClearFieldDirty;\n isDirty: GetFieldStatus<Values>;\n getDirty: () => FormStatus;\n getTouched: () => FormStatus;\n}\n\ninterface UseFormStatusInput<Values extends Record<string, any>> {\n initialDirty: FormStatus;\n initialTouched: FormStatus;\n mode: FormMode;\n $values: $FormValues<Values>;\n}\n\nexport function useFormStatus<Values extends Record<string, any>>({\n initialDirty,\n initialTouched,\n mode,\n $values,\n}: UseFormStatusInput<Values>): $FormStatus<Values> {\n const [touchedState, setTouchedState] = useState(initialTouched);\n const [dirtyState, setDirtyState] = useState(initialDirty);\n\n const touchedRef = useRef(initialTouched);\n const dirtyRef = useRef(initialDirty);\n\n const setTouched = useCallback((values: FormStatus | ((current: FormStatus) => FormStatus)) => {\n const resolvedValues = typeof values === 'function' ? values(touchedRef.current) : values;\n touchedRef.current = resolvedValues;\n\n if (mode === 'controlled') {\n setTouchedState(resolvedValues);\n }\n }, []);\n\n const setDirty = useCallback((values: FormStatus | ((current: FormStatus) => FormStatus)) => {\n const resolvedValues = typeof values === 'function' ? values(dirtyRef.current) : values;\n dirtyRef.current = resolvedValues;\n\n if (mode === 'controlled') {\n setDirtyState(resolvedValues);\n }\n }, []);\n\n const resetTouched: ResetStatus = useCallback(() => setTouched({}), []);\n\n const resetDirty: ResetDirty<Values> = (values) => {\n const newSnapshot = values\n ? { ...values, ...$values.refValues.current }\n : $values.refValues.current;\n $values.setValuesSnapshot(newSnapshot);\n setDirty({});\n };\n\n const setFieldTouched: SetFieldTouched<Values> = useCallback((path, touched) => {\n setTouched((currentTouched) => {\n if (getStatus(currentTouched, path) === touched) {\n return currentTouched;\n }\n\n return { ...currentTouched, [path]: touched };\n });\n }, []);\n\n const setFieldDirty: SetFieldDirty<Values> = useCallback((path, dirty) => {\n setDirty((currentDirty) => {\n if (getStatus(currentDirty, path) === dirty) {\n return currentDirty;\n }\n\n return { ...currentDirty, [path]: dirty };\n });\n }, []);\n\n const isTouched: GetFieldStatus<Values> = useCallback(\n (path) => getStatus(touchedRef.current, path),\n []\n );\n\n const clearFieldDirty: ClearFieldDirty = useCallback(\n (path) =>\n setDirty((current) => {\n if (typeof path !== 'string') {\n return current;\n }\n\n const result = clearListState(path, current);\n delete result[path];\n\n if (isEqual(result, current)) {\n return current;\n }\n\n return result;\n }),\n []\n );\n\n const isDirty: GetFieldStatus<Values> = useCallback((path) => {\n if (path) {\n const overriddenValue = getPath(path, dirtyRef.current);\n if (typeof overriddenValue === 'boolean') {\n return overriddenValue;\n }\n\n const sliceOfValues = getPath(path, $values.refValues.current);\n const sliceOfInitialValues = getPath(path, $values.valuesSnapshot.current);\n return !isEqual(sliceOfValues, sliceOfInitialValues);\n }\n\n const isOverridden = Object.keys(dirtyRef.current).length > 0;\n if (isOverridden) {\n return getStatus(dirtyRef.current);\n }\n\n return !isEqual($values.refValues.current, $values.valuesSnapshot.current);\n }, []);\n\n const getDirty = useCallback(() => dirtyRef.current, []);\n const getTouched = useCallback(() => touchedRef.current, []);\n\n return {\n touchedState,\n dirtyState,\n touchedRef,\n dirtyRef,\n setTouched,\n setDirty,\n resetDirty,\n resetTouched,\n isTouched,\n setFieldTouched,\n setFieldDirty,\n setTouchedState,\n setDirtyState,\n clearFieldDirty,\n isDirty,\n getDirty,\n getTouched,\n };\n}\n","import { useCallback, useRef, useState } from 'react';\nimport { getPath, setPath } from '../../paths';\nimport { FormMode } from '../../types';\n\nexport interface $FormValues<Values extends Record<PropertyKey, any>> {\n initialized: React.MutableRefObject<boolean>;\n stateValues: Values;\n refValues: React.MutableRefObject<Values>;\n valuesSnapshot: React.MutableRefObject<Values>;\n setValues: (payload: SetValuesInput<Values>) => void;\n setFieldValue: (payload: SetFieldValueInput<Values>) => void;\n resetValues: () => void;\n setValuesSnapshot: (payload: Values) => void;\n initialize: (values: Values, onInitialize: () => void) => void;\n getValues: () => Values;\n}\n\nexport interface SetValuesSubscriberPayload<Values> {\n path?: PropertyKey;\n updatedValues: Values;\n previousValues: Values;\n}\n\nexport interface SetValuesInput<Values> {\n values: Partial<Values> | ((values: Values) => Partial<Values>);\n mergeWithPreviousValues?: boolean;\n updateState?: boolean;\n subscribers?: (SetFieldValueSubscriber<Values> | null | undefined)[];\n}\n\nexport type SetFieldValueSubscriber<Values> = (payload: SetValuesSubscriberPayload<Values>) => void;\n\nexport interface SetFieldValueInput<Values> {\n path: PropertyKey;\n value: any;\n updateState?: boolean;\n subscribers?: (SetFieldValueSubscriber<Values> | null | undefined)[];\n}\n\ninterface UseFormValuesInput<Values extends Record<PropertyKey, any>> {\n initialValues: Values | undefined;\n mode: FormMode;\n onValuesChange?: ((values: Values, previousValues: Values) => void) | undefined;\n}\n\nexport function useFormValues<Values extends Record<PropertyKey, any>>({\n initialValues,\n onValuesChange,\n mode,\n}: UseFormValuesInput<Values>): $FormValues<Values> {\n const initialized = useRef(false);\n const [stateValues, setStateValues] = useState<Values>(initialValues || ({} as Values));\n const refValues = useRef(stateValues);\n const valuesSnapshot = useRef(stateValues);\n\n const setValues = useCallback(\n ({\n values,\n subscribers,\n updateState = true,\n mergeWithPreviousValues = true,\n }: SetValuesInput<Values>) => {\n const previousValues = refValues.current;\n const resolvedValues = values instanceof Function ? values(refValues.current) : values;\n const updatedValues = mergeWithPreviousValues\n ? { ...previousValues, ...resolvedValues }\n : (resolvedValues as Values);\n refValues.current = updatedValues;\n updateState && setStateValues(updatedValues);\n onValuesChange?.(updatedValues, previousValues);\n subscribers\n ?.filter(Boolean)\n .forEach((subscriber) => subscriber!({ updatedValues, previousValues }));\n },\n [onValuesChange]\n );\n\n const setFieldValue = useCallback((payload: SetFieldValueInput<Values>) => {\n const currentValue = getPath(payload.path, refValues.current);\n const updatedValue =\n payload.value instanceof Function ? payload.value(currentValue) : payload.value;\n\n if (currentValue !== updatedValue) {\n const previousValues = refValues.current;\n const updatedValues = setPath(payload.path, updatedValue, refValues.current);\n setValues({ values: updatedValues, updateState: payload.updateState });\n\n payload.subscribers\n ?.filter(Boolean)\n .forEach((subscriber) =>\n subscriber!({ path: payload.path, updatedValues, previousValues })\n );\n }\n }, []);\n\n const setValuesSnapshot = useCallback((payload: Values) => {\n valuesSnapshot.current = payload;\n }, []);\n\n const initialize = useCallback((values: Values, onInitialize: () => void) => {\n if (!initialized.current) {\n initialized.current = true;\n setValues({ values, updateState: mode === 'controlled' });\n setValuesSnapshot(values);\n onInitialize();\n }\n }, []);\n\n const resetValues = useCallback(() => {\n setValues({\n values: valuesSnapshot.current,\n updateState: true,\n mergeWithPreviousValues: false,\n });\n }, []);\n\n const getValues = useCallback(() => refValues.current, []);\n\n return {\n initialized,\n stateValues,\n refValues,\n valuesSnapshot,\n setValues,\n setFieldValue,\n resetValues,\n setValuesSnapshot,\n initialize,\n getValues,\n };\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport { getPath } from '../../paths';\nimport { FormFieldSubscriber, LooseKeys, Watch } from '../../types';\nimport { $FormStatus } from '../use-form-status/use-form-status';\nimport { SetValuesSubscriberPayload } from '../use-form-values/use-form-values';\n\ninterface UseFormWatchInput<Values extends Record<string, any>> {\n $status: $FormStatus<Values>;\n}\n\nexport function useFormWatch<Values extends Record<string, any>>({\n $status,\n}: UseFormWatchInput<Values>) {\n const subscribers = useRef<Record<LooseKeys<Values>, FormFieldSubscriber<Values, any>[]>>(\n {} as any\n );\n\n const watch: Watch<Values> = useCallback((path, callback) => {\n useEffect(() => {\n subscribers.current[path] = subscribers.current[path] || [];\n subscribers.current[path].push(callback);\n\n return () => {\n subscribers.current[path] = subscribers.current[path].filter((cb) => cb !== callback);\n };\n }, [callback]);\n }, []);\n\n const getFieldSubscribers = useCallback((path: LooseKeys<Values>) => {\n if (!subscribers.current[path]) {\n return [];\n }\n\n return subscribers.current[path].map(\n (callback) => (input: SetValuesSubscriberPayload<Values>) =>\n callback({\n previousValue: getPath(path, input.previousValues) as any,\n value: getPath(path, input.updatedValues) as any,\n touched: $status.isTouched(path),\n dirty: $status.isDirty(path),\n })\n );\n }, []);\n\n return {\n subscribers,\n watch,\n getFieldSubscribers,\n };\n}\n","import { filterErrors } from '../hooks/use-form-errors/filter-errors/filter-errors';\nimport { getPath } from '../paths';\nimport { FormErrors, FormRule, FormRulesRecord, FormValidateInput } from '../types';\n\nfunction getValidationResults(errors: FormErrors) {\n const filteredErrors = filterErrors(errors);\n return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };\n}\n\nfunction validateRulesRecord<T>(\n rules: FormRulesRecord<T> | undefined,\n values: T,\n path = '',\n errors: FormErrors = {}\n) {\n if (typeof rules !== 'object' || rules === null) {\n return errors;\n }\n\n return Object.keys(rules).reduce((acc, ruleKey) => {\n const rule: FormRule<any, any> = (rules as any)[ruleKey];\n const rulePath = `${path === '' ? '' : `${path}.`}${ruleKey}`;\n const value = getPath(rulePath, values);\n let arrayValidation = false;\n\n if (typeof rule === 'function') {\n acc[rulePath] = rule(value, values, rulePath);\n }\n\n if (typeof rule === 'object' && Array.isArray(value)) {\n arrayValidation = true;\n value.forEach((_item, index) =>\n validateRulesRecord(rule, values, `${rulePath}.${index}`, acc)\n );\n }\n\n if (typeof rule === 'object' && typeof value === 'object' && value !== null) {\n if (!arrayValidation) {\n validateRulesRecord(rule, values, rulePath, acc);\n }\n }\n\n return acc;\n }, errors);\n}\n\nexport function validateValues<T>(validate: FormValidateInput<T> | undefined, values: T) {\n if (typeof validate === 'function') {\n return getValidationResults(validate(values));\n }\n\n return getValidationResults(validateRulesRecord(validate, values));\n}\n","import { FormFieldValidationResult, FormValidateInput } from '../types';\nimport { validateValues } from './validate-values';\n\nexport function validateFieldValue<T>(\n path: unknown,\n rules: FormValidateInput<T> | undefined,\n values: T\n): FormFieldValidationResult {\n if (typeof path !== 'string') {\n return { hasError: false, error: null };\n }\n\n const results = validateValues(rules, values);\n const pathInError = Object.keys(results.errors).find((errorKey) =>\n path.split('.').every((pathPart, i) => pathPart === errorKey.split('.')[i])\n );\n return { hasError: !!pathInError, error: pathInError ? results.errors[pathInError] : null };\n}\n","export const FORM_INDEX = '__MANTINE_FORM_INDEX__';\n","import { FORM_INDEX } from '../form-index';\n\nexport function shouldValidateOnChange(path: unknown, validateInputOnChange: boolean | unknown[]) {\n if (!validateInputOnChange) {\n return false;\n }\n\n if (typeof validateInputOnChange === 'boolean') {\n return validateInputOnChange;\n }\n\n if (Array.isArray(validateInputOnChange)) {\n return validateInputOnChange.includes((path as string).replace(/[.][0-9]/g, `.${FORM_INDEX}`));\n }\n\n return false;\n}\n","import { useCallback, useState } from 'react';\nimport { useFormActions } from './actions';\nimport { getInputOnChange } from './get-input-on-change';\nimport { useFormErrors } from './hooks/use-form-errors/use-form-errors';\nimport { useFormList } from './hooks/use-form-list/use-form-list';\nimport { useFormStatus } from './hooks/use-form-status/use-form-status';\nimport { useFormValues } from './hooks/use-form-values/use-form-values';\nimport { useFormWatch } from './hooks/use-form-watch/use-form-watch';\nimport { getPath } from './paths';\nimport {\n _TransformValues,\n GetInputProps,\n GetTransformedValues,\n Initialize,\n IsValid,\n Key,\n OnReset,\n OnSubmit,\n Reset,\n SetFieldValue,\n SetValues,\n UseFormInput,\n UseFormReturnType,\n Validate,\n ValidateField,\n} from './types';\nimport { shouldValidateOnChange, validateFieldValue, validateValues } from './validate';\n\nexport function useForm<\n Values extends Record<string, any> = Record<string, any>,\n TransformValues extends _TransformValues<Values> = (values: Values) => Values,\n>({\n name,\n mode = 'controlled',\n initialValues,\n initialErrors = {},\n initialDirty = {},\n initialTouched = {},\n clearInputErrorOnChange = true,\n validateInputOnChange = false,\n validateInputOnBlur = false,\n onValuesChange,\n transformValues = ((values: Values) => values) as any,\n enhanceGetInputProps,\n validate: rules,\n}: UseFormInput<Values, TransformValues> = {}): UseFormReturnType<Values, TransformValues> {\n const $errors = useFormErrors<Values>(initialErrors);\n const $values = useFormValues<Values>({ initialValues, onValuesChange, mode });\n const $status = useFormStatus<Values>({ initialDirty, initialTouched, $values, mode });\n const $list = useFormList<Values>({ $values, $errors, $status });\n const $watch = useFormWatch<Values>({ $status });\n const [formKey, setFormKey] = useState(0);\n const [fieldKeys, setFieldKeys] = useState<Record<string, number>>({});\n\n const reset: Reset = useCallback(() => {\n $values.resetValues();\n $errors.clearErrors();\n $status.resetDirty();\n $status.resetTouched();\n mode === 'uncontrolled' && setFormKey((key) => key + 1);\n }, []);\n\n const initialize: Initialize<Values> = useCallback((values) => {\n $values.initialize(values, () => mode === 'uncontrolled' && setFormKey((key) => key + 1));\n }, []);\n\n const setFieldValue: SetFieldValue<Values> = useCallback(\n (path, value, options) => {\n const shouldValidate = shouldValidateOnChange(path, validateInputOnChange);\n\n $status.clearFieldDirty(path);\n $status.setFieldTouched(path, true);\n !shouldValidate && clearInputErrorOnChange && $errors.clearFieldError(path);\n\n $values.setFieldValue({\n path,\n value,\n updateState: mode === 'controlled',\n subscribers: [\n ...$watch.getFieldSubscribers(path),\n shouldValidate\n ? (payload) => {\n const validationResults = validateFieldValue(path, rules, payload.updatedValues);\n validationResults.hasError\n ? $errors.setFieldError(path, validationResults.error)\n : $errors.clearFieldError(path);\n }\n : null,\n options?.forceUpdate !== false && mode !== 'controlled'\n ? () =>\n setFieldKeys((keys) => ({\n ...keys,\n [path as string]: (keys[path as string] || 0) + 1,\n }))\n : null,\n ],\n });\n },\n [onValuesChange, rules]\n );\n\n const setValues: SetValues<Values> = useCallback(\n (values) => {\n const previousValues = $values.refValues.current;\n $values.setValues({ values, updateState: mode === 'controlled' });\n clearInputErrorOnChange && $errors.clearErrors();\n mode === 'uncontrolled' && setFormKey((key) => key + 1);\n\n Object.keys($watch.subscribers.current).forEach((path) => {\n const value = getPath(path, $values.refValues.current);\n const previousValue = getPath(path, previousValues);\n\n if (value !== previousValue) {\n $watch\n .getFieldSubscribers(path)\n .forEach((cb) => cb({ previousValues, updatedValues: $values.refValues.current }));\n }\n });\n },\n [onValuesChange, clearInputErrorOnChange]\n );\n\n const validate: Validate = useCallback(() => {\n const results = validateValues(rules, $values.refValues.current);\n $errors.setErrors(results.errors);\n return results;\n }, [rules]);\n\n const validateField: ValidateField<Values> = useCallback(\n (path) => {\n const results = validateFieldValue(path, rules, $values.refValues.current);\n results.hasError ? $errors.setFieldError(path, results.error) : $errors.clearFieldError(path);\n return results;\n },\n [rules]\n );\n\n const getInputProps: GetInputProps<Values> = (\n path,\n { type = 'input', withError = true, withFocus = true, ...otherOptions } = {}\n ) => {\n const onChange = getInputOnChange((value) =>\n setFieldValue(path, value as any, { forceUpdate: false })\n );\n\n const payload: any = { onChange };\n\n if (withError) {\n payload.error = $errors.errorsState[path];\n }\n\n if (type === 'checkbox') {\n payload[mode === 'controlled' ? 'checked' : 'defaultChecked'] = getPath(\n path,\n $values.refValues.current\n );\n } else {\n payload[mode === 'controlled' ? 'value' : 'defaultValue'] = getPath(\n path,\n $values.refValues.current\n );\n }\n\n if (withFocus) {\n payload.onFocus = () => $status.setFieldTouched(path, true);\n payload.onBlur = () => {\n if (shouldValidateOnChange(path, validateInputOnBlur)) {\n const validationResults = validateFieldValue(path, rules, $values.refValues.current);\n\n validationResults.hasError\n ? $errors.setFieldError(path, validationResults.error)\n : $errors.clearFieldError(path);\n }\n };\n }\n\n return Object.assign(\n payload,\n enhanceGetInputProps?.({\n inputProps: payload,\n field: path,\n options: { type, withError, withFocus, ...otherOptions },\n form,\n })\n );\n };\n\n const onSubmit: OnSubmit<Values, TransformValues> =\n (handleSubmit, handleValidationFailure) => (event) => {\n event?.preventDefault();\n const results = validate();\n\n if (results.hasErrors) {\n handleValidationFailure?.(results.errors, $values.refValues.current, event);\n } else {\n handleSubmit?.(transformValues($values.refValues.current) as any, event);\n }\n };\n\n const getTransformedValues: GetTransformedValues<Values, TransformValues> = (input) =>\n (transformValues as any)(input || $values.refValues.current);\n\n const onReset: OnReset = useCallback((event) => {\n event.preventDefault();\n reset();\n }, []);\n\n const isValid: IsValid<Values> = useCallback(\n (path) =>\n path\n ? !validateFieldValue(path, rules, $values.refValues.current).hasError\n : !validateValues(rules, $values.refValues.current).hasErrors,\n [rules]\n );\n\n const key: Key<Values> = (path) =>\n `${formKey}-${path as string}-${fieldKeys[path as string] || 0}`;\n\n const form: UseFormReturnType<Values, TransformValues> = {\n watch: $watch.watch,\n\n initialized: $values.initialized.current,\n values: $values.stateValues,\n getValues: $values.getValues,\n setInitialValues: $values.setValuesSnapshot,\n initialize,\n setValues,\n setFieldValue,\n\n errors: $errors.errorsState,\n setErrors: $errors.setErrors,\n setFieldError: $errors.setFieldError,\n clearFieldError: $errors.clearFieldError,\n clearErrors: $errors.clearErrors,\n\n resetDirty: $status.resetDirty,\n setTouched: $status.setTouched,\n setDirty: $status.setDirty,\n isTouched: $status.isTouched,\n resetTouched: $status.resetTouched,\n isDirty: $status.isDirty,\n getTouched: $status.getTouched,\n getDirty: $status.getDirty,\n\n reorderListItem: $list.reorderListItem,\n insertListItem: $list.insertListItem,\n removeListItem: $list.removeListItem,\n\n reset,\n validate,\n validateField,\n getInputProps,\n onSubmit,\n onReset,\n isValid,\n getTransformedValues,\n key,\n };\n\n useFormActions(name, form);\n\n return form;\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 { 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 { 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, 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 { 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 { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedNoiseData } from '../../abstract/node-props';\n\nfunction NoiseLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {noise?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {noise?.map((v, i) => (\n <Text key={i}>\n {v.position?.x}:{v.position?.y}:{v.position?.z}: {v.value}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseLoggerNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Box, Group, LoadingOverlay, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useEffect, useState } from 'react';\nimport { NoiseHandleFlag } from '../../abstract/handle-types';\nimport {\n ComputedModuleData,\n ComputedNoiseData,\n ComputedPositionsData,\n PositionNoiseValue,\n} from '../../abstract/node-props';\n\nfunction NoiseOutputNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const [generating, setGenerating] = useState<boolean>(false);\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseData>();\n\n const incomingModules = useIncomingComputedData<ComputedModuleData>(id, NoiseHandleFlag.module);\n\n const incomingPositions = useIncomingComputedData<ComputedPositionsData>(\n id,\n NoiseHandleFlag.position\n );\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module) {\n setGenerating(true);\n }\n }\n }, [incomingModules, incomingPositions]);\n\n useEffect(() => {\n if (incomingPositions?.length && incomingModules?.length) {\n const { module } = incomingModules[0];\n\n if (module && generating) {\n const noise: PositionNoiseValue[] = [];\n\n for (const input of incomingPositions) {\n for (const position of input.positions) {\n const value = module.getValue(position.x, position.y, position.z);\n\n noise.push({\n position,\n value,\n });\n }\n }\n\n console.log('SET COMPUTED DATA');\n updateComputedData(id, { noise, module });\n setGenerating(false);\n }\n }\n }, [generating]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Box pos=\"relative\">\n <LoadingOverlay\n visible={generating}\n zIndex={1000}\n overlayProps={{ radius: 'sm', blur: 2 }}\n />\n <Stack>\n <Group>Position Inputs: {incomingPositions?.length}</Group>\n <Group>Module Inputs: {incomingModules?.length}</Group>\n </Stack>\n </Box>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseOutputNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useIncomingComputedData, useUpdateNodeComputedData } from '@awesome-flow/core/hooks';\nimport { Group, Stack } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { ComputedNoiseData, ComputedNoiseTextureData } from '../../abstract/node-props';\n\nfunction NoiseRawTextureNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const updateComputedData = useUpdateNodeComputedData<ComputedNoiseTextureData>();\n\n const [dataLength, setDataLength] = useState(0);\n const [resolution, setResolution] = useState(0);\n\n const incoming = useIncomingComputedData<ComputedNoiseData>(id);\n const noise = useMemo(() => incoming?.map((p) => p.noise).flat(), [incoming]);\n\n useEffect(() => {\n if (noise?.length) {\n const size = Math.ceil(Math.sqrt(noise.length));\n\n const colors = noise.map((n) => [n.value * 255, n.value * 255, n.value * 255, 255]).flat();\n const dataArray = new Uint8Array(size * size * 4);\n dataArray.set(colors);\n\n setResolution(size);\n setDataLength(dataArray.length);\n\n updateComputedData(id, { textureData: dataArray, textureResolution: size });\n }\n }, [noise]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Stack>\n <Group>\n Resolution: {resolution}x{resolution}\n </Group>\n <Group>Input Length: {noise?.length || 0}</Group>\n <Group>\n Output Length ({resolution}*{resolution}*4): {dataLength}\n </Group>\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default NoiseRawTextureNode;\n","import { NodeContainer, NodeTrackConnections } from '@awesome-flow/core/layout';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useMemo } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { BasicNodeData } from '@awesome-flow/core/abstract';\nimport { useIncomingComputedData } from '@awesome-flow/core/hooks';\nimport { ComputedPositionsData } from '../../abstract/node-props';\n\nfunction PositionsLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\n const incoming = useIncomingComputedData<ComputedPositionsData>(id);\n\n const positions = useMemo(() => {\n return incoming?.map((p) => p.positions).flat();\n }, [incoming]);\n\n return (\n <NodeContainer id={id} selected={selected} data={data} type={type}>\n <Text>Size: {positions?.length || 0}</Text>\n <Divider h={5} />\n <Stack>\n {positions?.map((v, i) => (\n <Text key={i}>\n {v.x}:{v.y}:{v.z}\n </Text>\n ))}\n </Stack>\n <NodeTrackConnections handles={data.handles} nodeId={id} type=\"target\" />\n </NodeContainer>\n );\n}\n\nexport default PositionsLoggerNode;\n","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"],"mappings":"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","names":["exports","module","import_react","import_hooks","import_abstract","import_core","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_core","import_hooks","import_generator","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_hooks","Module","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_generator","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","position","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_react","import_core","import_hooks","import_utils","import_abstract","import_jsx_runtime","options","data","selected","import_layout","import_react","import_hooks","import_jsx_runtime","import_layout","import_react","import_abstract","import_core","import_jsx_runtime","import_layout","import_react","import_hooks","import_jsx_runtime","module","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_jsx_runtime","module","import_layout","import_core","import_hooks","isEqual","options","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","values","module","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_modifier","import_jsx_runtime","module","import_layout","import_react","import_core","import_hooks","import_modifier","ModifierModule","import_jsx_runtime","module","import_layout","import_react","import_core","import_hooks","import_modifier","import_jsx_runtime","module","import_layout","import_core","import_hooks","import_react","import_modifier","import_icons_react","import_hooks","import_abstract","import_jsx_runtime","values","module","import_layout","import_react","import_hooks","import_icons_react","import_jsx_runtime","options","import_layout","import_react","import_core","import_hooks","import_jsx_runtime","import_layout","import_hooks","import_core","import_react","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_core","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","module","import_layout","import_react","import_hooks","import_selector","import_core","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_core","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_core","import_transformer","import_jsx_runtime","module","import_layout","import_react","import_hooks","import_transformer","import_jsx_runtime","module"]}
@@ -0,0 +1,16 @@
1
+ export { NoiseBillowNode, NoiseCheckerboardNode, NoiseConstNode, NoiseCylindersNode, NoisePerlinNode, NoiseRidgedMultiNode, NoiseSimplexNode, NoiseSpheresNode, NoiseVoronoiNode, PositionConstNode, PositionGridNode, VariablePropertyNode, VariableValueNode } from './generators/index.cjs';
2
+ export { ModuleGroupNode } from './groups/index.cjs';
3
+ export { NoiseAbsNode, NoiseClampNode, NoiseCombineNode, NoiseCurveNode, NoiseExponentNode, NoiseInvertNode, NoiseNormalizeNode, NoiseScaleBiasNode, NoiseTerraceNode, VariableCombineNode } from './modifiers/index.cjs';
4
+ export { NoiseLoggerNode, NoiseOutputNode, NoiseRawTextureNode, PositionsLoggerNode } from './output/index.cjs';
5
+ export { NoiseBlendNode, NoiseSelectNode } from './selectors/index.cjs';
6
+ export { NoiseDisplaceNode, NoiseRotatePointNode, NoiseScalePointNode, NoiseTranslatePointNode, NoiseTurbulenceNode } from './transformers/index.cjs';
7
+ import 'react/jsx-runtime';
8
+ import '@xyflow/react';
9
+ import '../node-props-hKW-_KOU.cjs';
10
+ import '@awesome-flow/core/abstract';
11
+ import 'libnoise-ts/module/generator';
12
+ import 'libnoise-ts/noisegen';
13
+ import 'libnoise-ts/module/Module';
14
+ import '../handle-types-D-v5S53h.cjs';
15
+ import 'libnoise-ts/module/combiner';
16
+ import '../properties-BxwtU6i9.cjs';
@@ -0,0 +1,16 @@
1
+ export { NoiseBillowNode, NoiseCheckerboardNode, NoiseConstNode, NoiseCylindersNode, NoisePerlinNode, NoiseRidgedMultiNode, NoiseSimplexNode, NoiseSpheresNode, NoiseVoronoiNode, PositionConstNode, PositionGridNode, VariablePropertyNode, VariableValueNode } from './generators/index.js';
2
+ export { ModuleGroupNode } from './groups/index.js';
3
+ export { NoiseAbsNode, NoiseClampNode, NoiseCombineNode, NoiseCurveNode, NoiseExponentNode, NoiseInvertNode, NoiseNormalizeNode, NoiseScaleBiasNode, NoiseTerraceNode, VariableCombineNode } from './modifiers/index.js';
4
+ export { NoiseLoggerNode, NoiseOutputNode, NoiseRawTextureNode, PositionsLoggerNode } from './output/index.js';
5
+ export { NoiseBlendNode, NoiseSelectNode } from './selectors/index.js';
6
+ export { NoiseDisplaceNode, NoiseRotatePointNode, NoiseScalePointNode, NoiseTranslatePointNode, NoiseTurbulenceNode } from './transformers/index.js';
7
+ import 'react/jsx-runtime';
8
+ import '@xyflow/react';
9
+ import '../node-props-CeZ8Oshz.js';
10
+ import '@awesome-flow/core/abstract';
11
+ import 'libnoise-ts/module/generator';
12
+ import 'libnoise-ts/noisegen';
13
+ import 'libnoise-ts/module/Module';
14
+ import '../handle-types-D-v5S53h.js';
15
+ import 'libnoise-ts/module/combiner';
16
+ import '../properties-BxwtU6i9.js';