@awesome-flow/noise 0.3.0 → 0.5.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 (105) hide show
  1. package/dist/abstract/index.cjs +1403 -2079
  2. package/dist/abstract/index.d.cts +23 -25
  3. package/dist/abstract/index.d.ts +23 -25
  4. package/dist/abstract/index.js +1319 -1998
  5. package/dist/index-BungWYrh.d.cts +49 -0
  6. package/dist/index-DsQSjZC5.d.ts +49 -0
  7. package/dist/modules/index.cjs +0 -1
  8. package/dist/modules/index.js +0 -1
  9. package/dist/{node-props-CeZ8Oshz.d.ts → node-props-BbqbXDXn.d.cts} +2 -22
  10. package/dist/{node-props-hKW-_KOU.d.cts → node-props-BbqbXDXn.d.ts} +2 -22
  11. package/dist/nodes/generators/index.cjs +130 -381
  12. package/dist/nodes/generators/index.d.cts +2 -8
  13. package/dist/nodes/generators/index.d.ts +2 -8
  14. package/dist/nodes/generators/index.js +112 -361
  15. package/dist/nodes/groups/index.cjs +27 -18
  16. package/dist/nodes/groups/index.js +34 -20
  17. package/dist/nodes/index.cjs +1652 -989
  18. package/dist/nodes/index.d.cts +3 -5
  19. package/dist/nodes/index.d.ts +3 -5
  20. package/dist/nodes/index.js +1629 -965
  21. package/dist/nodes/modifiers/index.cjs +17 -120
  22. package/dist/nodes/modifiers/index.d.cts +2 -6
  23. package/dist/nodes/modifiers/index.d.ts +2 -6
  24. package/dist/nodes/modifiers/index.js +16 -125
  25. package/dist/nodes/output/index.cjs +1270 -90
  26. package/dist/nodes/output/index.js +1318 -93
  27. package/dist/nodes/selectors/index.cjs +1295 -59
  28. package/dist/nodes/selectors/index.d.cts +1 -3
  29. package/dist/nodes/selectors/index.d.ts +1 -3
  30. package/dist/nodes/selectors/index.js +1343 -66
  31. package/dist/nodes/transformers/index.cjs +67 -207
  32. package/dist/nodes/transformers/index.d.cts +3 -5
  33. package/dist/nodes/transformers/index.d.ts +3 -5
  34. package/dist/nodes/transformers/index.js +54 -194
  35. package/dist/templates/generators/index.cjs +838 -1279
  36. package/dist/templates/generators/index.d.cts +13 -50
  37. package/dist/templates/generators/index.d.ts +13 -50
  38. package/dist/templates/generators/index.js +840 -1281
  39. package/dist/templates/groups/index.cjs +836 -1273
  40. package/dist/templates/groups/index.d.cts +1 -5
  41. package/dist/templates/groups/index.d.ts +1 -5
  42. package/dist/templates/groups/index.js +839 -1278
  43. package/dist/templates/index.cjs +838 -1281
  44. package/dist/templates/index.d.cts +4 -7
  45. package/dist/templates/index.d.ts +4 -7
  46. package/dist/templates/index.js +840 -1282
  47. package/dist/templates/modifiers/index.cjs +840 -1279
  48. package/dist/templates/modifiers/index.d.cts +11 -38
  49. package/dist/templates/modifiers/index.d.ts +11 -38
  50. package/dist/templates/modifiers/index.js +842 -1282
  51. package/dist/templates/output/index.cjs +838 -1275
  52. package/dist/templates/output/index.d.cts +4 -14
  53. package/dist/templates/output/index.d.ts +4 -14
  54. package/dist/templates/output/index.js +841 -1280
  55. package/dist/templates/selectors/index.cjs +838 -1275
  56. package/dist/templates/selectors/index.d.cts +3 -9
  57. package/dist/templates/selectors/index.d.ts +3 -9
  58. package/dist/templates/selectors/index.js +841 -1280
  59. package/dist/templates/transformers/index.cjs +838 -1275
  60. package/dist/templates/transformers/index.d.cts +3 -36
  61. package/dist/templates/transformers/index.d.ts +3 -36
  62. package/dist/templates/transformers/index.js +841 -1280
  63. package/package.json +3 -3
  64. package/dist/abstract/index.cjs.map +0 -1
  65. package/dist/abstract/index.js.map +0 -1
  66. package/dist/handle-types-D-v5S53h.d.cts +0 -22
  67. package/dist/handle-types-D-v5S53h.d.ts +0 -22
  68. package/dist/layout/index.cjs +0 -164
  69. package/dist/layout/index.cjs.map +0 -1
  70. package/dist/layout/index.d.cts +0 -26
  71. package/dist/layout/index.d.ts +0 -26
  72. package/dist/layout/index.js +0 -136
  73. package/dist/layout/index.js.map +0 -1
  74. package/dist/modules/index.cjs.map +0 -1
  75. package/dist/modules/index.js.map +0 -1
  76. package/dist/nodes/generators/index.cjs.map +0 -1
  77. package/dist/nodes/generators/index.js.map +0 -1
  78. package/dist/nodes/groups/index.cjs.map +0 -1
  79. package/dist/nodes/groups/index.js.map +0 -1
  80. package/dist/nodes/index.cjs.map +0 -1
  81. package/dist/nodes/index.js.map +0 -1
  82. package/dist/nodes/modifiers/index.cjs.map +0 -1
  83. package/dist/nodes/modifiers/index.js.map +0 -1
  84. package/dist/nodes/output/index.cjs.map +0 -1
  85. package/dist/nodes/output/index.js.map +0 -1
  86. package/dist/nodes/selectors/index.cjs.map +0 -1
  87. package/dist/nodes/selectors/index.js.map +0 -1
  88. package/dist/nodes/transformers/index.cjs.map +0 -1
  89. package/dist/nodes/transformers/index.js.map +0 -1
  90. package/dist/properties-BxwtU6i9.d.cts +0 -9
  91. package/dist/properties-BxwtU6i9.d.ts +0 -9
  92. package/dist/templates/generators/index.cjs.map +0 -1
  93. package/dist/templates/generators/index.js.map +0 -1
  94. package/dist/templates/groups/index.cjs.map +0 -1
  95. package/dist/templates/groups/index.js.map +0 -1
  96. package/dist/templates/index.cjs.map +0 -1
  97. package/dist/templates/index.js.map +0 -1
  98. package/dist/templates/modifiers/index.cjs.map +0 -1
  99. package/dist/templates/modifiers/index.js.map +0 -1
  100. package/dist/templates/output/index.cjs.map +0 -1
  101. package/dist/templates/output/index.js.map +0 -1
  102. package/dist/templates/selectors/index.cjs.map +0 -1
  103. package/dist/templates/selectors/index.js.map +0 -1
  104. package/dist/templates/transformers/index.cjs.map +0 -1
  105. package/dist/templates/transformers/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../node_modules/fast-deep-equal/index.js","../../../src/nodes/modifiers/index.ts","../../../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/layout/node-value-input.tsx","../../../src/layout/node-property-input.tsx","../../../src/layout/node-property-variables.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 { default as NoiseAbsNode } from './noise-abs-node';\nexport { default as NoiseClampNode } from './noise-clamp-node';\nexport { default as NoiseCombineNode } from './noise-combine-node';\nexport { default as NoiseCurveNode } from './noise-curve-node';\nexport { default as NoiseExponentNode } from './noise-exponent-node';\nexport { default as NoiseInvertNode } from './noise-invert-node';\nexport { default as NoiseNormalizeNode } from './noise-normalize-node';\nexport { default as NoiseScaleBiasNode } from './noise-scale-bias-node';\nexport { default as NoiseTerraceNode } from './noise-terrace-node';\nexport { default as VariableCombineNode } from './variable-combine-node';\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 { 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 { 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"],"mappings":"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","names":["exports","module","module","import_layout","import_react","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_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_core","import_jsx_runtime","import_jsx_runtime","import_hooks","import_react","import_core","import_abstract","import_jsx_runtime","import_jsx_runtime","options"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../node_modules/fast-deep-equal/index.js","../../../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/layout/node-value-input.tsx","../../../src/layout/node-property-input.tsx","../../../src/layout/node-property-variables.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","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 { 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 { 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"],"mappings":"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","names":["NodeContainer","NodeTrackConnections","useEffect","useIncomingComputedData","useUpdateNodeComputedData","jsx","NodeContainer","NodeTrackConnections","useEffect","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","useUpdateNodeData","useUpdateNodeComputedData","useIncomingComputedData","useEffect","NodeContainer","NodeTrackConnections","NodeContainer","NodeTrackConnections","Group","NumberInput","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","useEffect","useState","useCallback","useCallback","useState","useCallback","isEqual","useRef","useState","useCallback","useRef","useCallback","useEffect","useState","useCallback","options","useCallback","useEffect","useState","jsx","jsxs","useIncomingComputedData","useUpdateNodeData","useUpdateNodeComputedData","values","Group","NumberInput","NodeContainer","NodeTrackConnections","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","useEffect","useIncomingComputedData","useUpdateNodeComputedData","jsx","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","useState","useIncomingComputedData","useUpdateNodeData","useUpdateNodeComputedData","useEffect","NodeContainer","Stack","Group","NumberInput","NodeTrackConnections","NodeContainer","NodeTrackConnections","useEffect","useState","Group","NumberInput","Stack","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","jsx","jsxs","NodeContainer","NodeTrackConnections","ActionIcon","Button","Group","NumberInput","Space","useIncomingComputedData","useUpdateNodeComputedData","useUpdateNodeData","useCallback","useEffect","useState","IconX","randomId","NodeState","Fragment","jsx","jsxs","useIncomingComputedData","useUpdateNodeData","useUpdateNodeComputedData","values","Group","NumberInput","ActionIcon","NodeContainer","Space","Button","NodeTrackConnections","NodeCombobox","NodeContainer","NodeTrackConnections","useCallback","useEffect","useState","useIncomingNodeData","useUpdateNodeData","IconAsterisk","IconChevronLeft","IconChevronRight","IconChevronUp","IconPlus","NumberInput","Fragment","jsx","Fragment","jsx","useUpdateNodeData","useCallback","useEffect","useState","Group","Stack","jsx","jsxs","jsx","jsxs","options","IconPlus","IconChevronLeft","IconChevronRight","IconAsterisk","IconChevronUp","useState","useUpdateNodeData","useIncomingNodeData","useEffect","useCallback","NodeContainer","NodeCombobox","NodeTrackConnections"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/nodes/output/index.ts","../../../src/nodes/output/noise-logger-node.tsx","../../../src/nodes/output/noise-output-node.tsx","../../../src/nodes/output/noise-raw-texture-node.tsx","../../../src/nodes/output/positions-logger-node.tsx"],"sourcesContent":["export { default as NoiseLoggerNode } from './noise-logger-node';\nexport { default as NoiseOutputNode } from './noise-output-node';\nexport { default as NoiseRawTextureNode } from './noise-raw-texture-node';\nexport { default as PositionsLoggerNode } from './positions-logger-node';\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"],"mappings":"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","names":["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"]}