@awesome-flow/ecs 0.4.0 → 0.6.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/dist/index.cjs +51 -120
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +49 -108
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
5
|
var __export = (target, all) => {
|
|
8
6
|
for (var name in all)
|
|
@@ -16,14 +14,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
14
|
}
|
|
17
15
|
return to;
|
|
18
16
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
18
|
|
|
29
19
|
// src/index.ts
|
|
@@ -406,80 +396,22 @@ var ecsNodeTemplates = {
|
|
|
406
396
|
};
|
|
407
397
|
|
|
408
398
|
// src/flow/flow-ecs-state.tsx
|
|
409
|
-
var
|
|
410
|
-
|
|
411
|
-
// src/flow/flow-ecs-auto-layout.tsx
|
|
412
|
-
var import_abstract = require("@awesome-flow/core/abstract");
|
|
413
|
-
var import_dagre = __toESM(require("@dagrejs/dagre"), 1);
|
|
414
|
-
var import_react15 = require("@xyflow/react");
|
|
415
|
-
var import_react16 = require("react");
|
|
416
|
-
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
417
|
-
function FlowEcsAutoLayout(props) {
|
|
418
|
-
const { getNodes, getEdges } = (0, import_react15.useReactFlow)();
|
|
419
|
-
const context = (0, import_react16.useContext)(import_abstract.FlowContext);
|
|
420
|
-
const setNodes = context.useFlowStore((state) => state.setNodes);
|
|
421
|
-
const graph = (0, import_react16.useMemo)(() => new import_dagre.default.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
|
|
422
|
-
const getLayoutElements = (0, import_react16.useCallback)(
|
|
423
|
-
(nodes, edges, options) => {
|
|
424
|
-
graph.setGraph(options);
|
|
425
|
-
edges.forEach((edge) => graph.setEdge(edge.source, edge.target));
|
|
426
|
-
nodes.forEach((node) => {
|
|
427
|
-
if (node.measured) {
|
|
428
|
-
graph.setNode(node.id, {
|
|
429
|
-
width: node.measured.width,
|
|
430
|
-
height: node.measured.height
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
});
|
|
434
|
-
import_dagre.default.layout(graph);
|
|
435
|
-
return {
|
|
436
|
-
nodes: nodes.map((node) => {
|
|
437
|
-
const graphNode = graph.node(node.id);
|
|
438
|
-
if (graphNode) {
|
|
439
|
-
return { ...node, position: { x: graphNode.x, y: graphNode.y } };
|
|
440
|
-
}
|
|
441
|
-
return node;
|
|
442
|
-
}),
|
|
443
|
-
edges
|
|
444
|
-
};
|
|
445
|
-
},
|
|
446
|
-
[graph]
|
|
447
|
-
);
|
|
448
|
-
(0, import_react16.useEffect)(() => {
|
|
449
|
-
if (props.needsLayout) {
|
|
450
|
-
const storeNodes = getNodes();
|
|
451
|
-
if (storeNodes?.length) {
|
|
452
|
-
const edges = getEdges();
|
|
453
|
-
const layout = getLayoutElements(storeNodes, edges, {
|
|
454
|
-
rankdir: "LR"
|
|
455
|
-
});
|
|
456
|
-
setNodes(layout.nodes);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}, [props.needsLayout]);
|
|
460
|
-
(0, import_react16.useEffect)(() => {
|
|
461
|
-
if (props.needsLayout) {
|
|
462
|
-
props.setNeedsLayout(false);
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, {});
|
|
466
|
-
}
|
|
467
|
-
var flow_ecs_auto_layout_default = FlowEcsAutoLayout;
|
|
399
|
+
var import_react19 = require("react");
|
|
468
400
|
|
|
469
401
|
// src/flow/flow-ecs-entities.tsx
|
|
470
|
-
var
|
|
471
|
-
var
|
|
402
|
+
var import_abstract = require("@awesome-flow/core/abstract");
|
|
403
|
+
var import_react17 = require("react");
|
|
404
|
+
var import_hooks4 = require("@awesome-flow/core/hooks");
|
|
472
405
|
|
|
473
406
|
// src/flow/flow-ecs-edge-proxies.tsx
|
|
474
|
-
var
|
|
475
|
-
var
|
|
476
|
-
var
|
|
407
|
+
var import_react15 = require("react");
|
|
408
|
+
var import_hooks2 = require("@awesome-flow/core/hooks");
|
|
409
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
477
410
|
function FlowEcsEdgeProxies(props) {
|
|
478
411
|
const { nodesToConnect } = props;
|
|
479
|
-
const
|
|
480
|
-
const
|
|
481
|
-
|
|
482
|
-
(0, import_react17.useEffect)(() => {
|
|
412
|
+
const onConnect = (0, import_hooks2.useFlowStore)((state) => state.onConnect);
|
|
413
|
+
const { ecsFlowRepository, entityRepository } = (0, import_react15.useContext)(EcsFlowContext);
|
|
414
|
+
(0, import_react15.useEffect)(() => {
|
|
483
415
|
for (const node of nodesToConnect) {
|
|
484
416
|
const sourceHandle = node.data.handles.find((h) => h.connection === "source");
|
|
485
417
|
const entity = entityRepository.get(node.data.entity);
|
|
@@ -499,20 +431,19 @@ function FlowEcsEdgeProxies(props) {
|
|
|
499
431
|
}
|
|
500
432
|
}
|
|
501
433
|
}, [nodesToConnect]);
|
|
502
|
-
return /* @__PURE__ */ (0,
|
|
434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, {});
|
|
503
435
|
}
|
|
504
436
|
var flow_ecs_edge_proxies_default = FlowEcsEdgeProxies;
|
|
505
437
|
|
|
506
438
|
// src/flow/flow-ecs-edge-modules.tsx
|
|
507
|
-
var
|
|
508
|
-
var
|
|
509
|
-
var
|
|
439
|
+
var import_react16 = require("react");
|
|
440
|
+
var import_hooks3 = require("@awesome-flow/core/hooks");
|
|
441
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
510
442
|
function FlowEcsEdgeModules(props) {
|
|
511
443
|
const { nodesToConnect } = props;
|
|
512
|
-
const
|
|
513
|
-
const
|
|
514
|
-
|
|
515
|
-
(0, import_react18.useEffect)(() => {
|
|
444
|
+
const onConnect = (0, import_hooks3.useFlowStore)((state) => state.onConnect);
|
|
445
|
+
const { ecsFlowRepository, entityRepository } = (0, import_react16.useContext)(EcsFlowContext);
|
|
446
|
+
(0, import_react16.useEffect)(() => {
|
|
516
447
|
for (const node of nodesToConnect) {
|
|
517
448
|
const sourceHandle = node.data.handles.find((h) => h.connection === "source");
|
|
518
449
|
const entity = entityRepository.get(node.data.entity);
|
|
@@ -528,25 +459,25 @@ function FlowEcsEdgeModules(props) {
|
|
|
528
459
|
}
|
|
529
460
|
}
|
|
530
461
|
}, [nodesToConnect]);
|
|
531
|
-
return /* @__PURE__ */ (0,
|
|
462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, {});
|
|
532
463
|
}
|
|
533
464
|
var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
|
|
534
465
|
|
|
535
466
|
// src/flow/flow-ecs-entities.tsx
|
|
536
|
-
var
|
|
467
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
537
468
|
function FlowEcsEntities() {
|
|
538
|
-
const
|
|
539
|
-
const addNodes =
|
|
540
|
-
const { ecsFlowRepository, entityRepository } = (0,
|
|
541
|
-
const [entityNodes, setEntityNodes] = (0,
|
|
542
|
-
(0,
|
|
469
|
+
const { nodeFactory } = (0, import_react17.useContext)(import_abstract.FlowContext);
|
|
470
|
+
const addNodes = (0, import_hooks4.useFlowStore)((state) => state.addNodes);
|
|
471
|
+
const { ecsFlowRepository, entityRepository } = (0, import_react17.useContext)(EcsFlowContext);
|
|
472
|
+
const [entityNodes, setEntityNodes] = (0, import_react17.useState)([]);
|
|
473
|
+
(0, import_react17.useEffect)(() => {
|
|
543
474
|
const entities = entityRepository.listAll();
|
|
544
475
|
const nodes = [];
|
|
545
476
|
for (const entity of entities) {
|
|
546
477
|
if (ecsFlowRepository.getEntityNode(entity.myProxy)) {
|
|
547
478
|
continue;
|
|
548
479
|
}
|
|
549
|
-
const node =
|
|
480
|
+
const node = nodeFactory.createNodeFromType("entity-node" /* entity */);
|
|
550
481
|
node.data.entity = entity.myProxy;
|
|
551
482
|
node.position = { x: 0, y: 0 };
|
|
552
483
|
ecsFlowRepository.addEntityNode(node);
|
|
@@ -555,22 +486,23 @@ function FlowEcsEntities() {
|
|
|
555
486
|
setEntityNodes(nodes);
|
|
556
487
|
addNodes(nodes);
|
|
557
488
|
}, [entityRepository.size]);
|
|
558
|
-
return /* @__PURE__ */ (0,
|
|
559
|
-
/* @__PURE__ */ (0,
|
|
560
|
-
/* @__PURE__ */ (0,
|
|
489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
|
|
490
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(flow_ecs_edge_proxies_default, { nodesToConnect: entityNodes }),
|
|
491
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(flow_ecs_edge_modules_default, { nodesToConnect: entityNodes })
|
|
561
492
|
] });
|
|
562
493
|
}
|
|
563
494
|
var flow_ecs_entities_default = FlowEcsEntities;
|
|
564
495
|
|
|
565
496
|
// src/flow/flow-ecs-modules.tsx
|
|
566
|
-
var
|
|
567
|
-
var
|
|
568
|
-
var
|
|
497
|
+
var import_react18 = require("react");
|
|
498
|
+
var import_abstract2 = require("@awesome-flow/core/abstract");
|
|
499
|
+
var import_hooks5 = require("@awesome-flow/core/hooks");
|
|
500
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
569
501
|
function FlowEcsModules() {
|
|
570
|
-
const
|
|
571
|
-
const addNodes =
|
|
572
|
-
const { ecsFlowRepository, systemsModuleRepository } = (0,
|
|
573
|
-
(0,
|
|
502
|
+
const { nodeFactory } = (0, import_react18.useContext)(import_abstract2.FlowContext);
|
|
503
|
+
const addNodes = (0, import_hooks5.useFlowStore)((state) => state.addNodes);
|
|
504
|
+
const { ecsFlowRepository, systemsModuleRepository } = (0, import_react18.useContext)(EcsFlowContext);
|
|
505
|
+
(0, import_react18.useEffect)(() => {
|
|
574
506
|
const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);
|
|
575
507
|
const keys = Array.from(modules.values()).map((v) => v[0]);
|
|
576
508
|
const nodesToAdd = [];
|
|
@@ -578,9 +510,7 @@ function FlowEcsModules() {
|
|
|
578
510
|
if (ecsFlowRepository.getSystemModuleNode(element)) {
|
|
579
511
|
continue;
|
|
580
512
|
}
|
|
581
|
-
const node =
|
|
582
|
-
"systems-module-node" /* systemsModule */
|
|
583
|
-
);
|
|
513
|
+
const node = nodeFactory.createNodeFromType("systems-module-node" /* systemsModule */);
|
|
584
514
|
node.data.entityType = element;
|
|
585
515
|
node.position = { x: 0, y: 0 };
|
|
586
516
|
ecsFlowRepository.addSystemModuleNode(node);
|
|
@@ -590,31 +520,32 @@ function FlowEcsModules() {
|
|
|
590
520
|
addNodes(nodesToAdd);
|
|
591
521
|
}
|
|
592
522
|
}, [systemsModuleRepository.size]);
|
|
593
|
-
return /* @__PURE__ */ (0,
|
|
523
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, {});
|
|
594
524
|
}
|
|
595
525
|
var flow_ecs_modules_default = FlowEcsModules;
|
|
596
526
|
|
|
597
527
|
// src/flow/flow-ecs-state.tsx
|
|
598
|
-
var
|
|
528
|
+
var import_canvas = require("@awesome-flow/core/canvas");
|
|
529
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
599
530
|
function FlowEcsState(props) {
|
|
600
|
-
const [, setUpdates] = (0,
|
|
601
|
-
const [
|
|
602
|
-
const { ecsFlowRepository } = (0,
|
|
603
|
-
(0,
|
|
604
|
-
|
|
531
|
+
const [, setUpdates] = (0, import_react19.useState)(0);
|
|
532
|
+
const [refreshLayout, setRefreshLayout] = (0, import_react19.useState)(false);
|
|
533
|
+
const { ecsFlowRepository } = (0, import_react19.useContext)(EcsFlowContext);
|
|
534
|
+
(0, import_react19.useEffect)(() => {
|
|
535
|
+
setRefreshLayout(true);
|
|
605
536
|
}, [ecsFlowRepository.sizeNodes]);
|
|
606
|
-
(0,
|
|
537
|
+
(0, import_react19.useEffect)(() => {
|
|
607
538
|
setInterval(() => {
|
|
608
539
|
setUpdates((updates) => updates + 1);
|
|
609
540
|
}, 1e3);
|
|
610
541
|
}, []);
|
|
611
|
-
return /* @__PURE__ */ (0,
|
|
612
|
-
props.showSystemModules && /* @__PURE__ */ (0,
|
|
613
|
-
props.showEntities && /* @__PURE__ */ (0,
|
|
614
|
-
props.autoLayout && /* @__PURE__ */ (0,
|
|
542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
543
|
+
props.showSystemModules && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(flow_ecs_modules_default, {}),
|
|
544
|
+
props.showEntities && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(flow_ecs_entities_default, {}),
|
|
545
|
+
props.autoLayout && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_canvas.FlowAutoLayout, { refreshLayout })
|
|
615
546
|
] });
|
|
616
547
|
}
|
|
617
|
-
var flow_ecs_state_default = FlowEcsState;
|
|
548
|
+
var flow_ecs_state_default = (0, import_react19.memo)(FlowEcsState);
|
|
618
549
|
// Annotate the CommonJS export names for ESM import in node:
|
|
619
550
|
0 && (module.exports = {
|
|
620
551
|
EcsFlowContext,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-auto-layout.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["export * from './abstract/ecs-flow-context';\nexport * from './abstract/ecs-flow-repository';\nexport * from './abstract/handle-types';\nexport * from './abstract/node-types';\nexport * from './abstract/node-props';\nexport * from './abstract/templates';\n\nexport { default as FlowEcsState } from './flow/flow-ecs-state';\n\nexport { default as EntityNode } from './nodes/node-entity';\nexport { default as SystemsModuleNode } from './nodes/node-systems-module';\n\nexport * from './templates/template-entity-node';\nexport * from './templates/template-systems-module';\n\nexport * from './utils/entity-update-counter';\n","import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\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 { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\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","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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","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.status]);\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 { 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 { 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 { 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 { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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]);\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 { 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 { 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 { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\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 { 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 { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\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 BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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 SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\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 { useEffect, useContext, useState } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 [needsLayout, setNeedsLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(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 && (\n <FlowEcsAutoLayout needsLayout={needsLayout} setNeedsLayout={setNeedsLayout} />\n )}\n </>\n );\n}\n\nexport default FlowEcsState;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\n\nexport type EcsFlowAutoLayoutProps = {\n needsLayout: boolean;\n setNeedsLayout: (value: boolean) => void;\n};\n\nfunction FlowEcsAutoLayout(props: Readonly<EcsFlowAutoLayoutProps>) {\n const { getNodes, getEdges } = useReactFlow();\n\n const context = useContext(FlowContext);\n const setNodes = context.useFlowStore((state) => state.setNodes);\n\n const graph = useMemo(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);\n\n const getLayoutElements = useCallback(\n (nodes: Node[], edges: Edge[], options: GraphLabel) => {\n graph.setGraph(options);\n\n edges.forEach((edge) => graph.setEdge(edge.source, edge.target));\n nodes.forEach((node) => {\n if (node.measured) {\n graph.setNode(node.id, {\n width: node.measured.width,\n height: node.measured.height,\n });\n }\n });\n\n Dagre.layout(graph);\n\n return {\n nodes: nodes.map((node) => {\n const graphNode = graph.node(node.id);\n if (graphNode) {\n return { ...node, position: { x: graphNode.x, y: graphNode.y } };\n }\n\n return node;\n }),\n edges,\n };\n },\n [graph]\n );\n\n useEffect(() => {\n if (props.needsLayout) {\n const storeNodes = getNodes();\n\n if (storeNodes?.length) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n }\n }\n }, [props.needsLayout]);\n\n useEffect(() => {\n if (props.needsLayout) {\n props.setNeedsLayout(false);\n }\n });\n\n return <></>;\n}\n\nexport default FlowEcsAutoLayout;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsEntities() {\n const context = useContext(FlowContext);\n const addNodes = context.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 = context.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.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsModules() {\n const context = useContext(FlowContext);\n const addNodes = context.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 = context.nodeFactory.createNodeFromType<SystemsModuleNodeData>(\n EcsNodeType.systemsModule\n );\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 }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","import_react","import_core","import_core","import_react","import_core","import_react","import_react","import_jsx_runtime","import_jsx_runtime","module","import_jsx_runtime","module","import_layout","import_core","import_react","import_core","import_core","import_react","import_core","import_react","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EcsTemplateGroup","import_react","EcsNodeType","import_react","import_react","import_jsx_runtime","Dagre","import_abstract","import_react","import_react","import_abstract","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["export * from './abstract/ecs-flow-context';\nexport * from './abstract/ecs-flow-repository';\nexport * from './abstract/handle-types';\nexport * from './abstract/node-types';\nexport * from './abstract/node-props';\nexport * from './abstract/templates';\n\nexport { default as FlowEcsState } from './flow/flow-ecs-state';\n\nexport { default as EntityNode } from './nodes/node-entity';\nexport { default as SystemsModuleNode } from './nodes/node-systems-module';\n\nexport * from './templates/template-entity-node';\nexport * from './templates/template-systems-module';\n\nexport * from './utils/entity-update-counter';\n","import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\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 { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\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","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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","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.status]);\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 { 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 { 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 { 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 { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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]);\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 { 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 { 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 { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\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 { 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 { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\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 BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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 SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\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 { useEffect, useState, memo, useContext } from 'react';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { FlowAutoLayout } from '@awesome-flow/core/canvas';\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","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","import_react","import_core","import_core","import_react","import_core","import_react","import_react","import_jsx_runtime","import_jsx_runtime","module","import_jsx_runtime","module","import_layout","import_core","import_react","import_core","import_core","import_react","import_core","import_react","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EcsTemplateGroup","import_react","EcsNodeType","import_react","import_react","import_hooks","import_react","import_hooks","import_jsx_runtime","import_react","import_hooks","import_jsx_runtime","import_jsx_runtime","import_react","import_abstract","import_hooks","import_jsx_runtime","import_jsx_runtime"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -78,5 +78,6 @@ type FlowEcsStateProps = {
|
|
|
78
78
|
autoLayout: boolean;
|
|
79
79
|
};
|
|
80
80
|
declare function FlowEcsState(props: Readonly<FlowEcsStateProps>): react_jsx_runtime.JSX.Element;
|
|
81
|
+
declare const _default: react.MemoExoticComponent<typeof FlowEcsState>;
|
|
81
82
|
|
|
82
|
-
export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
|
|
83
|
+
export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, _default as FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
|
package/dist/index.d.ts
CHANGED
|
@@ -78,5 +78,6 @@ type FlowEcsStateProps = {
|
|
|
78
78
|
autoLayout: boolean;
|
|
79
79
|
};
|
|
80
80
|
declare function FlowEcsState(props: Readonly<FlowEcsStateProps>): react_jsx_runtime.JSX.Element;
|
|
81
|
+
declare const _default: react.MemoExoticComponent<typeof FlowEcsState>;
|
|
81
82
|
|
|
82
|
-
export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
|
|
83
|
+
export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, _default as FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
|
package/dist/index.js
CHANGED
|
@@ -360,80 +360,22 @@ var ecsNodeTemplates = {
|
|
|
360
360
|
};
|
|
361
361
|
|
|
362
362
|
// src/flow/flow-ecs-state.tsx
|
|
363
|
-
import { useEffect as
|
|
364
|
-
|
|
365
|
-
// src/flow/flow-ecs-auto-layout.tsx
|
|
366
|
-
import { FlowContext } from "@awesome-flow/core/abstract";
|
|
367
|
-
import Dagre from "@dagrejs/dagre";
|
|
368
|
-
import { useReactFlow } from "@xyflow/react";
|
|
369
|
-
import { useCallback, useContext as useContext5, useEffect as useEffect2, useMemo as useMemo6 } from "react";
|
|
370
|
-
import { Fragment as Fragment4, jsx as jsx13 } from "react/jsx-runtime";
|
|
371
|
-
function FlowEcsAutoLayout(props) {
|
|
372
|
-
const { getNodes, getEdges } = useReactFlow();
|
|
373
|
-
const context = useContext5(FlowContext);
|
|
374
|
-
const setNodes = context.useFlowStore((state) => state.setNodes);
|
|
375
|
-
const graph = useMemo6(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
|
|
376
|
-
const getLayoutElements = useCallback(
|
|
377
|
-
(nodes, edges, options) => {
|
|
378
|
-
graph.setGraph(options);
|
|
379
|
-
edges.forEach((edge) => graph.setEdge(edge.source, edge.target));
|
|
380
|
-
nodes.forEach((node) => {
|
|
381
|
-
if (node.measured) {
|
|
382
|
-
graph.setNode(node.id, {
|
|
383
|
-
width: node.measured.width,
|
|
384
|
-
height: node.measured.height
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
Dagre.layout(graph);
|
|
389
|
-
return {
|
|
390
|
-
nodes: nodes.map((node) => {
|
|
391
|
-
const graphNode = graph.node(node.id);
|
|
392
|
-
if (graphNode) {
|
|
393
|
-
return { ...node, position: { x: graphNode.x, y: graphNode.y } };
|
|
394
|
-
}
|
|
395
|
-
return node;
|
|
396
|
-
}),
|
|
397
|
-
edges
|
|
398
|
-
};
|
|
399
|
-
},
|
|
400
|
-
[graph]
|
|
401
|
-
);
|
|
402
|
-
useEffect2(() => {
|
|
403
|
-
if (props.needsLayout) {
|
|
404
|
-
const storeNodes = getNodes();
|
|
405
|
-
if (storeNodes?.length) {
|
|
406
|
-
const edges = getEdges();
|
|
407
|
-
const layout = getLayoutElements(storeNodes, edges, {
|
|
408
|
-
rankdir: "LR"
|
|
409
|
-
});
|
|
410
|
-
setNodes(layout.nodes);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}, [props.needsLayout]);
|
|
414
|
-
useEffect2(() => {
|
|
415
|
-
if (props.needsLayout) {
|
|
416
|
-
props.setNeedsLayout(false);
|
|
417
|
-
}
|
|
418
|
-
});
|
|
419
|
-
return /* @__PURE__ */ jsx13(Fragment4, {});
|
|
420
|
-
}
|
|
421
|
-
var flow_ecs_auto_layout_default = FlowEcsAutoLayout;
|
|
363
|
+
import { useEffect as useEffect6, useState as useState3, memo as memo9, useContext as useContext9 } from "react";
|
|
422
364
|
|
|
423
365
|
// src/flow/flow-ecs-entities.tsx
|
|
424
|
-
import { FlowContext
|
|
425
|
-
import { useContext as
|
|
366
|
+
import { FlowContext } from "@awesome-flow/core/abstract";
|
|
367
|
+
import { useContext as useContext7, useEffect as useEffect4, useState as useState2 } from "react";
|
|
368
|
+
import { useFlowStore as useFlowStore3 } from "@awesome-flow/core/hooks";
|
|
426
369
|
|
|
427
370
|
// src/flow/flow-ecs-edge-proxies.tsx
|
|
428
|
-
import { useContext as
|
|
429
|
-
import {
|
|
430
|
-
import { Fragment as
|
|
371
|
+
import { useContext as useContext5, useEffect as useEffect2 } from "react";
|
|
372
|
+
import { useFlowStore } from "@awesome-flow/core/hooks";
|
|
373
|
+
import { Fragment as Fragment4, jsx as jsx13 } from "react/jsx-runtime";
|
|
431
374
|
function FlowEcsEdgeProxies(props) {
|
|
432
375
|
const { nodesToConnect } = props;
|
|
433
|
-
const
|
|
434
|
-
const
|
|
435
|
-
|
|
436
|
-
useEffect3(() => {
|
|
376
|
+
const onConnect = useFlowStore((state) => state.onConnect);
|
|
377
|
+
const { ecsFlowRepository, entityRepository } = useContext5(EcsFlowContext);
|
|
378
|
+
useEffect2(() => {
|
|
437
379
|
for (const node of nodesToConnect) {
|
|
438
380
|
const sourceHandle = node.data.handles.find((h) => h.connection === "source");
|
|
439
381
|
const entity = entityRepository.get(node.data.entity);
|
|
@@ -453,20 +395,19 @@ function FlowEcsEdgeProxies(props) {
|
|
|
453
395
|
}
|
|
454
396
|
}
|
|
455
397
|
}, [nodesToConnect]);
|
|
456
|
-
return /* @__PURE__ */
|
|
398
|
+
return /* @__PURE__ */ jsx13(Fragment4, {});
|
|
457
399
|
}
|
|
458
400
|
var flow_ecs_edge_proxies_default = FlowEcsEdgeProxies;
|
|
459
401
|
|
|
460
402
|
// src/flow/flow-ecs-edge-modules.tsx
|
|
461
|
-
import { useContext as
|
|
462
|
-
import {
|
|
463
|
-
import { Fragment as
|
|
403
|
+
import { useContext as useContext6, useEffect as useEffect3 } from "react";
|
|
404
|
+
import { useFlowStore as useFlowStore2 } from "@awesome-flow/core/hooks";
|
|
405
|
+
import { Fragment as Fragment5, jsx as jsx14 } from "react/jsx-runtime";
|
|
464
406
|
function FlowEcsEdgeModules(props) {
|
|
465
407
|
const { nodesToConnect } = props;
|
|
466
|
-
const
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
useEffect4(() => {
|
|
408
|
+
const onConnect = useFlowStore2((state) => state.onConnect);
|
|
409
|
+
const { ecsFlowRepository, entityRepository } = useContext6(EcsFlowContext);
|
|
410
|
+
useEffect3(() => {
|
|
470
411
|
for (const node of nodesToConnect) {
|
|
471
412
|
const sourceHandle = node.data.handles.find((h) => h.connection === "source");
|
|
472
413
|
const entity = entityRepository.get(node.data.entity);
|
|
@@ -482,25 +423,25 @@ function FlowEcsEdgeModules(props) {
|
|
|
482
423
|
}
|
|
483
424
|
}
|
|
484
425
|
}, [nodesToConnect]);
|
|
485
|
-
return /* @__PURE__ */
|
|
426
|
+
return /* @__PURE__ */ jsx14(Fragment5, {});
|
|
486
427
|
}
|
|
487
428
|
var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
|
|
488
429
|
|
|
489
430
|
// src/flow/flow-ecs-entities.tsx
|
|
490
|
-
import { Fragment as
|
|
431
|
+
import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
491
432
|
function FlowEcsEntities() {
|
|
492
|
-
const
|
|
493
|
-
const addNodes =
|
|
494
|
-
const { ecsFlowRepository, entityRepository } =
|
|
433
|
+
const { nodeFactory } = useContext7(FlowContext);
|
|
434
|
+
const addNodes = useFlowStore3((state) => state.addNodes);
|
|
435
|
+
const { ecsFlowRepository, entityRepository } = useContext7(EcsFlowContext);
|
|
495
436
|
const [entityNodes, setEntityNodes] = useState2([]);
|
|
496
|
-
|
|
437
|
+
useEffect4(() => {
|
|
497
438
|
const entities = entityRepository.listAll();
|
|
498
439
|
const nodes = [];
|
|
499
440
|
for (const entity of entities) {
|
|
500
441
|
if (ecsFlowRepository.getEntityNode(entity.myProxy)) {
|
|
501
442
|
continue;
|
|
502
443
|
}
|
|
503
|
-
const node =
|
|
444
|
+
const node = nodeFactory.createNodeFromType("entity-node" /* entity */);
|
|
504
445
|
node.data.entity = entity.myProxy;
|
|
505
446
|
node.position = { x: 0, y: 0 };
|
|
506
447
|
ecsFlowRepository.addEntityNode(node);
|
|
@@ -509,22 +450,23 @@ function FlowEcsEntities() {
|
|
|
509
450
|
setEntityNodes(nodes);
|
|
510
451
|
addNodes(nodes);
|
|
511
452
|
}, [entityRepository.size]);
|
|
512
|
-
return /* @__PURE__ */ jsxs9(
|
|
513
|
-
/* @__PURE__ */
|
|
514
|
-
/* @__PURE__ */
|
|
453
|
+
return /* @__PURE__ */ jsxs9(Fragment6, { children: [
|
|
454
|
+
/* @__PURE__ */ jsx15(flow_ecs_edge_proxies_default, { nodesToConnect: entityNodes }),
|
|
455
|
+
/* @__PURE__ */ jsx15(flow_ecs_edge_modules_default, { nodesToConnect: entityNodes })
|
|
515
456
|
] });
|
|
516
457
|
}
|
|
517
458
|
var flow_ecs_entities_default = FlowEcsEntities;
|
|
518
459
|
|
|
519
460
|
// src/flow/flow-ecs-modules.tsx
|
|
520
|
-
import { useEffect as
|
|
521
|
-
import { FlowContext as
|
|
522
|
-
import {
|
|
461
|
+
import { useEffect as useEffect5, useContext as useContext8 } from "react";
|
|
462
|
+
import { FlowContext as FlowContext2 } from "@awesome-flow/core/abstract";
|
|
463
|
+
import { useFlowStore as useFlowStore4 } from "@awesome-flow/core/hooks";
|
|
464
|
+
import { Fragment as Fragment7, jsx as jsx16 } from "react/jsx-runtime";
|
|
523
465
|
function FlowEcsModules() {
|
|
524
|
-
const
|
|
525
|
-
const addNodes =
|
|
526
|
-
const { ecsFlowRepository, systemsModuleRepository } =
|
|
527
|
-
|
|
466
|
+
const { nodeFactory } = useContext8(FlowContext2);
|
|
467
|
+
const addNodes = useFlowStore4((state) => state.addNodes);
|
|
468
|
+
const { ecsFlowRepository, systemsModuleRepository } = useContext8(EcsFlowContext);
|
|
469
|
+
useEffect5(() => {
|
|
528
470
|
const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);
|
|
529
471
|
const keys = Array.from(modules.values()).map((v) => v[0]);
|
|
530
472
|
const nodesToAdd = [];
|
|
@@ -532,9 +474,7 @@ function FlowEcsModules() {
|
|
|
532
474
|
if (ecsFlowRepository.getSystemModuleNode(element)) {
|
|
533
475
|
continue;
|
|
534
476
|
}
|
|
535
|
-
const node =
|
|
536
|
-
"systems-module-node" /* systemsModule */
|
|
537
|
-
);
|
|
477
|
+
const node = nodeFactory.createNodeFromType("systems-module-node" /* systemsModule */);
|
|
538
478
|
node.data.entityType = element;
|
|
539
479
|
node.position = { x: 0, y: 0 };
|
|
540
480
|
ecsFlowRepository.addSystemModuleNode(node);
|
|
@@ -544,31 +484,32 @@ function FlowEcsModules() {
|
|
|
544
484
|
addNodes(nodesToAdd);
|
|
545
485
|
}
|
|
546
486
|
}, [systemsModuleRepository.size]);
|
|
547
|
-
return /* @__PURE__ */
|
|
487
|
+
return /* @__PURE__ */ jsx16(Fragment7, {});
|
|
548
488
|
}
|
|
549
489
|
var flow_ecs_modules_default = FlowEcsModules;
|
|
550
490
|
|
|
551
491
|
// src/flow/flow-ecs-state.tsx
|
|
552
|
-
import {
|
|
492
|
+
import { FlowAutoLayout } from "@awesome-flow/core/canvas";
|
|
493
|
+
import { Fragment as Fragment8, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
553
494
|
function FlowEcsState(props) {
|
|
554
495
|
const [, setUpdates] = useState3(0);
|
|
555
|
-
const [
|
|
556
|
-
const { ecsFlowRepository } =
|
|
557
|
-
|
|
558
|
-
|
|
496
|
+
const [refreshLayout, setRefreshLayout] = useState3(false);
|
|
497
|
+
const { ecsFlowRepository } = useContext9(EcsFlowContext);
|
|
498
|
+
useEffect6(() => {
|
|
499
|
+
setRefreshLayout(true);
|
|
559
500
|
}, [ecsFlowRepository.sizeNodes]);
|
|
560
|
-
|
|
501
|
+
useEffect6(() => {
|
|
561
502
|
setInterval(() => {
|
|
562
503
|
setUpdates((updates) => updates + 1);
|
|
563
504
|
}, 1e3);
|
|
564
505
|
}, []);
|
|
565
|
-
return /* @__PURE__ */ jsxs10(
|
|
566
|
-
props.showSystemModules && /* @__PURE__ */
|
|
567
|
-
props.showEntities && /* @__PURE__ */
|
|
568
|
-
props.autoLayout && /* @__PURE__ */
|
|
506
|
+
return /* @__PURE__ */ jsxs10(Fragment8, { children: [
|
|
507
|
+
props.showSystemModules && /* @__PURE__ */ jsx17(flow_ecs_modules_default, {}),
|
|
508
|
+
props.showEntities && /* @__PURE__ */ jsx17(flow_ecs_entities_default, {}),
|
|
509
|
+
props.autoLayout && /* @__PURE__ */ jsx17(FlowAutoLayout, { refreshLayout })
|
|
569
510
|
] });
|
|
570
511
|
}
|
|
571
|
-
var flow_ecs_state_default = FlowEcsState;
|
|
512
|
+
var flow_ecs_state_default = memo9(FlowEcsState);
|
|
572
513
|
export {
|
|
573
514
|
EcsFlowContext,
|
|
574
515
|
EcsFlowRepository,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-auto-layout.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\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 { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\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","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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","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.status]);\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 { 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 { 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 { 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 { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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]);\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 { 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 { 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 { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\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 { 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 { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\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 BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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 SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\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 { useEffect, useContext, useState } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 [needsLayout, setNeedsLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(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 && (\n <FlowEcsAutoLayout needsLayout={needsLayout} setNeedsLayout={setNeedsLayout} />\n )}\n </>\n );\n}\n\nexport default FlowEcsState;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\n\nexport type EcsFlowAutoLayoutProps = {\n needsLayout: boolean;\n setNeedsLayout: (value: boolean) => void;\n};\n\nfunction FlowEcsAutoLayout(props: Readonly<EcsFlowAutoLayoutProps>) {\n const { getNodes, getEdges } = useReactFlow();\n\n const context = useContext(FlowContext);\n const setNodes = context.useFlowStore((state) => state.setNodes);\n\n const graph = useMemo(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);\n\n const getLayoutElements = useCallback(\n (nodes: Node[], edges: Edge[], options: GraphLabel) => {\n graph.setGraph(options);\n\n edges.forEach((edge) => graph.setEdge(edge.source, edge.target));\n nodes.forEach((node) => {\n if (node.measured) {\n graph.setNode(node.id, {\n width: node.measured.width,\n height: node.measured.height,\n });\n }\n });\n\n Dagre.layout(graph);\n\n return {\n nodes: nodes.map((node) => {\n const graphNode = graph.node(node.id);\n if (graphNode) {\n return { ...node, position: { x: graphNode.x, y: graphNode.y } };\n }\n\n return node;\n }),\n edges,\n };\n },\n [graph]\n );\n\n useEffect(() => {\n if (props.needsLayout) {\n const storeNodes = getNodes();\n\n if (storeNodes?.length) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n }\n }\n }, [props.needsLayout]);\n\n useEffect(() => {\n if (props.needsLayout) {\n props.setNeedsLayout(false);\n }\n });\n\n return <></>;\n}\n\nexport default FlowEcsAutoLayout;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsEntities() {\n const context = useContext(FlowContext);\n const addNodes = context.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 = context.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.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsModules() {\n const context = useContext(FlowContext);\n const addNodes = context.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 = context.nodeFactory.createNodeFromType<SystemsModuleNodeData>(\n EcsNodeType.systemsModule\n );\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 }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","Badge","Accordion","useMemo","Badge","memo","memo","jsx","Badge","jsx","jsxs","useMemo","Accordion","jsx","Badge","NodeContainer","Badge","useContext","useMemo","Accordion","Badge","Accordion","Badge","Stack","memo","memo","useMemo","memo","useMemo","jsx","jsx","jsxs","useMemo","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","useContext","jsx","jsxs","useContext","Accordion","Badge","Stack","memo","Badge","memo","useContext","Fragment","jsx","jsxs","useContext","Badge","memo","Fragment","jsx","jsxs","Badge","Accordion","jsx","useContext","useMemo","NodeContainer","Badge","EcsTemplateGroup","Position","Position","EcsNodeType","useEffect","useContext","useState","useContext","useEffect","useMemo","Fragment","jsx","FlowContext","useContext","useEffect","useState","useContext","useEffect","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","useContext","useEffect","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","Fragment","jsx","jsxs","useContext","FlowContext","useState","useEffect","useEffect","useContext","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","Fragment","jsx","jsxs","useState","useContext","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\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 { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\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","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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","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.status]);\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 { 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 { 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 { 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 { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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]);\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 { 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 { 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 { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\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 { 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 { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\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 BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-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 SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\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 { useEffect, useState, memo, useContext } from 'react';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\nimport { FlowAutoLayout } from '@awesome-flow/core/canvas';\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","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { useFlowStore } from '@awesome-flow/core/hooks';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\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 }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","Badge","Accordion","useMemo","Badge","memo","memo","jsx","Badge","jsx","jsxs","useMemo","Accordion","jsx","Badge","NodeContainer","Badge","useContext","useMemo","Accordion","Badge","Accordion","Badge","Stack","memo","memo","useMemo","memo","useMemo","jsx","jsx","jsxs","useMemo","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","useContext","jsx","jsxs","useContext","Accordion","Badge","Stack","memo","Badge","memo","useContext","Fragment","jsx","jsxs","useContext","Badge","memo","Fragment","jsx","jsxs","Badge","Accordion","jsx","useContext","useMemo","NodeContainer","Badge","EcsTemplateGroup","Position","Position","EcsNodeType","useEffect","useState","memo","useContext","useContext","useEffect","useState","useFlowStore","useContext","useEffect","Fragment","jsx","useContext","useEffect","useContext","useEffect","useFlowStore","Fragment","jsx","useFlowStore","useContext","useEffect","Fragment","jsx","jsxs","useContext","useFlowStore","useState","useEffect","useEffect","useContext","FlowContext","useFlowStore","Fragment","jsx","useContext","FlowContext","useFlowStore","useEffect","Fragment","jsx","jsxs","useState","useContext","useEffect","memo"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesome-flow/ecs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "The ECS package for Awesome Flow. Provides basic components to map Awesome ECS objects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"ts:watch": "npx tsc --noEmit --incremental --watch"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@awesome-flow/core": "^0.
|
|
14
|
+
"@awesome-flow/core": "^0.6.0"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@awesome-ecs/abstract": "*",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"url": "https://github.com/privatebytes/awesome-flow/issues"
|
|
70
70
|
},
|
|
71
71
|
"homepage": "https://github.com/privatebytes/awesome-flow#readme",
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "e1a900205037bca5d03d02892051ff525db9a1c5"
|
|
73
73
|
}
|