@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 +27 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +32 -39
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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
|
|
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(
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
539
|
-
const 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 =
|
|
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
|
|
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
|
|
571
|
-
const 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 =
|
|
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, {
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-auto-layout.tsx","../src/flow/flow-ecs-entities.tsx","../src/flow/flow-ecs-edge-proxies.tsx","../src/flow/flow-ecs-edge-modules.tsx","../src/flow/flow-ecs-modules.tsx"],"sourcesContent":["export * from './abstract/ecs-flow-context';\nexport * from './abstract/ecs-flow-repository';\nexport * from './abstract/handle-types';\nexport * from './abstract/node-types';\nexport * from './abstract/node-props';\nexport * from './abstract/templates';\n\nexport { default as FlowEcsState } from './flow/flow-ecs-state';\n\nexport { default as EntityNode } from './nodes/node-entity';\nexport { default as SystemsModuleNode } from './nodes/node-systems-module';\n\nexport * from './templates/template-entity-node';\nexport * from './templates/template-systems-module';\n\nexport * from './utils/entity-update-counter';\n","import { createContext } from 'react';\nimport { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModuleRepository } from '@awesome-ecs/abstract/systems';\nimport { EntityEventsManager } from '@awesome-ecs/core/entities';\nimport { EcsFlowRepository } from './ecs-flow-repository';\nimport { IEntityUpdateCounter } from '../utils/entity-update-counter';\n\nexport type EcsFlowContextProps = {\n ecsFlowRepository: EcsFlowRepository;\n entityRepository: IEntityRepository;\n entityEventsManager: EntityEventsManager;\n entityUpdateCounter: IEntityUpdateCounter;\n systemsModuleRepository: ISystemsModuleRepository;\n};\n\nexport const EcsFlowContext = createContext<EcsFlowContextProps>(null);\n","import { IEntityProxy } from '@awesome-ecs/abstract/entities';\n\nexport class EcsIdGenerator {\n static entityProxy(proxy: IEntityProxy): string {\n return `${proxy.entityType}:${proxy.entityUid}`;\n }\n}\n","import { Node } from '@xyflow/react';\nimport { EntityTypeUid, IEntityProxy } from '@awesome-ecs/abstract/entities';\nimport { EntityNodeData, SystemsModuleNodeData } from './node-props';\nimport { EcsIdGenerator } from '../utils/id-generator';\n\nexport class EcsFlowRepository {\n private nodes: Map<string, Node>;\n\n constructor() {\n this.nodes = new Map();\n }\n\n get sizeNodes(): number {\n return this.nodes.size;\n }\n\n addSystemModuleNode(node: Node<SystemsModuleNodeData>) {\n this.nodes.set(node.data.entityType.toString(), node);\n }\n\n getSystemModuleNode(entityType: EntityTypeUid): Node<SystemsModuleNodeData> {\n return this.nodes.get(entityType.toString()) as Node<SystemsModuleNodeData>;\n }\n\n addEntityNode(node: Node<EntityNodeData>) {\n this.nodes.set(EcsIdGenerator.entityProxy(node.data.entity), node);\n }\n\n getEntityNode(entity: IEntityProxy): Node<EntityNodeData> {\n return this.nodes.get(EcsIdGenerator.entityProxy(entity)) as Node<EntityNodeData>;\n }\n\n listAllNodes(): Node[] {\n return Array.from(this.nodes.values());\n }\n}\n","export enum EcsHandleDataType {\n proxy = 'proxy',\n module = 'module',\n}\n","/* eslint-disable max-classes-per-file */\nimport { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { useContext } from 'react';\nimport { Badge } from '@mantine/core';\nimport SystemsModuleLayout from '../layout/systems-module-layout';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction SystemsModuleNode({ id, data, selected, type }: NodeProps<Node<SystemsModuleNodeData>>) {\n const { systemsModuleRepository } = useContext(EcsFlowContext);\n const module = systemsModuleRepository.get(data.entityType);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth color=\"indigo\" variant=\"transparent\">\n <CamelCaseFormatter value={data.entityType} />\n </Badge>\n }\n type={type}\n >\n <SystemsModuleLayout type={data.entityType} module={module} />\n </NodeContainer>\n );\n}\n\nexport default SystemsModuleNode;\n","import { EntityTypeUid, IEntity } from '@awesome-ecs/abstract/entities';\nimport { ISystemsModule, ISystemsRuntimeContext, SystemType } from '@awesome-ecs/abstract/systems';\nimport { Accordion, Text } from '@mantine/core';\nimport { useMemo } from 'react';\nimport PipelineMiddlewareList from '../components/pipeline-middleware-list';\n\nexport type NodeSystemModuleProps = {\n type: EntityTypeUid;\n module: ISystemsModule<IEntity>;\n};\n\nfunction SystemsModuleLayout(props: Readonly<NodeSystemModuleProps>) {\n const { module } = props;\n\n const runtimeContext = module['runtimeContext'] as ISystemsRuntimeContext<IEntity>;\n const { systemContext } = runtimeContext;\n\n const { status } = useMemo(() => {\n return systemContext.runtime;\n }, [systemContext.runtime.status]);\n\n const init = runtimeContext.systemPipelines.get(SystemType.initialize);\n const update = runtimeContext.systemPipelines.get(SystemType.update);\n const render = runtimeContext.systemPipelines.get(SystemType.render);\n const sync = runtimeContext.systemPipelines.get(SystemType.sync);\n\n return (\n <>\n <Text>Status: {status}</Text>\n <Accordion>\n {init && <PipelineMiddlewareList pipeline={init} label=\"Initialize\" />}\n {update && <PipelineMiddlewareList pipeline={update} label=\"Update\" />}\n {render && <PipelineMiddlewareList pipeline={render} label=\"Render\" />}\n {sync && <PipelineMiddlewareList pipeline={sync} label=\"Sync\" />}\n </Accordion>\n </>\n );\n}\n\nexport default SystemsModuleLayout;\n","import { IMiddleware, IPipeline, IPipelineContext } from '@awesome-ecs/abstract/pipelines';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport BadgeList from './badge-list';\n\nexport type PipelineMiddlewareListProps = {\n pipeline: IPipeline<IPipelineContext>;\n label: string;\n};\n\nfunction PipelineMiddlewareList(props: Readonly<PipelineMiddlewareListProps>) {\n let middleware: IMiddleware<IPipelineContext>[] = [];\n\n if (props.pipeline) {\n middleware = props.pipeline['middleware'] as IMiddleware<IPipelineContext>[];\n }\n\n const components = middleware.map((m) => {\n return m.name || m.constructor.name;\n });\n\n return (\n <Accordion.Item key={props.label} value={props.label}>\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n {props.label}\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={components} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default PipelineMiddlewareList;\n","import { Badge, BadgeProps } from '@mantine/core';\nimport { memo } from 'react';\nimport FormatterCamelCase from './formatter-camel-case';\n\nexport type BadgeListProps = {\n items: (string | number)[];\n badge?: BadgeProps;\n};\n\nfunction BadgeList(props: Readonly<BadgeListProps>) {\n return props.items.map((value, i) => {\n return (\n <Badge key={i} {...(props.badge || [])}>\n <FormatterCamelCase value={value} />\n </Badge>\n );\n });\n}\n\nexport default memo(BadgeList);\n","import { memo, useMemo } from 'react';\n\nexport type CamelCaseFormatterProps = {\n value: string | number;\n};\n\nfunction CamelCaseFormatter(props: Readonly<CamelCaseFormatterProps>) {\n const value = useMemo(\n () => props.value?.toString().replace(/([a-z])([A-Z])/g, '$1 $2'),\n [props.value]\n );\n return value;\n}\n\nexport default memo(CamelCaseFormatter);\n","import { Node, NodeProps } from '@xyflow/react';\nimport { NodeContainer } from '@awesome-flow/core/layout';\nimport { Badge } from '@mantine/core';\nimport { useContext, useMemo } from 'react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport EntityLayout from '../layout/entity-layout';\nimport CamelCaseFormatter from '../components/formatter-camel-case';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction EntityNode({ id, data, selected, type }: NodeProps<Node<EntityNodeData>>) {\n const { entityRepository } = useContext(EcsFlowContext);\n const entity = useMemo(() => entityRepository.get(data.entity), [data.entity]);\n\n return (\n <NodeContainer\n id={id}\n selected={selected}\n data={data}\n title={\n <Badge fullWidth variant=\"transparent\">\n <CamelCaseFormatter value={entity.myProxy.entityType} />\n </Badge>\n }\n type={type}\n >\n <EntityLayout entity={entity} />\n </NodeContainer>\n );\n}\n\nexport default EntityNode;\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Divider, Group } from '@mantine/core';\nimport EntityComponentList from '../components/entity-component-list';\nimport EntityProxyList from '../components/entity-proxy-list';\nimport EntitySubscriptionList from '../components/entity-subscription-list';\nimport EntityUpdateCounter from '../components/entity-update-counter';\n\nexport type NodeEntityProps = {\n entity: IEntity;\n};\n\nfunction EntityLayout({ entity }: Readonly<NodeEntityProps>) {\n return (\n <>\n <Group>\n <Badge variant=\"outline\" color=\"orange\">\n {entity.myProxy.entityUid}\n </Badge>\n <EntityUpdateCounter entityUid={entity.myProxy.entityUid} />\n </Group>\n <Divider my={5} />\n <Accordion>\n <EntityComponentList entity={entity} />\n <EntityProxyList entity={entity} />\n <EntitySubscriptionList entity={entity} />\n </Accordion>\n </>\n );\n}\n\nexport default EntityLayout;\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport EntityComponentInspector from './entity-component-inspector';\n\nexport type EntityComponentListProps = {\n entity: IEntity;\n};\n\nfunction EntityComponentList(props: Readonly<EntityComponentListProps>) {\n const components = Array.from(props.entity.components.values());\n\n return (\n <Accordion.Item key=\"components\" value=\"components\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={components.length}>\n Components\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n {components.map((c, i) => (\n <EntityComponentInspector component={c} key={i} />\n ))}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityComponentList);\n","import { Box, Button, Collapse } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { IComponent } from '@awesome-ecs/abstract/components';\nimport { useDisclosure } from '@mantine/hooks';\nimport ObjectInspector from './object-inspector';\n\nexport type EntityComponentInspectorProps = {\n component: IComponent;\n};\n\nfunction EntityComponentInspector(props: Readonly<EntityComponentInspectorProps>) {\n const [opened, { toggle }] = useDisclosure(false);\n\n const buttonColor = useMemo(() => (opened ? 'light' : 'indigo'), [opened]);\n\n return (\n <Box>\n <Button variant=\"outline\" size=\"xs\" onClick={toggle} color={buttonColor} fullWidth>\n {props.component.componentType}\n </Button>\n\n <Collapse in={opened}>{opened && <ObjectInspector data={props.component} />}</Collapse>\n </Box>\n );\n}\n\nexport default memo(EntityComponentInspector);\n","import { useComputedColorScheme } from '@mantine/core';\nimport { memo, useMemo } from 'react';\nimport { Inspector } from 'react-inspector';\n\nexport type ObjectInspectorProps = {\n data: any;\n};\n\nfunction ObjectInspector(props: Readonly<ObjectInspectorProps>) {\n const colorScheme = useComputedColorScheme();\n\n const theme = useMemo(\n () => (colorScheme === 'dark' ? 'chromeDark' : 'chromeLight'),\n [colorScheme]\n );\n\n return <Inspector table={false} theme={theme} data={props.data} />;\n}\n\nexport default memo(ObjectInspector);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsIdGenerator } from '../utils/id-generator';\n\nexport type EntityProxyListProps = {\n entity: IEntity;\n};\n\nfunction EntityProxyList(props: Readonly<EntityProxyListProps>) {\n const proxies = Array.from(props.entity.proxies.values()).map((c) => c.values());\n const items = proxies.map((p) => Array.from(p).map((k) => EcsIdGenerator.entityProxy(k))).flat();\n\n return (\n <Accordion.Item key=\"proxies\" value=\"proxies\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={items.length}>\n Proxies\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={items} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntityProxyList);\n","import { IEntity } from '@awesome-ecs/abstract/entities';\nimport { Accordion, Badge, Stack } from '@mantine/core';\nimport { memo, useContext } from 'react';\nimport BadgeList from './badge-list';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntitySubscriptionListProps = {\n entity: IEntity;\n};\n\nfunction EntitySubscriptionList(props: Readonly<EntitySubscriptionListProps>) {\n const { entityEventsManager } = useContext(EcsFlowContext);\n const subscriptions = entityEventsManager.getSubscriptionsForEntity(props.entity.myProxy);\n\n return (\n <Accordion.Item key=\"subscriptions\" value=\"subscriptions\">\n <Accordion.Control>\n <Badge fullWidth variant=\"light\" rightSection={subscriptions.length}>\n Events\n </Badge>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n <BadgeList items={subscriptions} badge={{ variant: 'outline' }} />\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n );\n}\n\nexport default memo(EntitySubscriptionList);\n","import { EntityUid } from '@awesome-ecs/abstract/entities';\nimport { Badge } from '@mantine/core';\nimport { memo, useContext, useEffect, useState } from 'react';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type EntityUpdateCounterProps = {\n entityUid: EntityUid;\n};\n\nfunction EntityUpdateCounter(props: Readonly<EntityUpdateCounterProps>) {\n const [, setRefresh] = useState(0);\n\n const { entityUpdateCounter } = useContext(EcsFlowContext);\n\n const updates = entityUpdateCounter.getUpdateCount(props.entityUid) || 0;\n const removes = entityUpdateCounter.getRemoveCount(props.entityUid) || 0;\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRefresh((refresh) => refresh + 1);\n }, 1000);\n\n return () => {\n console.log('CLEAR INTERVAL');\n clearInterval(interval);\n };\n }, []);\n\n return (\n <>\n <Badge variant=\"light\">{updates}</Badge>\n <Badge variant=\"light\" color=\"orange\">\n {removes}\n </Badge>\n </>\n );\n}\n\nexport default memo(EntityUpdateCounter);\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class EntityNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<EntityNodeData> = {\n type: EcsNodeType.entity,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Entity',\n entity: null,\n },\n handles: [\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Left,\n connection: 'target',\n disabled: true,\n },\n {\n dataType: EcsHandleDataType.proxy,\n position: Position.Right,\n connection: 'source',\n disabled: true,\n },\n ],\n };\n}\n","export enum EcsTemplateGroup {\n ecs = 'ECS',\n}\n","import { ITemplateFactory, NodeTemplate } from '@awesome-flow/core/abstract';\nimport { Position } from '@xyflow/react';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsHandleDataType } from '../abstract/handle-types';\nimport { EcsTemplateGroup } from '../abstract/templates';\n\nexport class SystemsModuleNodeTemplate implements ITemplateFactory {\n readonly template: NodeTemplate<SystemsModuleNodeData> = {\n type: EcsNodeType.systemsModule,\n group: EcsTemplateGroup.ecs,\n data: {\n title: 'Systems Module',\n entityType: null,\n },\n handles: [\n {\n dataType: EcsHandleDataType.module,\n position: Position.Left,\n connection: 'target',\n disabled: true,\n },\n ],\n };\n}\n","import { NodeTypes } from '@xyflow/react';\nimport SystemsModuleNode from '../nodes/node-systems-module';\nimport EntityNode from '../nodes/node-entity';\nimport { EntityNodeTemplate } from '../templates/template-entity-node';\nimport { SystemsModuleNodeTemplate } from '../templates/template-systems-module';\n\nexport enum EcsNodeType {\n systemsModule = 'systems-module-node',\n entity = 'entity-node',\n}\n\nexport const ecsNodeTypes = {\n [EcsNodeType.systemsModule]: SystemsModuleNode,\n [EcsNodeType.entity]: EntityNode,\n} satisfies NodeTypes;\n\nexport const ecsNodeTemplates = {\n [EcsNodeType.entity]: new EntityNodeTemplate(),\n [EcsNodeType.systemsModule]: new SystemsModuleNodeTemplate(),\n};\n","import { useEffect, useContext, useState } from 'react';\nimport FlowEcsAutoLayout from './flow-ecs-auto-layout';\nimport FlowEcsEntities from './flow-ecs-entities';\nimport FlowEcsModules from './flow-ecs-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsStateProps = {\n showSystemModules: boolean;\n showEntities: boolean;\n autoLayout: boolean;\n};\n\nfunction FlowEcsState(props: Readonly<FlowEcsStateProps>) {\n const [, setUpdates] = useState(0);\n const [needsLayout, setNeedsLayout] = useState(false);\n\n const { ecsFlowRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n setNeedsLayout(true);\n }, [ecsFlowRepository.sizeNodes]);\n\n useEffect(() => {\n setInterval(() => {\n setUpdates((updates) => updates + 1);\n }, 1000);\n }, []);\n\n return (\n <>\n {props.showSystemModules && <FlowEcsModules />}\n {props.showEntities && <FlowEcsEntities />}\n {props.autoLayout && (\n <FlowEcsAutoLayout needsLayout={needsLayout} setNeedsLayout={setNeedsLayout} />\n )}\n </>\n );\n}\n\nexport default FlowEcsState;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport Dagre, { GraphLabel } from '@dagrejs/dagre';\nimport { Edge, Node, useReactFlow } from '@xyflow/react';\nimport { useCallback, useContext, useEffect, useMemo } from 'react';\n\nexport type EcsFlowAutoLayoutProps = {\n needsLayout: boolean;\n setNeedsLayout: (value: boolean) => void;\n};\n\nfunction FlowEcsAutoLayout(props: Readonly<EcsFlowAutoLayoutProps>) {\n const { getNodes, getEdges } = useReactFlow();\n\n const context = useContext(FlowContext);\n const setNodes = context.useFlowStore((state) => state.setNodes);\n\n const graph = useMemo(() => new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})), []);\n\n const getLayoutElements = useCallback(\n (nodes: Node[], edges: Edge[], options: GraphLabel) => {\n graph.setGraph(options);\n\n edges.forEach((edge) => graph.setEdge(edge.source, edge.target));\n nodes.forEach((node) => {\n if (node.measured) {\n graph.setNode(node.id, {\n width: node.measured.width,\n height: node.measured.height,\n });\n }\n });\n\n Dagre.layout(graph);\n\n return {\n nodes: nodes.map((node) => {\n const graphNode = graph.node(node.id);\n if (graphNode) {\n return { ...node, position: { x: graphNode.x, y: graphNode.y } };\n }\n\n return node;\n }),\n edges,\n };\n },\n [graph]\n );\n\n useEffect(() => {\n if (props.needsLayout) {\n const storeNodes = getNodes();\n\n if (storeNodes?.length) {\n const edges = getEdges();\n const layout = getLayoutElements(storeNodes, edges, {\n rankdir: 'LR',\n });\n\n setNodes(layout.nodes);\n }\n }\n }, [props.needsLayout]);\n\n useEffect(() => {\n if (props.needsLayout) {\n props.setNeedsLayout(false);\n }\n });\n\n return <></>;\n}\n\nexport default FlowEcsAutoLayout;\n","import { FlowContext } from '@awesome-flow/core/abstract';\nimport { useContext, useEffect, useState } from 'react';\nimport { Node } from '@xyflow/react';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport FlowEcsEdgeProxies from './flow-ecs-edge-proxies';\nimport FlowEcsEdgeModules from './flow-ecs-edge-modules';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsEntities() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n const [entityNodes, setEntityNodes] = useState<Node<EntityNodeData>[]>([]);\n\n useEffect(() => {\n const entities = entityRepository.listAll();\n const nodes = [];\n\n for (const entity of entities) {\n if (ecsFlowRepository.getEntityNode(entity.myProxy)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<EntityNodeData>(EcsNodeType.entity);\n\n node.data.entity = entity.myProxy;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addEntityNode(node);\n nodes.push(node);\n }\n\n setEntityNodes(nodes);\n addNodes(nodes);\n }, [entityRepository.size]);\n\n return (\n <>\n <FlowEcsEdgeProxies nodesToConnect={entityNodes} />\n <FlowEcsEdgeModules nodesToConnect={entityNodes} />\n </>\n );\n}\n\nexport default FlowEcsEntities;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeProxies(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n for (const [, proxyMap] of entity.proxies) {\n for (const proxy of proxyMap.values()) {\n const proxyNode = ecsFlowRepository.getEntityNode(proxy);\n\n if (proxyNode) {\n const targetHandle = proxyNode.data.handles.find((h) => h.connection === 'target');\n\n onConnect({\n source: node.id,\n target: proxyNode.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeProxies;\n","import { Node } from '@xyflow/react';\nimport { useContext, useEffect } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { EntityNodeData } from '../abstract/node-props';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nexport type FlowEcsEdgeProxiesProps = {\n nodesToConnect: Node<EntityNodeData>[];\n};\n\nfunction FlowEcsEdgeModules(props: Readonly<FlowEcsEdgeProxiesProps>) {\n const { nodesToConnect } = props;\n\n const context = useContext(FlowContext);\n const onConnect = context.useFlowStore((state: { onConnect: any }) => state.onConnect);\n\n const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n for (const node of nodesToConnect) {\n const sourceHandle = node.data.handles.find((h) => h.connection === 'source');\n const entity = entityRepository.get(node.data.entity);\n\n const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);\n const targetHandle = systemModule?.data.handles.find((h) => h.connection === 'target');\n\n if (targetHandle) {\n onConnect({\n source: node.id,\n target: systemModule.id,\n sourceHandle: sourceHandle.id,\n targetHandle: targetHandle.id,\n });\n }\n }\n }, [nodesToConnect]);\n\n return <></>;\n}\n\nexport default FlowEcsEdgeModules;\n","import { useEffect, useContext } from 'react';\nimport { FlowContext } from '@awesome-flow/core/abstract';\nimport { SystemsModuleNodeData } from '../abstract/node-props';\nimport { EcsNodeType } from '../abstract/node-types';\nimport { EcsFlowContext } from '../abstract/ecs-flow-context';\n\nfunction FlowEcsModules() {\n const context = useContext(FlowContext);\n const addNodes = context.useFlowStore((state) => state.addNodes);\n\n const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);\n\n useEffect(() => {\n const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);\n const keys = Array.from(modules.values()).map((v) => v[0]);\n\n const nodesToAdd = [];\n\n for (const element of keys) {\n if (ecsFlowRepository.getSystemModuleNode(element)) {\n continue;\n }\n\n const node = context.nodeFactory.createNodeFromType<SystemsModuleNodeData>(\n EcsNodeType.systemsModule\n );\n\n node.data.entityType = element;\n node.position = { x: 0, y: 0 };\n\n ecsFlowRepository.addSystemModuleNode(node);\n nodesToAdd.push(node);\n }\n\n if (nodesToAdd.length) {\n addNodes(nodesToAdd);\n }\n }, [systemsModuleRepository.size]);\n\n return <></>;\n}\n\nexport default FlowEcsModules;\n"],"mappings":"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","names":["EcsHandleDataType","import_react","import_core","import_core","import_react","import_core","import_react","import_react","import_jsx_runtime","import_jsx_runtime","module","import_jsx_runtime","module","import_layout","import_core","import_react","import_core","import_core","import_react","import_core","import_react","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_core","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EcsTemplateGroup","import_react","EcsNodeType","import_react","import_react","import_jsx_runtime","Dagre","import_abstract","import_react","import_react","import_abstract","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime","import_react","import_abstract","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/abstract/ecs-flow-context.ts","../src/utils/id-generator.ts","../src/abstract/ecs-flow-repository.ts","../src/abstract/handle-types.ts","../src/nodes/node-systems-module.tsx","../src/layout/systems-module-layout.tsx","../src/components/pipeline-middleware-list.tsx","../src/components/badge-list.tsx","../src/components/formatter-camel-case.tsx","../src/nodes/node-entity.tsx","../src/layout/entity-layout.tsx","../src/components/entity-component-list.tsx","../src/components/entity-component-inspector.tsx","../src/components/object-inspector.tsx","../src/components/entity-proxy-list.tsx","../src/components/entity-subscription-list.tsx","../src/components/entity-update-counter.tsx","../src/templates/template-entity-node.ts","../src/abstract/templates.ts","../src/templates/template-systems-module.ts","../src/abstract/node-types.ts","../src/flow/flow-ecs-state.tsx","../src/flow/flow-ecs-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,
|
|
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 {
|
|
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(
|
|
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
|
|
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 (
|
|
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
|
|
425
|
-
import { useContext as useContext8, useEffect as useEffect5, useState as
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
493
|
-
const addNodes =
|
|
491
|
+
const { nodeFactory } = useContext8(FlowContext);
|
|
492
|
+
const addNodes = useFlowStore4((state) => state.addNodes);
|
|
494
493
|
const { ecsFlowRepository, entityRepository } = useContext8(EcsFlowContext);
|
|
495
|
-
const [entityNodes, setEntityNodes] =
|
|
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 =
|
|
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
|
|
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
|
|
525
|
-
const 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 =
|
|
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] =
|
|
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, {
|
|
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.
|
|
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.
|
|
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": "
|
|
72
|
+
"gitHead": "681320c7eb0167d0c9b97d42a0388875c17ae736"
|
|
73
73
|
}
|