@awesome-flow/noise 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesome-flow/noise",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "The Awesome Flow package for noise. Provides basic components to define noise-based flows.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "peerDependencies": {
21
21
  "@awesome-ecs/abstract": ">=0.22.0",
22
+ "@awesome-ecs/core": ">=0.25.0",
22
23
  "@awesome-flow/core": ">=0.9.0",
23
24
  "@mantine/core": ">=7.13.2",
24
25
  "@mantine/form": ">=7.12.1",
@@ -31,17 +32,18 @@
31
32
  "zustand": ">=4.5.5"
32
33
  },
33
34
  "devDependencies": {
34
- "@awesome-ecs/abstract": "0.23.0",
35
- "@awesome-flow/core": "0.10.0",
36
- "@mantine/core": "^8.3.16",
37
- "@mantine/form": "^8.3.16",
38
- "@mantine/hooks": "^8.3.16",
35
+ "@awesome-ecs/abstract": "0.26.0",
36
+ "@awesome-ecs/core": "0.26.0",
37
+ "@awesome-flow/core": "0.12.0",
38
+ "@mantine/core": "^8.3.18",
39
+ "@mantine/form": "^8.3.18",
40
+ "@mantine/hooks": "^8.3.18",
39
41
  "@tabler/icons-react": "^3.40.0",
40
42
  "@xyflow/react": "^12.10.1",
41
43
  "@xyflow/system": "^0.0.75",
42
44
  "react": "^19.2.4",
43
45
  "react-dom": "^19.2.4",
44
- "zustand": "^5.0.11"
46
+ "zustand": "^5.0.12"
45
47
  },
46
48
  "exports": {
47
49
  "./abstract": {
@@ -122,5 +124,5 @@
122
124
  "url": "https://github.com/privatebytes/awesome-flow/issues"
123
125
  },
124
126
  "homepage": "https://github.com/privatebytes/awesome-flow#readme",
125
- "gitHead": "60aca24901189ee21b2546d3f7d46ac630b38be1"
127
+ "gitHead": "5683c59e93e3da7c63892f014d25d3c065596803"
126
128
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract-3knbwDkz.cjs","names":["NodeContainer","Text","Divider","Stack","NodeContainer","HandlesIncomingDataStatus","Text","NodeContainer","Stack","Group","NodeContainer","Text","Divider","Stack","CoreHandleType","IDGenerator","Position","CoreHandleType","PipelineFactory","Billow","Position","PipelineFactory","Checkerboard","Position","PipelineFactory","Const","Position","CoreHandleType","PipelineFactory","Cylinders","Position","CoreHandleType","PipelineFactory","Perlin","Position","CoreHandleType","PipelineFactory","RidgedMulti","Position","CoreHandleType","PipelineFactory","Spheres","Position","CoreHandleType","PipelineFactory","Voronoi","Position","PipelineFactory","Position","PipelineFactory","IDGenerator","CoreTemplateGroup","Position","PipelineFactory","Position","PipelineFactory","Abs","Position","PipelineFactory","Clamp","Add","Max","Min","Multiply","Power","Position","PipelineFactory","Position","PipelineFactory","Curve","Tuple","Position","PipelineFactory","Exponent","Position","PipelineFactory","Invert","IDGenerator","Position","PipelineFactory","NormalizeNoiseModule","Position","PipelineFactory","ScaleBias","Position","PipelineFactory","Terrace","Position","Position","PipelineFactory","Position","PipelineFactory","Position","Position","PipelineFactory","Blend","Position","PipelineFactory","Select","Position","PipelineFactory","Displace","Position","PipelineFactory","RotatePoint","Position","PipelineFactory","ScalePoint","Position","PipelineFactory","TranslatePoint","Position","CoreHandleType","PipelineFactory","Turbulence","ModuleGroupNode","PositionConstNode","PositionGridNode","NoiseOutputNode","NoiseTextureDataNode","NoiseLoggerNode","PositionsLoggerNode","NoiseConstNode","NoiseBillowNode","NoiseCheckerboardNode","NoiseCylindersNode","NoisePerlinNode","NoiseRidgedMultiNode","NoiseSpheresNode","NoiseVoronoiNode","NoiseCombineNode","NoiseClampNode","NoiseAbsNode","NoiseNormalizeNode","NoiseCurveNode","NoiseExponentNode","NoiseInvertNode","NoiseScaleBiasNode","NoiseTerraceNode","NoiseBlendNode","NoiseSelectNode","NoiseDisplaceNode","NoiseRotatePointNode","NoiseScalePointNode","NoiseTranslatePointNode","NoiseTurbulenceNode"],"sources":["../src/abstract/handle-types.ts","../src/nodes/output/noise-logger-node.tsx","../src/nodes/output/noise-output-node.tsx","../src/nodes/output/noise-texture-data-node.tsx","../src/nodes/output/positions-logger-node.tsx","../src/abstract/templates.ts","../src/middleware/incoming-property-value.ts","../src/templates/generators/noise-billow-template.ts","../src/templates/generators/noise-checkerboard-template.ts","../src/templates/generators/noise-const-template.ts","../src/templates/generators/noise-cylinders-template.ts","../src/templates/generators/noise-perlin-template.ts","../src/templates/generators/noise-ridgedmulti-template.ts","../src/templates/generators/noise-spheres-template.ts","../src/templates/generators/noise-voronoi-template.ts","../src/templates/generators/position-const-template.ts","../src/templates/generators/position-grid-template.ts","../src/templates/groups/module-group-template.ts","../src/templates/modifiers/noise-abs-template.ts","../src/templates/modifiers/noise-clamp-template.ts","../src/abstract/operations.ts","../src/templates/modifiers/noise-combine-template.ts","../src/templates/modifiers/noise-curve-template.ts","../src/templates/modifiers/noise-exponent-template.ts","../src/templates/modifiers/noise-invert-template.ts","../src/templates/modifiers/noise-normalize-template.ts","../src/templates/modifiers/noise-scalebias-template.ts","../src/templates/modifiers/noise-terrace-template.ts","../src/templates/output/noise-logger-template.ts","../src/templates/output/noise-output-template.ts","../src/templates/output/noise-texture-data-template.ts","../src/templates/output/position-logger-template.ts","../src/templates/selectors/noise-blend-template.ts","../src/templates/selectors/noise-select-template.ts","../src/templates/transformers/noise-displace-template.ts","../src/templates/transformers/noise-rotate-point-template.ts","../src/templates/transformers/noise-scale-point-template.ts","../src/templates/transformers/noise-translate-point-template.ts","../src/templates/transformers/noise-turbulence-template.ts","../src/abstract/node-types.ts"],"sourcesContent":["import { CustomNodeHandle } from '@awesome-flow/core/abstract';\r\n\r\nexport enum NoiseHandleType {\r\n textureData = 'texture-data',\r\n noise = 'noise',\r\n position = 'position',\r\n module = 'module'\r\n}\r\n\r\nexport enum DisplacementHandle {\r\n sourceModule = 'source',\r\n xModule = 'x-module',\r\n yModule = 'y-module',\r\n zModule = 'z-module',\r\n output = 'output'\r\n}\r\n\r\nexport enum NoiseSourceControlHandle {\r\n source = 'source',\r\n control = 'control',\r\n output = 'output'\r\n}\r\n\r\nexport type DisplacementModuleHandle = CustomNodeHandle & {\r\n dataId: DisplacementHandle;\r\n};\r\n\r\nexport type NoiseSourceControlModuleHandle = CustomNodeHandle & {\r\n dataId: NoiseSourceControlHandle;\r\n};\r\n","import { BasicNodeData } from '@awesome-flow/core/abstract';\r\nimport { useNodeContext } from '@awesome-flow/core/hooks';\r\nimport { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { Divider, Stack, Text } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { memo } from 'react';\r\nimport { NoiseHandleType } from '../../abstract';\r\nimport { NoiseLoggerContext } from '../../templates';\r\n\r\nfunction NoiseLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\r\n const context = useNodeContext<NoiseLoggerContext>(id)?.incoming?.[NoiseHandleType.noise];\r\n const noise = context?.filter((c) => c.computed?.noise).flatMap((c) => c.computed.noise) || [];\r\n\r\n return (\r\n <NodeContainer id={id} selected={selected} data={data} type={type}>\r\n <Text>Size: {noise?.length || 0}</Text>\r\n <Divider h={5} />\r\n <Stack>\r\n {noise?.map((v, i) => (\r\n <Text key={i}>\r\n {v.position?.x}:{v.position?.y}:{v.position?.z}: {v.value}\r\n </Text>\r\n ))}\r\n </Stack>\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default memo(NoiseLoggerNode);\r\n","import { BasicNodeData } from '@awesome-flow/core/abstract';\r\nimport { HandlesIncomingDataStatus } from '@awesome-flow/core/components';\r\nimport { useNodeContext } from '@awesome-flow/core/hooks';\r\nimport { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { NoiseOutputContext } from '@awesome-flow/noise/templates';\r\nimport { Text } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { memo } from 'react';\r\n\r\nfunction NoiseOutputNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\r\n const context = useNodeContext<NoiseOutputContext>(id);\r\n\r\n return (\r\n <NodeContainer id={id} selected={selected} data={data} type={type}>\r\n <HandlesIncomingDataStatus nodeId={id} handles={data.handles} />\r\n <Text mt={5}>Noise points: {context?.computed?.noise?.length || 0}</Text>\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default memo(NoiseOutputNode);\r\n","import { BasicNodeData } from '@awesome-flow/core/abstract';\r\nimport { useNodeContext } from '@awesome-flow/core/hooks';\r\nimport { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { NoiseTextureDataContext } from '@awesome-flow/noise/templates';\r\nimport { Group, Stack } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { memo } from 'react';\r\n\r\nfunction NoiseTextureDataNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\r\n const context = useNodeContext<NoiseTextureDataContext>(id)?.computed;\r\n\r\n return (\r\n <NodeContainer id={id} selected={selected} data={data} type={type}>\r\n <Stack>\r\n <Group>\r\n Resolution: {context?.textureResolutionX}x{context?.textureResolutionY}\r\n </Group>\r\n <Group>Input Length: {context?.textureData?.length || 0}</Group>\r\n <Group>\r\n Output Length ({context?.textureResolutionX}*{context?.textureResolutionY}*4): {context?.textureData?.length || 0}\r\n </Group>\r\n </Stack>\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default memo(NoiseTextureDataNode);\r\n","import { BasicNodeData } from '@awesome-flow/core/abstract';\r\nimport { useNodeContext } from '@awesome-flow/core/hooks';\r\nimport { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { Divider, Stack, Text } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { memo } from 'react';\r\nimport { NoiseHandleType } from '../../abstract';\r\nimport { PositionLoggerNodeContext } from '../../templates';\r\n\r\nfunction PositionsLoggerNode({ id, selected, data, type }: NodeProps<Node<BasicNodeData>>) {\r\n const incoming = useNodeContext<PositionLoggerNodeContext>(id)?.incoming[NoiseHandleType.position];\r\n const positions = incoming\r\n ?.filter((p) => !!p.computed?.positions?.length)\r\n .flatMap((p) => p.computed.positions);\r\n\r\n return (\r\n <NodeContainer id={id} selected={selected} data={data} type={type}>\r\n <Text>Size: {positions?.length || 0}</Text>\r\n <Divider h={5} />\r\n <Stack>\r\n {positions?.map((v, i) => (\r\n <Text key={i}>\r\n {v.x}:{v.y}:{v.z}\r\n </Text>\r\n ))}\r\n </Stack>\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default memo(PositionsLoggerNode);\r\n","export enum NoiseTemplateGroup {\n positions = 'Positions',\n output = 'Output',\n noiseGenerators = 'Noise Generators',\n noiseModifiers = 'Noise Modifiers',\n noiseSelectors = 'Noise Selectors',\n noiseTransformers = 'Noise Transformers'\n}\n","import { IMiddleware } from '@awesome-ecs/abstract/pipelines';\r\nimport { CoreHandleType } from '@awesome-flow/core/abstract';\r\nimport { NoiseGeneratorContext } from '../abstract/node-props';\r\n\r\nexport class IncomingPropertyValueMiddleware implements IMiddleware<NoiseGeneratorContext<any>> {\r\n action(context: NoiseGeneratorContext<any>): void {\r\n const incoming = context.incoming?.[CoreHandleType.variableProperty] ?? [];\r\n\r\n const properties = { ...context.data };\r\n\r\n for (const connection of incoming) {\r\n const overwrite = connection.computed;\r\n\r\n if (overwrite) {\r\n Object.assign(properties, { [overwrite.property]: overwrite.value });\r\n }\r\n }\r\n\r\n context.properties = properties;\r\n }\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { IDGenerator } from '@awesome-flow/core/utils';\r\nimport { Position } from '@xyflow/system';\r\nimport { Billow } from 'libnoise-simplex-ts';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NodeFBMNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseTemplateGroup } from '../../abstract/templates';\r\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\r\n\r\nexport type NoiseBillowContext = NoiseGeneratorContext<NodeFBMNoiseData>;\r\n\r\nexport class NoiseBillowNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeFBMNoiseData> = {\r\n id: IDGenerator.template(),\r\n type: NoiseNodeType.noiseBillow,\r\n group: NoiseTemplateGroup.noiseGenerators,\r\n data: {\r\n title: 'Billow Noise',\r\n frequency: 0.1,\r\n lacunarity: 2.0,\r\n octaves: 5,\r\n persistence: 0.5,\r\n seed: 0\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: CoreHandleType.variableProperty,\r\n connection: 'target'\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseBillowContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\r\n action: (context: NoiseBillowContext) => {\r\n const { properties } = context;\r\n\r\n context.computed = {\r\n module: new Billow(\r\n properties.frequency,\r\n properties.lacunarity,\r\n properties.octaves,\r\n properties.persistence,\r\n properties.seed\r\n )\r\n };\r\n },\r\n cleanup: (context: NoiseBillowContext) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { ComputedModuleData } from '@awesome-flow/noise/abstract';\r\nimport { Position } from '@xyflow/system';\r\nimport { Checkerboard } from 'libnoise-simplex-ts';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseTemplateGroup } from '../../abstract/templates';\r\n\r\nexport type NoiseCheckerboardContext = NodeContext<BasicNodeData, ComputedModuleData>;\r\n\r\nexport class NoiseCheckerboardNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseCheckerboard,\r\n group: NoiseTemplateGroup.noiseGenerators,\r\n data: {\r\n title: 'Checkerboard Noise'\r\n },\r\n handles: [\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseCheckerboardContext> = PipelineFactory.create({\r\n action: (context: NoiseCheckerboardContext) => {\r\n context.computed = {\r\n module: new Checkerboard()\r\n };\r\n },\r\n cleanup: (context: NoiseCheckerboardContext) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Const } from 'libnoise-simplex-ts';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeConstNoiseData } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseTemplateGroup } from '../../abstract/templates';\r\n\r\nexport type NoiseConstContext = NodeContext<NodeConstNoiseData, ComputedModuleData>;\r\n\r\nexport class NoiseConstNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeConstNoiseData> = {\r\n type: NoiseNodeType.noiseConst,\r\n group: NoiseTemplateGroup.noiseGenerators,\r\n data: {\r\n title: 'Const Value Noise',\r\n noise: 0,\r\n min: -1,\r\n max: 1\r\n },\r\n handles: [\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseConstContext> = PipelineFactory.create<NoiseConstContext>({\r\n shouldRun(context: NoiseConstContext) {\r\n return context.data.noise !== undefined && context.data.noise !== null;\r\n },\r\n action(context: NoiseConstContext) {\r\n const module = new Const(context.data.noise);\r\n context.computed = { module };\r\n },\r\n\t\tcleanup(context: NoiseConstContext) {\r\n\t\t\tcontext.computed = null;\r\n\t\t}\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { Cylinders } from 'libnoise-simplex-ts';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NodeCylindersNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoiseCylindersContext = NoiseGeneratorContext<NodeCylindersNoiseData>;\n\nexport class NoiseCylindersNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeCylindersNoiseData> = {\n type: NoiseNodeType.noiseCylinders,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Cylinders Noise',\n frequency: 0.1\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline?: IPipeline<NoiseCylindersContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n action: (context: NoiseCylindersContext) => {\n const { properties } = context;\n context.computed = {\n module: new Cylinders(properties.frequency)\n };\n },\n cleanup: (context: NoiseCylindersContext) => {\n context.computed = null;\n }\n });\n}\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { Perlin } from 'libnoise-simplex-ts';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NodeFBMNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoisePerlinContext = NoiseGeneratorContext<NodeFBMNoiseData>;\n\nexport class NoisePerlinNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeFBMNoiseData> = {\n type: NoiseNodeType.noisePerlin,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Perlin Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 5,\n persistence: 0.5,\n seed: 0\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline?: IPipeline<NoisePerlinContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n action: (context: NoisePerlinContext) => {\n const { properties } = context;\n context.computed = {\n module: new Perlin(\n properties.frequency,\n properties.lacunarity,\n properties.octaves,\n properties.persistence,\n properties.seed\n )\n };\n },\n\t\tcleanup: (context: NoisePerlinContext) => {\n\t\t\tcontext.computed = null;\n\t\t}\n });\n}\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { RidgedMulti } from 'libnoise-simplex-ts';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NodeRidgedNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoiseRidgedMultiContext = NoiseGeneratorContext<NodeRidgedNoiseData>;\n\nexport class NoiseRidgedMultiNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeRidgedNoiseData> = {\n type: NoiseNodeType.noiseRidgedMulti,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Ridged Multi Noise',\n frequency: 0.1,\n lacunarity: 2.0,\n octaves: 6,\n offset: 1.0,\n gain: 2.0,\n seed: 0\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline?: IPipeline<NoiseRidgedMultiContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n action: (context: NoiseRidgedMultiContext) => {\n const { properties } = context;\n context.computed = {\n module: new RidgedMulti(\n properties.frequency,\n properties.lacunarity,\n properties.octaves,\n properties.offset,\n properties.gain,\n properties.seed\n )\n };\n },\n cleanup: (context: NoiseRidgedMultiContext) => {\n context.computed = null;\n }\n });\n}\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { Spheres } from 'libnoise-simplex-ts';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NodeSpheresNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoiseSpheresContext = NoiseGeneratorContext<NodeSpheresNoiseData>;\n\nexport class NoiseSpheresNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeSpheresNoiseData> = {\n type: NoiseNodeType.noiseSpheres,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Spheres Noise',\n frequency: 0.1\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline?: IPipeline<NoiseSpheresContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n action: (context: NoiseSpheresContext) => {\n const { properties } = context;\n context.computed = {\n module: new Spheres(properties.frequency)\n };\n },\n\t\tcleanup: (context: NoiseSpheresContext) => {\n\t\t\tcontext.computed = null;\n\t\t}\n });\n}\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\nimport { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { Voronoi } from 'libnoise-simplex-ts';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport { NodeVoronoiNoiseData, NoiseGeneratorContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { NoiseTemplateGroup } from '../../abstract/templates';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoiseVoronoiContext = NoiseGeneratorContext<NodeVoronoiNoiseData>;\n\nexport class NoiseVoronoiNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeVoronoiNoiseData> = {\n type: NoiseNodeType.noiseVoronoi,\n group: NoiseTemplateGroup.noiseGenerators,\n data: {\n title: 'Voronoi Noise',\n frequency: 0.1,\n displacement: 1.0,\n distance: true,\n seed: 0\n },\n handles: [\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline?: IPipeline<NoiseVoronoiContext> = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n action: (context: NoiseVoronoiContext) => {\n const { properties } = context;\n context.computed = {\n module: new Voronoi(properties.frequency, properties.displacement, properties.distance, properties.seed)\n };\n },\n\t\tcleanup: (context: NoiseVoronoiContext) => {\n\t\t\tcontext.computed = null;\n\t\t}\n });\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedPositionsData, NodePositionData } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseTemplateGroup } from '../../abstract/templates';\r\n\r\nexport type NodePositionContext = NodeContext<NodePositionData, ComputedPositionsData>;\r\n\r\nexport class PositionConstNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodePositionData> = {\r\n type: NoiseNodeType.position,\r\n group: NoiseTemplateGroup.positions,\r\n data: {\r\n title: 'Position Output',\r\n position: { x: 0, y: 0, z: 0 }\r\n },\r\n handles: [\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.position,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NodePositionContext>({\r\n shouldRun(context: NodePositionContext) {\r\n return context.data.position !== undefined && context.data.position !== null;\r\n },\r\n action(context: NodePositionContext) {\r\n const { data } = context;\r\n\r\n context.computed = {\r\n positions: [data.position]\r\n };\r\n },\r\n\t\tcleanup(context: NodePositionContext) {\r\n\t\t\tcontext.computed = null;\r\n\t\t}\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedPositionsData, Position as GridPosition, NodeGridData } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseTemplateGroup } from '../../abstract/templates';\r\n\r\nexport type NodeGridPositionContext = NodeContext<NodeGridData, ComputedPositionsData>;\r\n\r\nexport class PositionGridNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeGridData> = {\r\n type: NoiseNodeType.grid,\r\n group: NoiseTemplateGroup.positions,\r\n data: {\r\n title: 'Grid Output',\r\n center: { x: 0, y: 0, z: 0 },\r\n radius: 1\r\n },\r\n handles: [\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.position,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NodeGridPositionContext>({\r\n shouldRun(context: NodeGridPositionContext) {\r\n const { center, radius } = context.data;\r\n return center !== undefined && radius !== undefined;\r\n },\r\n action(context: NodeGridPositionContext) {\r\n const { data } = context;\r\n const { center, radius } = data;\r\n\r\n const positions: GridPosition[] = [];\r\n\r\n for (let i = -radius; i < radius; i++) {\r\n for (let j = -radius; j < radius; j++) {\r\n positions.push({ x: center.x + i, y: center.y + j, z: center.z });\r\n }\r\n }\r\n\r\n context.computed = {\r\n positions\r\n };\r\n },\r\n cleanup(context: NodeGridPositionContext) {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { BasicNodeData, CoreTemplateGroup, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { IDGenerator } from '@awesome-flow/core/utils';\r\nimport { ComputedModuleData, NoiseModuleContext } from '@awesome-flow/noise/abstract';\r\nimport { Position } from '@xyflow/system';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type ModuleGroupNodeContext = NodeContext<\r\n BasicNodeData,\r\n ComputedModuleData,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class ModuleGroupNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n id: IDGenerator.template(),\r\n type: NoiseNodeType.groupModule,\r\n group: CoreTemplateGroup.groups,\r\n data: {\r\n title: 'Modules Group',\r\n isGroup: true,\r\n initialSize: {\r\n width: 300,\r\n height: 200\r\n },\r\n collapsedSize: {\r\n width: 300,\r\n height: 80\r\n }\r\n },\r\n handles: [\r\n {\r\n position: Position.Bottom,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1,\r\n hideOnCollapse: true\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<ModuleGroupNodeContext> = PipelineFactory.create({\r\n shouldRun(context: ModuleGroupNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action: (context: ModuleGroupNodeContext) => {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n context.computed = { module };\r\n },\r\n cleanup: (context: ModuleGroupNodeContext) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Abs, ModifierModule } from 'libnoise-simplex-ts';\r\nimport { ComputedModuleData, NoiseModuleContext, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseAbsNodeContext = NodeContext<\r\n BasicNodeData,\r\n ComputedModuleData<ModifierModule>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseAbsNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseAbs,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Abs Noise'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseAbsNodeContext> = PipelineFactory.create({\r\n shouldRun(context: NoiseAbsNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseAbsNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (module) {\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = module;\r\n } else {\r\n context.computed = { module: new Abs(module) };\r\n }\r\n }\r\n },\r\n cleanup(context: NoiseAbsNodeContext) {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Clamp, ModifierModule } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeClampNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseClampNodeContext = NodeContext<\r\n NodeClampNoiseData,\r\n ComputedModuleData<ModifierModule>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseClampNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeClampNoiseData> = {\r\n type: NoiseNodeType.noiseClamp,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Clamp Noise',\r\n lowerBound: -1,\r\n upperBound: 1\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseClampNodeContext>({\r\n shouldRun(context: NoiseClampNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseClampNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (module) {\r\n const clampModule = context.computed?.module as Clamp;\r\n\r\n if (clampModule) {\r\n clampModule.sourceModule = module;\r\n clampModule.lowerBound = context.data.lowerBound;\r\n clampModule.upperBound = context.data.upperBound;\r\n } else {\r\n context.computed = {\r\n module: new Clamp(module, context.data.lowerBound, context.data.upperBound)\r\n };\r\n }\r\n }\r\n },\r\n cleanup(context: NoiseClampNodeContext) {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { Add, Max, Min, Multiply, Power } from 'libnoise-simplex-ts';\n\nexport enum NoiseCombineType {\n add = 'add',\n max = 'max',\n min = 'min',\n multiply = 'multiply',\n power = 'power'\n}\n\nexport const noiseCombineModuleMap = {\n [NoiseCombineType.add]: Add,\n [NoiseCombineType.max]: Max,\n [NoiseCombineType.min]: Min,\n [NoiseCombineType.multiply]: Multiply,\n [NoiseCombineType.power]: Power\n};\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { CombinerModule } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeCombineNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NoiseCombineType, noiseCombineModuleMap } from '../../abstract/operations';\r\n\r\nexport type NoiseCombineNodeContext = NodeContext<\r\n NodeCombineNoiseData,\r\n ComputedModuleData<CombinerModule>,\r\n { [NoiseHandleType.module]: NoiseModuleContext[] }\r\n>;\r\n\r\nexport class NoiseCombineNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeCombineNoiseData> = {\r\n type: NoiseNodeType.noiseCombine,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Combine Noise',\r\n operation: NoiseCombineType.add\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n minConnections: 2,\r\n maxConnections: 2\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseCombineNodeContext>({\r\n shouldRun(context: NoiseCombineNodeContext): boolean {\r\n return context.incoming[NoiseHandleType.module]?.length === 2;\r\n },\r\n action(context: NoiseCombineNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n\r\n const ModuleFactory = noiseCombineModuleMap[context.data.operation];\r\n const module = new ModuleFactory(incoming[0].computed?.module, incoming[1].computed?.module);\r\n\r\n context.computed = { module };\r\n },\r\n cleanup(context: NoiseCombineNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Curve, ModifierModule, Tuple } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeCurveNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseCurveNodeContext = NodeContext<\r\n NodeCurveNoiseData,\r\n ComputedModuleData<ModifierModule>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseCurveNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeCurveNoiseData> = {\r\n type: NoiseNodeType.noiseCurve,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Noise Curve',\r\n points: []\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseCurveNodeContext>({\r\n shouldRun(context: NoiseCurveNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseCurveNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (module) {\r\n const curve = new Curve(\r\n module,\r\n context.data.points.map((p) => new Tuple(p.input, p.output))\r\n );\r\n context.computed = { module: curve };\r\n }\r\n },\r\n cleanup(context: NoiseCurveNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Exponent } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeExponentNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseExponentNodeContext = NodeContext<\r\n NodeExponentNoiseData,\r\n ComputedModuleData<Exponent>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseExponentNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeExponentNoiseData> = {\r\n type: NoiseNodeType.noiseExponent,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Noise Exponent',\r\n exponent: 1\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseExponentNodeContext>({\r\n shouldRun(context: NoiseExponentNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseExponentNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.exponent = context.data.exponent;\r\n } else if (module) {\r\n const exponentModule = new Exponent(module, context.data.exponent);\r\n context.computed = { module: exponentModule };\r\n }\r\n },\r\n cleanup(context: NoiseExponentNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Invert } from 'libnoise-simplex-ts';\r\nimport { ComputedModuleData, NoiseModuleContext, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseInvertNodeContext = NodeContext<\r\n BasicNodeData,\r\n ComputedModuleData<Invert>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseInvertNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseInvert,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Invert Noise'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseInvertNodeContext>({\r\n shouldRun(context: NoiseInvertNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseInvertNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = module;\r\n } else if (module) {\r\n context.computed = { module: new Invert(module) };\r\n }\r\n },\r\n cleanup(context: NoiseInvertNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { IDGenerator } from '@awesome-flow/core/utils';\r\nimport { Position } from '@xyflow/system';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeNormalizeNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\nimport { NormalizeNoiseModule } from '../../modules';\r\n\r\nexport type NoiseNormalizeNodeContext = NodeContext<\r\n NodeNormalizeNoiseData,\r\n ComputedModuleData<NormalizeNoiseModule>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseNormalizeNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeNormalizeNoiseData> = {\r\n id: IDGenerator.template(),\r\n type: NoiseNodeType.noiseNormalize,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Normalize Noise',\r\n intervalStart: -1,\r\n intervalEnd: 1\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseNormalizeNodeContext>({\r\n shouldRun(context: NoiseNormalizeNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseNormalizeNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (module) {\r\n const normalizeModule = new NormalizeNoiseModule(module, context.data.intervalStart, context.data.intervalEnd);\r\n context.computed = { module: normalizeModule };\r\n }\r\n },\r\n cleanup(context: NoiseNormalizeNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { ScaleBias } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeScaleBiasNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseScaleBiasNodeContext = NodeContext<\r\n NodeScaleBiasNoiseData,\r\n ComputedModuleData<ScaleBias>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseScaleBiasNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeScaleBiasNoiseData> = {\r\n type: NoiseNodeType.noiseScaleBias,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Scale/Bias Noise',\r\n scale: 1.0,\r\n bias: 0.0\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseScaleBiasNodeContext>({\r\n shouldRun(context: NoiseScaleBiasNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseScaleBiasNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = module;\r\n context.computed.module.scale = context.data.scale;\r\n context.computed.module.bias = context.data.bias;\r\n } else if (module) {\r\n const scaleBiasModule = new ScaleBias(module, context.data.scale, context.data.bias);\r\n context.computed = { module: scaleBiasModule };\r\n }\r\n },\r\n cleanup(context: NoiseScaleBiasNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Terrace } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeTerraceNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseTerraceNodeContext = NodeContext<\r\n NodeTerraceNoiseData,\r\n ComputedModuleData<Terrace>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseTerraceNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeTerraceNoiseData> = {\r\n type: NoiseNodeType.noiseTerrace,\r\n group: NoiseTemplateGroup.noiseModifiers,\r\n data: {\r\n title: 'Noise Terrace',\r\n points: []\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseTerraceNodeContext>({\r\n shouldRun(context: NoiseTerraceNodeContext): boolean {\r\n return !!context.incoming[NoiseHandleType.module];\r\n },\r\n action(context: NoiseTerraceNodeContext): void {\r\n const incoming = context.incoming[NoiseHandleType.module];\r\n const module = incoming.computed?.module;\r\n\r\n if (module) {\r\n const terrace = new Terrace(module, context.data.points);\r\n context.computed = { module: terrace };\r\n }\r\n },\r\n cleanup(context: NoiseTerraceNodeContext): void {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { Position } from '@xyflow/system';\r\nimport { ComputedNoiseData, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseLoggerContext = NodeContext<\r\n BasicNodeData,\r\n never,\r\n { [NoiseHandleType.noise]: NodeContext<any, ComputedNoiseData>[] }\r\n>;\r\n\r\nexport class NoiseLoggerNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseLogger,\r\n group: NoiseTemplateGroup.output,\r\n data: {\r\n title: 'Noise Logger'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.noise,\r\n connection: 'target'\r\n }\r\n ]\r\n };\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport {\r\n ComputedNoiseData,\r\n ComputedPositionsData,\r\n NoiseModuleContext,\r\n NoiseTemplateGroup,\r\n PositionNoiseValue\r\n} from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseOutputContext = NodeContext<\r\n BasicNodeData,\r\n ComputedNoiseData,\r\n {\r\n [NoiseHandleType.position]: NodeContext<any, ComputedPositionsData>[];\r\n [NoiseHandleType.module]: NoiseModuleContext;\r\n }\r\n>;\r\n\r\nexport class NoiseOutputNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseOutput,\r\n group: NoiseTemplateGroup.output,\r\n data: {\r\n title: 'Noise Output'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.position,\r\n connection: 'target'\r\n },\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.noise,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseOutputContext> = PipelineFactory.create({\r\n action: (context) => {\r\n const incomingPositions = context.incoming[NoiseHandleType.position];\r\n const incomingModule = context.incoming[NoiseHandleType.module];\r\n\r\n if (incomingPositions?.length && incomingModule?.computed?.module) {\r\n const { module } = incomingModule.computed;\r\n\r\n const noise: PositionNoiseValue[] = [];\r\n\r\n for (const input of incomingPositions) {\r\n const { positions } = input.computed;\r\n for (const position of positions) {\r\n const value = module.getValue(position.x, position.y, position.z);\r\n\r\n noise.push({\r\n position,\r\n value\r\n });\r\n }\r\n }\r\n\r\n context.computed = {\r\n noise\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { IPipeline } from '@awesome-ecs/abstract/pipelines';\r\nimport { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { ComputedNoiseData, ComputedNoiseTextureData, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseTextureDataContext = NodeContext<\r\n BasicNodeData,\r\n ComputedNoiseTextureData,\r\n { [NoiseHandleType.noise]: NodeContext<any, ComputedNoiseData> }\r\n>;\r\n\r\nexport class NoiseTextureDataTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.textureData,\r\n group: NoiseTemplateGroup.output,\r\n data: {\r\n title: 'Texture Data'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.noise,\r\n connection: 'target',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.textureData,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline?: IPipeline<NoiseTextureDataContext> = PipelineFactory.create({\r\n shouldRun: (context) => {\r\n const incoming = context.incoming[NoiseHandleType.noise];\r\n return !!incoming?.computed?.noise.length;\r\n },\r\n action: (context) => {\r\n const incoming = context.incoming[NoiseHandleType.noise];\r\n const noise = incoming?.computed?.noise;\r\n\r\n const size = Math.ceil(Math.sqrt(noise.length));\r\n\r\n const colors = noise.flatMap((n) => [n.value * 255, n.value * 255, n.value * 255, 255]);\r\n const dataArray = new Uint8Array(size * size * 4);\r\n dataArray.set(colors);\r\n\r\n context.computed = {\r\n textureData: dataArray,\r\n textureResolutionX: size,\r\n textureResolutionY: size\r\n };\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { Position } from '@xyflow/system';\r\nimport { ComputedPositionsData, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type PositionLoggerNodeContext = NodeContext<\r\n BasicNodeData,\r\n never,\r\n { [NoiseNodeType.position]: NodeContext<any, ComputedPositionsData>[] }\r\n>;\r\n\r\nexport class PositionLoggerNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.positionLogger,\r\n group: NoiseTemplateGroup.positions,\r\n data: {\r\n title: 'Position Logger'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.position,\r\n connection: 'target'\r\n }\r\n ]\r\n };\r\n}\r\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Blend } from 'libnoise-simplex-ts';\r\nimport { ComputedModuleData, NoiseModuleContext, NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType, NoiseSourceControlHandle } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseBlendNodeContext = NodeContext<\r\n BasicNodeData,\r\n ComputedModuleData<Blend>,\r\n {\r\n [NoiseSourceControlHandle.source]: NoiseModuleContext[];\r\n [NoiseSourceControlHandle.control]: NoiseModuleContext;\r\n }\r\n>;\r\n\r\nexport class NoiseBlendNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData> = {\r\n type: NoiseNodeType.noiseBlend,\r\n group: NoiseTemplateGroup.noiseSelectors,\r\n data: {\r\n title: 'Noise Blend'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n label: 'Source Modules',\r\n dataId: NoiseSourceControlHandle.source,\r\n groupBy: 'dataId',\r\n maxConnections: 2,\r\n minConnections: 2\r\n },\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n dataId: NoiseSourceControlHandle.control,\r\n groupBy: 'dataId',\r\n connection: 'target',\r\n label: 'Control Module',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n dataId: NoiseSourceControlHandle.output,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseBlendNodeContext>({\r\n shouldRun: (context) => {\r\n return (\r\n context.incoming[NoiseSourceControlHandle.source]?.length === 2 && !!context.incoming[NoiseSourceControlHandle.control]\r\n );\r\n },\r\n action: (context) => {\r\n const incomingSources = context.incoming[NoiseSourceControlHandle.source];\r\n const incomingControl = context.incoming[NoiseSourceControlHandle.control];\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.controlModule = incomingControl.computed.module;\r\n context.computed.module.sourceModuleA = incomingSources[0].computed.module;\r\n context.computed.module.sourceModuleB = incomingSources[1].computed.module;\r\n } else {\r\n context.computed = {\r\n module: new Blend(\r\n incomingSources[0].computed.module,\r\n incomingSources[1].computed.module,\r\n incomingControl.computed.module\r\n )\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { Position } from '@xyflow/system';\nimport { Select } from 'libnoise-simplex-ts';\nimport { NoiseTemplateGroup } from '../../abstract';\nimport { NoiseHandleType, NoiseSourceControlHandle } from '../../abstract/handle-types';\nimport { ComputedModuleData, NodeSelectNoiseData, NoiseModuleContext } from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\n\nexport type NoiseSelectNodeContext = NodeContext<\n NodeSelectNoiseData,\n ComputedModuleData<Select>,\n {\n [NoiseSourceControlHandle.source]: NoiseModuleContext[];\n [NoiseSourceControlHandle.control]: NoiseModuleContext;\n }\n>;\n\nexport class NoiseSelectNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeSelectNoiseData> = {\n type: NoiseNodeType.noiseSelect,\n group: NoiseTemplateGroup.noiseSelectors,\n data: {\n title: 'Noise Select',\n edgeFalloff: 0.0,\n lowerBound: -1.0,\n upperBound: 1.0\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.source,\n groupBy: 'dataId',\n connection: 'target',\n label: 'Source Modules',\n maxConnections: 2,\n minConnections: 2\n },\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.control,\n groupBy: 'dataId',\n connection: 'target',\n label: 'Control Module',\n maxConnections: 1\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n dataId: NoiseSourceControlHandle.output,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline = PipelineFactory.create<NoiseSelectNodeContext>({\n shouldRun: (context) => {\n return (\n context.incoming[NoiseSourceControlHandle.source]?.length === 2 && !!context.incoming[NoiseSourceControlHandle.control]\n );\n },\n action: (context) => {\n const incomingSources = context.incoming[NoiseSourceControlHandle.source];\n const incomingControl = context.incoming[NoiseSourceControlHandle.control];\n\n if (context.computed?.module) {\n context.computed.module.controlModule = incomingControl.computed.module;\n context.computed.module.sourceModuleA = incomingSources[0].computed.module;\n context.computed.module.sourceModuleB = incomingSources[1].computed.module;\n context.computed.module.edgeFalloff = context.data.edgeFalloff;\n context.computed.module.lowerBound = context.data.lowerBound;\n context.computed.module.upperBound = context.data.upperBound;\n } else {\n context.computed = {\n module: new Select(\n incomingSources[0].computed.module,\n incomingSources[1].computed.module,\n incomingControl.computed.module,\n context.data.edgeFalloff,\n context.data.lowerBound,\n context.data.upperBound,\n )\n };\n }\n },\n cleanup: (context) => {\n context.computed = null;\n }\n });\n}\n","import { BasicNodeData, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { Displace } from 'libnoise-simplex-ts';\r\nimport { ComputedModuleData, NoiseModuleContext, NoiseTemplateGroup } from '../../abstract';\r\nimport { DisplacementHandle, DisplacementModuleHandle, NoiseHandleType } from '../../abstract/handle-types';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseDisplaceNodeContext = NodeContext<\r\n BasicNodeData,\r\n ComputedModuleData<Displace>,\r\n {\r\n [DisplacementHandle.sourceModule]: NoiseModuleContext;\r\n [DisplacementHandle.xModule]: NoiseModuleContext;\r\n [DisplacementHandle.yModule]: NoiseModuleContext;\r\n [DisplacementHandle.zModule]: NoiseModuleContext;\r\n }\r\n>;\r\n\r\nexport class NoiseDisplaceNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<BasicNodeData, Omit<DisplacementModuleHandle, 'handleId'>> = {\r\n type: NoiseNodeType.noiseDisplace,\r\n group: NoiseTemplateGroup.noiseTransformers,\r\n data: {\r\n title: 'Noise Displace'\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n connection: 'target',\r\n label: 'Source Module',\r\n dataType: NoiseHandleType.module,\r\n dataId: DisplacementHandle.sourceModule,\r\n groupBy: 'dataId',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Left,\r\n connection: 'target',\r\n label: 'X Module',\r\n dataType: NoiseHandleType.module,\r\n dataId: DisplacementHandle.xModule,\r\n groupBy: 'dataId',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Left,\r\n connection: 'target',\r\n label: 'Y Module',\r\n dataType: NoiseHandleType.module,\r\n dataId: DisplacementHandle.yModule,\r\n groupBy: 'dataId',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Left,\r\n connection: 'target',\r\n label: 'Z Module',\r\n dataType: NoiseHandleType.module,\r\n dataId: DisplacementHandle.zModule,\r\n groupBy: 'dataId',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n dataId: DisplacementHandle.output,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseDisplaceNodeContext>({\r\n shouldRun: (context) => {\r\n return (\r\n !!context.incoming[DisplacementHandle.sourceModule]?.computed?.module &&\r\n !!context.incoming[DisplacementHandle.xModule]?.computed?.module &&\r\n !!context.incoming[DisplacementHandle.yModule]?.computed?.module &&\r\n !!context.incoming[DisplacementHandle.zModule]?.computed?.module\r\n );\r\n },\r\n action: (context) => {\r\n const sourceModule = context.incoming[DisplacementHandle.sourceModule].computed.module;\r\n const xModule = context.incoming[DisplacementHandle.xModule].computed.module;\r\n const yModule = context.incoming[DisplacementHandle.yModule].computed.module;\r\n const zModule = context.incoming[DisplacementHandle.zModule].computed.module;\r\n\r\n const hasModules = !!sourceModule && !!xModule && !!yModule && !!zModule;\r\n\r\n if (context.computed?.module) {\r\n if (hasModules) {\r\n context.computed.module.sourceModule = sourceModule;\r\n context.computed.module.xModule = xModule;\r\n context.computed.module.yModule = yModule;\r\n context.computed.module.zModule = zModule;\r\n }\r\n } else {\r\n context.computed = {\r\n module: new Displace(sourceModule, xModule, yModule, zModule)\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { RotatePoint } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeRotatePointNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseRotatePointNodeContext = NodeContext<\r\n NodeRotatePointNoiseData,\r\n ComputedModuleData<RotatePoint>,\r\n {\r\n [NoiseHandleType.module]: NoiseModuleContext;\r\n }\r\n>;\r\n\r\nexport class NoiseRotatePointNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeRotatePointNoiseData> = {\r\n type: NoiseNodeType.noiseRotatePoint,\r\n group: NoiseTemplateGroup.noiseTransformers,\r\n data: {\r\n title: 'Noise Rotate Point',\r\n xAngle: 0.0,\r\n yAngle: 0.0,\r\n zAngle: 0.0\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n label: 'Source Module',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseRotatePointNodeContext>({\r\n shouldRun: (context) => {\r\n return !!context.incoming[NoiseHandleType.module]?.computed?.module;\r\n },\r\n action: (context) => {\r\n const sourceModule = context.incoming[NoiseHandleType.module].computed.module;\r\n const { xAngle, yAngle, zAngle } = context.data;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = sourceModule;\r\n context.computed.module.xAngle = xAngle;\r\n context.computed.module.yAngle = yAngle;\r\n context.computed.module.zAngle = zAngle;\r\n } else {\r\n context.computed = {\r\n module: new RotatePoint(sourceModule, xAngle, yAngle, zAngle)\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { ScalePoint } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeScalePointNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseScalePointNodeContext = NodeContext<\r\n NodeScalePointNoiseData,\r\n ComputedModuleData<ScalePoint>,\r\n {\r\n [NoiseHandleType.module]: NoiseModuleContext;\r\n }\r\n>;\r\n\r\nexport class NoiseScalePointNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeScalePointNoiseData> = {\r\n type: NoiseNodeType.noiseScalePoint,\r\n group: NoiseTemplateGroup.noiseTransformers,\r\n data: {\r\n title: 'Noise Scale Point',\r\n xScale: 1.0,\r\n yScale: 1.0,\r\n zScale: 1.0\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n label: 'Source Module',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseScalePointNodeContext>({\r\n shouldRun: (context) => {\r\n return !!context.incoming[NoiseHandleType.module]?.computed?.module;\r\n },\r\n action: (context) => {\r\n const sourceModule = context.incoming[NoiseHandleType.module].computed.module;\r\n const { xScale, yScale, zScale } = context.data;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = sourceModule;\r\n context.computed.module.xScale = xScale;\r\n context.computed.module.yScale = yScale;\r\n context.computed.module.zScale = zScale;\r\n } else {\r\n context.computed = {\r\n module: new ScalePoint(sourceModule, xScale, yScale, zScale)\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\r\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\r\nimport { PipelineFactory } from '@awesome-flow/core/factories';\r\nimport { Position } from '@xyflow/system';\r\nimport { TranslatePoint } from 'libnoise-simplex-ts';\r\nimport { NoiseTemplateGroup } from '../../abstract';\r\nimport { NoiseHandleType } from '../../abstract/handle-types';\r\nimport { ComputedModuleData, NodeTranslatePointNoiseData, NoiseModuleContext } from '../../abstract/node-props';\r\nimport { NoiseNodeType } from '../../abstract/node-types';\r\n\r\nexport type NoiseTranslatePointNodeContext = NodeContext<\r\n NodeTranslatePointNoiseData,\r\n ComputedModuleData<TranslatePoint>,\r\n { [NoiseHandleType.module]: NoiseModuleContext }\r\n>;\r\n\r\nexport class NoiseTranslatePointNodeTemplateFactory implements ITemplateFactory {\r\n readonly template: NodeTemplate<NodeTranslatePointNoiseData> = {\r\n type: NoiseNodeType.noiseTranslatePoint,\r\n group: NoiseTemplateGroup.noiseTransformers,\r\n data: {\r\n title: 'Noise Translate Point',\r\n translateX: 0.0,\r\n translateY: 0.0,\r\n translateZ: 0.0\r\n },\r\n handles: [\r\n {\r\n position: Position.Left,\r\n dataType: NoiseHandleType.module,\r\n connection: 'target',\r\n label: 'Source Module',\r\n maxConnections: 1\r\n },\r\n {\r\n position: Position.Right,\r\n dataType: NoiseHandleType.module,\r\n connection: 'source'\r\n }\r\n ]\r\n };\r\n\r\n readonly pipeline = PipelineFactory.create<NoiseTranslatePointNodeContext>({\r\n shouldRun: (context) => {\r\n return !!context.incoming[NoiseHandleType.module]?.computed?.module;\r\n },\r\n action: (context) => {\r\n const sourceModule = context.incoming[NoiseHandleType.module].computed.module;\r\n const { translateX, translateY, translateZ } = context.data;\r\n\r\n if (context.computed?.module) {\r\n context.computed.module.sourceModule = sourceModule;\r\n context.computed.module.translateX = translateX;\r\n context.computed.module.translateY = translateY;\r\n context.computed.module.translateZ = translateZ;\r\n } else {\r\n context.computed = {\r\n module: new TranslatePoint(sourceModule, translateX, translateY, translateZ)\r\n };\r\n }\r\n },\r\n cleanup: (context) => {\r\n context.computed = null;\r\n }\r\n });\r\n}\r\n","import { CoreHandleType, ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { NodeContext } from '@awesome-flow/core/abstract/pipelines';\nimport { PipelineFactory } from '@awesome-flow/core/factories';\nimport { NodeVariablePropertyContext } from '@awesome-flow/core/templates';\nimport { Position } from '@xyflow/system';\nimport { Turbulence } from 'libnoise-simplex-ts';\nimport { NoiseTemplateGroup } from '../../abstract';\nimport { NoiseHandleType } from '../../abstract/handle-types';\nimport {\n ComputedModuleData,\n NodeTurbulenceNoiseData,\n NoiseGeneratorContext,\n NoiseModuleContext\n} from '../../abstract/node-props';\nimport { NoiseNodeType } from '../../abstract/node-types';\nimport { IncomingPropertyValueMiddleware } from '../../middleware/incoming-property-value';\n\nexport type NoiseTurbulenceNodeContext = NodeContext<\n NodeTurbulenceNoiseData,\n ComputedModuleData<Turbulence>,\n {\n [NoiseHandleType.module]: NoiseModuleContext;\n [CoreHandleType.variableProperty]: NodeVariablePropertyContext[];\n }\n> &\n NoiseGeneratorContext<NodeTurbulenceNoiseData>;\n\nexport class NoiseTurbulenceNodeTemplateFactory implements ITemplateFactory {\n readonly template: NodeTemplate<NodeTurbulenceNoiseData> = {\n type: NoiseNodeType.noiseTurbulence,\n group: NoiseTemplateGroup.noiseTransformers,\n data: {\n title: 'Noise Turbulence',\n frequency: 1.0,\n power: 1.0,\n roughness: 1.0,\n seed: 0\n },\n handles: [\n {\n position: Position.Left,\n dataType: NoiseHandleType.module,\n connection: 'target',\n label: 'Source Module',\n maxConnections: 1\n },\n {\n position: Position.Left,\n dataType: CoreHandleType.variableProperty,\n label: 'Variable Properties',\n connection: 'target'\n },\n {\n position: Position.Right,\n dataType: NoiseHandleType.module,\n connection: 'source'\n }\n ]\n };\n\n readonly pipeline = PipelineFactory.create(new IncomingPropertyValueMiddleware(), {\n shouldRun: (context) => {\n return !!context.incoming[NoiseHandleType.module]?.computed?.module;\n },\n action: (context: NoiseTurbulenceNodeContext) => {\n const { properties } = context;\n const incoming = context.incoming[NoiseHandleType.module].computed.module;\n\n if (context.computed?.module) {\n context.computed.module.sourceModule = incoming;\n context.computed.module.frequency = properties.frequency;\n context.computed.module.power = properties.power;\n context.computed.module.roughness = properties.roughness;\n context.computed.module.seed = properties.seed;\n } else {\n context.computed = {\n module: new Turbulence(incoming, properties.frequency, properties.power, properties.roughness, properties.seed)\n };\n }\n },\n cleanup: (context) => {\n context.computed = null;\n }\n });\n}\n","import { ITemplateFactory } from '@awesome-flow/core/abstract';\r\nimport { NodeTypes } from '@xyflow/react';\r\nimport { ModuleGroupNode } from '../nodes';\r\nimport NoiseBillowNode from '../nodes/generators/noise-billow-node';\r\nimport NoiseCheckerboardNode from '../nodes/generators/noise-checkerboard-node';\r\nimport NoiseConstNode from '../nodes/generators/noise-const-node';\r\nimport NoiseCylindersNode from '../nodes/generators/noise-cylinders-node';\r\nimport NoisePerlinNode from '../nodes/generators/noise-perlin-node';\r\nimport NoiseRidgedMultiNode from '../nodes/generators/noise-ridgedmulti-node';\r\nimport NoiseSpheresNode from '../nodes/generators/noise-spheres-node';\r\nimport NoiseVoronoiNode from '../nodes/generators/noise-voronoi-node';\r\nimport PositionConstNode from '../nodes/generators/position-const-node';\r\nimport PositionGridNode from '../nodes/generators/position-grid-node';\r\nimport NoiseAbsNode from '../nodes/modifiers/noise-abs-node';\r\nimport NoiseClampNode from '../nodes/modifiers/noise-clamp-node';\r\nimport NoiseCombineNode from '../nodes/modifiers/noise-combine-node';\r\nimport NoiseCurveNode from '../nodes/modifiers/noise-curve-node';\r\nimport NoiseExponentNode from '../nodes/modifiers/noise-exponent-node';\r\nimport NoiseInvertNode from '../nodes/modifiers/noise-invert-node';\r\nimport NoiseNormalizeNode from '../nodes/modifiers/noise-normalize-node';\r\nimport NoiseScaleBiasNode from '../nodes/modifiers/noise-scale-bias-node';\r\nimport NoiseTerraceNode from '../nodes/modifiers/noise-terrace-node';\r\nimport NoiseLoggerNode from '../nodes/output/noise-logger-node';\r\nimport NoiseOutputNode from '../nodes/output/noise-output-node';\r\nimport NoiseTextureDataNode from '../nodes/output/noise-texture-data-node';\r\nimport PositionsLoggerNode from '../nodes/output/positions-logger-node';\r\nimport NoiseBlendNode from '../nodes/selectors/noise-blend-node';\r\nimport NoiseSelectNode from '../nodes/selectors/noise-select-node';\r\nimport NoiseDisplaceNode from '../nodes/transformers/noise-displace-node';\r\nimport NoiseRotatePointNode from '../nodes/transformers/noise-rotate-point-node';\r\nimport NoiseScalePointNode from '../nodes/transformers/noise-scale-point-node';\r\nimport NoiseTranslatePointNode from '../nodes/transformers/noise-translate-point-node';\r\nimport NoiseTurbulenceNode from '../nodes/transformers/noise-turbulence-node';\r\nimport { NoiseBillowNodeTemplateFactory } from '../templates/generators/noise-billow-template';\r\nimport { NoiseCheckerboardNodeTemplateFactory } from '../templates/generators/noise-checkerboard-template';\r\nimport { NoiseConstNodeTemplateFactory } from '../templates/generators/noise-const-template';\r\nimport { NoiseCylindersNodeTemplateFactory } from '../templates/generators/noise-cylinders-template';\r\nimport { NoisePerlinNodeTemplateFactory } from '../templates/generators/noise-perlin-template';\r\nimport { NoiseRidgedMultiNodeTemplateFactory } from '../templates/generators/noise-ridgedmulti-template';\r\nimport { NoiseSpheresNodeTemplateFactory } from '../templates/generators/noise-spheres-template';\r\nimport { NoiseVoronoiNodeTemplateFactory } from '../templates/generators/noise-voronoi-template';\r\nimport { PositionConstNodeTemplateFactory } from '../templates/generators/position-const-template';\r\nimport { PositionGridNodeTemplateFactory } from '../templates/generators/position-grid-template';\r\nimport { ModuleGroupNodeTemplateFactory } from '../templates/groups/module-group-template';\r\nimport { NoiseAbsNodeTemplateFactory } from '../templates/modifiers/noise-abs-template';\r\nimport { NoiseClampNodeTemplateFactory } from '../templates/modifiers/noise-clamp-template';\r\nimport { NoiseCombineNodeTemplateFactory } from '../templates/modifiers/noise-combine-template';\r\nimport { NoiseCurveNodeTemplateFactory } from '../templates/modifiers/noise-curve-template';\r\nimport { NoiseExponentNodeTemplateFactory } from '../templates/modifiers/noise-exponent-template';\r\nimport { NoiseInvertNodeTemplateFactory } from '../templates/modifiers/noise-invert-template';\r\nimport { NoiseNormalizeNodeTemplateFactory } from '../templates/modifiers/noise-normalize-template';\r\nimport { NoiseScaleBiasNodeTemplateFactory } from '../templates/modifiers/noise-scalebias-template';\r\nimport { NoiseTerraceNodeTemplateFactory } from '../templates/modifiers/noise-terrace-template';\r\nimport { NoiseLoggerNodeTemplateFactory } from '../templates/output/noise-logger-template';\r\nimport { NoiseOutputNodeTemplateFactory } from '../templates/output/noise-output-template';\r\nimport { NoiseTextureDataTemplateFactory } from '../templates/output/noise-texture-data-template';\r\nimport { PositionLoggerNodeTemplateFactory } from '../templates/output/position-logger-template';\r\nimport { NoiseBlendNodeTemplateFactory } from '../templates/selectors/noise-blend-template';\r\nimport { NoiseSelectNodeTemplateFactory } from '../templates/selectors/noise-select-template';\r\nimport { NoiseDisplaceNodeTemplateFactory } from '../templates/transformers/noise-displace-template';\r\nimport { NoiseRotatePointNodeTemplateFactory } from '../templates/transformers/noise-rotate-point-template';\r\nimport { NoiseScalePointNodeTemplateFactory } from '../templates/transformers/noise-scale-point-template';\r\nimport { NoiseTranslatePointNodeTemplateFactory } from '../templates/transformers/noise-translate-point-template';\r\nimport { NoiseTurbulenceNodeTemplateFactory } from '../templates/transformers/noise-turbulence-template';\r\n\r\nexport enum NoiseNodeType {\r\n position = 'position',\r\n grid = 'grid',\r\n textureData = 'texture-data',\r\n groupModule = 'group-module',\r\n positionLogger = 'position-logger',\r\n noiseLogger = 'noise-logger',\r\n noiseOutput = 'noise-output',\r\n noiseConst = 'noise-constant',\r\n noiseBillow = 'noise-billow',\r\n noiseCheckerboard = 'noise-checkerboard',\r\n noiseNormalize = 'noise-normalize',\r\n noiseCylinders = 'noise-cylinders',\r\n noisePerlin = 'noise-perlin',\r\n noiseRidgedMulti = 'noise-ridged-multi',\r\n noiseSpheres = 'noise-spheres',\r\n noiseVoronoi = 'noise-voronoi',\r\n noiseCombine = 'noise-combiner',\r\n noiseClamp = 'noise-clamp',\r\n noiseAbs = 'noise-abs',\r\n noiseCurve = 'noise-curve',\r\n noiseExponent = 'noise-exponent',\r\n noiseInvert = 'noise-invert',\r\n noiseScaleBias = 'noise-scale-bias',\r\n noiseTerrace = 'noise-terrace',\r\n noiseBlend = 'noise-blend',\r\n noiseSelect = 'noise-select',\r\n noiseDisplace = 'noise-displace',\r\n noiseRotatePoint = 'noise-rotate-point',\r\n noiseScalePoint = 'noise-scale-point',\r\n noiseTranslatePoint = 'noise-translate-point',\r\n noiseTurbulence = 'noise-turbulence'\r\n}\r\n\r\nexport const noiseNodeTypes = {\r\n [NoiseNodeType.groupModule]: ModuleGroupNode,\r\n [NoiseNodeType.position]: PositionConstNode,\r\n [NoiseNodeType.grid]: PositionGridNode,\r\n [NoiseNodeType.noiseOutput]: NoiseOutputNode,\r\n [NoiseNodeType.textureData]: NoiseTextureDataNode,\r\n [NoiseNodeType.noiseLogger]: NoiseLoggerNode,\r\n [NoiseNodeType.positionLogger]: PositionsLoggerNode,\r\n [NoiseNodeType.noiseConst]: NoiseConstNode,\r\n [NoiseNodeType.noiseBillow]: NoiseBillowNode,\r\n [NoiseNodeType.noiseCheckerboard]: NoiseCheckerboardNode,\r\n [NoiseNodeType.noiseCylinders]: NoiseCylindersNode,\r\n [NoiseNodeType.noisePerlin]: NoisePerlinNode,\r\n [NoiseNodeType.noiseRidgedMulti]: NoiseRidgedMultiNode,\r\n [NoiseNodeType.noiseSpheres]: NoiseSpheresNode,\r\n [NoiseNodeType.noiseVoronoi]: NoiseVoronoiNode,\r\n [NoiseNodeType.noiseCombine]: NoiseCombineNode,\r\n [NoiseNodeType.noiseClamp]: NoiseClampNode,\r\n [NoiseNodeType.noiseAbs]: NoiseAbsNode,\r\n [NoiseNodeType.noiseNormalize]: NoiseNormalizeNode,\r\n [NoiseNodeType.noiseCurve]: NoiseCurveNode,\r\n [NoiseNodeType.noiseExponent]: NoiseExponentNode,\r\n [NoiseNodeType.noiseInvert]: NoiseInvertNode,\r\n [NoiseNodeType.noiseScaleBias]: NoiseScaleBiasNode,\r\n [NoiseNodeType.noiseTerrace]: NoiseTerraceNode,\r\n [NoiseNodeType.noiseBlend]: NoiseBlendNode,\r\n [NoiseNodeType.noiseSelect]: NoiseSelectNode,\r\n [NoiseNodeType.noiseDisplace]: NoiseDisplaceNode,\r\n [NoiseNodeType.noiseRotatePoint]: NoiseRotatePointNode,\r\n [NoiseNodeType.noiseScalePoint]: NoiseScalePointNode,\r\n [NoiseNodeType.noiseTranslatePoint]: NoiseTranslatePointNode,\r\n [NoiseNodeType.noiseTurbulence]: NoiseTurbulenceNode\r\n} satisfies NodeTypes;\r\n\r\nexport const noiseNodeTemplates = {\r\n [NoiseNodeType.noiseOutput]: new NoiseOutputNodeTemplateFactory(),\r\n [NoiseNodeType.noiseBillow]: new NoiseBillowNodeTemplateFactory(),\r\n [NoiseNodeType.noiseCheckerboard]: new NoiseCheckerboardNodeTemplateFactory(),\r\n [NoiseNodeType.noiseNormalize]: new NoiseNormalizeNodeTemplateFactory(),\r\n [NoiseNodeType.noiseLogger]: new NoiseLoggerNodeTemplateFactory(),\r\n [NoiseNodeType.noiseConst]: new NoiseConstNodeTemplateFactory(),\r\n [NoiseNodeType.position]: new PositionConstNodeTemplateFactory(),\r\n [NoiseNodeType.positionLogger]: new PositionLoggerNodeTemplateFactory(),\r\n [NoiseNodeType.grid]: new PositionGridNodeTemplateFactory(),\r\n [NoiseNodeType.textureData]: new NoiseTextureDataTemplateFactory(),\r\n [NoiseNodeType.noiseCylinders]: new NoiseCylindersNodeTemplateFactory(),\r\n [NoiseNodeType.noisePerlin]: new NoisePerlinNodeTemplateFactory(),\r\n [NoiseNodeType.noiseRidgedMulti]: new NoiseRidgedMultiNodeTemplateFactory(),\r\n [NoiseNodeType.noiseSpheres]: new NoiseSpheresNodeTemplateFactory(),\r\n [NoiseNodeType.noiseVoronoi]: new NoiseVoronoiNodeTemplateFactory(),\r\n [NoiseNodeType.noiseCombine]: new NoiseCombineNodeTemplateFactory(),\r\n [NoiseNodeType.noiseClamp]: new NoiseClampNodeTemplateFactory(),\r\n [NoiseNodeType.noiseAbs]: new NoiseAbsNodeTemplateFactory(),\r\n [NoiseNodeType.noiseCurve]: new NoiseCurveNodeTemplateFactory(),\r\n [NoiseNodeType.noiseExponent]: new NoiseExponentNodeTemplateFactory(),\r\n [NoiseNodeType.noiseInvert]: new NoiseInvertNodeTemplateFactory(),\r\n [NoiseNodeType.noiseScaleBias]: new NoiseScaleBiasNodeTemplateFactory(),\r\n [NoiseNodeType.noiseTerrace]: new NoiseTerraceNodeTemplateFactory(),\r\n [NoiseNodeType.noiseBlend]: new NoiseBlendNodeTemplateFactory(),\r\n [NoiseNodeType.noiseSelect]: new NoiseSelectNodeTemplateFactory(),\r\n [NoiseNodeType.noiseDisplace]: new NoiseDisplaceNodeTemplateFactory(),\r\n [NoiseNodeType.noiseRotatePoint]: new NoiseRotatePointNodeTemplateFactory(),\r\n [NoiseNodeType.noiseScalePoint]: new NoiseScalePointNodeTemplateFactory(),\r\n [NoiseNodeType.noiseTranslatePoint]: new NoiseTranslatePointNodeTemplateFactory(),\r\n [NoiseNodeType.noiseTurbulence]: new NoiseTurbulenceNodeTemplateFactory(),\r\n [NoiseNodeType.groupModule]: new ModuleGroupNodeTemplateFactory()\r\n} satisfies Record<NoiseNodeType, ITemplateFactory>;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,IAAY,kBAAL;AACL;AACA;AACA;AACA;;KACD;AAED,IAAY,qBAAL;AACL;AACA;AACA;AACA;AACA;;KACD;AAED,IAAY,2BAAL;AACL;AACA;AACA;;KACD;;;;ACZD,SAAS,gBAAgB,EAAE,IAAI,UAAU,MAAM,QAAwC;CAErF,MAAM,sDAD6C,GAAG,EAAE,WAAW,gBAAgB,SAC5D,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,SAAS,MAAM,EAAE,SAAS,MAAM,IAAI,EAAE;AAE9F,QACE,4CAACA,yCAAD;EAAmB;EAAc;EAAgB;EAAY;YAA7D;GACE,4CAACC,oBAAD,aAAM,UAAO,OAAO,UAAU,EAAS;GACvC,2CAACC,uBAAD,EAAS,GAAG,GAAK;GACjB,2CAACC,qBAAD,YACG,OAAO,KAAK,GAAG,MACd,4CAACF,oBAAD;IACG,EAAE,UAAU;IAAE;IAAE,EAAE,UAAU;IAAE;IAAE,EAAE,UAAU;IAAE;IAAG,EAAE;IAC/C,IAFI,EAEJ,CACP,EACI;GACM;;;AAIpB,gDAAoB,gBAAgB;;;;ACnBpC,SAAS,gBAAgB,EAAE,IAAI,UAAU,MAAM,QAAwC;CACrF,MAAM,uDAA6C,GAAG;AAEtD,QACE,4CAACG,yCAAD;EAAmB;EAAc;EAAgB;EAAY;YAA7D,CACE,2CAACC,yDAAD;GAA2B,QAAQ;GAAI,SAAS,KAAK;GAAW,GAChE,4CAACC,oBAAD;GAAM,IAAI;aAAV,CAAa,kBAAe,SAAS,UAAU,OAAO,UAAU,EAAS;KAC3D;;;AAIpB,gDAAoB,gBAAgB;;;;ACZpC,SAAS,qBAAqB,EAAE,IAAI,UAAU,MAAM,QAAwC;CAC1F,MAAM,uDAAkD,GAAG,EAAE;AAE7D,QACE,2CAACC,yCAAD;EAAmB;EAAc;EAAgB;EAAY;YAC3D,4CAACC,qBAAD;GACE,4CAACC,qBAAD;IAAO;IACQ,SAAS;IAAmB;IAAE,SAAS;IAC9C;GACR,4CAACA,qBAAD,aAAO,kBAAe,SAAS,aAAa,UAAU,EAAU;GAChE,4CAACA,qBAAD;IAAO;IACW,SAAS;IAAmB;IAAE,SAAS;IAAmB;IAAM,SAAS,aAAa,UAAU;IAC1G;GACF;EACM;;AAIpB,sDAAoB,qBAAqB;;;;ACjBzC,SAAS,oBAAoB,EAAE,IAAI,UAAU,MAAM,QAAwC;CAEzF,MAAM,0DADqD,GAAG,EAAE,SAAS,gBAAgB,YAErF,QAAQ,MAAM,CAAC,CAAC,EAAE,UAAU,WAAW,OAAO,CAC/C,SAAS,MAAM,EAAE,SAAS,UAAU;AAEvC,QACE,4CAACC,yCAAD;EAAmB;EAAc;EAAgB;EAAY;YAA7D;GACE,4CAACC,oBAAD,aAAM,UAAO,WAAW,UAAU,EAAS;GAC3C,2CAACC,uBAAD,EAAS,GAAG,GAAK;GACjB,2CAACC,qBAAD,YACG,WAAW,KAAK,GAAG,MAClB,4CAACF,oBAAD;IACG,EAAE;IAAE;IAAE,EAAE;IAAE;IAAE,EAAE;IACV,IAFI,EAEJ,CACP,EACI;GACM;;;AAIpB,oDAAoB,oBAAoB;;;;AC9BxC,IAAY,qBAAL;AACL;AACA;AACA;AACA;AACA;AACA;;KACD;;;;ACHD,IAAa,kCAAb,MAAgG;CAC9F,OAAO,SAA2C;EAChD,MAAM,WAAW,QAAQ,WAAWG,2CAAe,qBAAqB,EAAE;EAE1E,MAAM,aAAa,EAAE,GAAG,QAAQ,MAAM;AAEtC,OAAK,MAAM,cAAc,UAAU;GACjC,MAAM,YAAY,WAAW;AAE7B,OAAI,UACF,QAAO,OAAO,YAAY,GAAG,UAAU,WAAW,UAAU,OAAO,CAAC;;AAIxE,UAAQ,aAAa;;;;;;ACJzB,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAA2C;EAClD,IAAIC,qCAAY,UAAU;EAC1B,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACX,YAAY;GACZ,SAAS;GACT,aAAa;GACb,MAAM;GACP;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA2CE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EAChH,SAAS,YAAgC;GACvC,MAAM,EAAE,eAAe;AAEvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,2BACV,WAAW,WACX,WAAW,YACX,WAAW,SACX,WAAW,aACX,WAAW,KACZ,EACF;;EAEH,UAAU,YAAgC;AACxC,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC7CJ,IAAa,uCAAb,MAA8E;CAC5E,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,sBACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAiDC,6CAAgB,OAAO;EAC/E,SAAS,YAAsC;AAC7C,WAAQ,WAAW,EACjB,QAAQ,IAAIC,kCAAc,EAC3B;;EAEH,UAAU,YAAsC;AAC9C,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACzBJ,IAAa,gCAAb,MAAuE;CACrE,AAAS,WAA6C;EACpD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,OAAO;GACP,KAAK;GACL,KAAK;GACN;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA0CC,6CAAgB,OAA0B;EAC3F,UAAU,SAA4B;AACpC,UAAO,QAAQ,KAAK,UAAU,UAAa,QAAQ,KAAK,UAAU;;EAEpE,OAAO,SAA4B;AAEjC,WAAQ,WAAW,EAAE,QADN,IAAIC,0BAAM,QAAQ,KAAK,MAAM,EACf;;EAEjC,QAAQ,SAA4B;AACnC,WAAQ,WAAW;;EAEnB,CAAC;;;;;AC9BJ,IAAa,oCAAb,MAA2E;CACzE,AAAS,WAAiD;EACxD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACZ;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA8CE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EACnH,SAAS,YAAmC;GAC1C,MAAM,EAAE,eAAe;AACvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,8BAAU,WAAW,UAAU,EAC5C;;EAEH,UAAU,YAAmC;AAC3C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AChCJ,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAA2C;EAClD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACX,YAAY;GACZ,SAAS;GACT,aAAa;GACb,MAAM;GACP;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA2CE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EAChH,SAAS,YAAgC;GACvC,MAAM,EAAE,eAAe;AACvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,2BACV,WAAW,WACX,WAAW,YACX,WAAW,SACX,WAAW,aACX,WAAW,KACZ,EACF;;EAEL,UAAU,YAAgC;AACzC,WAAQ,WAAW;;EAEnB,CAAC;;;;;AC1CJ,IAAa,sCAAb,MAA6E;CAC3E,AAAS,WAA8C;EACrD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACX,YAAY;GACZ,SAAS;GACT,QAAQ;GACR,MAAM;GACN,MAAM;GACP;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAgDE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EACrH,SAAS,YAAqC;GAC5C,MAAM,EAAE,eAAe;AACvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,gCACV,WAAW,WACX,WAAW,YACX,WAAW,SACX,WAAW,QACX,WAAW,MACX,WAAW,KACZ,EACF;;EAEH,UAAU,YAAqC;AAC7C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC5CJ,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAA+C;EACtD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACZ;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA4CE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EACjH,SAAS,YAAiC;GACxC,MAAM,EAAE,eAAe;AACvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,4BAAQ,WAAW,UAAU,EAC1C;;EAEL,UAAU,YAAiC;AAC1C,WAAQ,WAAW;;EAEnB,CAAC;;;;;AChCJ,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAA+C;EACtD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACX,cAAc;GACd,UAAU;GACV,MAAM;GACP;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAUC,2CAAe;GACzB,YAAY;GACb,EACD;GACE,UAAUD,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA4CE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EACjH,SAAS,YAAiC;GACxC,MAAM,EAAE,eAAe;AACvB,WAAQ,WAAW,EACjB,QAAQ,IAAIC,4BAAQ,WAAW,WAAW,WAAW,cAAc,WAAW,UAAU,WAAW,KAAK,EACzG;;EAEL,UAAU,YAAiC;AAC1C,WAAQ,WAAW;;EAEnB,CAAC;;;;;ACrCJ,IAAa,mCAAb,MAA0E;CACxE,AAAS,WAA2C;EAClD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,UAAU;IAAE,GAAG;IAAG,GAAG;IAAG,GAAG;IAAG;GAC/B;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA4B;EAC9D,UAAU,SAA8B;AACtC,UAAO,QAAQ,KAAK,aAAa,UAAa,QAAQ,KAAK,aAAa;;EAE1E,OAAO,SAA8B;GACnC,MAAM,EAAE,SAAS;AAEjB,WAAQ,WAAW,EACjB,WAAW,CAAC,KAAK,SAAS,EAC3B;;EAEL,QAAQ,SAA8B;AACrC,WAAQ,WAAW;;EAEnB,CAAC;;;;;AC/BJ,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAAuC;EAC9C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,QAAQ;IAAE,GAAG;IAAG,GAAG;IAAG,GAAG;IAAG;GAC5B,QAAQ;GACT;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAgC;EAClE,UAAU,SAAkC;GAC1C,MAAM,EAAE,QAAQ,WAAW,QAAQ;AACnC,UAAO,WAAW,UAAa,WAAW;;EAE5C,OAAO,SAAkC;GACvC,MAAM,EAAE,SAAS;GACjB,MAAM,EAAE,QAAQ,WAAW;GAE3B,MAAM,YAA4B,EAAE;AAEpC,QAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAChC,MAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAChC,WAAU,KAAK;IAAE,GAAG,OAAO,IAAI;IAAG,GAAG,OAAO,IAAI;IAAG,GAAG,OAAO;IAAG,CAAC;AAIrE,WAAQ,WAAW,EACjB,WACD;;EAEH,QAAQ,SAAkC;AACxC,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACrCJ,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAAwC;EAC/C,IAAIC,qCAAY,UAAU;EAC1B,MAAM,cAAc;EACpB,OAAOC,8CAAkB;EACzB,MAAM;GACJ,OAAO;GACP,SAAS;GACT,aAAa;IACX,OAAO;IACP,QAAQ;IACT;GACD,eAAe;IACb,OAAO;IACP,QAAQ;IACT;GACF;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GAChB,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA+CC,6CAAgB,OAAO;EAC7E,UAAU,SAA0C;AAClD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,SAAS,YAAoC;AAI3C,WAAQ,WAAW,EAAE,QAHJ,QAAQ,SAAS,gBAAgB,QAC1B,UAAU,QAEL;;EAE/B,UAAU,YAAoC;AAC5C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC9CJ,IAAa,8BAAb,MAAqE;CACnE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,aACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAA4CC,6CAAgB,OAAO;EAC1E,UAAU,SAAuC;AAC/C,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAoC;GAEzC,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,OACF,KAAI,QAAQ,UAAU,OACpB,SAAQ,SAAS,OAAO,eAAe;OAEvC,SAAQ,WAAW,EAAE,QAAQ,IAAIC,wBAAI,OAAO,EAAE;;EAIpD,QAAQ,SAA8B;AACpC,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACzCJ,IAAa,gCAAb,MAAuE;CACrE,AAAS,WAA6C;EACpD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,YAAY;GACZ,YAAY;GACb;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA8B;EAChE,UAAU,SAAyC;AACjD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAsC;GAE3C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,QAAQ;IACV,MAAM,cAAc,QAAQ,UAAU;AAEtC,QAAI,aAAa;AACf,iBAAY,eAAe;AAC3B,iBAAY,aAAa,QAAQ,KAAK;AACtC,iBAAY,aAAa,QAAQ,KAAK;UAEtC,SAAQ,WAAW,EACjB,QAAQ,IAAIC,0BAAM,QAAQ,QAAQ,KAAK,YAAY,QAAQ,KAAK,WAAW,EAC5E;;;EAIP,QAAQ,SAAgC;AACtC,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC/DJ,IAAY,mBAAL;AACL;AACA;AACA;AACA;AACA;;KACD;AAED,MAAa,wBAAwB;EAClC,iBAAiB,MAAMC;EACvB,iBAAiB,MAAMC;EACvB,iBAAiB,MAAMC;EACvB,iBAAiB,WAAWC;EAC5B,iBAAiB,QAAQC;CAC3B;;;;ACCD,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAA+C;EACtD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW,iBAAiB;GAC7B;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GAChB,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAgC;EAClE,UAAU,SAA2C;AACnD,UAAO,QAAQ,SAAS,gBAAgB,SAAS,WAAW;;EAE9D,OAAO,SAAwC;GAC7C,MAAM,WAAW,QAAQ,SAAS,gBAAgB;GAElD,MAAM,gBAAgB,sBAAsB,QAAQ,KAAK;AAGzD,WAAQ,WAAW,EAAE,QAFN,IAAI,cAAc,SAAS,GAAG,UAAU,QAAQ,SAAS,GAAG,UAAU,OAAO,EAE/D;;EAE/B,QAAQ,SAAwC;AAC9C,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACxCJ,IAAa,gCAAb,MAAuE;CACrE,AAAS,WAA6C;EACpD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,QAAQ,EAAE;GACX;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA8B;EAChE,UAAU,SAAyC;AACjD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAsC;GAE3C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,OAKF,SAAQ,WAAW,EAAE,QAJP,IAAIC,0BAChB,QACA,QAAQ,KAAK,OAAO,KAAK,MAAM,IAAIC,0BAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAC7D,EACmC;;EAGxC,QAAQ,SAAsC;AAC5C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC1CJ,IAAa,mCAAb,MAA0E;CACxE,AAAS,WAAgD;EACvD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,UAAU;GACX;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAiC;EACnE,UAAU,SAA4C;AACpD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAyC;GAE9C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,QAAQ,UAAU,OACpB,SAAQ,SAAS,OAAO,WAAW,QAAQ,KAAK;YACvC,OAET,SAAQ,WAAW,EAAE,QADE,IAAIC,6BAAS,QAAQ,QAAQ,KAAK,SAAS,EACrB;;EAGjD,QAAQ,SAAyC;AAC/C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC1CJ,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,gBACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA+B;EACjE,UAAU,SAA0C;AAClD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAuC;GAE5C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,QAAQ,UAAU,OACpB,SAAQ,SAAS,OAAO,eAAe;YAC9B,OACT,SAAQ,WAAW,EAAE,QAAQ,IAAIC,2BAAO,OAAO,EAAE;;EAGrD,QAAQ,SAAuC;AAC7C,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACrCJ,IAAa,oCAAb,MAA2E;CACzE,AAAS,WAAiD;EACxD,IAAIC,qCAAY,UAAU;EAC1B,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,eAAe;GACf,aAAa;GACd;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAkC;EACpE,UAAU,SAA6C;AACrD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAA0C;GAE/C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,OAEF,SAAQ,WAAW,EAAE,QADG,IAAIC,2CAAqB,QAAQ,QAAQ,KAAK,eAAe,QAAQ,KAAK,YAAY,EAChE;;EAGlD,QAAQ,SAA0C;AAChD,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC1CJ,IAAa,oCAAb,MAA2E;CACzE,AAAS,WAAiD;EACxD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,OAAO;GACP,MAAM;GACP;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAkC;EACpE,UAAU,SAA6C;AACrD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAA0C;GAE/C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,eAAe;AACvC,YAAQ,SAAS,OAAO,QAAQ,QAAQ,KAAK;AAC7C,YAAQ,SAAS,OAAO,OAAO,QAAQ,KAAK;cACnC,OAET,SAAQ,WAAW,EAAE,QADG,IAAIC,8BAAU,QAAQ,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK,EACtC;;EAGlD,QAAQ,SAA0C;AAChD,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC5CJ,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAA+C;EACtD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,QAAQ,EAAE;GACX;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAgC;EAClE,UAAU,SAA2C;AACnD,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB;;EAE5C,OAAO,SAAwC;GAE7C,MAAM,SADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;AAElC,OAAI,OAEF,SAAQ,WAAW,EAAE,QADL,IAAIC,4BAAQ,QAAQ,QAAQ,KAAK,OAAO,EAClB;;EAG1C,QAAQ,SAAwC;AAC9C,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC1CJ,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,gBACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;;;;;ACHH,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,gBACR;EACD,SAAS;GACP;IACE,UAAUC,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACb;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACZ,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACb;GACF;EACF;CAED,AAAS,WAA2CC,6CAAgB,OAAO;EACzE,SAAS,YAAY;GACnB,MAAM,oBAAoB,QAAQ,SAAS,gBAAgB;GAC3D,MAAM,iBAAiB,QAAQ,SAAS,gBAAgB;AAExD,OAAI,mBAAmB,UAAU,gBAAgB,UAAU,QAAQ;IACjE,MAAM,EAAE,WAAW,eAAe;IAElC,MAAM,QAA8B,EAAE;AAEtC,SAAK,MAAM,SAAS,mBAAmB;KACrC,MAAM,EAAE,cAAc,MAAM;AAC5B,UAAK,MAAM,YAAY,WAAW;MAChC,MAAM,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS,EAAE;AAEjE,YAAM,KAAK;OACT;OACA;OACD,CAAC;;;AAIN,YAAQ,WAAW,EACjB,OACD;;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AClEJ,IAAa,kCAAb,MAAyE;CACvE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,gBACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAgDC,6CAAgB,OAAO;EAC9E,YAAY,YAAY;AAEtB,UAAO,CAAC,CADS,QAAQ,SAAS,gBAAgB,QAC/B,UAAU,MAAM;;EAErC,SAAS,YAAY;GAEnB,MAAM,QADW,QAAQ,SAAS,gBAAgB,QAC1B,UAAU;GAElC,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;GAE/C,MAAM,SAAS,MAAM,SAAS,MAAM;IAAC,EAAE,QAAQ;IAAK,EAAE,QAAQ;IAAK,EAAE,QAAQ;IAAK;IAAI,CAAC;GACvF,MAAM,YAAY,IAAI,WAAW,OAAO,OAAO,EAAE;AACjD,aAAU,IAAI,OAAO;AAErB,WAAQ,WAAW;IACjB,aAAa;IACb,oBAAoB;IACpB,oBAAoB;IACrB;;EAEH,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AChDJ,IAAa,oCAAb,MAA2E;CACzE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,mBACR;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;;;;;ACTH,IAAa,gCAAb,MAAuE;CACrE,AAAS,WAAwC;EAC/C,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,eACR;EACD,SAAS;GACP;IACE,UAAUC,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACZ,OAAO;IACP,QAAQ,yBAAyB;IACjC,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,yBAAyB;IACjC,SAAS;IACT,YAAY;IACZ,OAAO;IACP,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,yBAAyB;IACjC,YAAY;IACb;GACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA8B;EAChE,YAAY,YAAY;AACtB,UACE,QAAQ,SAAS,yBAAyB,SAAS,WAAW,KAAK,CAAC,CAAC,QAAQ,SAAS,yBAAyB;;EAGnH,SAAS,YAAY;GACnB,MAAM,kBAAkB,QAAQ,SAAS,yBAAyB;GAClE,MAAM,kBAAkB,QAAQ,SAAS,yBAAyB;AAElE,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,SAAS;AACjE,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,GAAG,SAAS;AACpE,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,GAAG,SAAS;SAEpE,SAAQ,WAAW,EACjB,QAAQ,IAAIC,0BACV,gBAAgB,GAAG,SAAS,QAC5B,gBAAgB,GAAG,SAAS,QAC5B,gBAAgB,SAAS,OAC1B,EACF;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AC9DJ,IAAa,iCAAb,MAAwE;CACtE,AAAS,WAA8C;EACrD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,aAAa;GACb,YAAY;GACZ,YAAY;GACb;EACD,SAAS;GACP;IACE,UAAUC,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,yBAAyB;IACjC,SAAS;IACT,YAAY;IACZ,OAAO;IACP,gBAAgB;IAChB,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,yBAAyB;IACjC,SAAS;IACT,YAAY;IACZ,OAAO;IACP,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,yBAAyB;IACjC,YAAY;IACb;GACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAA+B;EACjE,YAAY,YAAY;AACtB,UACE,QAAQ,SAAS,yBAAyB,SAAS,WAAW,KAAK,CAAC,CAAC,QAAQ,SAAS,yBAAyB;;EAGnH,SAAS,YAAY;GACnB,MAAM,kBAAkB,QAAQ,SAAS,yBAAyB;GAClE,MAAM,kBAAkB,QAAQ,SAAS,yBAAyB;AAElE,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,SAAS;AACjE,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,GAAG,SAAS;AACpE,YAAQ,SAAS,OAAO,gBAAgB,gBAAgB,GAAG,SAAS;AACpE,YAAQ,SAAS,OAAO,cAAc,QAAQ,KAAK;AACnD,YAAQ,SAAS,OAAO,aAAa,QAAQ,KAAK;AAClD,YAAQ,SAAS,OAAO,aAAa,QAAQ,KAAK;SAElD,SAAQ,WAAW,EACjB,QAAQ,IAAIC,2BACV,gBAAgB,GAAG,SAAS,QAC5B,gBAAgB,GAAG,SAAS,QAC5B,gBAAgB,SAAS,QACzB,QAAQ,KAAK,aACb,QAAQ,KAAK,YACb,QAAQ,KAAK,WACd,EACF;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACvEJ,IAAa,mCAAb,MAA0E;CACxE,AAAS,WAAoF;EAC3F,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM,EACJ,OAAO,kBACR;EACD,SAAS;GACP;IACE,UAAUC,wBAAS;IACnB,YAAY;IACZ,OAAO;IACP,UAAU,gBAAgB;IAC1B,QAAQ,mBAAmB;IAC3B,SAAS;IACT,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,YAAY;IACZ,OAAO;IACP,UAAU,gBAAgB;IAC1B,QAAQ,mBAAmB;IAC3B,SAAS;IACT,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,YAAY;IACZ,OAAO;IACP,UAAU,gBAAgB;IAC1B,QAAQ,mBAAmB;IAC3B,SAAS;IACT,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,YAAY;IACZ,OAAO;IACP,UAAU,gBAAgB;IAC1B,QAAQ,mBAAmB;IAC3B,SAAS;IACT,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,QAAQ,mBAAmB;IAC3B,YAAY;IACb;GACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAiC;EACnE,YAAY,YAAY;AACtB,UACE,CAAC,CAAC,QAAQ,SAAS,mBAAmB,eAAe,UAAU,UAC/D,CAAC,CAAC,QAAQ,SAAS,mBAAmB,UAAU,UAAU,UAC1D,CAAC,CAAC,QAAQ,SAAS,mBAAmB,UAAU,UAAU,UAC1D,CAAC,CAAC,QAAQ,SAAS,mBAAmB,UAAU,UAAU;;EAG9D,SAAS,YAAY;GACnB,MAAM,eAAe,QAAQ,SAAS,mBAAmB,cAAc,SAAS;GAChF,MAAM,UAAU,QAAQ,SAAS,mBAAmB,SAAS,SAAS;GACtE,MAAM,UAAU,QAAQ,SAAS,mBAAmB,SAAS,SAAS;GACtE,MAAM,UAAU,QAAQ,SAAS,mBAAmB,SAAS,SAAS;GAEtE,MAAM,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC;AAEjE,OAAI,QAAQ,UAAU,QACpB;QAAI,YAAY;AACd,aAAQ,SAAS,OAAO,eAAe;AACvC,aAAQ,SAAS,OAAO,UAAU;AAClC,aAAQ,SAAS,OAAO,UAAU;AAClC,aAAQ,SAAS,OAAO,UAAU;;SAGpC,SAAQ,WAAW,EACjB,QAAQ,IAAIC,6BAAS,cAAc,SAAS,SAAS,QAAQ,EAC9D;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACxFJ,IAAa,sCAAb,MAA6E;CAC3E,AAAS,WAAmD;EAC1D,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,QAAQ;GACT;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,OAAO;GACP,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAoC;EACtE,YAAY,YAAY;AACtB,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB,SAAS,UAAU;;EAE/D,SAAS,YAAY;GACnB,MAAM,eAAe,QAAQ,SAAS,gBAAgB,QAAQ,SAAS;GACvE,MAAM,EAAE,QAAQ,QAAQ,WAAW,QAAQ;AAE3C,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,eAAe;AACvC,YAAQ,SAAS,OAAO,SAAS;AACjC,YAAQ,SAAS,OAAO,SAAS;AACjC,YAAQ,SAAS,OAAO,SAAS;SAEjC,SAAQ,WAAW,EACjB,QAAQ,IAAIC,gCAAY,cAAc,QAAQ,QAAQ,OAAO,EAC9D;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AChDJ,IAAa,qCAAb,MAA4E;CAC1E,AAAS,WAAkD;EACzD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,QAAQ;GACT;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,OAAO;GACP,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAmC;EACrE,YAAY,YAAY;AACtB,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB,SAAS,UAAU;;EAE/D,SAAS,YAAY;GACnB,MAAM,eAAe,QAAQ,SAAS,gBAAgB,QAAQ,SAAS;GACvE,MAAM,EAAE,QAAQ,QAAQ,WAAW,QAAQ;AAE3C,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,eAAe;AACvC,YAAQ,SAAS,OAAO,SAAS;AACjC,YAAQ,SAAS,OAAO,SAAS;AACjC,YAAQ,SAAS,OAAO,SAAS;SAEjC,SAAQ,WAAW,EACjB,QAAQ,IAAIC,+BAAW,cAAc,QAAQ,QAAQ,OAAO,EAC7D;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AClDJ,IAAa,yCAAb,MAAgF;CAC9E,AAAS,WAAsD;EAC7D,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,YAAY;GACZ,YAAY;GACZ,YAAY;GACb;EACD,SAAS,CACP;GACE,UAAUC,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACZ,OAAO;GACP,gBAAgB;GACjB,EACD;GACE,UAAUA,wBAAS;GACnB,UAAU,gBAAgB;GAC1B,YAAY;GACb,CACF;EACF;CAED,AAAS,WAAWC,6CAAgB,OAAuC;EACzE,YAAY,YAAY;AACtB,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB,SAAS,UAAU;;EAE/D,SAAS,YAAY;GACnB,MAAM,eAAe,QAAQ,SAAS,gBAAgB,QAAQ,SAAS;GACvE,MAAM,EAAE,YAAY,YAAY,eAAe,QAAQ;AAEvD,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,eAAe;AACvC,YAAQ,SAAS,OAAO,aAAa;AACrC,YAAQ,SAAS,OAAO,aAAa;AACrC,YAAQ,SAAS,OAAO,aAAa;SAErC,SAAQ,WAAW,EACjB,QAAQ,IAAIC,mCAAe,cAAc,YAAY,YAAY,WAAW,EAC7E;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;ACrCJ,IAAa,qCAAb,MAA4E;CAC1E,AAAS,WAAkD;EACzD,MAAM,cAAc;EACpB,OAAO,mBAAmB;EAC1B,MAAM;GACJ,OAAO;GACP,WAAW;GACX,OAAO;GACP,WAAW;GACX,MAAM;GACP;EACD,SAAS;GACP;IACE,UAAUC,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACZ,OAAO;IACP,gBAAgB;IACjB;GACD;IACE,UAAUA,wBAAS;IACnB,UAAUC,2CAAe;IACzB,OAAO;IACP,YAAY;IACb;GACD;IACE,UAAUD,wBAAS;IACnB,UAAU,gBAAgB;IAC1B,YAAY;IACb;GACF;EACF;CAED,AAAS,WAAWE,6CAAgB,OAAO,IAAI,iCAAiC,EAAE;EAChF,YAAY,YAAY;AACtB,UAAO,CAAC,CAAC,QAAQ,SAAS,gBAAgB,SAAS,UAAU;;EAE/D,SAAS,YAAwC;GAC/C,MAAM,EAAE,eAAe;GACvB,MAAM,WAAW,QAAQ,SAAS,gBAAgB,QAAQ,SAAS;AAEnE,OAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAQ,SAAS,OAAO,eAAe;AACvC,YAAQ,SAAS,OAAO,YAAY,WAAW;AAC/C,YAAQ,SAAS,OAAO,QAAQ,WAAW;AAC3C,YAAQ,SAAS,OAAO,YAAY,WAAW;AAC/C,YAAQ,SAAS,OAAO,OAAO,WAAW;SAE1C,SAAQ,WAAW,EACjB,QAAQ,IAAIC,+BAAW,UAAU,WAAW,WAAW,WAAW,OAAO,WAAW,WAAW,WAAW,KAAK,EAChH;;EAGL,UAAU,YAAY;AACpB,WAAQ,WAAW;;EAEtB,CAAC;;;;;AClBJ,IAAY,gBAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;KACD;AAED,MAAa,iBAAiB;EAC3B,cAAc,cAAcC;EAC5B,cAAc,WAAWC;EACzB,cAAc,OAAOC;EACrB,cAAc,cAAcC;EAC5B,cAAc,cAAcC;EAC5B,cAAc,cAAcC;EAC5B,cAAc,iBAAiBC;EAC/B,cAAc,aAAaC;EAC3B,cAAc,cAAcC;EAC5B,cAAc,oBAAoBC;EAClC,cAAc,iBAAiBC;EAC/B,cAAc,cAAcC;EAC5B,cAAc,mBAAmBC;EACjC,cAAc,eAAeC;EAC7B,cAAc,eAAeC;EAC7B,cAAc,eAAeC;EAC7B,cAAc,aAAaC;EAC3B,cAAc,WAAWC;EACzB,cAAc,iBAAiBC;EAC/B,cAAc,aAAaC;EAC3B,cAAc,gBAAgBC;EAC9B,cAAc,cAAcC;EAC5B,cAAc,iBAAiBC;EAC/B,cAAc,eAAeC;EAC7B,cAAc,aAAaC;EAC3B,cAAc,cAAcC;EAC5B,cAAc,gBAAgBC;EAC9B,cAAc,mBAAmBC;EACjC,cAAc,kBAAkBC;EAChC,cAAc,sBAAsBC;EACpC,cAAc,kBAAkBC;CAClC;AAED,MAAa,qBAAqB;EAC/B,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,oBAAoB,IAAI,sCAAsC;EAC5E,cAAc,iBAAiB,IAAI,mCAAmC;EACtE,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,aAAa,IAAI,+BAA+B;EAC9D,cAAc,WAAW,IAAI,kCAAkC;EAC/D,cAAc,iBAAiB,IAAI,mCAAmC;EACtE,cAAc,OAAO,IAAI,iCAAiC;EAC1D,cAAc,cAAc,IAAI,iCAAiC;EACjE,cAAc,iBAAiB,IAAI,mCAAmC;EACtE,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,mBAAmB,IAAI,qCAAqC;EAC1E,cAAc,eAAe,IAAI,iCAAiC;EAClE,cAAc,eAAe,IAAI,iCAAiC;EAClE,cAAc,eAAe,IAAI,iCAAiC;EAClE,cAAc,aAAa,IAAI,+BAA+B;EAC9D,cAAc,WAAW,IAAI,6BAA6B;EAC1D,cAAc,aAAa,IAAI,+BAA+B;EAC9D,cAAc,gBAAgB,IAAI,kCAAkC;EACpE,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,iBAAiB,IAAI,mCAAmC;EACtE,cAAc,eAAe,IAAI,iCAAiC;EAClE,cAAc,aAAa,IAAI,+BAA+B;EAC9D,cAAc,cAAc,IAAI,gCAAgC;EAChE,cAAc,gBAAgB,IAAI,kCAAkC;EACpE,cAAc,mBAAmB,IAAI,qCAAqC;EAC1E,cAAc,kBAAkB,IAAI,oCAAoC;EACxE,cAAc,sBAAsB,IAAI,wCAAwC;EAChF,cAAc,kBAAkB,IAAI,oCAAoC;EACxE,cAAc,cAAc,IAAI,gCAAgC;CAClE"}