@awesome-flow/ecs 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -409,15 +409,19 @@ var ecsNodeTemplates = {
409
409
  var import_react21 = require("react");
410
410
 
411
411
  // src/flow/flow-ecs-auto-layout.tsx
412
- var import_abstract = require("@awesome-flow/core/abstract");
412
+ var import_hooks2 = require("@awesome-flow/core/hooks");
413
413
  var import_dagre = __toESM(require("@dagrejs/dagre"), 1);
414
414
  var import_react15 = require("@xyflow/react");
415
415
  var import_react16 = require("react");
416
416
  var import_jsx_runtime13 = require("react/jsx-runtime");
417
- function FlowEcsAutoLayout(props) {
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]);
418
423
  const { getNodes, getEdges } = (0, import_react15.useReactFlow)();
419
- const context = (0, import_react16.useContext)(import_abstract.FlowContext);
420
- const setNodes = context.useFlowStore((state) => state.setNodes);
424
+ const setNodes = (0, import_hooks2.useFlowStore)((state) => state.setNodes);
421
425
  const graph = (0, import_react16.useMemo)(() => new import_dagre.default.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
422
426
  const getLayoutElements = (0, import_react16.useCallback)(
423
427
  (nodes, edges, options) => {
@@ -446,38 +450,34 @@ function FlowEcsAutoLayout(props) {
446
450
  [graph]
447
451
  );
448
452
  (0, import_react16.useEffect)(() => {
449
- if (props.needsLayout) {
453
+ if (needsLayout) {
450
454
  const storeNodes = getNodes();
451
- if (storeNodes?.length) {
455
+ if (storeNodes?.length && !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)) {
452
456
  const edges = getEdges();
453
457
  const layout = getLayoutElements(storeNodes, edges, {
454
458
  rankdir: "LR"
455
459
  });
456
460
  setNodes(layout.nodes);
461
+ setNeedsLayout(false);
457
462
  }
458
463
  }
459
- }, [props.needsLayout]);
460
- (0, import_react16.useEffect)(() => {
461
- if (props.needsLayout) {
462
- props.setNeedsLayout(false);
463
- }
464
464
  });
465
465
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, {});
466
466
  }
467
467
  var flow_ecs_auto_layout_default = FlowEcsAutoLayout;
468
468
 
469
469
  // src/flow/flow-ecs-entities.tsx
470
- var import_abstract4 = require("@awesome-flow/core/abstract");
470
+ var import_abstract = require("@awesome-flow/core/abstract");
471
471
  var import_react19 = require("react");
472
+ var import_hooks5 = require("@awesome-flow/core/hooks");
472
473
 
473
474
  // src/flow/flow-ecs-edge-proxies.tsx
474
475
  var import_react17 = require("react");
475
- var import_abstract2 = require("@awesome-flow/core/abstract");
476
+ var import_hooks3 = require("@awesome-flow/core/hooks");
476
477
  var import_jsx_runtime14 = require("react/jsx-runtime");
477
478
  function FlowEcsEdgeProxies(props) {
478
479
  const { nodesToConnect } = props;
479
- const context = (0, import_react17.useContext)(import_abstract2.FlowContext);
480
- const onConnect = context.useFlowStore((state) => state.onConnect);
480
+ const onConnect = (0, import_hooks3.useFlowStore)((state) => state.onConnect);
481
481
  const { ecsFlowRepository, entityRepository } = (0, import_react17.useContext)(EcsFlowContext);
482
482
  (0, import_react17.useEffect)(() => {
483
483
  for (const node of nodesToConnect) {
@@ -505,12 +505,11 @@ var flow_ecs_edge_proxies_default = FlowEcsEdgeProxies;
505
505
 
506
506
  // src/flow/flow-ecs-edge-modules.tsx
507
507
  var import_react18 = require("react");
508
- var import_abstract3 = require("@awesome-flow/core/abstract");
508
+ var import_hooks4 = require("@awesome-flow/core/hooks");
509
509
  var import_jsx_runtime15 = require("react/jsx-runtime");
510
510
  function FlowEcsEdgeModules(props) {
511
511
  const { nodesToConnect } = props;
512
- const context = (0, import_react18.useContext)(import_abstract3.FlowContext);
513
- const onConnect = context.useFlowStore((state) => state.onConnect);
512
+ const onConnect = (0, import_hooks4.useFlowStore)((state) => state.onConnect);
514
513
  const { ecsFlowRepository, entityRepository } = (0, import_react18.useContext)(EcsFlowContext);
515
514
  (0, import_react18.useEffect)(() => {
516
515
  for (const node of nodesToConnect) {
@@ -535,8 +534,8 @@ var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
535
534
  // src/flow/flow-ecs-entities.tsx
536
535
  var import_jsx_runtime16 = require("react/jsx-runtime");
537
536
  function FlowEcsEntities() {
538
- const context = (0, import_react19.useContext)(import_abstract4.FlowContext);
539
- const addNodes = context.useFlowStore((state) => state.addNodes);
537
+ const { nodeFactory } = (0, import_react19.useContext)(import_abstract.FlowContext);
538
+ const addNodes = (0, import_hooks5.useFlowStore)((state) => state.addNodes);
540
539
  const { ecsFlowRepository, entityRepository } = (0, import_react19.useContext)(EcsFlowContext);
541
540
  const [entityNodes, setEntityNodes] = (0, import_react19.useState)([]);
542
541
  (0, import_react19.useEffect)(() => {
@@ -546,7 +545,7 @@ function FlowEcsEntities() {
546
545
  if (ecsFlowRepository.getEntityNode(entity.myProxy)) {
547
546
  continue;
548
547
  }
549
- const node = context.nodeFactory.createNodeFromType("entity-node" /* entity */);
548
+ const node = nodeFactory.createNodeFromType("entity-node" /* entity */);
550
549
  node.data.entity = entity.myProxy;
551
550
  node.position = { x: 0, y: 0 };
552
551
  ecsFlowRepository.addEntityNode(node);
@@ -564,11 +563,12 @@ var flow_ecs_entities_default = FlowEcsEntities;
564
563
 
565
564
  // src/flow/flow-ecs-modules.tsx
566
565
  var import_react20 = require("react");
567
- var import_abstract5 = require("@awesome-flow/core/abstract");
566
+ var import_abstract2 = require("@awesome-flow/core/abstract");
567
+ var import_hooks6 = require("@awesome-flow/core/hooks");
568
568
  var import_jsx_runtime17 = require("react/jsx-runtime");
569
569
  function FlowEcsModules() {
570
- const context = (0, import_react20.useContext)(import_abstract5.FlowContext);
571
- const addNodes = context.useFlowStore((state) => state.addNodes);
570
+ const { nodeFactory } = (0, import_react20.useContext)(import_abstract2.FlowContext);
571
+ const addNodes = (0, import_hooks6.useFlowStore)((state) => state.addNodes);
572
572
  const { ecsFlowRepository, systemsModuleRepository } = (0, import_react20.useContext)(EcsFlowContext);
573
573
  (0, import_react20.useEffect)(() => {
574
574
  const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);
@@ -578,9 +578,7 @@ function FlowEcsModules() {
578
578
  if (ecsFlowRepository.getSystemModuleNode(element)) {
579
579
  continue;
580
580
  }
581
- const node = context.nodeFactory.createNodeFromType(
582
- "systems-module-node" /* systemsModule */
583
- );
581
+ const node = nodeFactory.createNodeFromType("systems-module-node" /* systemsModule */);
584
582
  node.data.entityType = element;
585
583
  node.position = { x: 0, y: 0 };
586
584
  ecsFlowRepository.addSystemModuleNode(node);
@@ -598,11 +596,6 @@ var flow_ecs_modules_default = FlowEcsModules;
598
596
  var import_jsx_runtime18 = require("react/jsx-runtime");
599
597
  function FlowEcsState(props) {
600
598
  const [, setUpdates] = (0, import_react21.useState)(0);
601
- const [needsLayout, setNeedsLayout] = (0, import_react21.useState)(false);
602
- const { ecsFlowRepository } = (0, import_react21.useContext)(EcsFlowContext);
603
- (0, import_react21.useEffect)(() => {
604
- setNeedsLayout(true);
605
- }, [ecsFlowRepository.sizeNodes]);
606
599
  (0, import_react21.useEffect)(() => {
607
600
  setInterval(() => {
608
601
  setUpdates((updates) => updates + 1);
@@ -611,10 +604,10 @@ function FlowEcsState(props) {
611
604
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
612
605
  props.showSystemModules && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_modules_default, {}),
613
606
  props.showEntities && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_entities_default, {}),
614
- props.autoLayout && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_auto_layout_default, { needsLayout, setNeedsLayout })
607
+ props.autoLayout && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(flow_ecs_auto_layout_default, {})
615
608
  ] });
616
609
  }
617
- var flow_ecs_state_default = FlowEcsState;
610
+ var flow_ecs_state_default = (0, import_react21.memo)(FlowEcsState);
618
611
  // Annotate the CommonJS export names for ESM import in node:
619
612
  0 && (module.exports = {
620
613
  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, useContext, useState } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n const [needsLayout, setNeedsLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n useEffect(() => {\n setInterval(() => {\n setUpdates((updates) => updates + 1);\n }, 1000);\n }, []);\n\n return (\n <>\n {props.showSystemModules && <FlowEcsModules />}\n {props.showEntities && <FlowEcsEntities />}\n {props.autoLayout && (\n <FlowEcsAutoLayout needsLayout={needsLayout} setNeedsLayout={setNeedsLayout} />\n )}\n </>\n );\n}\n\nexport default FlowEcsState;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\n\nexport type EcsFlowAutoLayoutProps = {\n needsLayout: boolean;\n setNeedsLayout: (value: boolean) => void;\n};\n\nfunction FlowEcsAutoLayout(props: Readonly<EcsFlowAutoLayoutProps>) {\n const { getNodes, getEdges } = useReactFlow();\n\n const context = useContext(FlowContext);\n const setNodes = context.useFlowStore((state) => state.setNodes);\n\n const graph = useMemo(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);\n\n const getLayoutElements = useCallback(\n (nodes: Node[], edges: Edge[], options: GraphLabel) => {\n graph.setGraph(options);\n\n edges.forEach((edge) => graph.setEdge(edge.source, edge.target));\n nodes.forEach((node) => {\n if (node.measured) {\n graph.setNode(node.id, {\n width: node.measured.width,\n height: node.measured.height,\n });\n }\n });\n\n Dagre.layout(graph);\n\n return {\n nodes: nodes.map((node) => {\n const graphNode = graph.node(node.id);\n if (graphNode) {\n return { ...node, position: { x: graphNode.x, y: graphNode.y } };\n }\n\n return node;\n }),\n edges,\n };\n },\n [graph]\n );\n\n useEffect(() => {\n if (props.needsLayout) {\n const storeNodes = getNodes();\n\n if (storeNodes?.length) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n }\n }\n }, [props.needsLayout]);\n\n useEffect(() => {\n if (props.needsLayout) {\n props.setNeedsLayout(false);\n }\n });\n\n return <></>;\n}\n\nexport default FlowEcsAutoLayout;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsEntities() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n const [entityNodes, setEntityNodes] = useState<Node<EntityNodeData>[]>([]);\n\n useEffect(() => {\n const entities = entityRepository.listAll();\n const nodes = [];\n\n for (const entity of entities) {\n if (ecsFlowRepository.getEntityNode(entity.myProxy)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<EntityNodeData>(EcsNodeType.entity);\n\n node.data.entity = entity.myProxy;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addEntityNode(node);\n nodes.push(node);\n }\n\n setEntityNodes(nodes);\n addNodes(nodes);\n }, [entityRepository.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n for (const [, proxyMap] of entity.proxies) {\n for (const proxy of proxyMap.values()) {\n const proxyNode = ecsFlowRepository.getEntityNode(proxy);\n\n if (proxyNode) {\n const targetHandle = proxyNode.data.handles.find((h) => h.connection === 'target');\n\n onConnect({\n source: node.id,\n target: proxyNode.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);\n const targetHandle = systemModule?.data.handles.find((h) => h.connection === 'target');\n\n if (targetHandle) {\n onConnect({\n source: node.id,\n target: systemModule.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsModules() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);\n const keys = Array.from(modules.values()).map((v) => v[0]);\n\n const nodesToAdd = [];\n\n for (const element of keys) {\n if (ecsFlowRepository.getSystemModuleNode(element)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<SystemsModuleNodeData>(\n EcsNodeType.systemsModule\n );\n\n node.data.entityType = element;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addSystemModuleNode(node);\n nodesToAdd.push(node);\n }\n\n if (nodesToAdd.length) {\n addNodes(nodesToAdd);\n }\n }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","import_react","import_core","import_core","import_react","import_core","import_react","import_react","import_jsx_runtime","import_jsx_runtime","module","import_jsx_runtime","module","import_layout","import_core","import_react","import_core","import_core","import_react","import_core","import_react","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EcsTemplateGroup","import_react","EcsNodeType","import_react","import_react","import_jsx_runtime","Dagre","import_abstract","import_react","import_react","import_abstract","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-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"]}
package/dist/index.d.cts CHANGED
@@ -78,5 +78,6 @@ type FlowEcsStateProps = {
78
78
  autoLayout: boolean;
79
79
  };
80
80
  declare function FlowEcsState(props: Readonly<FlowEcsStateProps>): react_jsx_runtime.JSX.Element;
81
+ declare const _default: react.MemoExoticComponent<typeof FlowEcsState>;
81
82
 
82
- export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
83
+ export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, _default as FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
package/dist/index.d.ts CHANGED
@@ -78,5 +78,6 @@ type FlowEcsStateProps = {
78
78
  autoLayout: boolean;
79
79
  };
80
80
  declare function FlowEcsState(props: Readonly<FlowEcsStateProps>): react_jsx_runtime.JSX.Element;
81
+ declare const _default: react.MemoExoticComponent<typeof FlowEcsState>;
81
82
 
82
- export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
83
+ export { EcsFlowContext, type EcsFlowContextProps, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, type EntityNodeData, EntityNodeTemplate, _default as FlowEcsState, type IEntityUpdateCounter, SystemsModuleNode, type SystemsModuleNodeData, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
package/dist/index.js CHANGED
@@ -360,18 +360,22 @@ var ecsNodeTemplates = {
360
360
  };
361
361
 
362
362
  // src/flow/flow-ecs-state.tsx
363
- import { useEffect as useEffect7, useContext as useContext10, useState as useState3 } from "react";
363
+ import { useEffect as useEffect7, useState as useState4, memo as memo9 } from "react";
364
364
 
365
365
  // src/flow/flow-ecs-auto-layout.tsx
366
- import { FlowContext } from "@awesome-flow/core/abstract";
366
+ import { useFlowStore } from "@awesome-flow/core/hooks";
367
367
  import Dagre from "@dagrejs/dagre";
368
368
  import { useReactFlow } from "@xyflow/react";
369
- import { useCallback, useContext as useContext5, useEffect as useEffect2, useMemo as useMemo6 } from "react";
369
+ import { useCallback, useContext as useContext5, useEffect as useEffect2, useMemo as useMemo6, useState as useState2 } from "react";
370
370
  import { Fragment as Fragment4, jsx as jsx13 } from "react/jsx-runtime";
371
- function FlowEcsAutoLayout(props) {
371
+ function FlowEcsAutoLayout() {
372
+ const [needsLayout, setNeedsLayout] = useState2(false);
373
+ const { ecsFlowRepository } = useContext5(EcsFlowContext);
374
+ useEffect2(() => {
375
+ setNeedsLayout(true);
376
+ }, [ecsFlowRepository.sizeNodes]);
372
377
  const { getNodes, getEdges } = useReactFlow();
373
- const context = useContext5(FlowContext);
374
- const setNodes = context.useFlowStore((state) => state.setNodes);
378
+ const setNodes = useFlowStore((state) => state.setNodes);
375
379
  const graph = useMemo6(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);
376
380
  const getLayoutElements = useCallback(
377
381
  (nodes, edges, options) => {
@@ -400,38 +404,34 @@ function FlowEcsAutoLayout(props) {
400
404
  [graph]
401
405
  );
402
406
  useEffect2(() => {
403
- if (props.needsLayout) {
407
+ if (needsLayout) {
404
408
  const storeNodes = getNodes();
405
- if (storeNodes?.length) {
409
+ if (storeNodes?.length && !storeNodes.some((n) => !n.measured?.width || !n.measured?.height)) {
406
410
  const edges = getEdges();
407
411
  const layout = getLayoutElements(storeNodes, edges, {
408
412
  rankdir: "LR"
409
413
  });
410
414
  setNodes(layout.nodes);
415
+ setNeedsLayout(false);
411
416
  }
412
417
  }
413
- }, [props.needsLayout]);
414
- useEffect2(() => {
415
- if (props.needsLayout) {
416
- props.setNeedsLayout(false);
417
- }
418
418
  });
419
419
  return /* @__PURE__ */ jsx13(Fragment4, {});
420
420
  }
421
421
  var flow_ecs_auto_layout_default = FlowEcsAutoLayout;
422
422
 
423
423
  // src/flow/flow-ecs-entities.tsx
424
- import { FlowContext as FlowContext4 } from "@awesome-flow/core/abstract";
425
- import { useContext as useContext8, useEffect as useEffect5, useState as useState2 } from "react";
424
+ 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";
426
427
 
427
428
  // src/flow/flow-ecs-edge-proxies.tsx
428
429
  import { useContext as useContext6, useEffect as useEffect3 } from "react";
429
- import { FlowContext as FlowContext2 } from "@awesome-flow/core/abstract";
430
+ import { useFlowStore as useFlowStore2 } from "@awesome-flow/core/hooks";
430
431
  import { Fragment as Fragment5, jsx as jsx14 } from "react/jsx-runtime";
431
432
  function FlowEcsEdgeProxies(props) {
432
433
  const { nodesToConnect } = props;
433
- const context = useContext6(FlowContext2);
434
- const onConnect = context.useFlowStore((state) => state.onConnect);
434
+ const onConnect = useFlowStore2((state) => state.onConnect);
435
435
  const { ecsFlowRepository, entityRepository } = useContext6(EcsFlowContext);
436
436
  useEffect3(() => {
437
437
  for (const node of nodesToConnect) {
@@ -459,12 +459,11 @@ var flow_ecs_edge_proxies_default = FlowEcsEdgeProxies;
459
459
 
460
460
  // src/flow/flow-ecs-edge-modules.tsx
461
461
  import { useContext as useContext7, useEffect as useEffect4 } from "react";
462
- import { FlowContext as FlowContext3 } from "@awesome-flow/core/abstract";
462
+ import { useFlowStore as useFlowStore3 } from "@awesome-flow/core/hooks";
463
463
  import { Fragment as Fragment6, jsx as jsx15 } from "react/jsx-runtime";
464
464
  function FlowEcsEdgeModules(props) {
465
465
  const { nodesToConnect } = props;
466
- const context = useContext7(FlowContext3);
467
- const onConnect = context.useFlowStore((state) => state.onConnect);
466
+ const onConnect = useFlowStore3((state) => state.onConnect);
468
467
  const { ecsFlowRepository, entityRepository } = useContext7(EcsFlowContext);
469
468
  useEffect4(() => {
470
469
  for (const node of nodesToConnect) {
@@ -489,10 +488,10 @@ var flow_ecs_edge_modules_default = FlowEcsEdgeModules;
489
488
  // src/flow/flow-ecs-entities.tsx
490
489
  import { Fragment as Fragment7, jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
491
490
  function FlowEcsEntities() {
492
- const context = useContext8(FlowContext4);
493
- const addNodes = context.useFlowStore((state) => state.addNodes);
491
+ const { nodeFactory } = useContext8(FlowContext);
492
+ const addNodes = useFlowStore4((state) => state.addNodes);
494
493
  const { ecsFlowRepository, entityRepository } = useContext8(EcsFlowContext);
495
- const [entityNodes, setEntityNodes] = useState2([]);
494
+ const [entityNodes, setEntityNodes] = useState3([]);
496
495
  useEffect5(() => {
497
496
  const entities = entityRepository.listAll();
498
497
  const nodes = [];
@@ -500,7 +499,7 @@ function FlowEcsEntities() {
500
499
  if (ecsFlowRepository.getEntityNode(entity.myProxy)) {
501
500
  continue;
502
501
  }
503
- const node = context.nodeFactory.createNodeFromType("entity-node" /* entity */);
502
+ const node = nodeFactory.createNodeFromType("entity-node" /* entity */);
504
503
  node.data.entity = entity.myProxy;
505
504
  node.position = { x: 0, y: 0 };
506
505
  ecsFlowRepository.addEntityNode(node);
@@ -518,11 +517,12 @@ var flow_ecs_entities_default = FlowEcsEntities;
518
517
 
519
518
  // src/flow/flow-ecs-modules.tsx
520
519
  import { useEffect as useEffect6, useContext as useContext9 } from "react";
521
- import { FlowContext as FlowContext5 } from "@awesome-flow/core/abstract";
520
+ import { FlowContext as FlowContext2 } from "@awesome-flow/core/abstract";
521
+ import { useFlowStore as useFlowStore5 } from "@awesome-flow/core/hooks";
522
522
  import { Fragment as Fragment8, jsx as jsx17 } from "react/jsx-runtime";
523
523
  function FlowEcsModules() {
524
- const context = useContext9(FlowContext5);
525
- const addNodes = context.useFlowStore((state) => state.addNodes);
524
+ const { nodeFactory } = useContext9(FlowContext2);
525
+ const addNodes = useFlowStore5((state) => state.addNodes);
526
526
  const { ecsFlowRepository, systemsModuleRepository } = useContext9(EcsFlowContext);
527
527
  useEffect6(() => {
528
528
  const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);
@@ -532,9 +532,7 @@ function FlowEcsModules() {
532
532
  if (ecsFlowRepository.getSystemModuleNode(element)) {
533
533
  continue;
534
534
  }
535
- const node = context.nodeFactory.createNodeFromType(
536
- "systems-module-node" /* systemsModule */
537
- );
535
+ const node = nodeFactory.createNodeFromType("systems-module-node" /* systemsModule */);
538
536
  node.data.entityType = element;
539
537
  node.position = { x: 0, y: 0 };
540
538
  ecsFlowRepository.addSystemModuleNode(node);
@@ -551,12 +549,7 @@ var flow_ecs_modules_default = FlowEcsModules;
551
549
  // src/flow/flow-ecs-state.tsx
552
550
  import { Fragment as Fragment9, jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
553
551
  function FlowEcsState(props) {
554
- const [, setUpdates] = useState3(0);
555
- const [needsLayout, setNeedsLayout] = useState3(false);
556
- const { ecsFlowRepository } = useContext10(EcsFlowContext);
557
- useEffect7(() => {
558
- setNeedsLayout(true);
559
- }, [ecsFlowRepository.sizeNodes]);
552
+ const [, setUpdates] = useState4(0);
560
553
  useEffect7(() => {
561
554
  setInterval(() => {
562
555
  setUpdates((updates) => updates + 1);
@@ -565,10 +558,10 @@ function FlowEcsState(props) {
565
558
  return /* @__PURE__ */ jsxs10(Fragment9, { children: [
566
559
  props.showSystemModules && /* @__PURE__ */ jsx18(flow_ecs_modules_default, {}),
567
560
  props.showEntities && /* @__PURE__ */ jsx18(flow_ecs_entities_default, {}),
568
- props.autoLayout && /* @__PURE__ */ jsx18(flow_ecs_auto_layout_default, { needsLayout, setNeedsLayout })
561
+ props.autoLayout && /* @__PURE__ */ jsx18(flow_ecs_auto_layout_default, {})
569
562
  ] });
570
563
  }
571
- var flow_ecs_state_default = FlowEcsState;
564
+ var flow_ecs_state_default = memo9(FlowEcsState);
572
565
  export {
573
566
  EcsFlowContext,
574
567
  EcsFlowRepository,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-auto-layout.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\n\nexport type EcsFlowContextProps = {\n ecsFlowRepository: EcsFlowRepository;\n entityRepository: IEntityRepository;\n entityEventsManager: EntityEventsManager;\n entityUpdateCounter: IEntityUpdateCounter;\n systemsModuleRepository: ISystemsModuleRepository;\n};\n\nexport const EcsFlowContext = createContext<EcsFlowContextProps>(null);\n","import { IEntityProxy } from '@awesome-ecs/abstract/entities';\n\nexport class EcsIdGenerator {\n static entityProxy(proxy: IEntityProxy): string {\n return `${proxy.entityType}:${proxy.entityUid}`;\n }\n}\n","import { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\n\nexport class EcsFlowRepository {\n private nodes: Map<string, Node>;\n\n constructor() {\n this.nodes = new Map();\n }\n\n get sizeNodes(): number {\n return this.nodes.size;\n }\n\n addSystemModuleNode(node: Node<SystemsModuleNodeData>) {\n this.nodes.set(node.data.entityType.toString(), node);\n }\n\n getSystemModuleNode(entityType: EntityTypeUid): Node<SystemsModuleNodeData> {\n return this.nodes.get(entityType.toString()) as Node<SystemsModuleNodeData>;\n }\n\n addEntityNode(node: Node<EntityNodeData>) {\n this.nodes.set(EcsIdGenerator.entityProxy(node.data.entity), node);\n }\n\n getEntityNode(entity: IEntityProxy): Node<EntityNodeData> {\n return this.nodes.get(EcsIdGenerator.entityProxy(entity)) as Node<EntityNodeData>;\n }\n\n listAllNodes(): Node[] {\n return Array.from(this.nodes.values());\n }\n}\n","export enum EcsHandleDataType {\n proxy = 'proxy',\n module = 'module',\n}\n","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction SystemsModuleNode({ id, data, selected, type }: NodeProps<Node<SystemsModuleNodeData>>) {\n const { systemsModuleRepository } = useContext(EcsFlowContext);\n const module = systemsModuleRepository.get(data.entityType);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth color=\"indigo\" variant=\"transparent\">\n <CamelCaseFormatter value={data.entityType} />\n </Badge>\n }\n type={type}\n >\n <SystemsModuleLayout type={data.entityType} module={module} />\n </NodeContainer>\n );\n}\n\nexport default SystemsModuleNode;\n","import { EntityTypeUid, IEntity } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModule, ISystemsRuntimeContext, SystemType } from '@awesome-ecs/abstract/systems';\nimport { Accordion, Text } from '@mantine/core';\nimport { useMemo } from 'react';\nimport PipelineMiddlewareList from '../components/pipeline-middleware-list';\n\nexport type NodeSystemModuleProps = {\n type: EntityTypeUid;\n module: ISystemsModule<IEntity>;\n};\n\nfunction SystemsModuleLayout(props: Readonly<NodeSystemModuleProps>) {\n const { module } = props;\n\n const runtimeContext = module['runtimeContext'] as ISystemsRuntimeContext<IEntity>;\n const { systemContext } = runtimeContext;\n\n const { status } = useMemo(() => {\n return systemContext.runtime;\n }, [systemContext.runtime.status]);\n\n const init = runtimeContext.systemPipelines.get(SystemType.initialize);\n const update = runtimeContext.systemPipelines.get(SystemType.update);\n const render = runtimeContext.systemPipelines.get(SystemType.render);\n const sync = runtimeContext.systemPipelines.get(SystemType.sync);\n\n return (\n <>\n <Text>Status: {status}</Text>\n <Accordion>\n {init && <PipelineMiddlewareList pipeline={init} label=\"Initialize\" />}\n {update && <PipelineMiddlewareList pipeline={update} label=\"Update\" />}\n {render && <PipelineMiddlewareList pipeline={render} label=\"Render\" />}\n {sync && <PipelineMiddlewareList pipeline={sync} label=\"Sync\" />}\n </Accordion>\n </>\n );\n}\n\nexport default SystemsModuleLayout;\n","import { IMiddleware, IPipeline, IPipelineContext } from '@awesome-ecs/abstract/pipelines';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport BadgeList from './badge-list';\n\nexport type PipelineMiddlewareListProps = {\n pipeline: IPipeline<IPipelineContext>;\n label: string;\n};\n\nfunction PipelineMiddlewareList(props: Readonly<PipelineMiddlewareListProps>) {\n let middleware: IMiddleware<IPipelineContext>[] = [];\n\n if (props.pipeline) {\n middleware = props.pipeline['middleware'] as IMiddleware<IPipelineContext>[];\n }\n\n const components = middleware.map((m) => {\n return m.name || m.constructor.name;\n });\n\n return (\n <Accordion.Item key={props.label} value={props.label}>\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n {props.label}\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={components} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default PipelineMiddlewareList;\n","import { Badge, BadgeProps } from '@mantine/core';\nimport { memo } from 'react';\nimport FormatterCamelCase from './formatter-camel-case';\n\nexport type BadgeListProps = {\n items: (string | number)[];\n badge?: BadgeProps;\n};\n\nfunction BadgeList(props: Readonly<BadgeListProps>) {\n return props.items.map((value, i) => {\n return (\n <Badge key={i} {...(props.badge || [])}>\n <FormatterCamelCase value={value} />\n </Badge>\n );\n });\n}\n\nexport default memo(BadgeList);\n","import { memo, useMemo } from 'react';\n\nexport type CamelCaseFormatterProps = {\n value: string | number;\n};\n\nfunction CamelCaseFormatter(props: Readonly<CamelCaseFormatterProps>) {\n const value = useMemo(\n () => props.value?.toString().replace(/([a-z])([A-Z])/g, '$1 $2'),\n [props.value]\n );\n return value;\n}\n\nexport default memo(CamelCaseFormatter);\n","import { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction EntityNode({ id, data, selected, type }: NodeProps<Node<EntityNodeData>>) {\n const { entityRepository } = useContext(EcsFlowContext);\n const entity = useMemo(() => entityRepository.get(data.entity), [data.entity]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth variant=\"transparent\">\n <CamelCaseFormatter value={entity.myProxy.entityType} />\n </Badge>\n }\n type={type}\n >\n <EntityLayout entity={entity} />\n </NodeContainer>\n );\n}\n\nexport default EntityNode;\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Divider, Group } from '@mantine/core';\nimport EntityComponentList from '../components/entity-component-list';\nimport EntityProxyList from '../components/entity-proxy-list';\nimport EntitySubscriptionList from '../components/entity-subscription-list';\nimport EntityUpdateCounter from '../components/entity-update-counter';\n\nexport type NodeEntityProps = {\n entity: IEntity;\n};\n\nfunction EntityLayout({ entity }: Readonly<NodeEntityProps>) {\n return (\n <>\n <Group>\n <Badge variant=\"outline\" color=\"orange\">\n {entity.myProxy.entityUid}\n </Badge>\n <EntityUpdateCounter entityUid={entity.myProxy.entityUid} />\n </Group>\n <Divider my={5} />\n <Accordion>\n <EntityComponentList entity={entity} />\n <EntityProxyList entity={entity} />\n <EntitySubscriptionList entity={entity} />\n </Accordion>\n </>\n );\n}\n\nexport default EntityLayout;\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport EntityComponentInspector from './entity-component-inspector';\n\nexport type EntityComponentListProps = {\n entity: IEntity;\n};\n\nfunction EntityComponentList(props: Readonly<EntityComponentListProps>) {\n const components = Array.from(props.entity.components.values());\n\n return (\n <Accordion.Item key=\"components\" value=\"components\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n Components\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n {components.map((c, i) => (\n <EntityComponentInspector component={c} key={i} />\n ))}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityComponentList);\n","import { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\nimport ObjectInspector from './object-inspector';\n\nexport type EntityComponentInspectorProps = {\n component: IComponent;\n};\n\nfunction EntityComponentInspector(props: Readonly<EntityComponentInspectorProps>) {\n const [opened, { toggle }] = useDisclosure(false);\n\n const buttonColor = useMemo(() => (opened ? 'light' : 'indigo'), [opened]);\n\n return (\n <Box>\n <Button variant=\"outline\" size=\"xs\" onClick={toggle} color={buttonColor} fullWidth>\n {props.component.componentType}\n </Button>\n\n <Collapse in={opened}>{opened && <ObjectInspector data={props.component} />}</Collapse>\n </Box>\n );\n}\n\nexport default memo(EntityComponentInspector);\n","import { useComputedColorScheme } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { Inspector } from 'react-inspector';\n\nexport type ObjectInspectorProps = {\n data: any;\n};\n\nfunction ObjectInspector(props: Readonly<ObjectInspectorProps>) {\n const colorScheme = useComputedColorScheme();\n\n const theme = useMemo(\n () => (colorScheme === 'dark' ? 'chromeDark' : 'chromeLight'),\n [colorScheme]\n );\n\n return <Inspector table={false} theme={theme} data={props.data} />;\n}\n\nexport default memo(ObjectInspector);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\n\nexport type EntityProxyListProps = {\n entity: IEntity;\n};\n\nfunction EntityProxyList(props: Readonly<EntityProxyListProps>) {\n const proxies = Array.from(props.entity.proxies.values()).map((c) => c.values());\n const items = proxies.map((p) => Array.from(p).map((k) => EcsIdGenerator.entityProxy(k))).flat();\n\n return (\n <Accordion.Item key=\"proxies\" value=\"proxies\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={items.length}>\n Proxies\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={items} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityProxyList);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo, useContext } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntitySubscriptionListProps = {\n entity: IEntity;\n};\n\nfunction EntitySubscriptionList(props: Readonly<EntitySubscriptionListProps>) {\n const { entityEventsManager } = useContext(EcsFlowContext);\n const subscriptions = entityEventsManager.getSubscriptionsForEntity(props.entity.myProxy);\n\n return (\n <Accordion.Item key=\"subscriptions\" value=\"subscriptions\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={subscriptions.length}>\n Events\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={subscriptions} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntitySubscriptionList);\n","import { EntityUid } from '@awesome-ecs/abstract/entities';\nimport { Badge } from '@mantine/core';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntityUpdateCounterProps = {\n entityUid: EntityUid;\n};\n\nfunction EntityUpdateCounter(props: Readonly<EntityUpdateCounterProps>) {\n const [, setRefresh] = useState(0);\n\n const { entityUpdateCounter } = useContext(EcsFlowContext);\n\n const updates = entityUpdateCounter.getUpdateCount(props.entityUid) || 0;\n const removes = entityUpdateCounter.getRemoveCount(props.entityUid) || 0;\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRefresh((refresh) => refresh + 1);\n }, 1000);\n\n return () => {\n console.log('CLEAR INTERVAL');\n clearInterval(interval);\n };\n }, []);\n\n return (\n <>\n <Badge variant=\"light\">{updates}</Badge>\n <Badge variant=\"light\" color=\"orange\">\n {removes}\n </Badge>\n </>\n );\n}\n\nexport default memo(EntityUpdateCounter);\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class EntityNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<EntityNodeData> = {\n type: EcsNodeType.entity,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Entity',\n entity: null,\n },\n handles: [\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Left,\n connection: 'target',\n disabled: true,\n },\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Right,\n connection: 'source',\n disabled: true,\n },\n ],\n };\n}\n","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class SystemsModuleNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<SystemsModuleNodeData> = {\n type: EcsNodeType.systemsModule,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Systems Module',\n entityType: null,\n },\n handles: [\n {\n dataType: EcsHandleDataType.module,\n position: Position.Left,\n connection: 'target',\n disabled: true,\n },\n ],\n };\n}\n","import { NodeTypes } from '@xyflow/react';\nimport SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\nimport { EntityNodeTemplate } from '../templates/template-entity-node';\nimport { SystemsModuleNodeTemplate } from '../templates/template-systems-module';\n\nexport enum EcsNodeType {\n systemsModule = 'systems-module-node',\n entity = 'entity-node',\n}\n\nexport const ecsNodeTypes = {\n [EcsNodeType.systemsModule]: SystemsModuleNode,\n [EcsNodeType.entity]: EntityNode,\n} satisfies NodeTypes;\n\nexport const ecsNodeTemplates = {\n [EcsNodeType.entity]: new EntityNodeTemplate(),\n [EcsNodeType.systemsModule]: new SystemsModuleNodeTemplate(),\n};\n","import { useEffect, useContext, useState } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n const [needsLayout, setNeedsLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n useEffect(() => {\n setInterval(() => {\n setUpdates((updates) => updates + 1);\n }, 1000);\n }, []);\n\n return (\n <>\n {props.showSystemModules && <FlowEcsModules />}\n {props.showEntities && <FlowEcsEntities />}\n {props.autoLayout && (\n <FlowEcsAutoLayout needsLayout={needsLayout} setNeedsLayout={setNeedsLayout} />\n )}\n </>\n );\n}\n\nexport default FlowEcsState;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\n\nexport type EcsFlowAutoLayoutProps = {\n needsLayout: boolean;\n setNeedsLayout: (value: boolean) => void;\n};\n\nfunction FlowEcsAutoLayout(props: Readonly<EcsFlowAutoLayoutProps>) {\n const { getNodes, getEdges } = useReactFlow();\n\n const context = useContext(FlowContext);\n const setNodes = context.useFlowStore((state) => state.setNodes);\n\n const graph = useMemo(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);\n\n const getLayoutElements = useCallback(\n (nodes: Node[], edges: Edge[], options: GraphLabel) => {\n graph.setGraph(options);\n\n edges.forEach((edge) => graph.setEdge(edge.source, edge.target));\n nodes.forEach((node) => {\n if (node.measured) {\n graph.setNode(node.id, {\n width: node.measured.width,\n height: node.measured.height,\n });\n }\n });\n\n Dagre.layout(graph);\n\n return {\n nodes: nodes.map((node) => {\n const graphNode = graph.node(node.id);\n if (graphNode) {\n return { ...node, position: { x: graphNode.x, y: graphNode.y } };\n }\n\n return node;\n }),\n edges,\n };\n },\n [graph]\n );\n\n useEffect(() => {\n if (props.needsLayout) {\n const storeNodes = getNodes();\n\n if (storeNodes?.length) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n }\n }\n }, [props.needsLayout]);\n\n useEffect(() => {\n if (props.needsLayout) {\n props.setNeedsLayout(false);\n }\n });\n\n return <></>;\n}\n\nexport default FlowEcsAutoLayout;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsEntities() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n const [entityNodes, setEntityNodes] = useState<Node<EntityNodeData>[]>([]);\n\n useEffect(() => {\n const entities = entityRepository.listAll();\n const nodes = [];\n\n for (const entity of entities) {\n if (ecsFlowRepository.getEntityNode(entity.myProxy)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<EntityNodeData>(EcsNodeType.entity);\n\n node.data.entity = entity.myProxy;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addEntityNode(node);\n nodes.push(node);\n }\n\n setEntityNodes(nodes);\n addNodes(nodes);\n }, [entityRepository.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n for (const [, proxyMap] of entity.proxies) {\n for (const proxy of proxyMap.values()) {\n const proxyNode = ecsFlowRepository.getEntityNode(proxy);\n\n if (proxyNode) {\n const targetHandle = proxyNode.data.handles.find((h) => h.connection === 'target');\n\n onConnect({\n source: node.id,\n target: proxyNode.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);\n const targetHandle = systemModule?.data.handles.find((h) => h.connection === 'target');\n\n if (targetHandle) {\n onConnect({\n source: node.id,\n target: systemModule.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsModules() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);\n const keys = Array.from(modules.values()).map((v) => v[0]);\n\n const nodesToAdd = [];\n\n for (const element of keys) {\n if (ecsFlowRepository.getSystemModuleNode(element)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<SystemsModuleNodeData>(\n EcsNodeType.systemsModule\n );\n\n node.data.entityType = element;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addSystemModuleNode(node);\n nodesToAdd.push(node);\n }\n\n if (nodesToAdd.length) {\n addNodes(nodesToAdd);\n }\n }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","Badge","Accordion","useMemo","Badge","memo","memo","jsx","Badge","jsx","jsxs","useMemo","Accordion","jsx","Badge","NodeContainer","Badge","useContext","useMemo","Accordion","Badge","Accordion","Badge","Stack","memo","memo","useMemo","memo","useMemo","jsx","jsx","jsxs","useMemo","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","jsx","jsxs","Accordion","Badge","Stack","memo","Accordion","Badge","Stack","memo","useContext","jsx","jsxs","useContext","Accordion","Badge","Stack","memo","Badge","memo","useContext","Fragment","jsx","jsxs","useContext","Badge","memo","Fragment","jsx","jsxs","Badge","Accordion","jsx","useContext","useMemo","NodeContainer","Badge","EcsTemplateGroup","Position","Position","EcsNodeType","useEffect","useContext","useState","useContext","useEffect","useMemo","Fragment","jsx","FlowContext","useContext","useEffect","useState","useContext","useEffect","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","useContext","useEffect","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","Fragment","jsx","jsxs","useContext","FlowContext","useState","useEffect","useEffect","useContext","FlowContext","Fragment","jsx","useContext","FlowContext","useEffect","Fragment","jsx","jsxs","useState","useContext","useEffect"]}
1
+ {"version":3,"sources":["../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesome-flow/ecs",
3
- "version": "0.4.0",
3
+ "version": "0.5.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.4.0"
14
+ "@awesome-flow/core": "^0.5.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": "feaae12127ff404aada827d2a744d8c3c67d3c02"
72
+ "gitHead": "681320c7eb0167d0c9b97d42a0388875c17ae736"
73
73
  }