@awesome-flow/ecs 0.9.4 → 0.10.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.
@@ -26,7 +26,7 @@ var EcsIdGenerator = class {
26
26
  var EcsFlowRepository = class {
27
27
  nodes;
28
28
  constructor() {
29
- this.nodes = new Map();
29
+ this.nodes = /* @__PURE__ */ new Map();
30
30
  }
31
31
  get sizeNodes() {
32
32
  return this.nodes.size;
@@ -50,17 +50,16 @@ var EcsFlowRepository = class {
50
50
 
51
51
  //#endregion
52
52
  //#region src/abstract/handle-types.ts
53
- let EcsHandleDataType = /* @__PURE__ */ function(EcsHandleDataType$1) {
54
- EcsHandleDataType$1["proxy"] = "proxy";
55
- EcsHandleDataType$1["module"] = "module";
56
- return EcsHandleDataType$1;
53
+ let EcsHandleDataType = /* @__PURE__ */ function(EcsHandleDataType) {
54
+ EcsHandleDataType["proxy"] = "proxy";
55
+ EcsHandleDataType["module"] = "module";
56
+ return EcsHandleDataType;
57
57
  }({});
58
58
 
59
59
  //#endregion
60
60
  //#region src/components/formatter-camel-case.tsx
61
61
  function CamelCaseFormatter(props) {
62
- const value = useMemo(() => props.value?.toString().replace(/([a-z])([A-Z])/g, "$1 $2"), [props.value]);
63
- return value;
62
+ return useMemo(() => props.value?.toString().replace(/([a-z])([A-Z])/g, "$1 $2"), [props.value]);
64
63
  }
65
64
  var formatter_camel_case_default = memo(CamelCaseFormatter);
66
65
 
@@ -68,10 +67,9 @@ var formatter_camel_case_default = memo(CamelCaseFormatter);
68
67
  //#region src/components/object-inspector.tsx
69
68
  function ObjectInspector(props) {
70
69
  const colorScheme = useComputedColorScheme();
71
- const theme = useMemo(() => colorScheme === "dark" ? "chromeDark" : "chromeLight", [colorScheme]);
72
70
  return /* @__PURE__ */ jsx(Inspector, {
73
71
  table: false,
74
- theme,
72
+ theme: useMemo(() => colorScheme === "dark" ? "chromeDark" : "chromeLight", [colorScheme]),
75
73
  data: props.data
76
74
  });
77
75
  }
@@ -81,12 +79,11 @@ var object_inspector_default = memo(ObjectInspector);
81
79
  //#region src/components/entity-component-inspector.tsx
82
80
  function EntityComponentInspector(props) {
83
81
  const [opened, { toggle }] = useDisclosure(false);
84
- const buttonColor = useMemo(() => opened ? "light" : "indigo", [opened]);
85
82
  return /* @__PURE__ */ jsxs(Box, { children: [/* @__PURE__ */ jsx(Button, {
86
83
  variant: "outline",
87
84
  size: "xs",
88
85
  onClick: toggle,
89
- color: buttonColor,
86
+ color: useMemo(() => opened ? "light" : "indigo", [opened]),
90
87
  fullWidth: true,
91
88
  children: props.component.componentType
92
89
  }), /* @__PURE__ */ jsx(Collapse, {
@@ -127,8 +124,8 @@ var badge_list_default = memo(BadgeList);
127
124
  //#endregion
128
125
  //#region src/components/entity-proxy-list.tsx
129
126
  function EntityProxyList(props) {
130
- const proxies = Array.from(props.entity.proxies.values()).map((c) => c.values());
131
- const items = proxies.map((p) => Array.from(p).map((k) => EcsIdGenerator.entityProxy(k))).flat();
127
+ const { entityProxyRepository } = useContext(EcsFlowContext);
128
+ const items = Array.from(entityProxyRepository.getAll(props.entity.myProxy).values()).flat().map((p) => EcsIdGenerator.entityProxy(p));
132
129
  return /* @__PURE__ */ jsxs(Accordion.Item, {
133
130
  value: "proxies",
134
131
  children: [/* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Badge, {
@@ -176,7 +173,6 @@ function EntityUpdateCounter(props) {
176
173
  setRefresh((refresh) => refresh + 1);
177
174
  }, 1e3);
178
175
  return () => {
179
- console.log("CLEAR INTERVAL");
180
176
  clearInterval(interval);
181
177
  };
182
178
  }, []);
@@ -208,7 +204,6 @@ function EntityLayout({ entity }) {
208
204
  ] })
209
205
  ] });
210
206
  }
211
- var entity_layout_default = EntityLayout;
212
207
 
213
208
  //#endregion
214
209
  //#region src/nodes/node-entity.tsx
@@ -225,10 +220,9 @@ function EntityNode({ id, data, selected, type }) {
225
220
  children: /* @__PURE__ */ jsx(formatter_camel_case_default, { value: entity.myProxy.entityType })
226
221
  }),
227
222
  type,
228
- children: /* @__PURE__ */ jsx(entity_layout_default, { entity })
223
+ children: /* @__PURE__ */ jsx(EntityLayout, { entity })
229
224
  });
230
225
  }
231
- var node_entity_default = EntityNode;
232
226
 
233
227
  //#endregion
234
228
  //#region src/components/pipeline-middleware-list.tsx
@@ -251,41 +245,36 @@ function PipelineMiddlewareList(props) {
251
245
  }) }) })]
252
246
  }, props.label);
253
247
  }
254
- var pipeline_middleware_list_default = PipelineMiddlewareList;
255
248
 
256
249
  //#endregion
257
250
  //#region src/layout/systems-module-layout.tsx
258
251
  function SystemsModuleLayout(props) {
259
252
  const { module } = props;
260
- const runtimeContext = module["runtimeContext"];
261
- const { systemContext } = runtimeContext;
262
- const { status } = useMemo(() => {
263
- return systemContext.runtime;
264
- }, [systemContext.runtime]);
265
- const init = runtimeContext.systemPipelines.get(SystemType.initialize);
266
- const update = runtimeContext.systemPipelines.get(SystemType.update);
267
- const render = runtimeContext.systemPipelines.get(SystemType.render);
268
- const sync = runtimeContext.systemPipelines.get(SystemType.sync);
269
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Text, { children: ["Status: ", status] }), /* @__PURE__ */ jsxs(Accordion, { children: [
270
- init && /* @__PURE__ */ jsx(pipeline_middleware_list_default, {
253
+ const { systemContext, systemsModule } = module["runtimeContext"];
254
+ const error = systemContext.runtime.error;
255
+ const init = systemsModule.pipelines.get(SystemType.initialize);
256
+ const update = systemsModule.pipelines.get(SystemType.update);
257
+ const render = systemsModule.pipelines.get(SystemType.render);
258
+ const sync = systemsModule.pipelines.get(SystemType.sync);
259
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Text, { children: ["Error?: ", error] }), /* @__PURE__ */ jsxs(Accordion, { children: [
260
+ init && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
271
261
  pipeline: init,
272
262
  label: "Initialize"
273
263
  }),
274
- update && /* @__PURE__ */ jsx(pipeline_middleware_list_default, {
264
+ update && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
275
265
  pipeline: update,
276
266
  label: "Update"
277
267
  }),
278
- render && /* @__PURE__ */ jsx(pipeline_middleware_list_default, {
268
+ render && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
279
269
  pipeline: render,
280
270
  label: "Render"
281
271
  }),
282
- sync && /* @__PURE__ */ jsx(pipeline_middleware_list_default, {
272
+ sync && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
283
273
  pipeline: sync,
284
274
  label: "Sync"
285
275
  })
286
276
  ] })] });
287
277
  }
288
- var systems_module_layout_default = SystemsModuleLayout;
289
278
 
290
279
  //#endregion
291
280
  //#region src/nodes/node-systems-module.tsx
@@ -303,19 +292,18 @@ function SystemsModuleNode({ id, data, selected, type }) {
303
292
  children: /* @__PURE__ */ jsx(formatter_camel_case_default, { value: data.entityType })
304
293
  }),
305
294
  type,
306
- children: /* @__PURE__ */ jsx(systems_module_layout_default, {
295
+ children: /* @__PURE__ */ jsx(SystemsModuleLayout, {
307
296
  type: data.entityType,
308
297
  module
309
298
  })
310
299
  });
311
300
  }
312
- var node_systems_module_default = SystemsModuleNode;
313
301
 
314
302
  //#endregion
315
303
  //#region src/abstract/templates.ts
316
- let EcsTemplateGroup = /* @__PURE__ */ function(EcsTemplateGroup$1) {
317
- EcsTemplateGroup$1["ecs"] = "ECS";
318
- return EcsTemplateGroup$1;
304
+ let EcsTemplateGroup = /* @__PURE__ */ function(EcsTemplateGroup) {
305
+ EcsTemplateGroup["ecs"] = "ECS";
306
+ return EcsTemplateGroup;
319
307
  }({});
320
308
 
321
309
  //#endregion
@@ -363,14 +351,14 @@ var SystemsModuleNodeTemplate = class {
363
351
 
364
352
  //#endregion
365
353
  //#region src/abstract/node-types.ts
366
- let EcsNodeType = /* @__PURE__ */ function(EcsNodeType$1) {
367
- EcsNodeType$1["systemsModule"] = "systems-module-node";
368
- EcsNodeType$1["entity"] = "entity-node";
369
- return EcsNodeType$1;
354
+ let EcsNodeType = /* @__PURE__ */ function(EcsNodeType) {
355
+ EcsNodeType["systemsModule"] = "systems-module-node";
356
+ EcsNodeType["entity"] = "entity-node";
357
+ return EcsNodeType;
370
358
  }({});
371
359
  const ecsNodeTypes = {
372
- [EcsNodeType.systemsModule]: node_systems_module_default,
373
- [EcsNodeType.entity]: node_entity_default
360
+ [EcsNodeType.systemsModule]: SystemsModuleNode,
361
+ [EcsNodeType.entity]: EntityNode
374
362
  };
375
363
  const ecsNodeTemplates = {
376
364
  [EcsNodeType.entity]: new EntityNodeTemplate(),
@@ -404,19 +392,19 @@ function FlowEcsEdgeModules(props) {
404
392
  ]);
405
393
  return /* @__PURE__ */ jsx(Fragment, {});
406
394
  }
407
- var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
408
395
 
409
396
  //#endregion
410
397
  //#region src/flow/flow-ecs-edge-proxies.tsx
411
398
  function FlowEcsEdgeProxies(props) {
412
399
  const { nodesToConnect } = props;
413
400
  const onConnect = useFlowStore((state) => state.onConnect);
414
- const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);
401
+ const { ecsFlowRepository, entityProxyRepository, entityRepository } = useContext(EcsFlowContext);
415
402
  useEffect(() => {
416
403
  for (const node of nodesToConnect) {
417
404
  const sourceHandle = node.data.handles.find((h) => h.connection === "source");
418
405
  const entity = entityRepository.get(node.data.entity);
419
- for (const [, proxyMap] of entity.proxies) for (const proxy of proxyMap.values()) {
406
+ const proxies = Array.from(entityProxyRepository.getAll(entity.myProxy).values()).flat();
407
+ for (const proxy of proxies) {
420
408
  const proxyNode = ecsFlowRepository.getEntityNode(proxy);
421
409
  if (proxyNode) {
422
410
  const targetHandle = proxyNode.data.handles.find((h) => h.connection === "target");
@@ -433,11 +421,11 @@ function FlowEcsEdgeProxies(props) {
433
421
  nodesToConnect,
434
422
  ecsFlowRepository,
435
423
  entityRepository,
424
+ entityProxyRepository,
436
425
  onConnect
437
426
  ]);
438
427
  return /* @__PURE__ */ jsx(Fragment, {});
439
428
  }
440
- var flow_ecs_edge_proxies_default = FlowEcsEdgeProxies;
441
429
 
442
430
  //#endregion
443
431
  //#region src/flow/flow-ecs-entities.tsx
@@ -469,9 +457,8 @@ function FlowEcsEntities() {
469
457
  nodeFactory,
470
458
  addNodes
471
459
  ]);
472
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(flow_ecs_edge_proxies_default, { nodesToConnect: entityNodes }), /* @__PURE__ */ jsx(flow_ecs_edge_modules_default, { nodesToConnect: entityNodes })] });
460
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FlowEcsEdgeProxies, { nodesToConnect: entityNodes }), /* @__PURE__ */ jsx(FlowEcsEdgeModules, { nodesToConnect: entityNodes })] });
473
461
  }
474
- var flow_ecs_entities_default = FlowEcsEntities;
475
462
 
476
463
  //#endregion
477
464
  //#region src/flow/flow-ecs-modules.tsx
@@ -505,7 +492,6 @@ function FlowEcsModules() {
505
492
  ]);
506
493
  return /* @__PURE__ */ jsx(Fragment, {});
507
494
  }
508
- var flow_ecs_modules_default = FlowEcsModules;
509
495
 
510
496
  //#endregion
511
497
  //#region src/flow/flow-ecs-state.tsx
@@ -522,13 +508,13 @@ function FlowEcsState(props) {
522
508
  }, 1e3);
523
509
  }, []);
524
510
  return /* @__PURE__ */ jsxs(Fragment, { children: [
525
- props.showSystemModules && /* @__PURE__ */ jsx(flow_ecs_modules_default, {}),
526
- props.showEntities && /* @__PURE__ */ jsx(flow_ecs_entities_default, {}),
511
+ props.showSystemModules && /* @__PURE__ */ jsx(FlowEcsModules, {}),
512
+ props.showEntities && /* @__PURE__ */ jsx(FlowEcsEntities, {}),
527
513
  props.autoLayout && /* @__PURE__ */ jsx(FlowAutoLayout, { refreshLayout })
528
514
  ] });
529
515
  }
530
516
  var flow_ecs_state_default = memo(FlowEcsState);
531
517
 
532
518
  //#endregion
533
- export { EcsFlowContext, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, node_entity_default as EntityNode, EntityNodeTemplate, flow_ecs_state_default as FlowEcsState, node_systems_module_default as SystemsModuleNode, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
534
- //# sourceMappingURL=index.js.map
519
+ export { EcsFlowContext, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, EntityNodeTemplate, flow_ecs_state_default as FlowEcsState, SystemsModuleNode, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
520
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["ObjectInspector","EntityComponentInspector","FormatterCamelCase","BadgeList","BadgeList","EntityUpdateCounter","EntityComponentList","EntityProxyList","EntitySubscriptionList","CamelCaseFormatter","BadgeList","CamelCaseFormatter"],"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/components/formatter-camel-case.tsx","../src/components/object-inspector.tsx","../src/components/entity-component-inspector.tsx","../src/components/entity-component-list.tsx","../src/components/badge-list.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/layout/entity-layout.tsx","../src/nodes/node-entity.tsx","../src/components/pipeline-middleware-list.tsx","../src/layout/systems-module-layout.tsx","../src/nodes/node-systems-module.tsx","../src/abstract/templates.ts","../src/templates/template-entity-node.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-modules.tsx","../src/flow/flow-ecs-state.tsx"],"sourcesContent":["import { IEntityEventsManager, IEntityProxyRepository, IEntityRepository } from '@awesome-ecs/abstract/entities';\r\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\r\nimport { createContext } from 'react';\r\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\r\nimport { EcsFlowRepository } from './ecs-flow-repository';\r\n\r\nexport type EcsFlowContextProps = {\r\n ecsFlowRepository: EcsFlowRepository;\r\n entityRepository: IEntityRepository;\r\n entityEventsManager: IEntityEventsManager;\r\n entityUpdateCounter: IEntityUpdateCounter;\r\n entityProxyRepository: IEntityProxyRepository;\r\n systemsModuleRepository: ISystemsModuleRepository;\r\n};\r\n\r\nexport const EcsFlowContext = createContext<EcsFlowContextProps>(null);\r\n","import { IEntityProxy } from '@awesome-ecs/abstract/entities';\n\nexport class EcsIdGenerator {\n static entityProxy(proxy: IEntityProxy): string {\n return `${proxy.entityType}:${proxy.entityUid}`;\n }\n}\n","import { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\r\nimport { Node } from '@xyflow/react';\r\nimport { EcsIdGenerator } from '../utils/id-generator';\r\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\r\n\r\nexport class EcsFlowRepository {\r\n private readonly nodes: Map<string, Node>;\r\n\r\n constructor() {\r\n this.nodes = new Map();\r\n }\r\n\r\n get sizeNodes(): number {\r\n return this.nodes.size;\r\n }\r\n\r\n addSystemModuleNode(node: Node<SystemsModuleNodeData>) {\r\n this.nodes.set(node.data.entityType.toString(), node);\r\n }\r\n\r\n getSystemModuleNode(entityType: EntityTypeUid): Node<SystemsModuleNodeData> {\r\n return this.nodes.get(entityType.toString()) as Node<SystemsModuleNodeData>;\r\n }\r\n\r\n addEntityNode(node: Node<EntityNodeData>) {\r\n this.nodes.set(EcsIdGenerator.entityProxy(node.data.entity), node);\r\n }\r\n\r\n getEntityNode(entity: IEntityProxy): Node<EntityNodeData> {\r\n return this.nodes.get(EcsIdGenerator.entityProxy(entity)) as Node<EntityNodeData>;\r\n }\r\n\r\n listAllNodes(): Node[] {\r\n return Array.from(this.nodes.values());\r\n }\r\n}\r\n","export enum EcsHandleDataType {\n proxy = 'proxy',\n module = 'module'\n}\n","import { memo, useMemo } from 'react';\n\nexport type CamelCaseFormatterProps = {\n value: string | number;\n};\n\nfunction CamelCaseFormatter(props: Readonly<CamelCaseFormatterProps>) {\n const value = useMemo(\n () => props.value?.toString().replace(/([a-z])([A-Z])/g, '$1 $2'),\n [props.value]\n );\n return value;\n}\n\nexport default memo(CamelCaseFormatter);\n","import { useComputedColorScheme } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { Inspector } from 'react-inspector';\n\nexport type ObjectInspectorProps = {\n data: any;\n};\n\nfunction ObjectInspector(props: Readonly<ObjectInspectorProps>) {\n const colorScheme = useComputedColorScheme();\n\n const theme = useMemo(\n () => (colorScheme === 'dark' ? 'chromeDark' : 'chromeLight'),\n [colorScheme]\n );\n\n return <Inspector table={false} theme={theme} data={props.data} />;\n}\n\nexport default memo(ObjectInspector);\n","import { IComponent } from '@awesome-ecs/abstract/components';\nimport { Box, Button, Collapse } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { memo, useMemo } from 'react';\nimport ObjectInspector from './object-inspector';\n\nexport type EntityComponentInspectorProps = {\n component: IComponent;\n};\n\nfunction EntityComponentInspector(props: Readonly<EntityComponentInspectorProps>) {\n const [opened, { toggle }] = useDisclosure(false);\n\n const buttonColor = useMemo(() => (opened ? 'light' : 'indigo'), [opened]);\n\n return (\n <Box>\n <Button variant=\"outline\" size=\"xs\" onClick={toggle} color={buttonColor} fullWidth>\n {props.component.componentType}\n </Button>\n\n <Collapse in={opened}>{opened && <ObjectInspector data={props.component} />}</Collapse>\n </Box>\n );\n}\n\nexport default memo(EntityComponentInspector);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport EntityComponentInspector from './entity-component-inspector';\n\nexport type EntityComponentListProps = {\n entity: IEntity;\n};\n\nfunction EntityComponentList(props: Readonly<EntityComponentListProps>) {\n const components = Array.from(props.entity.components.values());\n\n return (\n <Accordion.Item key=\"components\" value=\"components\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n Components\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n {components.map((c, i) => (\n <EntityComponentInspector component={c} key={i} />\n ))}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityComponentList);\n","import { Badge, BadgeProps } from '@mantine/core';\nimport { memo } from 'react';\nimport FormatterCamelCase from './formatter-camel-case';\n\nexport type BadgeListProps = {\n items: (string | number)[];\n badge?: BadgeProps;\n};\n\nfunction BadgeList(props: Readonly<BadgeListProps>) {\n return props.items.map((value, i) => {\n return (\n <Badge key={i} {...(props.badge || [])}>\n <FormatterCamelCase value={value} />\n </Badge>\n );\n });\n}\n\nexport default memo(BadgeList);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\r\nimport { Accordion, Badge, Stack } from '@mantine/core';\r\nimport { memo, useContext } from 'react';\r\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\r\nimport { EcsIdGenerator } from '../utils/id-generator';\r\nimport BadgeList from './badge-list';\r\n\r\nexport type EntityProxyListProps = {\r\n entity: IEntity;\r\n};\r\n\r\nfunction EntityProxyList(props: Readonly<EntityProxyListProps>) {\r\n const { entityProxyRepository } = useContext(EcsFlowContext);\r\n\r\n const proxies = Array.from(entityProxyRepository.getAll(props.entity.myProxy).values()).flat();\r\n const items = proxies.map((p) => EcsIdGenerator.entityProxy(p));\r\n\r\n return (\r\n <Accordion.Item key=\"proxies\" value=\"proxies\">\r\n <Accordion.Control>\r\n <Badge fullWidth variant=\"light\" rightSection={items.length}>\r\n Proxies\r\n </Badge>\r\n </Accordion.Control>\r\n <Accordion.Panel>\r\n <Stack>\r\n <BadgeList items={items} badge={{ variant: 'outline' }} />\r\n </Stack>\r\n </Accordion.Panel>\r\n </Accordion.Item>\r\n );\r\n}\r\n\r\nexport default memo(EntityProxyList);\r\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo, useContext } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport BadgeList from './badge-list';\n\nexport type EntitySubscriptionListProps = {\n entity: IEntity;\n};\n\nfunction EntitySubscriptionList(props: Readonly<EntitySubscriptionListProps>) {\n const { entityEventsManager } = useContext(EcsFlowContext);\n const subscriptions = entityEventsManager.getSubscriptionsForEntity(props.entity.myProxy);\n\n return (\n <Accordion.Item key=\"subscriptions\" value=\"subscriptions\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={subscriptions.length}>\n Events\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={subscriptions} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntitySubscriptionList);\n","import { EntityUid } from '@awesome-ecs/abstract/entities';\nimport { Badge } from '@mantine/core';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntityUpdateCounterProps = {\n entityUid: EntityUid;\n};\n\nfunction EntityUpdateCounter(props: Readonly<EntityUpdateCounterProps>) {\n const [, setRefresh] = useState(0);\n\n const { entityUpdateCounter } = useContext(EcsFlowContext);\n\n const updates = entityUpdateCounter.getUpdateCount(props.entityUid) || 0;\n const removes = entityUpdateCounter.getRemoveCount(props.entityUid) || 0;\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRefresh((refresh) => refresh + 1);\n }, 1000);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n return (\n <>\n <Badge variant=\"light\">{updates}</Badge>\n <Badge variant=\"light\" color=\"orange\">\n {removes}\n </Badge>\n </>\n );\n}\n\nexport default memo(EntityUpdateCounter);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Divider, Group } from '@mantine/core';\nimport EntityComponentList from '../components/entity-component-list';\nimport EntityProxyList from '../components/entity-proxy-list';\nimport EntitySubscriptionList from '../components/entity-subscription-list';\nimport EntityUpdateCounter from '../components/entity-update-counter';\n\nexport type NodeEntityProps = {\n entity: IEntity;\n};\n\nfunction EntityLayout({ entity }: Readonly<NodeEntityProps>) {\n return (\n <>\n <Group>\n <Badge variant=\"outline\" color=\"orange\">\n {entity.myProxy.entityUid}\n </Badge>\n <EntityUpdateCounter entityUid={entity.myProxy.entityUid} />\n </Group>\n <Divider my={5} />\n <Accordion>\n <EntityComponentList entity={entity} />\n <EntityProxyList entity={entity} />\n <EntitySubscriptionList entity={entity} />\n </Accordion>\n </>\n );\n}\n\nexport default EntityLayout;\n","import { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { Badge } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { useContext, useMemo } from 'react';\r\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\r\nimport { EntityNodeData } from '../abstract/node-props';\r\nimport CamelCaseFormatter from '../components/formatter-camel-case';\r\nimport EntityLayout from '../layout/entity-layout';\r\n\r\nfunction EntityNode({ id, data, selected, type }: NodeProps<Node<EntityNodeData>>) {\r\n const { entityRepository } = useContext(EcsFlowContext);\r\n const entity = useMemo(() => entityRepository.get(data.entity), [data.entity, entityRepository]);\r\n\r\n return (\r\n <NodeContainer\r\n id={id}\r\n selected={selected}\r\n data={data}\r\n title={\r\n <Badge fullWidth variant=\"transparent\">\r\n <CamelCaseFormatter value={entity.myProxy.entityType} />\r\n </Badge>\r\n }\r\n type={type}\r\n >\r\n <EntityLayout entity={entity} />\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default EntityNode;\r\n","import { IMiddleware, IPipeline, IPipelineContext } from '@awesome-ecs/abstract/pipelines';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport BadgeList from './badge-list';\n\nexport type PipelineMiddlewareListProps = {\n pipeline: IPipeline<IPipelineContext>;\n label: string;\n};\n\nfunction PipelineMiddlewareList(props: Readonly<PipelineMiddlewareListProps>) {\n let middleware: IMiddleware<IPipelineContext>[] = [];\n\n if (props.pipeline) {\n middleware = props.pipeline['middleware'] as IMiddleware<IPipelineContext>[];\n }\n\n const components = middleware.map((m) => {\n return m.name || m.constructor.name;\n });\n\n return (\n <Accordion.Item key={props.label} value={props.label}>\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n {props.label}\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={components} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default PipelineMiddlewareList;\n","import { EntityTypeUid, IEntity } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModule, ISystemsRuntimeContext, SystemType } from '@awesome-ecs/abstract/systems';\nimport { Accordion, Text } from '@mantine/core';\nimport { useMemo } from 'react';\nimport PipelineMiddlewareList from '../components/pipeline-middleware-list';\n\nexport type NodeSystemModuleProps = {\n type: EntityTypeUid;\n module: ISystemsModule<IEntity>;\n};\n\nfunction SystemsModuleLayout(props: Readonly<NodeSystemModuleProps>) {\n const { module } = props;\n\n const runtimeContext = module['runtimeContext'] as ISystemsRuntimeContext<IEntity>;\n const { systemContext, systemsModule } = runtimeContext;\n\n const error = systemContext.runtime.error;\n\n const init = systemsModule.pipelines.get(SystemType.initialize);\n const update = systemsModule.pipelines.get(SystemType.update);\n const render = systemsModule.pipelines.get(SystemType.render);\n const sync = systemsModule.pipelines.get(SystemType.sync);\n\n return (\n <>\n <Text>Error?: {error}</Text>\n <Accordion>\n {init && <PipelineMiddlewareList pipeline={init} label=\"Initialize\" />}\n {update && <PipelineMiddlewareList pipeline={update} label=\"Update\" />}\n {render && <PipelineMiddlewareList pipeline={render} label=\"Render\" />}\n {sync && <PipelineMiddlewareList pipeline={sync} label=\"Sync\" />}\n </Accordion>\n </>\n );\n}\n\nexport default SystemsModuleLayout;\n","import { NodeContainer } from '@awesome-flow/core/layout';\r\nimport { Badge } from '@mantine/core';\r\nimport { Node, NodeProps } from '@xyflow/react';\r\nimport { useContext } from 'react';\r\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\r\nimport { SystemsModuleNodeData } from '../abstract/node-props';\r\nimport CamelCaseFormatter from '../components/formatter-camel-case';\r\nimport SystemsModuleLayout from '../layout/systems-module-layout';\r\n\r\nfunction SystemsModuleNode({ id, data, selected, type }: NodeProps<Node<SystemsModuleNodeData>>) {\r\n const { systemsModuleRepository } = useContext(EcsFlowContext);\r\n const module = systemsModuleRepository.get(data.entityType);\r\n\r\n return (\r\n <NodeContainer\r\n id={id}\r\n selected={selected}\r\n data={data}\r\n title={\r\n <Badge fullWidth color=\"indigo\" variant=\"transparent\">\r\n <CamelCaseFormatter value={data.entityType} />\r\n </Badge>\r\n }\r\n type={type}\r\n >\r\n <SystemsModuleLayout type={data.entityType} module={module} />\r\n </NodeContainer>\r\n );\r\n}\r\n\r\nexport default SystemsModuleNode;\r\n","export enum EcsTemplateGroup {\n ecs = 'ECS'\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class EntityNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<EntityNodeData> = {\n type: EcsNodeType.entity,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Entity',\n entity: null\n },\n handles: [\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Left,\n connection: 'target',\n disabled: true\n },\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Right,\n connection: 'source',\n disabled: true\n }\n ]\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class SystemsModuleNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<SystemsModuleNodeData> = {\n type: EcsNodeType.systemsModule,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Systems Module',\n entityType: null\n },\n handles: [\n {\n dataType: EcsHandleDataType.module,\n position: Position.Left,\n connection: 'target',\n disabled: true\n }\n ]\n };\n}\n","import { NodeTypes } from '@xyflow/react';\nimport EntityNode from '../nodes/node-entity';\nimport SystemsModuleNode from '../nodes/node-systems-module';\nimport { EntityNodeTemplate } from '../templates/template-entity-node';\nimport { SystemsModuleNodeTemplate } from '../templates/template-systems-module';\n\nexport enum EcsNodeType {\n systemsModule = 'systems-module-node',\n entity = 'entity-node'\n}\n\nexport const ecsNodeTypes = {\n [EcsNodeType.systemsModule]: SystemsModuleNode,\n [EcsNodeType.entity]: EntityNode\n} satisfies NodeTypes;\n\nexport const ecsNodeTemplates = {\n [EcsNodeType.entity]: new EntityNodeTemplate(),\n [EcsNodeType.systemsModule]: new SystemsModuleNodeTemplate()\n};\n","import { useFlowStore } from '@awesome-flow/core/hooks';\nimport { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const onConnect = useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);\n const targetHandle = systemModule?.data.handles.find((h) => h.connection === 'target');\n\n if (targetHandle) {\n onConnect({\n source: node.id,\n target: systemModule.id,\n sourceHandle: sourceHandle.handleId,\n targetHandle: targetHandle.handleId\n });\n }\n }\n }, [nodesToConnect, ecsFlowRepository, entityRepository, onConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useFlowStore } from '@awesome-flow/core/hooks';\r\nimport { Node } from '@xyflow/react';\r\nimport { useContext, useEffect } from 'react';\r\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\r\nimport { EntityNodeData } from '../abstract/node-props';\r\n\r\nexport type FlowEcsEdgeProxiesProps = {\r\n nodesToConnect: Node<EntityNodeData>[];\r\n};\r\n\r\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\r\n const { nodesToConnect } = props;\r\n\r\n const onConnect = useFlowStore((state: { onConnect: any }) => state.onConnect);\r\n\r\n const { ecsFlowRepository, entityProxyRepository, entityRepository } = useContext(EcsFlowContext);\r\n\r\n useEffect(() => {\r\n for (const node of nodesToConnect) {\r\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\r\n const entity = entityRepository.get(node.data.entity);\r\n const proxies = Array.from(entityProxyRepository.getAll(entity.myProxy).values()).flat();\r\n\r\n for (const proxy of proxies) {\r\n const proxyNode = ecsFlowRepository.getEntityNode(proxy);\r\n\r\n if (proxyNode) {\r\n const targetHandle = proxyNode.data.handles.find((h) => h.connection === 'target');\r\n\r\n onConnect({\r\n source: node.id,\r\n target: proxyNode.id,\r\n sourceHandle: sourceHandle.handleId,\r\n targetHandle: targetHandle.handleId\r\n });\r\n }\r\n }\r\n }\r\n }, [nodesToConnect, ecsFlowRepository, entityRepository, entityProxyRepository, onConnect]);\r\n\r\n return <></>;\r\n}\r\n\r\nexport default FlowEcsEdgeProxies;\r\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { Node } from '@xyflow/react';\nimport { useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\n\nfunction FlowEcsEntities() {\n const { nodeFactory } = useContext(FlowContext);\n const addNodes = useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n const [entityNodes, setEntityNodes] = useState<Node<EntityNodeData>[]>([]);\n\n useEffect(() => {\n const entities = entityRepository.listAll();\n const nodes = [];\n\n for (const entity of entities) {\n if (ecsFlowRepository.getEntityNode(entity.myProxy)) {\n continue;\n }\n\n const node = nodeFactory.createNodeFromType<EntityNodeData>(EcsNodeType.entity);\n\n node.data.entity = entity.myProxy;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addEntityNode(node);\n nodes.push(node);\n }\n\n setEntityNodes(nodes);\n addNodes(nodes);\n }, [entityRepository, entityRepository.size, ecsFlowRepository, nodeFactory, addNodes]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { FlowContext } from '@awesome-flow/core/abstract';\r\nimport { useFlowStore } from '@awesome-flow/core/hooks';\r\nimport { useContext, useEffect } from 'react';\r\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\r\nimport { SystemsModuleNodeData } from '../abstract/node-props';\r\nimport { EcsNodeType } from '../abstract/node-types';\r\n\r\nfunction FlowEcsModules() {\r\n const { nodeFactory } = useContext(FlowContext);\r\n const addNodes = useFlowStore((state) => state.addNodes);\r\n\r\n const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);\r\n\r\n useEffect(() => {\r\n const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);\r\n const keys = Array.from(modules.values()).map((v) => v[0]);\r\n\r\n const nodesToAdd = [];\r\n\r\n for (const element of keys) {\r\n if (ecsFlowRepository.getSystemModuleNode(element)) {\r\n continue;\r\n }\r\n\r\n const node = nodeFactory.createNodeFromType<SystemsModuleNodeData>(EcsNodeType.systemsModule);\r\n\r\n node.data.entityType = element;\r\n node.position = { x: 0, y: 0 };\r\n\r\n ecsFlowRepository.addSystemModuleNode(node);\r\n nodesToAdd.push(node);\r\n }\r\n\r\n if (nodesToAdd.length) {\r\n addNodes(nodesToAdd);\r\n }\r\n }, [\r\n nodeFactory,\r\n addNodes,\r\n ecsFlowRepository,\r\n ecsFlowRepository.sizeNodes,\r\n systemsModuleRepository,\r\n systemsModuleRepository.size\r\n ]);\r\n\r\n return <></>;\r\n}\r\n\r\nexport default FlowEcsModules;\r\n","import { FlowAutoLayout } from '@awesome-flow/core/canvas';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n const [refreshLayout, setRefreshLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setRefreshLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n useEffect(() => {\n setInterval(() => {\n setUpdates((updates) => updates + 1);\n }, 1000);\n }, []);\n\n return (\n <>\n {props.showSystemModules && <FlowEcsModules />}\n {props.showEntities && <FlowEcsEntities />}\n {props.autoLayout && <FlowAutoLayout refreshLayout={refreshLayout} />}\n </>\n );\n}\n\nexport default memo(FlowEcsState);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesome-flow/ecs",
3
- "version": "0.9.4",
3
+ "version": "0.10.0",
4
4
  "description": "The ECS package for Awesome Flow. Provides basic components to map Awesome ECS objects.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -12,12 +12,12 @@
12
12
  "ts:watch": "npx tsc --noEmit --incremental --watch"
13
13
  },
14
14
  "dependencies": {
15
- "@awesome-ecs/abstract": "^0.21.0",
16
- "@awesome-ecs/core": "^0.21.0",
17
- "@awesome-flow/core": "^0.9.4",
18
- "react-inspector": "^6.0.2"
15
+ "react-inspector": "^9.0.0"
19
16
  },
20
17
  "peerDependencies": {
18
+ "@awesome-ecs/abstract": ">=0.22.0",
19
+ "@awesome-ecs/core": ">=0.22.0",
20
+ "@awesome-flow/core": ">=0.9.0",
21
21
  "@mantine/core": ">=7.13.2",
22
22
  "@mantine/hooks": ">=7.13.2",
23
23
  "@tabler/icons-react": ">=3.19.0",
@@ -28,20 +28,23 @@
28
28
  "zustand": ">=4.5.5"
29
29
  },
30
30
  "devDependencies": {
31
- "@mantine/core": "^8.0.1",
32
- "@mantine/hooks": "^8.0.1",
33
- "@tabler/icons-react": "^3.33.0",
34
- "@xyflow/react": "^12.6.4",
35
- "@xyflow/system": "^0.0.61",
36
- "react": "^19.1.0",
37
- "react-dom": "^19.1.0",
38
- "zustand": "^5.0.5"
31
+ "@awesome-ecs/abstract": "^0.23.0",
32
+ "@awesome-ecs/core": "^0.23.0",
33
+ "@awesome-flow/core": "0.10.0",
34
+ "@mantine/core": "^8.3.16",
35
+ "@mantine/hooks": "^8.3.16",
36
+ "@tabler/icons-react": "^3.40.0",
37
+ "@xyflow/react": "^12.10.1",
38
+ "@xyflow/system": "^0.0.75",
39
+ "react": "^19.2.4",
40
+ "react-dom": "^19.2.4",
41
+ "zustand": "^5.0.11"
39
42
  },
40
43
  "exports": {
41
44
  ".": {
42
45
  "import": {
43
- "types": "./dist/index.d.ts",
44
- "default": "./dist/index.js"
46
+ "types": "./dist/index.d.mts",
47
+ "default": "./dist/index.mjs"
45
48
  },
46
49
  "require": {
47
50
  "types": "./dist/index.d.cts",
@@ -51,7 +54,7 @@
51
54
  },
52
55
  "files": [
53
56
  "dist",
54
- "*.d.ts",
57
+ "*.d.mts",
55
58
  "*.d.cts"
56
59
  ],
57
60
  "repository": {
@@ -76,5 +79,5 @@
76
79
  "url": "https://github.com/privatebytes/awesome-flow/issues"
77
80
  },
78
81
  "homepage": "https://github.com/privatebytes/awesome-flow#readme",
79
- "gitHead": "59a60174dea02af0a55692d3e1e3ae910c7f249d"
82
+ "gitHead": "60aca24901189ee21b2546d3f7d46ac630b38be1"
80
83
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/entity-update-counter.ts","../src/abstract/node-props.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/ecs-flow-context.ts","../src/abstract/handle-types.ts","../src/nodes/node-entity.tsx","../src/nodes/node-systems-module.tsx","../src/templates/template-entity-node.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/abstract/templates.ts","../src/flow/flow-ecs-state.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;;UAEiB,oBAAA;4BACW;4BACA;;;;;;KCDhB,qBAAA,GAAwB;cACtB;;KAGF,cAAA,GAAiB;UACnB;;;;;;cCHG,iBAAA;;;;4BAWe,KAAK;kCAIC,gBAAgB,KAAK;sBAIjC,KAAK;wBAIH,eAAe,KAAK;kBAI1B;AF9BlB;;;;;KGKY,mBAAA;qBACS;oBACD;uBACG;uBACA;2BACI;;AHVV,cGaJ,cHbwB,EGaV,MAAA,CAAA,OHbU,CGaV,mBHbU,CAAA;;;;;aIFzB,iBAAA;;;;;;;;iBCSH,UAAA;;;;;GAAyC,UAAU,KAAK,mBAAgB,kBAAA,CAAA,GAAA,CAAA;;;;iBCAxE,iBAAA;;;;;GAAgD,UAAU,KAAK,0BAAuB,kBAAA,CAAA,GAAA,CAAA;;;;cCFlF,kBAAA,YAA8B;qBACtB,aAAa;;;;;;cCDrB,yBAAA,YAAqC;qBAC7B,aAAa;;;;;;aCFtB,WAAA;;;;cAKC;gCAGQ;;;ATZJ,cScJ,gBTdwB,EAAA;EAAA,aAAA,ESiBpC,kBTjBoC;EAAA,qBACT,2BAAA;CAAS;;;;AACA;aUJzB,gBAAA;;;;;;;KCMA,iBAAA;;;;;iBAMH,YAAA,QAAoB,SAAS,qBAAkB,kBAAA,CAAA,GAAA,CAAA;cAAA"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["proxy: IEntityProxy","node: Node<SystemsModuleNodeData>","entityType: EntityTypeUid","node: Node<EntityNodeData>","entity: IEntityProxy","props: Readonly<CamelCaseFormatterProps>","props: Readonly<ObjectInspectorProps>","props: Readonly<EntityComponentInspectorProps>","ObjectInspector","props: Readonly<EntityComponentListProps>","EntityComponentInspector","props: Readonly<BadgeListProps>","FormatterCamelCase","props: Readonly<EntityProxyListProps>","BadgeList","props: Readonly<EntitySubscriptionListProps>","BadgeList","props: Readonly<EntityUpdateCounterProps>","EntityUpdateCounter","EntityComponentList","EntityProxyList","EntitySubscriptionList","CamelCaseFormatter","EntityLayout","props: Readonly<PipelineMiddlewareListProps>","middleware: IMiddleware<IPipelineContext>[]","BadgeList","props: Readonly<NodeSystemModuleProps>","PipelineMiddlewareList","CamelCaseFormatter","SystemsModuleLayout","SystemsModuleNode","EntityNode","props: Readonly<FlowEcsEdgeProxiesProps>","state: { onConnect: any }","props: Readonly<FlowEcsEdgeProxiesProps>","state: { onConnect: any }","FlowEcsEdgeProxies","FlowEcsEdgeModules","props: Readonly<FlowEcsStateProps>","FlowEcsModules","FlowEcsEntities"],"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/components/formatter-camel-case.tsx","../src/components/object-inspector.tsx","../src/components/entity-component-inspector.tsx","../src/components/entity-component-list.tsx","../src/components/badge-list.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/layout/entity-layout.tsx","../src/nodes/node-entity.tsx","../src/components/pipeline-middleware-list.tsx","../src/layout/systems-module-layout.tsx","../src/nodes/node-systems-module.tsx","../src/abstract/templates.ts","../src/templates/template-entity-node.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-modules.tsx","../src/flow/flow-ecs-state.tsx"],"sourcesContent":["import { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { createContext } from 'react';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\nimport { EcsFlowRepository } from './ecs-flow-repository';\n\nexport type EcsFlowContextProps = {\n ecsFlowRepository: EcsFlowRepository;\n entityRepository: IEntityRepository;\n entityEventsManager: EntityEventsManager;\n entityUpdateCounter: IEntityUpdateCounter;\n systemsModuleRepository: ISystemsModuleRepository;\n};\n\nexport const EcsFlowContext = createContext<EcsFlowContextProps>(null);\n","import { IEntityProxy } from '@awesome-ecs/abstract/entities';\n\nexport class EcsIdGenerator {\n static entityProxy(proxy: IEntityProxy): string {\n return `${proxy.entityType}:${proxy.entityUid}`;\n }\n}\n","import { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { Node } from '@xyflow/react';\nimport { EcsIdGenerator } from '../utils/id-generator';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\n\nexport class EcsFlowRepository {\n private nodes: Map<string, Node>;\n\n constructor() {\n this.nodes = new Map();\n }\n\n get sizeNodes(): number {\n return this.nodes.size;\n }\n\n addSystemModuleNode(node: Node<SystemsModuleNodeData>) {\n this.nodes.set(node.data.entityType.toString(), node);\n }\n\n getSystemModuleNode(entityType: EntityTypeUid): Node<SystemsModuleNodeData> {\n return this.nodes.get(entityType.toString()) as Node<SystemsModuleNodeData>;\n }\n\n addEntityNode(node: Node<EntityNodeData>) {\n this.nodes.set(EcsIdGenerator.entityProxy(node.data.entity), node);\n }\n\n getEntityNode(entity: IEntityProxy): Node<EntityNodeData> {\n return this.nodes.get(EcsIdGenerator.entityProxy(entity)) as Node<EntityNodeData>;\n }\n\n listAllNodes(): Node[] {\n return Array.from(this.nodes.values());\n }\n}\n","export enum EcsHandleDataType {\n proxy = 'proxy',\n module = 'module'\n}\n","import { memo, useMemo } from 'react';\n\nexport type CamelCaseFormatterProps = {\n value: string | number;\n};\n\nfunction CamelCaseFormatter(props: Readonly<CamelCaseFormatterProps>) {\n const value = useMemo(\n () => props.value?.toString().replace(/([a-z])([A-Z])/g, '$1 $2'),\n [props.value]\n );\n return value;\n}\n\nexport default memo(CamelCaseFormatter);\n","import { useComputedColorScheme } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { Inspector } from 'react-inspector';\n\nexport type ObjectInspectorProps = {\n data: any;\n};\n\nfunction ObjectInspector(props: Readonly<ObjectInspectorProps>) {\n const colorScheme = useComputedColorScheme();\n\n const theme = useMemo(\n () => (colorScheme === 'dark' ? 'chromeDark' : 'chromeLight'),\n [colorScheme]\n );\n\n return <Inspector table={false} theme={theme} data={props.data} />;\n}\n\nexport default memo(ObjectInspector);\n","import { IComponent } from '@awesome-ecs/abstract/components';\nimport { Box, Button, Collapse } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { memo, useMemo } from 'react';\nimport ObjectInspector from './object-inspector';\n\nexport type EntityComponentInspectorProps = {\n component: IComponent;\n};\n\nfunction EntityComponentInspector(props: Readonly<EntityComponentInspectorProps>) {\n const [opened, { toggle }] = useDisclosure(false);\n\n const buttonColor = useMemo(() => (opened ? 'light' : 'indigo'), [opened]);\n\n return (\n <Box>\n <Button variant=\"outline\" size=\"xs\" onClick={toggle} color={buttonColor} fullWidth>\n {props.component.componentType}\n </Button>\n\n <Collapse in={opened}>{opened && <ObjectInspector data={props.component} />}</Collapse>\n </Box>\n );\n}\n\nexport default memo(EntityComponentInspector);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport EntityComponentInspector from './entity-component-inspector';\n\nexport type EntityComponentListProps = {\n entity: IEntity;\n};\n\nfunction EntityComponentList(props: Readonly<EntityComponentListProps>) {\n const components = Array.from(props.entity.components.values());\n\n return (\n <Accordion.Item key=\"components\" value=\"components\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n Components\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n {components.map((c, i) => (\n <EntityComponentInspector component={c} key={i} />\n ))}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityComponentList);\n","import { Badge, BadgeProps } from '@mantine/core';\nimport { memo } from 'react';\nimport FormatterCamelCase from './formatter-camel-case';\n\nexport type BadgeListProps = {\n items: (string | number)[];\n badge?: BadgeProps;\n};\n\nfunction BadgeList(props: Readonly<BadgeListProps>) {\n return props.items.map((value, i) => {\n return (\n <Badge key={i} {...(props.badge || [])}>\n <FormatterCamelCase value={value} />\n </Badge>\n );\n });\n}\n\nexport default memo(BadgeList);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport { EcsIdGenerator } from '../utils/id-generator';\nimport BadgeList from './badge-list';\n\nexport type EntityProxyListProps = {\n entity: IEntity;\n};\n\nfunction EntityProxyList(props: Readonly<EntityProxyListProps>) {\n const proxies = Array.from(props.entity.proxies.values()).map((c) => c.values());\n const items = proxies.map((p) => Array.from(p).map((k) => EcsIdGenerator.entityProxy(k))).flat();\n\n return (\n <Accordion.Item key=\"proxies\" value=\"proxies\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={items.length}>\n Proxies\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={items} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityProxyList);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo, useContext } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport BadgeList from './badge-list';\n\nexport type EntitySubscriptionListProps = {\n entity: IEntity;\n};\n\nfunction EntitySubscriptionList(props: Readonly<EntitySubscriptionListProps>) {\n const { entityEventsManager } = useContext(EcsFlowContext);\n const subscriptions = entityEventsManager.getSubscriptionsForEntity(props.entity.myProxy);\n\n return (\n <Accordion.Item key=\"subscriptions\" value=\"subscriptions\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={subscriptions.length}>\n Events\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={subscriptions} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntitySubscriptionList);\n","import { EntityUid } from '@awesome-ecs/abstract/entities';\nimport { Badge } from '@mantine/core';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntityUpdateCounterProps = {\n entityUid: EntityUid;\n};\n\nfunction EntityUpdateCounter(props: Readonly<EntityUpdateCounterProps>) {\n const [, setRefresh] = useState(0);\n\n const { entityUpdateCounter } = useContext(EcsFlowContext);\n\n const updates = entityUpdateCounter.getUpdateCount(props.entityUid) || 0;\n const removes = entityUpdateCounter.getRemoveCount(props.entityUid) || 0;\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRefresh((refresh) => refresh + 1);\n }, 1000);\n\n return () => {\n console.log('CLEAR INTERVAL');\n clearInterval(interval);\n };\n }, []);\n\n return (\n <>\n <Badge variant=\"light\">{updates}</Badge>\n <Badge variant=\"light\" color=\"orange\">\n {removes}\n </Badge>\n </>\n );\n}\n\nexport default memo(EntityUpdateCounter);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Divider, Group } from '@mantine/core';\nimport EntityComponentList from '../components/entity-component-list';\nimport EntityProxyList from '../components/entity-proxy-list';\nimport EntitySubscriptionList from '../components/entity-subscription-list';\nimport EntityUpdateCounter from '../components/entity-update-counter';\n\nexport type NodeEntityProps = {\n entity: IEntity;\n};\n\nfunction EntityLayout({ entity }: Readonly<NodeEntityProps>) {\n return (\n <>\n <Group>\n <Badge variant=\"outline\" color=\"orange\">\n {entity.myProxy.entityUid}\n </Badge>\n <EntityUpdateCounter entityUid={entity.myProxy.entityUid} />\n </Group>\n <Divider my={5} />\n <Accordion>\n <EntityComponentList entity={entity} />\n <EntityProxyList entity={entity} />\n <EntitySubscriptionList entity={entity} />\n </Accordion>\n </>\n );\n}\n\nexport default EntityLayout;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useContext, useMemo } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport EntityLayout from '../layout/entity-layout';\n\nfunction EntityNode({ id, data, selected, type }: NodeProps<Node<EntityNodeData>>) {\n const { entityRepository } = useContext(EcsFlowContext);\n const entity = useMemo(() => entityRepository.get(data.entity), [data.entity, entityRepository]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth variant=\"transparent\">\n <CamelCaseFormatter value={entity.myProxy.entityType} />\n </Badge>\n }\n type={type}\n >\n <EntityLayout entity={entity} />\n </NodeContainer>\n );\n}\n\nexport default EntityNode;\n","import { IMiddleware, IPipeline, IPipelineContext } from '@awesome-ecs/abstract/pipelines';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport BadgeList from './badge-list';\n\nexport type PipelineMiddlewareListProps = {\n pipeline: IPipeline<IPipelineContext>;\n label: string;\n};\n\nfunction PipelineMiddlewareList(props: Readonly<PipelineMiddlewareListProps>) {\n let middleware: IMiddleware<IPipelineContext>[] = [];\n\n if (props.pipeline) {\n middleware = props.pipeline['middleware'] as IMiddleware<IPipelineContext>[];\n }\n\n const components = middleware.map((m) => {\n return m.name || m.constructor.name;\n });\n\n return (\n <Accordion.Item key={props.label} value={props.label}>\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n {props.label}\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={components} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default PipelineMiddlewareList;\n","import { EntityTypeUid, IEntity } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModule, ISystemsRuntimeContext, SystemType } from '@awesome-ecs/abstract/systems';\nimport { Accordion, Text } from '@mantine/core';\nimport { useMemo } from 'react';\nimport PipelineMiddlewareList from '../components/pipeline-middleware-list';\n\nexport type NodeSystemModuleProps = {\n type: EntityTypeUid;\n module: ISystemsModule<IEntity>;\n};\n\nfunction SystemsModuleLayout(props: Readonly<NodeSystemModuleProps>) {\n const { module } = props;\n\n const runtimeContext = module['runtimeContext'] as ISystemsRuntimeContext<IEntity>;\n const { systemContext } = runtimeContext;\n\n const { status } = useMemo(() => {\n return systemContext.runtime;\n }, [systemContext.runtime]);\n\n const init = runtimeContext.systemPipelines.get(SystemType.initialize);\n const update = runtimeContext.systemPipelines.get(SystemType.update);\n const render = runtimeContext.systemPipelines.get(SystemType.render);\n const sync = runtimeContext.systemPipelines.get(SystemType.sync);\n\n return (\n <>\n <Text>Status: {status}</Text>\n <Accordion>\n {init && <PipelineMiddlewareList pipeline={init} label=\"Initialize\" />}\n {update && <PipelineMiddlewareList pipeline={update} label=\"Update\" />}\n {render && <PipelineMiddlewareList pipeline={render} label=\"Render\" />}\n {sync && <PipelineMiddlewareList pipeline={sync} label=\"Sync\" />}\n </Accordion>\n </>\n );\n}\n\nexport default SystemsModuleLayout;\n","import { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { Node, NodeProps } from '@xyflow/react';\nimport { useContext } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\n\nfunction SystemsModuleNode({ id, data, selected, type }: NodeProps<Node<SystemsModuleNodeData>>) {\n const { systemsModuleRepository } = useContext(EcsFlowContext);\n const module = systemsModuleRepository.get(data.entityType);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth color=\"indigo\" variant=\"transparent\">\n <CamelCaseFormatter value={data.entityType} />\n </Badge>\n }\n type={type}\n >\n <SystemsModuleLayout type={data.entityType} module={module} />\n </NodeContainer>\n );\n}\n\nexport default SystemsModuleNode;\n","export enum EcsTemplateGroup {\n ecs = 'ECS'\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class EntityNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<EntityNodeData> = {\n type: EcsNodeType.entity,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Entity',\n entity: null\n },\n handles: [\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Left,\n connection: 'target',\n disabled: true\n },\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Right,\n connection: 'source',\n disabled: true\n }\n ]\n };\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class SystemsModuleNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<SystemsModuleNodeData> = {\n type: EcsNodeType.systemsModule,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Systems Module',\n entityType: null\n },\n handles: [\n {\n dataType: EcsHandleDataType.module,\n position: Position.Left,\n connection: 'target',\n disabled: true\n }\n ]\n };\n}\n","import { NodeTypes } from '@xyflow/react';\nimport EntityNode from '../nodes/node-entity';\nimport SystemsModuleNode from '../nodes/node-systems-module';\nimport { EntityNodeTemplate } from '../templates/template-entity-node';\nimport { SystemsModuleNodeTemplate } from '../templates/template-systems-module';\n\nexport enum EcsNodeType {\n systemsModule = 'systems-module-node',\n entity = 'entity-node'\n}\n\nexport const ecsNodeTypes = {\n [EcsNodeType.systemsModule]: SystemsModuleNode,\n [EcsNodeType.entity]: EntityNode\n} satisfies NodeTypes;\n\nexport const ecsNodeTemplates = {\n [EcsNodeType.entity]: new EntityNodeTemplate(),\n [EcsNodeType.systemsModule]: new SystemsModuleNodeTemplate()\n};\n","import { useFlowStore } from '@awesome-flow/core/hooks';\nimport { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const onConnect = useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);\n const targetHandle = systemModule?.data.handles.find((h) => h.connection === 'target');\n\n if (targetHandle) {\n onConnect({\n source: node.id,\n target: systemModule.id,\n sourceHandle: sourceHandle.handleId,\n targetHandle: targetHandle.handleId\n });\n }\n }\n }, [nodesToConnect, ecsFlowRepository, entityRepository, onConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useFlowStore } from '@awesome-flow/core/hooks';\nimport { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const onConnect = useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n for (const [, proxyMap] of entity.proxies) {\n for (const proxy of proxyMap.values()) {\n const proxyNode = ecsFlowRepository.getEntityNode(proxy);\n\n if (proxyNode) {\n const targetHandle = proxyNode.data.handles.find((h) => h.connection === 'target');\n\n onConnect({\n source: node.id,\n target: proxyNode.id,\n sourceHandle: sourceHandle.handleId,\n targetHandle: targetHandle.handleId\n });\n }\n }\n }\n }\n }, [nodesToConnect, ecsFlowRepository, entityRepository, onConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { Node } from '@xyflow/react';\nimport { useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\n\nfunction FlowEcsEntities() {\n const { nodeFactory } = useContext(FlowContext);\n const addNodes = useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n const [entityNodes, setEntityNodes] = useState<Node<EntityNodeData>[]>([]);\n\n useEffect(() => {\n const entities = entityRepository.listAll();\n const nodes = [];\n\n for (const entity of entities) {\n if (ecsFlowRepository.getEntityNode(entity.myProxy)) {\n continue;\n }\n\n const node = nodeFactory.createNodeFromType<EntityNodeData>(EcsNodeType.entity);\n\n node.data.entity = entity.myProxy;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addEntityNode(node);\n nodes.push(node);\n }\n\n setEntityNodes(nodes);\n addNodes(nodes);\n }, [entityRepository, entityRepository.size, ecsFlowRepository, nodeFactory, addNodes]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { useContext, useEffect } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\n\nfunction FlowEcsModules() {\n const { nodeFactory } = useContext(FlowContext);\n const addNodes = useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);\n const keys = Array.from(modules.values()).map((v) => v[0]);\n\n const nodesToAdd = [];\n\n for (const element of keys) {\n if (ecsFlowRepository.getSystemModuleNode(element)) {\n continue;\n }\n\n const node = nodeFactory.createNodeFromType<SystemsModuleNodeData>(EcsNodeType.systemsModule);\n\n node.data.entityType = element;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addSystemModuleNode(node);\n nodesToAdd.push(node);\n }\n\n if (nodesToAdd.length) {\n addNodes(nodesToAdd);\n }\n }, [\n nodeFactory,\n addNodes,\n ecsFlowRepository,\n ecsFlowRepository.sizeNodes,\n systemsModuleRepository,\n systemsModuleRepository.size\n ]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n","import { FlowAutoLayout } from '@awesome-flow/core/canvas';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n const [refreshLayout, setRefreshLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setRefreshLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n useEffect(() => {\n setInterval(() => {\n setUpdates((updates) => updates + 1);\n }, 1000);\n }, []);\n\n return (\n <>\n {props.showSystemModules && <FlowEcsModules />}\n {props.showEntities && <FlowEcsEntities />}\n {props.autoLayout && <FlowAutoLayout refreshLayout={refreshLayout} />}\n </>\n );\n}\n\nexport default memo(FlowEcsState);\n"],"mappings":"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"}