@awesome-flow/ecs 0.5.0 → 0.7.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 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 import_react21 = require("react");
410
-
411
- // src/flow/flow-ecs-auto-layout.tsx
412
- var import_hooks2 = require("@awesome-flow/core/hooks");
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() {
418
- const [needsLayout, setNeedsLayout] = (0, import_react16.useState)(false);
419
- const { ecsFlowRepository } = (0, import_react16.useContext)(EcsFlowContext);
420
- (0, import_react16.useEffect)(() => {
421
- setNeedsLayout(true);
422
- }, [ecsFlowRepository.sizeNodes]);
423
- const { getNodes, getEdges } = (0, import_react15.useReactFlow)();
424
- const setNodes = (0, import_hooks2.useFlowStore)((state) => state.setNodes);
425
- const graph = (0, import_react16.useMemo)(() => new import_dagre.default.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
426
- const getLayoutElements = (0, import_react16.useCallback)(
427
- (nodes, edges, options) => {
428
- graph.setGraph(options);
429
- edges.forEach((edge) => graph.setEdge(edge.source, edge.target));
430
- nodes.forEach((node) => {
431
- if (node.measured) {
432
- graph.setNode(node.id, {
433
- width: node.measured.width,
434
- height: node.measured.height
435
- });
436
- }
437
- });
438
- import_dagre.default.layout(graph);
439
- return {
440
- nodes: nodes.map((node) => {
441
- const graphNode = graph.node(node.id);
442
- if (graphNode) {
443
- return { ...node, position: { x: graphNode.x, y: graphNode.y } };
444
- }
445
- return node;
446
- }),
447
- edges
448
- };
449
- },
450
- [graph]
451
- );
452
- (0, import_react16.useEffect)(() => {
453
- if (needsLayout) {
454
- const storeNodes = getNodes();
455
- if (storeNodes?.length && !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)) {
456
- const edges = getEdges();
457
- const layout = getLayoutElements(storeNodes, edges, {
458
- rankdir: "LR"
459
- });
460
- setNodes(layout.nodes);
461
- setNeedsLayout(false);
462
- }
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
402
  var import_abstract = require("@awesome-flow/core/abstract");
471
- var import_react19 = require("react");
472
- var import_hooks5 = require("@awesome-flow/core/hooks");
403
+ var import_react17 = require("react");
404
+ var import_hooks4 = require("@awesome-flow/core/hooks");
473
405
 
474
406
  // src/flow/flow-ecs-edge-proxies.tsx
475
- var import_react17 = require("react");
476
- var import_hooks3 = require("@awesome-flow/core/hooks");
477
- var import_jsx_runtime14 = require("react/jsx-runtime");
407
+ var import_react15 = require("react");
408
+ var import_hooks2 = require("@awesome-flow/core/hooks");
409
+ var import_jsx_runtime13 = require("react/jsx-runtime");
478
410
  function FlowEcsEdgeProxies(props) {
479
411
  const { nodesToConnect } = props;
480
- const onConnect = (0, import_hooks3.useFlowStore)((state) => state.onConnect);
481
- const { ecsFlowRepository, entityRepository } = (0, import_react17.useContext)(EcsFlowContext);
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,19 +431,19 @@ function FlowEcsEdgeProxies(props) {
499
431
  }
500
432
  }
501
433
  }, [nodesToConnect]);
502
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, {});
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 import_react18 = require("react");
508
- var import_hooks4 = require("@awesome-flow/core/hooks");
509
- var import_jsx_runtime15 = require("react/jsx-runtime");
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 onConnect = (0, import_hooks4.useFlowStore)((state) => state.onConnect);
513
- const { ecsFlowRepository, entityRepository } = (0, import_react18.useContext)(EcsFlowContext);
514
- (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)(() => {
515
447
  for (const node of nodesToConnect) {
516
448
  const sourceHandle = node.data.handles.find((h) => h.connection === "source");
517
449
  const entity = entityRepository.get(node.data.entity);
@@ -527,18 +459,18 @@ function FlowEcsEdgeModules(props) {
527
459
  }
528
460
  }
529
461
  }, [nodesToConnect]);
530
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {});
462
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, {});
531
463
  }
532
464
  var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
533
465
 
534
466
  // src/flow/flow-ecs-entities.tsx
535
- var import_jsx_runtime16 = require("react/jsx-runtime");
467
+ var import_jsx_runtime15 = require("react/jsx-runtime");
536
468
  function FlowEcsEntities() {
537
- const { nodeFactory } = (0, import_react19.useContext)(import_abstract.FlowContext);
538
- const addNodes = (0, import_hooks5.useFlowStore)((state) => state.addNodes);
539
- const { ecsFlowRepository, entityRepository } = (0, import_react19.useContext)(EcsFlowContext);
540
- const [entityNodes, setEntityNodes] = (0, import_react19.useState)([]);
541
- (0, import_react19.useEffect)(() => {
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)(() => {
542
474
  const entities = entityRepository.listAll();
543
475
  const nodes = [];
544
476
  for (const entity of entities) {
@@ -554,23 +486,23 @@ function FlowEcsEntities() {
554
486
  setEntityNodes(nodes);
555
487
  addNodes(nodes);
556
488
  }, [entityRepository.size]);
557
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
558
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(flow_ecs_edge_proxies_default, { nodesToConnect: entityNodes }),
559
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(flow_ecs_edge_modules_default, { nodesToConnect: entityNodes })
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 })
560
492
  ] });
561
493
  }
562
494
  var flow_ecs_entities_default = FlowEcsEntities;
563
495
 
564
496
  // src/flow/flow-ecs-modules.tsx
565
- var import_react20 = require("react");
497
+ var import_react18 = require("react");
566
498
  var import_abstract2 = require("@awesome-flow/core/abstract");
567
- var import_hooks6 = require("@awesome-flow/core/hooks");
568
- var import_jsx_runtime17 = require("react/jsx-runtime");
499
+ var import_hooks5 = require("@awesome-flow/core/hooks");
500
+ var import_jsx_runtime16 = require("react/jsx-runtime");
569
501
  function FlowEcsModules() {
570
- const { nodeFactory } = (0, import_react20.useContext)(import_abstract2.FlowContext);
571
- const addNodes = (0, import_hooks6.useFlowStore)((state) => state.addNodes);
572
- const { ecsFlowRepository, systemsModuleRepository } = (0, import_react20.useContext)(EcsFlowContext);
573
- (0, import_react20.useEffect)(() => {
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 = [];
@@ -588,26 +520,32 @@ function FlowEcsModules() {
588
520
  addNodes(nodesToAdd);
589
521
  }
590
522
  }, [systemsModuleRepository.size]);
591
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, {});
523
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, {});
592
524
  }
593
525
  var flow_ecs_modules_default = FlowEcsModules;
594
526
 
595
527
  // src/flow/flow-ecs-state.tsx
596
- var import_jsx_runtime18 = require("react/jsx-runtime");
528
+ var import_canvas = require("@awesome-flow/core/canvas");
529
+ var import_jsx_runtime17 = require("react/jsx-runtime");
597
530
  function FlowEcsState(props) {
598
- const [, setUpdates] = (0, import_react21.useState)(0);
599
- (0, import_react21.useEffect)(() => {
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);
536
+ }, [ecsFlowRepository.sizeNodes]);
537
+ (0, import_react19.useEffect)(() => {
600
538
  setInterval(() => {
601
539
  setUpdates((updates) => updates + 1);
602
540
  }, 1e3);
603
541
  }, []);
604
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
605
- props.showSystemModules && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_modules_default, {}),
606
- props.showEntities && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_entities_default, {}),
607
- props.autoLayout && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_auto_layout_default, {})
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 })
608
546
  ] });
609
547
  }
610
- var flow_ecs_state_default = (0, import_react21.memo)(FlowEcsState);
548
+ var flow_ecs_state_default = (0, import_react19.memo)(FlowEcsState);
611
549
  // Annotate the CommonJS export names for ESM import in node:
612
550
  0 && (module.exports = {
613
551
  EcsFlowContext,
@@ -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, useState, memo } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n\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 && <FlowEcsAutoLayout />}\n </>\n );\n}\n\nexport default memo(FlowEcsState);\n","import { useFlowStore } from '@awesome-flow/core/hooks';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsAutoLayout() {\n const [needsLayout, setNeedsLayout] = useState(false);\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n const { getNodes, getEdges } = useReactFlow();\n\n const setNodes = 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 (needsLayout) {\n const storeNodes = getNodes();\n\n if (\n storeNodes?.length &&\n !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)\n ) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n setNeedsLayout(false);\n }\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 { 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_hooks","import_react","import_jsx_runtime","Dagre","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"]}
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":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA8B;AAevB,IAAM,qBAAiB,4BAAmC,IAAI;;;ACb9D,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,YAAY,OAA6B;AAC9C,WAAO,GAAG,MAAM,UAAU,IAAI,MAAM,SAAS;AAAA,EAC/C;AACF;;;ACDO,IAAM,oBAAN,MAAwB;AAAA,EACrB;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,oBAAoB,MAAmC;AACrD,SAAK,MAAM,IAAI,KAAK,KAAK,WAAW,SAAS,GAAG,IAAI;AAAA,EACtD;AAAA,EAEA,oBAAoB,YAAwD;AAC1E,WAAO,KAAK,MAAM,IAAI,WAAW,SAAS,CAAC;AAAA,EAC7C;AAAA,EAEA,cAAc,MAA4B;AACxC,SAAK,MAAM,IAAI,eAAe,YAAY,KAAK,KAAK,MAAM,GAAG,IAAI;AAAA,EACnE;AAAA,EAEA,cAAc,QAA4C;AACxD,WAAO,KAAK,MAAM,IAAI,eAAe,YAAY,MAAM,CAAC;AAAA,EAC1D;AAAA,EAEA,eAAuB;AACrB,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,EACvC;AACF;;;ACnCO,IAAK,oBAAL,kBAAKA,uBAAL;AACL,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,YAAS;AAFC,SAAAA;AAAA,GAAA;;;ACEZ,oBAA8B;AAC9B,IAAAC,gBAA2B;AAC3B,IAAAC,eAAsB;;;ACHtB,qBAAmE;AACnE,IAAAC,eAAgC;AAChC,IAAAC,gBAAwB;;;ACFxB,IAAAC,eAAwC;;;ACDxC,kBAAkC;AAClC,IAAAC,gBAAqB;;;ACDrB,IAAAC,gBAA8B;AAM9B,SAAS,mBAAmB,OAA0C;AACpE,QAAM,YAAQ;AAAA,IACZ,MAAM,MAAM,OAAO,SAAS,EAAE,QAAQ,mBAAmB,OAAO;AAAA,IAChE,CAAC,MAAM,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,IAAO,mCAAQ,oBAAK,kBAAkB;;;ADD9B;AAJR,SAAS,UAAU,OAAiC;AAClD,SAAO,MAAM,MAAM,IAAI,CAAC,OAAO,MAAM;AACnC,WACE,4CAAC,qBAAe,GAAI,MAAM,SAAS,CAAC,GAClC,sDAAC,gCAAmB,OAAc,KADxB,CAEZ;AAAA,EAEJ,CAAC;AACH;AAEA,IAAO,yBAAQ,oBAAK,SAAS;;;ADEzB,IAAAC,sBAAA;AAZJ,SAAS,uBAAuB,OAA8C;AAC5E,MAAI,aAA8C,CAAC;AAEnD,MAAI,MAAM,UAAU;AAClB,iBAAa,MAAM,SAAS,YAAY;AAAA,EAC1C;AAEA,QAAM,aAAa,WAAW,IAAI,CAAC,MAAM;AACvC,WAAO,EAAE,QAAQ,EAAE,YAAY;AAAA,EACjC,CAAC;AAED,SACE,8CAAC,uBAAU,MAAV,EAAiC,OAAO,MAAM,OAC7C;AAAA,iDAAC,uBAAU,SAAV,EACC,uDAAC,sBAAM,WAAS,MAAC,SAAQ,SAAQ,cAAc,WAAW,QACvD,gBAAM,OACT,GACF;AAAA,IACA,6CAAC,uBAAU,OAAV,EACC,uDAAC,sBACC,uDAAC,sBAAU,OAAO,YAAY,OAAO,EAAE,SAAS,UAAU,GAAG,GAC/D,GACF;AAAA,OAVmB,MAAM,KAW3B;AAEJ;AAEA,IAAO,mCAAQ;;;ADTX,IAAAC,sBAAA;AAhBJ,SAAS,oBAAoB,OAAwC;AACnE,QAAM,EAAE,QAAAC,QAAO,IAAI;AAEnB,QAAM,iBAAiBA,QAAO,gBAAgB;AAC9C,QAAM,EAAE,cAAc,IAAI;AAE1B,QAAM,EAAE,OAAO,QAAI,uBAAQ,MAAM;AAC/B,WAAO,cAAc;AAAA,EACvB,GAAG,CAAC,cAAc,QAAQ,MAAM,CAAC;AAEjC,QAAM,OAAO,eAAe,gBAAgB,IAAI,0BAAW,UAAU;AACrE,QAAM,SAAS,eAAe,gBAAgB,IAAI,0BAAW,MAAM;AACnE,QAAM,SAAS,eAAe,gBAAgB,IAAI,0BAAW,MAAM;AACnE,QAAM,OAAO,eAAe,gBAAgB,IAAI,0BAAW,IAAI;AAE/D,SACE,8EACE;AAAA,kDAAC,qBAAK;AAAA;AAAA,MAAS;AAAA,OAAO;AAAA,IACtB,8CAAC,0BACE;AAAA,cAAQ,6CAAC,oCAAuB,UAAU,MAAM,OAAM,cAAa;AAAA,MACnE,UAAU,6CAAC,oCAAuB,UAAU,QAAQ,OAAM,UAAS;AAAA,MACnE,UAAU,6CAAC,oCAAuB,UAAU,QAAQ,OAAM,UAAS;AAAA,MACnE,QAAQ,6CAAC,oCAAuB,UAAU,MAAM,OAAM,QAAO;AAAA,OAChE;AAAA,KACF;AAEJ;AAEA,IAAO,gCAAQ;;;ADlBL,IAAAC,sBAAA;AAXV,SAAS,kBAAkB,EAAE,IAAI,MAAM,UAAU,KAAK,GAA2C;AAC/F,QAAM,EAAE,wBAAwB,QAAI,0BAAW,cAAc;AAC7D,QAAMC,UAAS,wBAAwB,IAAI,KAAK,UAAU;AAE1D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OACE,6CAAC,sBAAM,WAAS,MAAC,OAAM,UAAS,SAAQ,eACtC,uDAAC,gCAAmB,OAAO,KAAK,YAAY,GAC9C;AAAA,MAEF;AAAA,MAEA,uDAAC,iCAAoB,MAAM,KAAK,YAAY,QAAQA,SAAQ;AAAA;AAAA,EAC9D;AAEJ;AAEA,IAAO,8BAAQ;;;AK9Bf,IAAAC,iBAA8B;AAC9B,IAAAC,gBAAsB;AACtB,IAAAC,iBAAoC;;;ACFpC,IAAAC,gBAAiD;;;ACAjD,IAAAC,eAAwC;AACxC,IAAAC,gBAAqB;;;ACFrB,IAAAC,eAAsC;AACtC,IAAAC,gBAA8B;AAE9B,mBAA8B;;;ACH9B,IAAAC,eAAuC;AACvC,IAAAC,gBAA8B;AAC9B,6BAA0B;AAcjB,IAAAC,sBAAA;AART,SAAS,gBAAgB,OAAuC;AAC9D,QAAM,kBAAc,qCAAuB;AAE3C,QAAM,YAAQ;AAAA,IACZ,MAAO,gBAAgB,SAAS,eAAe;AAAA,IAC/C,CAAC,WAAW;AAAA,EACd;AAEA,SAAO,6CAAC,oCAAU,OAAO,OAAO,OAAc,MAAM,MAAM,MAAM;AAClE;AAEA,IAAO,+BAAQ,oBAAK,eAAe;;;ADH/B,IAAAC,sBAAA;AANJ,SAAS,yBAAyB,OAAgD;AAChF,QAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAI,4BAAc,KAAK;AAEhD,QAAM,kBAAc,uBAAQ,MAAO,SAAS,UAAU,UAAW,CAAC,MAAM,CAAC;AAEzE,SACE,8CAAC,oBACC;AAAA,iDAAC,uBAAO,SAAQ,WAAU,MAAK,MAAK,SAAS,QAAQ,OAAO,aAAa,WAAS,MAC/E,gBAAM,UAAU,eACnB;AAAA,IAEA,6CAAC,yBAAS,IAAI,QAAS,oBAAU,6CAAC,4BAAgB,MAAM,MAAM,WAAW,GAAG;AAAA,KAC9E;AAEJ;AAEA,IAAO,yCAAQ,oBAAK,wBAAwB;;;ADbxC,IAAAC,sBAAA;AAJJ,SAAS,oBAAoB,OAA2C;AACtE,QAAM,aAAa,MAAM,KAAK,MAAM,OAAO,WAAW,OAAO,CAAC;AAE9D,SACE,8CAAC,uBAAU,MAAV,EAAgC,OAAM,cACrC;AAAA,iDAAC,uBAAU,SAAV,EACC,uDAAC,sBAAM,WAAS,MAAC,SAAQ,SAAQ,cAAc,WAAW,QAAQ,wBAElE,GACF;AAAA,IACA,6CAAC,uBAAU,OAAV,EACC,uDAAC,sBACE,qBAAW,IAAI,CAAC,GAAG,MAClB,6CAAC,sCAAyB,WAAW,KAAQ,CAAG,CACjD,GACH,GACF;AAAA,OAZkB,YAapB;AAEJ;AAEA,IAAO,oCAAQ,oBAAK,mBAAmB;;;AG7BvC,IAAAC,eAAwC;AACxC,IAAAC,gBAAqB;AAajB,IAAAC,sBAAA;AALJ,SAAS,gBAAgB,OAAuC;AAC9D,QAAM,UAAU,MAAM,KAAK,MAAM,OAAO,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC/E,QAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,eAAe,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK;AAE/F,SACE,8CAAC,uBAAU,MAAV,EAA6B,OAAM,WAClC;AAAA,iDAAC,uBAAU,SAAV,EACC,uDAAC,sBAAM,WAAS,MAAC,SAAQ,SAAQ,cAAc,MAAM,QAAQ,qBAE7D,GACF;AAAA,IACA,6CAAC,uBAAU,OAAV,EACC,uDAAC,sBACC,uDAAC,sBAAU,OAAc,OAAO,EAAE,SAAS,UAAU,GAAG,GAC1D,GACF;AAAA,OAVkB,SAWpB;AAEJ;AAEA,IAAO,gCAAQ,oBAAK,eAAe;;;AC7BnC,IAAAC,eAAwC;AACxC,IAAAC,iBAAiC;AAa7B,IAAAC,sBAAA;AALJ,SAAS,uBAAuB,OAA8C;AAC5E,QAAM,EAAE,oBAAoB,QAAI,2BAAW,cAAc;AACzD,QAAM,gBAAgB,oBAAoB,0BAA0B,MAAM,OAAO,OAAO;AAExF,SACE,8CAAC,uBAAU,MAAV,EAAmC,OAAM,iBACxC;AAAA,iDAAC,uBAAU,SAAV,EACC,uDAAC,sBAAM,WAAS,MAAC,SAAQ,SAAQ,cAAc,cAAc,QAAQ,oBAErE,GACF;AAAA,IACA,6CAAC,uBAAU,OAAV,EACC,uDAAC,sBACC,uDAAC,sBAAU,OAAO,eAAe,OAAO,EAAE,SAAS,UAAU,GAAG,GAClE,GACF;AAAA,OAVkB,eAWpB;AAEJ;AAEA,IAAO,uCAAQ,qBAAK,sBAAsB;;;AC7B1C,IAAAC,gBAAsB;AACtB,IAAAC,iBAAsD;AA2BlD,IAAAC,uBAAA;AApBJ,SAAS,oBAAoB,OAA2C;AACtE,QAAM,CAAC,EAAE,UAAU,QAAI,yBAAS,CAAC;AAEjC,QAAM,EAAE,oBAAoB,QAAI,2BAAW,cAAc;AAEzD,QAAM,UAAU,oBAAoB,eAAe,MAAM,SAAS,KAAK;AACvE,QAAM,UAAU,oBAAoB,eAAe,MAAM,SAAS,KAAK;AAEvE,gCAAU,MAAM;AACd,UAAM,WAAW,YAAY,MAAM;AACjC,iBAAW,CAAC,YAAY,UAAU,CAAC;AAAA,IACrC,GAAG,GAAI;AAEP,WAAO,MAAM;AACX,cAAQ,IAAI,gBAAgB;AAC5B,oBAAc,QAAQ;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,gFACE;AAAA,kDAAC,uBAAM,SAAQ,SAAS,mBAAQ;AAAA,IAChC,8CAAC,uBAAM,SAAQ,SAAQ,OAAM,UAC1B,mBACH;AAAA,KACF;AAEJ;AAEA,IAAO,oCAAQ,qBAAK,mBAAmB;;;ANzBnC,IAAAC,uBAAA;AAFJ,SAAS,aAAa,EAAE,OAAO,GAA8B;AAC3D,SACE,gFACE;AAAA,mDAAC,uBACC;AAAA,oDAAC,uBAAM,SAAQ,WAAU,OAAM,UAC5B,iBAAO,QAAQ,WAClB;AAAA,MACA,8CAAC,iCAAoB,WAAW,OAAO,QAAQ,WAAW;AAAA,OAC5D;AAAA,IACA,8CAAC,yBAAQ,IAAI,GAAG;AAAA,IAChB,+CAAC,2BACC;AAAA,oDAAC,iCAAoB,QAAgB;AAAA,MACrC,8CAAC,6BAAgB,QAAgB;AAAA,MACjC,8CAAC,oCAAuB,QAAgB;AAAA,OAC1C;AAAA,KACF;AAEJ;AAEA,IAAO,wBAAQ;;;ADVL,IAAAC,uBAAA;AAXV,SAAS,WAAW,EAAE,IAAI,MAAM,UAAU,KAAK,GAAoC;AACjF,QAAM,EAAE,iBAAiB,QAAI,2BAAW,cAAc;AACtD,QAAM,aAAS,wBAAQ,MAAM,iBAAiB,IAAI,KAAK,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC;AAE7E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OACE,8CAAC,uBAAM,WAAS,MAAC,SAAQ,eACvB,wDAAC,gCAAmB,OAAO,OAAO,QAAQ,YAAY,GACxD;AAAA,MAEF;AAAA,MAEA,wDAAC,yBAAa,QAAgB;AAAA;AAAA,EAChC;AAEJ;AAEA,IAAO,sBAAQ;;;AQ7Bf,IAAAC,iBAAyB;;;ACDlB,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,kBAAA,SAAM;AADI,SAAAA;AAAA,GAAA;;;ADOL,IAAM,qBAAN,MAAqD;AAAA,EACjD,WAAyC;AAAA,IAChD;AAAA,IACA;AAAA,IACA,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE;AAAA,QACA,UAAU,wBAAS;AAAA,QACnB,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE;AAAA,QACA,UAAU,wBAAS;AAAA,QACnB,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;AE7BA,IAAAC,iBAAyB;AAMlB,IAAM,4BAAN,MAA4D;AAAA,EACxD,WAAgD;AAAA,IACvD;AAAA,IACA;AAAA,IACA,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE;AAAA,QACA,UAAU,wBAAS;AAAA,QACnB,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;AClBO,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,mBAAgB;AAChB,EAAAA,aAAA,YAAS;AAFC,SAAAA;AAAA,GAAA;AAKL,IAAM,eAAe;AAAA,EAC1B,CAAC,yCAAyB,GAAG;AAAA,EAC7B,CAAC,0BAAkB,GAAG;AACxB;AAEO,IAAM,mBAAmB;AAAA,EAC9B,CAAC,0BAAkB,GAAG,IAAI,mBAAmB;AAAA,EAC7C,CAAC,yCAAyB,GAAG,IAAI,0BAA0B;AAC7D;;;ACnBA,IAAAC,iBAAsD;;;ACAtD,sBAA4B;AAC5B,IAAAC,iBAAgD;AAEhD,IAAAC,gBAA6B;;;ACF7B,IAAAC,iBAAsC;AACtC,IAAAC,gBAA6B;AAuCpB,IAAAC,uBAAA;AA/BT,SAAS,mBAAmB,OAA0C;AACpE,QAAM,EAAE,eAAe,IAAI;AAE3B,QAAM,gBAAY,4BAAa,CAAC,UAA8B,MAAM,SAAS;AAE7E,QAAM,EAAE,mBAAmB,iBAAiB,QAAI,2BAAW,cAAc;AAEzE,gCAAU,MAAM;AACd,eAAW,QAAQ,gBAAgB;AACjC,YAAM,eAAe,KAAK,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,QAAQ;AAC5E,YAAM,SAAS,iBAAiB,IAAI,KAAK,KAAK,MAAM;AAEpD,iBAAW,CAAC,EAAE,QAAQ,KAAK,OAAO,SAAS;AACzC,mBAAW,SAAS,SAAS,OAAO,GAAG;AACrC,gBAAM,YAAY,kBAAkB,cAAc,KAAK;AAEvD,cAAI,WAAW;AACb,kBAAM,eAAe,UAAU,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,QAAQ;AAEjF,sBAAU;AAAA,cACR,QAAQ,KAAK;AAAA,cACb,QAAQ,UAAU;AAAA,cAClB,cAAc,aAAa;AAAA,cAC3B,cAAc,aAAa;AAAA,YAC7B,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,+EAAE;AACX;AAEA,IAAO,gCAAQ;;;AC3Cf,IAAAC,iBAAsC;AACtC,IAAAC,gBAA6B;AAkCpB,IAAAC,uBAAA;AA1BT,SAAS,mBAAmB,OAA0C;AACpE,QAAM,EAAE,eAAe,IAAI;AAE3B,QAAM,gBAAY,4BAAa,CAAC,UAA8B,MAAM,SAAS;AAE7E,QAAM,EAAE,mBAAmB,iBAAiB,QAAI,2BAAW,cAAc;AAEzE,gCAAU,MAAM;AACd,eAAW,QAAQ,gBAAgB;AACjC,YAAM,eAAe,KAAK,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,QAAQ;AAC5E,YAAM,SAAS,iBAAiB,IAAI,KAAK,KAAK,MAAM;AAEpD,YAAM,eAAe,kBAAkB,oBAAoB,OAAO,QAAQ,UAAU;AACpF,YAAM,eAAe,cAAc,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,QAAQ;AAErF,UAAI,cAAc;AAChB,kBAAU;AAAA,UACR,QAAQ,KAAK;AAAA,UACb,QAAQ,aAAa;AAAA,UACrB,cAAc,aAAa;AAAA,UAC3B,cAAc,aAAa;AAAA,QAC7B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,+EAAE;AACX;AAEA,IAAO,gCAAQ;;;AFCX,IAAAC,uBAAA;AA9BJ,SAAS,kBAAkB;AACzB,QAAM,EAAE,YAAY,QAAI,2BAAW,2BAAW;AAC9C,QAAM,eAAW,4BAAa,CAAC,UAAU,MAAM,QAAQ;AAEvD,QAAM,EAAE,mBAAmB,iBAAiB,QAAI,2BAAW,cAAc;AACzE,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAiC,CAAC,CAAC;AAEzE,gCAAU,MAAM;AACd,UAAM,WAAW,iBAAiB,QAAQ;AAC1C,UAAM,QAAQ,CAAC;AAEf,eAAW,UAAU,UAAU;AAC7B,UAAI,kBAAkB,cAAc,OAAO,OAAO,GAAG;AACnD;AAAA,MACF;AAEA,YAAM,OAAO,YAAY,6CAAqD;AAE9E,WAAK,KAAK,SAAS,OAAO;AAC1B,WAAK,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE;AAE7B,wBAAkB,cAAc,IAAI;AACpC,YAAM,KAAK,IAAI;AAAA,IACjB;AAEA,mBAAe,KAAK;AACpB,aAAS,KAAK;AAAA,EAChB,GAAG,CAAC,iBAAiB,IAAI,CAAC;AAE1B,SACE,gFACE;AAAA,kDAAC,iCAAmB,gBAAgB,aAAa;AAAA,IACjD,8CAAC,iCAAmB,gBAAgB,aAAa;AAAA,KACnD;AAEJ;AAEA,IAAO,4BAAQ;;;AG/Cf,IAAAC,iBAAsC;AACtC,IAAAC,mBAA4B;AAC5B,IAAAC,gBAA6B;AAoCpB,IAAAC,uBAAA;AA/BT,SAAS,iBAAiB;AACxB,QAAM,EAAE,YAAY,QAAI,2BAAW,4BAAW;AAC9C,QAAM,eAAW,4BAAa,CAAC,UAAU,MAAM,QAAQ;AAEvD,QAAM,EAAE,mBAAmB,wBAAwB,QAAI,2BAAW,cAAc;AAEhF,gCAAU,MAAM;AACd,UAAM,UAAU,MAAM,KAAK,wBAAwB,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,UAAM,OAAO,MAAM,KAAK,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAEzD,UAAM,aAAa,CAAC;AAEpB,eAAW,WAAW,MAAM;AAC1B,UAAI,kBAAkB,oBAAoB,OAAO,GAAG;AAClD;AAAA,MACF;AAEA,YAAM,OAAO,YAAY,4DAAmE;AAE5F,WAAK,KAAK,aAAa;AACvB,WAAK,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE;AAE7B,wBAAkB,oBAAoB,IAAI;AAC1C,iBAAW,KAAK,IAAI;AAAA,IACtB;AAEA,QAAI,WAAW,QAAQ;AACrB,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,wBAAwB,IAAI,CAAC;AAEjC,SAAO,+EAAE;AACX;AAEA,IAAO,2BAAQ;;;AJrCf,oBAA+B;AAyB3B,IAAAC,uBAAA;AAjBJ,SAAS,aAAa,OAAoC;AACxD,QAAM,CAAC,EAAE,UAAU,QAAI,yBAAS,CAAC;AACjC,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AAExD,QAAM,EAAE,kBAAkB,QAAI,2BAAW,cAAc;AAEvD,gCAAU,MAAM;AACd,qBAAiB,IAAI;AAAA,EACvB,GAAG,CAAC,kBAAkB,SAAS,CAAC;AAEhC,gCAAU,MAAM;AACd,gBAAY,MAAM;AAChB,iBAAW,CAAC,YAAY,UAAU,CAAC;AAAA,IACrC,GAAG,GAAI;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,SACE,gFACG;AAAA,UAAM,qBAAqB,8CAAC,4BAAe;AAAA,IAC3C,MAAM,gBAAgB,8CAAC,6BAAgB;AAAA,IACvC,MAAM,cAAc,8CAAC,gCAAe,eAA8B;AAAA,KACrE;AAEJ;AAEA,IAAO,6BAAQ,qBAAK,YAAY;","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.js CHANGED
@@ -360,80 +360,22 @@ var ecsNodeTemplates = {
360
360
  };
361
361
 
362
362
  // src/flow/flow-ecs-state.tsx
363
- import { useEffect as useEffect7, useState as useState4, memo as memo9 } from "react";
364
-
365
- // src/flow/flow-ecs-auto-layout.tsx
366
- import { useFlowStore } from "@awesome-flow/core/hooks";
367
- import Dagre from "@dagrejs/dagre";
368
- import { useReactFlow } from "@xyflow/react";
369
- import { useCallback, useContext as useContext5, useEffect as useEffect2, useMemo as useMemo6, useState as useState2 } from "react";
370
- import { Fragment as Fragment4, jsx as jsx13 } from "react/jsx-runtime";
371
- function FlowEcsAutoLayout() {
372
- const [needsLayout, setNeedsLayout] = useState2(false);
373
- const { ecsFlowRepository } = useContext5(EcsFlowContext);
374
- useEffect2(() => {
375
- setNeedsLayout(true);
376
- }, [ecsFlowRepository.sizeNodes]);
377
- const { getNodes, getEdges } = useReactFlow();
378
- const setNodes = useFlowStore((state) => state.setNodes);
379
- const graph = useMemo6(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
380
- const getLayoutElements = useCallback(
381
- (nodes, edges, options) => {
382
- graph.setGraph(options);
383
- edges.forEach((edge) => graph.setEdge(edge.source, edge.target));
384
- nodes.forEach((node) => {
385
- if (node.measured) {
386
- graph.setNode(node.id, {
387
- width: node.measured.width,
388
- height: node.measured.height
389
- });
390
- }
391
- });
392
- Dagre.layout(graph);
393
- return {
394
- nodes: nodes.map((node) => {
395
- const graphNode = graph.node(node.id);
396
- if (graphNode) {
397
- return { ...node, position: { x: graphNode.x, y: graphNode.y } };
398
- }
399
- return node;
400
- }),
401
- edges
402
- };
403
- },
404
- [graph]
405
- );
406
- useEffect2(() => {
407
- if (needsLayout) {
408
- const storeNodes = getNodes();
409
- if (storeNodes?.length && !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)) {
410
- const edges = getEdges();
411
- const layout = getLayoutElements(storeNodes, edges, {
412
- rankdir: "LR"
413
- });
414
- setNodes(layout.nodes);
415
- setNeedsLayout(false);
416
- }
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
366
  import { FlowContext } from "@awesome-flow/core/abstract";
425
- import { useContext as useContext8, useEffect as useEffect5, useState as useState3 } from "react";
426
- import { useFlowStore as useFlowStore4 } from "@awesome-flow/core/hooks";
367
+ import { useContext as useContext7, useEffect as useEffect4, useState as useState2 } from "react";
368
+ import { useFlowStore as useFlowStore3 } from "@awesome-flow/core/hooks";
427
369
 
428
370
  // src/flow/flow-ecs-edge-proxies.tsx
429
- import { useContext as useContext6, useEffect as useEffect3 } from "react";
430
- import { useFlowStore as useFlowStore2 } from "@awesome-flow/core/hooks";
431
- import { Fragment as Fragment5, jsx as jsx14 } from "react/jsx-runtime";
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";
432
374
  function FlowEcsEdgeProxies(props) {
433
375
  const { nodesToConnect } = props;
434
- const onConnect = useFlowStore2((state) => state.onConnect);
435
- const { ecsFlowRepository, entityRepository } = useContext6(EcsFlowContext);
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,19 +395,19 @@ function FlowEcsEdgeProxies(props) {
453
395
  }
454
396
  }
455
397
  }, [nodesToConnect]);
456
- return /* @__PURE__ */ jsx14(Fragment5, {});
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 useContext7, useEffect as useEffect4 } from "react";
462
- import { useFlowStore as useFlowStore3 } from "@awesome-flow/core/hooks";
463
- import { Fragment as Fragment6, jsx as jsx15 } from "react/jsx-runtime";
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 onConnect = useFlowStore3((state) => state.onConnect);
467
- const { ecsFlowRepository, entityRepository } = useContext7(EcsFlowContext);
468
- useEffect4(() => {
408
+ const onConnect = useFlowStore2((state) => state.onConnect);
409
+ const { ecsFlowRepository, entityRepository } = useContext6(EcsFlowContext);
410
+ useEffect3(() => {
469
411
  for (const node of nodesToConnect) {
470
412
  const sourceHandle = node.data.handles.find((h) => h.connection === "source");
471
413
  const entity = entityRepository.get(node.data.entity);
@@ -481,18 +423,18 @@ function FlowEcsEdgeModules(props) {
481
423
  }
482
424
  }
483
425
  }, [nodesToConnect]);
484
- return /* @__PURE__ */ jsx15(Fragment6, {});
426
+ return /* @__PURE__ */ jsx14(Fragment5, {});
485
427
  }
486
428
  var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
487
429
 
488
430
  // src/flow/flow-ecs-entities.tsx
489
- import { Fragment as Fragment7, jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
431
+ import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
490
432
  function FlowEcsEntities() {
491
- const { nodeFactory } = useContext8(FlowContext);
492
- const addNodes = useFlowStore4((state) => state.addNodes);
493
- const { ecsFlowRepository, entityRepository } = useContext8(EcsFlowContext);
494
- const [entityNodes, setEntityNodes] = useState3([]);
495
- useEffect5(() => {
433
+ const { nodeFactory } = useContext7(FlowContext);
434
+ const addNodes = useFlowStore3((state) => state.addNodes);
435
+ const { ecsFlowRepository, entityRepository } = useContext7(EcsFlowContext);
436
+ const [entityNodes, setEntityNodes] = useState2([]);
437
+ useEffect4(() => {
496
438
  const entities = entityRepository.listAll();
497
439
  const nodes = [];
498
440
  for (const entity of entities) {
@@ -508,23 +450,23 @@ function FlowEcsEntities() {
508
450
  setEntityNodes(nodes);
509
451
  addNodes(nodes);
510
452
  }, [entityRepository.size]);
511
- return /* @__PURE__ */ jsxs9(Fragment7, { children: [
512
- /* @__PURE__ */ jsx16(flow_ecs_edge_proxies_default, { nodesToConnect: entityNodes }),
513
- /* @__PURE__ */ jsx16(flow_ecs_edge_modules_default, { nodesToConnect: entityNodes })
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 })
514
456
  ] });
515
457
  }
516
458
  var flow_ecs_entities_default = FlowEcsEntities;
517
459
 
518
460
  // src/flow/flow-ecs-modules.tsx
519
- import { useEffect as useEffect6, useContext as useContext9 } from "react";
461
+ import { useEffect as useEffect5, useContext as useContext8 } from "react";
520
462
  import { FlowContext as FlowContext2 } from "@awesome-flow/core/abstract";
521
- import { useFlowStore as useFlowStore5 } from "@awesome-flow/core/hooks";
522
- import { Fragment as Fragment8, jsx as jsx17 } from "react/jsx-runtime";
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 { nodeFactory } = useContext9(FlowContext2);
525
- const addNodes = useFlowStore5((state) => state.addNodes);
526
- const { ecsFlowRepository, systemsModuleRepository } = useContext9(EcsFlowContext);
527
- useEffect6(() => {
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 = [];
@@ -542,23 +484,29 @@ function FlowEcsModules() {
542
484
  addNodes(nodesToAdd);
543
485
  }
544
486
  }, [systemsModuleRepository.size]);
545
- return /* @__PURE__ */ jsx17(Fragment8, {});
487
+ return /* @__PURE__ */ jsx16(Fragment7, {});
546
488
  }
547
489
  var flow_ecs_modules_default = FlowEcsModules;
548
490
 
549
491
  // src/flow/flow-ecs-state.tsx
550
- import { Fragment as Fragment9, jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
492
+ import { FlowAutoLayout } from "@awesome-flow/core/canvas";
493
+ import { Fragment as Fragment8, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
551
494
  function FlowEcsState(props) {
552
- const [, setUpdates] = useState4(0);
553
- useEffect7(() => {
495
+ const [, setUpdates] = useState3(0);
496
+ const [refreshLayout, setRefreshLayout] = useState3(false);
497
+ const { ecsFlowRepository } = useContext9(EcsFlowContext);
498
+ useEffect6(() => {
499
+ setRefreshLayout(true);
500
+ }, [ecsFlowRepository.sizeNodes]);
501
+ useEffect6(() => {
554
502
  setInterval(() => {
555
503
  setUpdates((updates) => updates + 1);
556
504
  }, 1e3);
557
505
  }, []);
558
- return /* @__PURE__ */ jsxs10(Fragment9, { children: [
559
- props.showSystemModules && /* @__PURE__ */ jsx18(flow_ecs_modules_default, {}),
560
- props.showEntities && /* @__PURE__ */ jsx18(flow_ecs_entities_default, {}),
561
- props.autoLayout && /* @__PURE__ */ jsx18(flow_ecs_auto_layout_default, {})
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 })
562
510
  ] });
563
511
  }
564
512
  var flow_ecs_state_default = memo9(FlowEcsState);
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, useState, memo } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n\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 && <FlowEcsAutoLayout />}\n </>\n );\n}\n\nexport default memo(FlowEcsState);\n","import { useFlowStore } from '@awesome-flow/core/hooks';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsAutoLayout() {\n const [needsLayout, setNeedsLayout] = useState(false);\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n const { getNodes, getEdges } = useReactFlow();\n\n const setNodes = 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 (needsLayout) {\n const storeNodes = getNodes();\n\n if (\n storeNodes?.length &&\n !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)\n ) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n setNeedsLayout(false);\n }\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 { 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","useEffect","useMemo","useState","Fragment","jsx","useState","useContext","useEffect","useMemo","useContext","useEffect","useState","useFlowStore","useContext","useEffect","useFlowStore","Fragment","jsx","useFlowStore","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","useEffect","memo"]}
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.5.0",
3
+ "version": "0.7.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.5.0"
14
+ "@awesome-flow/core": "^0.7.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": "681320c7eb0167d0c9b97d42a0388875c17ae736"
72
+ "gitHead": "44ba6a8b5586266adbb7e6d85ba59fc632147ac4"
73
73
  }