@awesome-flow/ecs 0.11.0 → 0.14.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.
Files changed (85) hide show
  1. package/dist/canvas/index.cjs +5 -0
  2. package/dist/canvas/index.d.cts +2 -0
  3. package/dist/canvas/index.d.mts +2 -0
  4. package/dist/canvas/index.mjs +3 -0
  5. package/dist/canvas-C4nDXlkK.mjs +677 -0
  6. package/dist/canvas-C4nDXlkK.mjs.map +1 -0
  7. package/dist/canvas-DlWcWu05.cjs +688 -0
  8. package/dist/canvas-DlWcWu05.cjs.map +1 -0
  9. package/dist/context/index.cjs +497 -0
  10. package/dist/context/index.cjs.map +1 -0
  11. package/dist/context/index.d.cts +2 -0
  12. package/dist/context/index.d.mts +2 -0
  13. package/dist/context/index.mjs +492 -0
  14. package/dist/context/index.mjs.map +1 -0
  15. package/dist/entity-component-inspector-CNaN8Scf.mjs +79 -0
  16. package/dist/entity-component-inspector-CNaN8Scf.mjs.map +1 -0
  17. package/dist/entity-component-inspector-VlwcaUqy.cjs +90 -0
  18. package/dist/entity-component-inspector-VlwcaUqy.cjs.map +1 -0
  19. package/dist/hooks/index.cjs +19 -0
  20. package/dist/hooks/index.d.cts +2 -0
  21. package/dist/hooks/index.d.mts +2 -0
  22. package/dist/hooks/index.mjs +3 -0
  23. package/dist/id-generator-C2_8g29M.cjs +45 -0
  24. package/dist/id-generator-C2_8g29M.cjs.map +1 -0
  25. package/dist/id-generator-DDsv3NdX.mjs +34 -0
  26. package/dist/id-generator-DDsv3NdX.mjs.map +1 -0
  27. package/dist/index-B9WbxxFC.d.mts +67 -0
  28. package/dist/index-B9WbxxFC.d.mts.map +1 -0
  29. package/dist/index-BTs_8SY-.d.cts +20 -0
  30. package/dist/index-BTs_8SY-.d.cts.map +1 -0
  31. package/dist/index-C-TDFHpq.d.mts +54 -0
  32. package/dist/index-C-TDFHpq.d.mts.map +1 -0
  33. package/dist/index-CNCqWBLh.d.cts +54 -0
  34. package/dist/index-CNCqWBLh.d.cts.map +1 -0
  35. package/dist/index-CyeezgDI.d.mts +20 -0
  36. package/dist/index-CyeezgDI.d.mts.map +1 -0
  37. package/dist/index-D9zIjQH9.d.mts +1 -0
  38. package/dist/index-DCOd7jg-.d.mts +99 -0
  39. package/dist/index-DCOd7jg-.d.mts.map +1 -0
  40. package/dist/index-DGjpWDlm.d.cts +99 -0
  41. package/dist/index-DGjpWDlm.d.cts.map +1 -0
  42. package/dist/index-DLoAMD9J.d.cts +1 -0
  43. package/dist/index-YNgbjS9S.d.cts +159 -0
  44. package/dist/index-YNgbjS9S.d.cts.map +1 -0
  45. package/dist/index-_BgjSgkQ.d.mts +159 -0
  46. package/dist/index-_BgjSgkQ.d.mts.map +1 -0
  47. package/dist/index-t3_yRTa6.d.cts +67 -0
  48. package/dist/index-t3_yRTa6.d.cts.map +1 -0
  49. package/dist/index.cjs +55 -531
  50. package/dist/index.d.cts +9 -106
  51. package/dist/index.d.mts +9 -106
  52. package/dist/index.mjs +10 -520
  53. package/dist/inspectors/index.cjs +6 -0
  54. package/dist/inspectors/index.d.cts +2 -0
  55. package/dist/inspectors/index.d.mts +2 -0
  56. package/dist/inspectors/index.mjs +3 -0
  57. package/dist/node-props-BtAkmdqr.d.mts +45 -0
  58. package/dist/node-props-BtAkmdqr.d.mts.map +1 -0
  59. package/dist/node-props-DkuSwMA0.d.cts +45 -0
  60. package/dist/node-props-DkuSwMA0.d.cts.map +1 -0
  61. package/dist/node-systems-module-CPDV8u8O.d.mts +22 -0
  62. package/dist/node-systems-module-CPDV8u8O.d.mts.map +1 -0
  63. package/dist/node-systems-module-CzkoMbdF.d.cts +22 -0
  64. package/dist/node-systems-module-CzkoMbdF.d.cts.map +1 -0
  65. package/dist/node-types-BRcpbaeR.mjs +1604 -0
  66. package/dist/node-types-BRcpbaeR.mjs.map +1 -0
  67. package/dist/node-types-D_NfbsUT.cjs +1819 -0
  68. package/dist/node-types-D_NfbsUT.cjs.map +1 -0
  69. package/dist/nodes/index.cjs +10 -0
  70. package/dist/nodes/index.d.cts +3 -0
  71. package/dist/nodes/index.d.mts +3 -0
  72. package/dist/nodes/index.mjs +3 -0
  73. package/dist/template-tool-nodes-B7sT2iRc.d.cts +35 -0
  74. package/dist/template-tool-nodes-B7sT2iRc.d.cts.map +1 -0
  75. package/dist/template-tool-nodes-BwavFwMh.d.mts +35 -0
  76. package/dist/template-tool-nodes-BwavFwMh.d.mts.map +1 -0
  77. package/dist/templates/index.cjs +11 -0
  78. package/dist/templates/index.d.cts +2 -0
  79. package/dist/templates/index.d.mts +2 -0
  80. package/dist/templates/index.mjs +3 -0
  81. package/package.json +85 -25
  82. package/dist/index.cjs.map +0 -1
  83. package/dist/index.d.cts.map +0 -1
  84. package/dist/index.d.mts.map +0 -1
  85. package/dist/index.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,520 +1,10 @@
1
- import { createContext, memo, useContext, useEffect, useMemo, useState } from "react";
2
- import { NodeContainer } from "@awesome-flow/core/layout";
3
- import { Accordion, Badge, Box, Button, Collapse, Divider, Group, Stack, Text, useComputedColorScheme } from "@mantine/core";
4
- import { useDisclosure } from "@mantine/hooks";
5
- import { Inspector } from "react-inspector";
6
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
- import { SystemType } from "@awesome-ecs/abstract/systems";
8
- import { Position } from "@xyflow/react";
9
- import { FlowAutoLayout } from "@awesome-flow/core/canvas";
10
- import { FlowContext } from "@awesome-flow/core/abstract";
11
- import { useFlowStore } from "@awesome-flow/core/hooks";
12
-
13
- //#region src/abstract/ecs-flow-context.ts
14
- const EcsFlowContext = createContext(null);
15
-
16
- //#endregion
17
- //#region src/utils/id-generator.ts
18
- var EcsIdGenerator = class {
19
- static entityProxy(proxy) {
20
- return `${proxy.entityType}:${proxy.entityUid}`;
21
- }
22
- };
23
-
24
- //#endregion
25
- //#region src/abstract/ecs-flow-repository.ts
26
- var EcsFlowRepository = class {
27
- nodes;
28
- constructor() {
29
- this.nodes = /* @__PURE__ */ new Map();
30
- }
31
- get sizeNodes() {
32
- return this.nodes.size;
33
- }
34
- addSystemModuleNode(node) {
35
- this.nodes.set(node.data.entityType.toString(), node);
36
- }
37
- getSystemModuleNode(entityType) {
38
- return this.nodes.get(entityType.toString());
39
- }
40
- addEntityNode(node) {
41
- this.nodes.set(EcsIdGenerator.entityProxy(node.data.entity), node);
42
- }
43
- getEntityNode(entity) {
44
- return this.nodes.get(EcsIdGenerator.entityProxy(entity));
45
- }
46
- listAllNodes() {
47
- return Array.from(this.nodes.values());
48
- }
49
- };
50
-
51
- //#endregion
52
- //#region src/abstract/handle-types.ts
53
- let EcsHandleDataType = /* @__PURE__ */ function(EcsHandleDataType) {
54
- EcsHandleDataType["proxy"] = "proxy";
55
- EcsHandleDataType["module"] = "module";
56
- return EcsHandleDataType;
57
- }({});
58
-
59
- //#endregion
60
- //#region src/components/formatter-camel-case.tsx
61
- function CamelCaseFormatter(props) {
62
- return useMemo(() => props.value?.toString().replace(/([a-z])([A-Z])/g, "$1 $2"), [props.value]);
63
- }
64
- var formatter_camel_case_default = memo(CamelCaseFormatter);
65
-
66
- //#endregion
67
- //#region src/components/object-inspector.tsx
68
- function ObjectInspector(props) {
69
- const colorScheme = useComputedColorScheme();
70
- return /* @__PURE__ */ jsx(Inspector, {
71
- table: false,
72
- theme: useMemo(() => colorScheme === "dark" ? "chromeDark" : "chromeLight", [colorScheme]),
73
- data: props.data
74
- });
75
- }
76
- var object_inspector_default = memo(ObjectInspector);
77
-
78
- //#endregion
79
- //#region src/components/entity-component-inspector.tsx
80
- function EntityComponentInspector(props) {
81
- const [opened, { toggle }] = useDisclosure(false);
82
- return /* @__PURE__ */ jsxs(Box, { children: [/* @__PURE__ */ jsx(Button, {
83
- variant: "outline",
84
- size: "xs",
85
- onClick: toggle,
86
- color: useMemo(() => opened ? "light" : "indigo", [opened]),
87
- fullWidth: true,
88
- children: props.component.componentType
89
- }), /* @__PURE__ */ jsx(Collapse, {
90
- in: opened,
91
- children: opened && /* @__PURE__ */ jsx(object_inspector_default, { data: props.component })
92
- })] });
93
- }
94
- var entity_component_inspector_default = memo(EntityComponentInspector);
95
-
96
- //#endregion
97
- //#region src/components/entity-component-list.tsx
98
- function EntityComponentList(props) {
99
- const components = Array.from(props.entity.components.values());
100
- return /* @__PURE__ */ jsxs(Accordion.Item, {
101
- value: "components",
102
- children: [/* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Badge, {
103
- fullWidth: true,
104
- variant: "light",
105
- rightSection: components.length,
106
- children: "Components"
107
- }) }), /* @__PURE__ */ jsx(Accordion.Panel, { children: /* @__PURE__ */ jsx(Stack, { children: components.map((c, i) => /* @__PURE__ */ jsx(entity_component_inspector_default, { component: c }, i)) }) })]
108
- }, "components");
109
- }
110
- var entity_component_list_default = memo(EntityComponentList);
111
-
112
- //#endregion
113
- //#region src/components/badge-list.tsx
114
- function BadgeList(props) {
115
- return props.items.map((value, i) => {
116
- return /* @__PURE__ */ jsx(Badge, {
117
- ...props.badge || [],
118
- children: /* @__PURE__ */ jsx(formatter_camel_case_default, { value })
119
- }, i);
120
- });
121
- }
122
- var badge_list_default = memo(BadgeList);
123
-
124
- //#endregion
125
- //#region src/components/entity-proxy-list.tsx
126
- function EntityProxyList(props) {
127
- const { entityProxyRepository } = useContext(EcsFlowContext);
128
- const items = Array.from(entityProxyRepository.getAll(props.entity.myProxy).values()).flat().map((p) => EcsIdGenerator.entityProxy(p));
129
- return /* @__PURE__ */ jsxs(Accordion.Item, {
130
- value: "proxies",
131
- children: [/* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Badge, {
132
- fullWidth: true,
133
- variant: "light",
134
- rightSection: items.length,
135
- children: "Proxies"
136
- }) }), /* @__PURE__ */ jsx(Accordion.Panel, { children: /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(badge_list_default, {
137
- items,
138
- badge: { variant: "outline" }
139
- }) }) })]
140
- }, "proxies");
141
- }
142
- var entity_proxy_list_default = memo(EntityProxyList);
143
-
144
- //#endregion
145
- //#region src/components/entity-subscription-list.tsx
146
- function EntitySubscriptionList(props) {
147
- const { entityEventsManager } = useContext(EcsFlowContext);
148
- const subscriptions = entityEventsManager.getSubscriptionsForEntity(props.entity.myProxy);
149
- return /* @__PURE__ */ jsxs(Accordion.Item, {
150
- value: "subscriptions",
151
- children: [/* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Badge, {
152
- fullWidth: true,
153
- variant: "light",
154
- rightSection: subscriptions.length,
155
- children: "Events"
156
- }) }), /* @__PURE__ */ jsx(Accordion.Panel, { children: /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(badge_list_default, {
157
- items: subscriptions,
158
- badge: { variant: "outline" }
159
- }) }) })]
160
- }, "subscriptions");
161
- }
162
- var entity_subscription_list_default = memo(EntitySubscriptionList);
163
-
164
- //#endregion
165
- //#region src/components/entity-update-counter.tsx
166
- function EntityUpdateCounter(props) {
167
- const [, setRefresh] = useState(0);
168
- const { entityUpdateCounter } = useContext(EcsFlowContext);
169
- const updates = entityUpdateCounter.getUpdateCount(props.entityUid) || 0;
170
- const removes = entityUpdateCounter.getRemoveCount(props.entityUid) || 0;
171
- useEffect(() => {
172
- const interval = setInterval(() => {
173
- setRefresh((refresh) => refresh + 1);
174
- }, 1e3);
175
- return () => {
176
- clearInterval(interval);
177
- };
178
- }, []);
179
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Badge, {
180
- variant: "light",
181
- children: updates
182
- }), /* @__PURE__ */ jsx(Badge, {
183
- variant: "light",
184
- color: "orange",
185
- children: removes
186
- })] });
187
- }
188
- var entity_update_counter_default = memo(EntityUpdateCounter);
189
-
190
- //#endregion
191
- //#region src/layout/entity-layout.tsx
192
- function EntityLayout({ entity }) {
193
- return /* @__PURE__ */ jsxs(Fragment, { children: [
194
- /* @__PURE__ */ jsxs(Group, { children: [/* @__PURE__ */ jsx(Badge, {
195
- variant: "outline",
196
- color: "orange",
197
- children: entity.myProxy.entityUid
198
- }), /* @__PURE__ */ jsx(entity_update_counter_default, { entityUid: entity.myProxy.entityUid })] }),
199
- /* @__PURE__ */ jsx(Divider, { my: 5 }),
200
- /* @__PURE__ */ jsxs(Accordion, { children: [
201
- /* @__PURE__ */ jsx(entity_component_list_default, { entity }),
202
- /* @__PURE__ */ jsx(entity_proxy_list_default, { entity }),
203
- /* @__PURE__ */ jsx(entity_subscription_list_default, { entity })
204
- ] })
205
- ] });
206
- }
207
-
208
- //#endregion
209
- //#region src/nodes/node-entity.tsx
210
- function EntityNode({ id, data, selected, type }) {
211
- const { entityRepository } = useContext(EcsFlowContext);
212
- const entity = useMemo(() => entityRepository.get(data.entity), [data.entity, entityRepository]);
213
- return /* @__PURE__ */ jsx(NodeContainer, {
214
- id,
215
- selected,
216
- data,
217
- title: /* @__PURE__ */ jsx(Badge, {
218
- fullWidth: true,
219
- variant: "transparent",
220
- children: /* @__PURE__ */ jsx(formatter_camel_case_default, { value: entity.myProxy.entityType })
221
- }),
222
- type,
223
- children: /* @__PURE__ */ jsx(EntityLayout, { entity })
224
- });
225
- }
226
-
227
- //#endregion
228
- //#region src/components/pipeline-middleware-list.tsx
229
- function PipelineMiddlewareList(props) {
230
- let middleware = [];
231
- if (props.pipeline) middleware = props.pipeline["middleware"];
232
- const components = middleware.map((m) => {
233
- return m.name || m.constructor.name;
234
- });
235
- return /* @__PURE__ */ jsxs(Accordion.Item, {
236
- value: props.label,
237
- children: [/* @__PURE__ */ jsx(Accordion.Control, { children: /* @__PURE__ */ jsx(Badge, {
238
- fullWidth: true,
239
- variant: "light",
240
- rightSection: components.length,
241
- children: props.label
242
- }) }), /* @__PURE__ */ jsx(Accordion.Panel, { children: /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(badge_list_default, {
243
- items: components,
244
- badge: { variant: "outline" }
245
- }) }) })]
246
- }, props.label);
247
- }
248
-
249
- //#endregion
250
- //#region src/layout/systems-module-layout.tsx
251
- function SystemsModuleLayout(props) {
252
- const { module } = props;
253
- const { systemContext, systemsModule } = module["runtimeContext"];
254
- const error = systemContext.runtime.error;
255
- const init = systemsModule.pipelines.get(SystemType.initialize);
256
- const update = systemsModule.pipelines.get(SystemType.update);
257
- const render = systemsModule.pipelines.get(SystemType.render);
258
- const sync = systemsModule.pipelines.get(SystemType.sync);
259
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Text, { children: ["Error?: ", error] }), /* @__PURE__ */ jsxs(Accordion, { children: [
260
- init && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
261
- pipeline: init,
262
- label: "Initialize"
263
- }),
264
- update && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
265
- pipeline: update,
266
- label: "Update"
267
- }),
268
- render && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
269
- pipeline: render,
270
- label: "Render"
271
- }),
272
- sync && /* @__PURE__ */ jsx(PipelineMiddlewareList, {
273
- pipeline: sync,
274
- label: "Sync"
275
- })
276
- ] })] });
277
- }
278
-
279
- //#endregion
280
- //#region src/nodes/node-systems-module.tsx
281
- function SystemsModuleNode({ id, data, selected, type }) {
282
- const { systemsModuleRepository } = useContext(EcsFlowContext);
283
- const module = systemsModuleRepository.get(data.entityType);
284
- return /* @__PURE__ */ jsx(NodeContainer, {
285
- id,
286
- selected,
287
- data,
288
- title: /* @__PURE__ */ jsx(Badge, {
289
- fullWidth: true,
290
- color: "indigo",
291
- variant: "transparent",
292
- children: /* @__PURE__ */ jsx(formatter_camel_case_default, { value: data.entityType })
293
- }),
294
- type,
295
- children: /* @__PURE__ */ jsx(SystemsModuleLayout, {
296
- type: data.entityType,
297
- module
298
- })
299
- });
300
- }
301
-
302
- //#endregion
303
- //#region src/abstract/templates.ts
304
- let EcsTemplateGroup = /* @__PURE__ */ function(EcsTemplateGroup) {
305
- EcsTemplateGroup["ecs"] = "ECS";
306
- return EcsTemplateGroup;
307
- }({});
308
-
309
- //#endregion
310
- //#region src/templates/template-entity-node.ts
311
- var EntityNodeTemplate = class {
312
- template = {
313
- type: EcsNodeType.entity,
314
- group: EcsTemplateGroup.ecs,
315
- data: {
316
- title: "Entity",
317
- entity: null
318
- },
319
- handles: [{
320
- dataType: EcsHandleDataType.proxy,
321
- position: Position.Left,
322
- connection: "target",
323
- disabled: true
324
- }, {
325
- dataType: EcsHandleDataType.proxy,
326
- position: Position.Right,
327
- connection: "source",
328
- disabled: true
329
- }]
330
- };
331
- };
332
-
333
- //#endregion
334
- //#region src/templates/template-systems-module.ts
335
- var SystemsModuleNodeTemplate = class {
336
- template = {
337
- type: EcsNodeType.systemsModule,
338
- group: EcsTemplateGroup.ecs,
339
- data: {
340
- title: "Systems Module",
341
- entityType: null
342
- },
343
- handles: [{
344
- dataType: EcsHandleDataType.module,
345
- position: Position.Left,
346
- connection: "target",
347
- disabled: true
348
- }]
349
- };
350
- };
351
-
352
- //#endregion
353
- //#region src/abstract/node-types.ts
354
- let EcsNodeType = /* @__PURE__ */ function(EcsNodeType) {
355
- EcsNodeType["systemsModule"] = "systems-module-node";
356
- EcsNodeType["entity"] = "entity-node";
357
- return EcsNodeType;
358
- }({});
359
- const ecsNodeTypes = {
360
- [EcsNodeType.systemsModule]: SystemsModuleNode,
361
- [EcsNodeType.entity]: EntityNode
362
- };
363
- const ecsNodeTemplates = {
364
- [EcsNodeType.entity]: new EntityNodeTemplate(),
365
- [EcsNodeType.systemsModule]: new SystemsModuleNodeTemplate()
366
- };
367
-
368
- //#endregion
369
- //#region src/flow/flow-ecs-edge-modules.tsx
370
- function FlowEcsEdgeModules(props) {
371
- const { nodesToConnect } = props;
372
- const onConnect = useFlowStore((state) => state.onConnect);
373
- const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);
374
- useEffect(() => {
375
- for (const node of nodesToConnect) {
376
- const sourceHandle = node.data.handles.find((h) => h.connection === "source");
377
- const entity = entityRepository.get(node.data.entity);
378
- const systemModule = ecsFlowRepository.getSystemModuleNode(entity.myProxy.entityType);
379
- const targetHandle = systemModule?.data.handles.find((h) => h.connection === "target");
380
- if (targetHandle) onConnect({
381
- source: node.id,
382
- target: systemModule.id,
383
- sourceHandle: sourceHandle.handleId,
384
- targetHandle: targetHandle.handleId
385
- });
386
- }
387
- }, [
388
- nodesToConnect,
389
- ecsFlowRepository,
390
- entityRepository,
391
- onConnect
392
- ]);
393
- return /* @__PURE__ */ jsx(Fragment, {});
394
- }
395
-
396
- //#endregion
397
- //#region src/flow/flow-ecs-edge-proxies.tsx
398
- function FlowEcsEdgeProxies(props) {
399
- const { nodesToConnect } = props;
400
- const onConnect = useFlowStore((state) => state.onConnect);
401
- const { ecsFlowRepository, entityProxyRepository, entityRepository } = useContext(EcsFlowContext);
402
- useEffect(() => {
403
- for (const node of nodesToConnect) {
404
- const sourceHandle = node.data.handles.find((h) => h.connection === "source");
405
- const entity = entityRepository.get(node.data.entity);
406
- const proxies = Array.from(entityProxyRepository.getAll(entity.myProxy).values()).flat();
407
- for (const proxy of proxies) {
408
- const proxyNode = ecsFlowRepository.getEntityNode(proxy);
409
- if (proxyNode) {
410
- const targetHandle = proxyNode.data.handles.find((h) => h.connection === "target");
411
- onConnect({
412
- source: node.id,
413
- target: proxyNode.id,
414
- sourceHandle: sourceHandle.handleId,
415
- targetHandle: targetHandle.handleId
416
- });
417
- }
418
- }
419
- }
420
- }, [
421
- nodesToConnect,
422
- ecsFlowRepository,
423
- entityRepository,
424
- entityProxyRepository,
425
- onConnect
426
- ]);
427
- return /* @__PURE__ */ jsx(Fragment, {});
428
- }
429
-
430
- //#endregion
431
- //#region src/flow/flow-ecs-entities.tsx
432
- function FlowEcsEntities() {
433
- const { nodeFactory } = useContext(FlowContext);
434
- const addNodes = useFlowStore((state) => state.addNodes);
435
- const { ecsFlowRepository, entityRepository } = useContext(EcsFlowContext);
436
- const [entityNodes, setEntityNodes] = useState([]);
437
- useEffect(() => {
438
- const entities = entityRepository.listAll();
439
- const nodes = [];
440
- for (const entity of entities) {
441
- if (ecsFlowRepository.getEntityNode(entity.myProxy)) continue;
442
- const node = nodeFactory.createNodeFromType(EcsNodeType.entity);
443
- node.data.entity = entity.myProxy;
444
- node.position = {
445
- x: 0,
446
- y: 0
447
- };
448
- ecsFlowRepository.addEntityNode(node);
449
- nodes.push(node);
450
- }
451
- setEntityNodes(nodes);
452
- addNodes(nodes);
453
- }, [
454
- entityRepository,
455
- entityRepository.size,
456
- ecsFlowRepository,
457
- nodeFactory,
458
- addNodes
459
- ]);
460
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FlowEcsEdgeProxies, { nodesToConnect: entityNodes }), /* @__PURE__ */ jsx(FlowEcsEdgeModules, { nodesToConnect: entityNodes })] });
461
- }
462
-
463
- //#endregion
464
- //#region src/flow/flow-ecs-modules.tsx
465
- function FlowEcsModules() {
466
- const { nodeFactory } = useContext(FlowContext);
467
- const addNodes = useFlowStore((state) => state.addNodes);
468
- const { ecsFlowRepository, systemsModuleRepository } = useContext(EcsFlowContext);
469
- useEffect(() => {
470
- const modules = Array.from(systemsModuleRepository.list()).filter((m) => !!m);
471
- const keys = Array.from(modules.values()).map((v) => v[0]);
472
- const nodesToAdd = [];
473
- for (const element of keys) {
474
- if (ecsFlowRepository.getSystemModuleNode(element)) continue;
475
- const node = nodeFactory.createNodeFromType(EcsNodeType.systemsModule);
476
- node.data.entityType = element;
477
- node.position = {
478
- x: 0,
479
- y: 0
480
- };
481
- ecsFlowRepository.addSystemModuleNode(node);
482
- nodesToAdd.push(node);
483
- }
484
- if (nodesToAdd.length) addNodes(nodesToAdd);
485
- }, [
486
- nodeFactory,
487
- addNodes,
488
- ecsFlowRepository,
489
- ecsFlowRepository.sizeNodes,
490
- systemsModuleRepository,
491
- systemsModuleRepository.size
492
- ]);
493
- return /* @__PURE__ */ jsx(Fragment, {});
494
- }
495
-
496
- //#endregion
497
- //#region src/flow/flow-ecs-state.tsx
498
- function FlowEcsState(props) {
499
- const [, setUpdates] = useState(0);
500
- const [refreshLayout, setRefreshLayout] = useState(false);
501
- const { ecsFlowRepository } = useContext(EcsFlowContext);
502
- useEffect(() => {
503
- setRefreshLayout(true);
504
- }, [ecsFlowRepository.sizeNodes]);
505
- useEffect(() => {
506
- setInterval(() => {
507
- setUpdates((updates) => updates + 1);
508
- }, 1e3);
509
- }, []);
510
- return /* @__PURE__ */ jsxs(Fragment, { children: [
511
- props.showSystemModules && /* @__PURE__ */ jsx(FlowEcsModules, {}),
512
- props.showEntities && /* @__PURE__ */ jsx(FlowEcsEntities, {}),
513
- props.autoLayout && /* @__PURE__ */ jsx(FlowAutoLayout, { refreshLayout })
514
- ] });
515
- }
516
- var flow_ecs_state_default = memo(FlowEcsState);
517
-
518
- //#endregion
519
- export { EcsFlowContext, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, EntityNodeTemplate, flow_ecs_state_default as FlowEcsState, SystemsModuleNode, SystemsModuleNodeTemplate, ecsNodeTemplates, ecsNodeTypes };
520
- //# sourceMappingURL=index.mjs.map
1
+ import { n as EcsFlowContext } from "./id-generator-DDsv3NdX.mjs";
2
+ import { A as EcsHandleDataType, C as usePipelineMetrics, D as EntityNodeTemplate, E as useEntityTypeTemplates, F as useBridgeStoreVersion, I as useEcsBridge, M as useEntityList, N as useEntity, O as createEntityTypeTemplate, P as useEntitiesInScope, S as useMiddlewareMetrics, T as useEntityUpdates, _ as useUpdateQueue, a as SchedulerNodeTemplate, b as useScopeList, c as SystemsModuleNodeTemplate, d as node_telemetry_default, f as SystemsModuleNode, g as node_event_timeline_default, h as EntityNode, i as EventTimelineNodeTemplate, j as useEntityTypeDescriptors, k as EcsTemplateGroup, l as ScopeGroupNodeTemplate, m as node_scheduler_default, n as ecsNodeTemplates, o as TelemetryNodeTemplate, p as node_scope_group_default, r as ecsNodeTypes, s as UpdateQueueNodeTemplate, t as EcsNodeType, u as node_update_queue_default, v as useSystemsModule, w as useEventStream, x as useScheduler, y as useSystemsModuleList } from "./node-types-BRcpbaeR.mjs";
3
+ import { n as object_inspector_default, t as entity_component_inspector_default } from "./entity-component-inspector-CNaN8Scf.mjs";
4
+ import { n as flow_ecs_state_default, t as FlowEcsCanvas } from "./canvas-C4nDXlkK.mjs";
5
+ import { EcsBridge, EcsCanvasProvider, EcsFlowRepository, createEcsBridge } from "./context/index.mjs";
6
+ import "./inspectors/index.mjs";
7
+ import "./nodes/index.mjs";
8
+ import "./templates/index.mjs";
9
+
10
+ export { entity_component_inspector_default as ComponentInspector, entity_component_inspector_default as EntityComponentInspector, EcsBridge, EcsCanvasProvider, EcsFlowContext, EcsFlowRepository, EcsHandleDataType, EcsNodeType, EcsTemplateGroup, EntityNode, EntityNodeTemplate, node_event_timeline_default as EventTimelineNode, EventTimelineNodeTemplate, FlowEcsCanvas, flow_ecs_state_default as FlowEcsState, object_inspector_default as ObjectInspector, node_scheduler_default as SchedulerNode, SchedulerNodeTemplate, node_scope_group_default as ScopeGroupNode, ScopeGroupNodeTemplate, SystemsModuleNode, SystemsModuleNodeTemplate, node_telemetry_default as TelemetryNode, TelemetryNodeTemplate, node_update_queue_default as UpdateQueueNode, UpdateQueueNodeTemplate, createEcsBridge, createEntityTypeTemplate, ecsNodeTemplates, ecsNodeTypes, useBridgeStoreVersion, useEcsBridge, useEntitiesInScope, useEntity, useEntityList, useEntityTypeDescriptors, useEntityTypeTemplates, useEntityUpdates, useEventStream, useMiddlewareMetrics, usePipelineMetrics, useScheduler, useScopeList, useSystemsModule, useSystemsModuleList, useUpdateQueue };
@@ -0,0 +1,6 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_entity_component_inspector = require('../entity-component-inspector-VlwcaUqy.cjs');
3
+
4
+ exports.ComponentInspector = require_entity_component_inspector.entity_component_inspector_default;
5
+ exports.EntityComponentInspector = require_entity_component_inspector.entity_component_inspector_default;
6
+ exports.ObjectInspector = require_entity_component_inspector.object_inspector_default;
@@ -0,0 +1,2 @@
1
+ import { n as _default, t as _default$1 } from "../index-BTs_8SY-.cjs";
2
+ export { _default as ComponentInspector, _default as EntityComponentInspector, _default$1 as ObjectInspector };
@@ -0,0 +1,2 @@
1
+ import { n as _default, t as _default$1 } from "../index-CyeezgDI.mjs";
2
+ export { _default as ComponentInspector, _default as EntityComponentInspector, _default$1 as ObjectInspector };
@@ -0,0 +1,3 @@
1
+ import { n as object_inspector_default, t as entity_component_inspector_default } from "../entity-component-inspector-CNaN8Scf.mjs";
2
+
3
+ export { entity_component_inspector_default as ComponentInspector, entity_component_inspector_default as EntityComponentInspector, object_inspector_default as ObjectInspector };
@@ -0,0 +1,45 @@
1
+ import { BasicNodeData } from "@awesome-flow/core/abstract";
2
+ import { EntityTypeUid, EntityUid, IEntityModel, IEntityProxy, IEntitySnapshot } from "@awesome-ecs/abstract/entities";
3
+
4
+ //#region src/abstract/entity-type-descriptor.d.ts
5
+ type EcsEntityModelFactoryInput = {
6
+ descriptor: EcsEntityTypeDescriptor;
7
+ entityType: EntityTypeUid;
8
+ scopeId?: string;
9
+ uid: EntityUid;
10
+ };
11
+ type EcsEntityTypeDescriptor = {
12
+ createModel?: (input: EcsEntityModelFactoryInput) => IEntityModel;
13
+ createSnapshot?: (input: EcsEntityModelFactoryInput) => IEntitySnapshot | undefined;
14
+ group?: string;
15
+ id?: string;
16
+ scopeId?: string;
17
+ title?: string;
18
+ entityType: EntityTypeUid;
19
+ };
20
+ type EcsEntitySpawnRequest = {
21
+ descriptorId?: string;
22
+ entityType: EntityTypeUid;
23
+ scopeId?: string;
24
+ uid?: EntityUid;
25
+ };
26
+ //#endregion
27
+ //#region src/abstract/node-props.d.ts
28
+ type SystemsModuleNodeData = BasicNodeData & {
29
+ entityType: EntityTypeUid;
30
+ };
31
+ type EntityNodeData = BasicNodeData & {
32
+ entity?: IEntityProxy;
33
+ entityType?: EntityTypeUid;
34
+ spawn?: EcsEntitySpawnRequest;
35
+ spawnStatus?: 'queued' | 'missing-queue';
36
+ };
37
+ type ScopeGroupNodeData = BasicNodeData & {
38
+ scopeId: string;
39
+ };
40
+ type EcsToolNodeData = BasicNodeData & {
41
+ limit?: number;
42
+ };
43
+ //#endregion
44
+ export { EcsEntityModelFactoryInput as a, SystemsModuleNodeData as i, EntityNodeData as n, EcsEntitySpawnRequest as o, ScopeGroupNodeData as r, EcsEntityTypeDescriptor as s, EcsToolNodeData as t };
45
+ //# sourceMappingURL=node-props-BtAkmdqr.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-props-BtAkmdqr.d.mts","names":[],"sources":["../src/abstract/entity-type-descriptor.ts","../src/abstract/node-props.ts"],"mappings":";;;;KAEY,0BAAA;EACV,UAAA,EAAY,uBAAA;EACZ,UAAA,EAAY,aAAA;EACZ,OAAA;EACA,GAAA,EAAK,SAAA;AAAA;AAAA,KAGK,uBAAA;EACV,WAAA,IAAe,KAAA,EAAO,0BAAA,KAA+B,YAAA;EACrD,cAAA,IAAkB,KAAA,EAAO,0BAAA,KAA+B,eAAA;EACxD,KAAA;EACA,EAAA;EACA,OAAA;EACA,KAAA;EACA,UAAA,EAAY,aAAA;AAAA;AAAA,KAGF,qBAAA;EACV,YAAA;EACA,UAAA,EAAY,aAAA;EACZ,OAAA;EACA,GAAA,GAAM,SAAS;AAAA;;;KCnBL,qBAAA,GAAwB,aAAA;EAClC,UAAA,EAAY,aAAa;AAAA;AAAA,KAGf,cAAA,GAAiB,aAAA;EAC3B,MAAA,GAAS,YAAA;EACT,UAAA,GAAa,aAAA;EACb,KAAA,GAAQ,qBAAA;EACR,WAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,aAAa;EAC5C,OAAO;AAAA;AAAA,KAGG,eAAA,GAAkB,aAAa;EACzC,KAAK;AAAA"}
@@ -0,0 +1,45 @@
1
+ import { EntityTypeUid, EntityUid, IEntityModel, IEntityProxy, IEntitySnapshot } from "@awesome-ecs/abstract/entities";
2
+ import { BasicNodeData } from "@awesome-flow/core/abstract";
3
+
4
+ //#region src/abstract/entity-type-descriptor.d.ts
5
+ type EcsEntityModelFactoryInput = {
6
+ descriptor: EcsEntityTypeDescriptor;
7
+ entityType: EntityTypeUid;
8
+ scopeId?: string;
9
+ uid: EntityUid;
10
+ };
11
+ type EcsEntityTypeDescriptor = {
12
+ createModel?: (input: EcsEntityModelFactoryInput) => IEntityModel;
13
+ createSnapshot?: (input: EcsEntityModelFactoryInput) => IEntitySnapshot | undefined;
14
+ group?: string;
15
+ id?: string;
16
+ scopeId?: string;
17
+ title?: string;
18
+ entityType: EntityTypeUid;
19
+ };
20
+ type EcsEntitySpawnRequest = {
21
+ descriptorId?: string;
22
+ entityType: EntityTypeUid;
23
+ scopeId?: string;
24
+ uid?: EntityUid;
25
+ };
26
+ //#endregion
27
+ //#region src/abstract/node-props.d.ts
28
+ type SystemsModuleNodeData = BasicNodeData & {
29
+ entityType: EntityTypeUid;
30
+ };
31
+ type EntityNodeData = BasicNodeData & {
32
+ entity?: IEntityProxy;
33
+ entityType?: EntityTypeUid;
34
+ spawn?: EcsEntitySpawnRequest;
35
+ spawnStatus?: 'queued' | 'missing-queue';
36
+ };
37
+ type ScopeGroupNodeData = BasicNodeData & {
38
+ scopeId: string;
39
+ };
40
+ type EcsToolNodeData = BasicNodeData & {
41
+ limit?: number;
42
+ };
43
+ //#endregion
44
+ export { EcsEntityModelFactoryInput as a, SystemsModuleNodeData as i, EntityNodeData as n, EcsEntitySpawnRequest as o, ScopeGroupNodeData as r, EcsEntityTypeDescriptor as s, EcsToolNodeData as t };
45
+ //# sourceMappingURL=node-props-DkuSwMA0.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-props-DkuSwMA0.d.cts","names":[],"sources":["../src/abstract/entity-type-descriptor.ts","../src/abstract/node-props.ts"],"mappings":";;;;KAEY,0BAAA;EACV,UAAA,EAAY,uBAAA;EACZ,UAAA,EAAY,aAAA;EACZ,OAAA;EACA,GAAA,EAAK,SAAA;AAAA;AAAA,KAGK,uBAAA;EACV,WAAA,IAAe,KAAA,EAAO,0BAAA,KAA+B,YAAA;EACrD,cAAA,IAAkB,KAAA,EAAO,0BAAA,KAA+B,eAAA;EACxD,KAAA;EACA,EAAA;EACA,OAAA;EACA,KAAA;EACA,UAAA,EAAY,aAAA;AAAA;AAAA,KAGF,qBAAA;EACV,YAAA;EACA,UAAA,EAAY,aAAA;EACZ,OAAA;EACA,GAAA,GAAM,SAAS;AAAA;;;KCnBL,qBAAA,GAAwB,aAAA;EAClC,UAAA,EAAY,aAAa;AAAA;AAAA,KAGf,cAAA,GAAiB,aAAA;EAC3B,MAAA,GAAS,YAAA;EACT,UAAA,GAAa,aAAA;EACb,KAAA,GAAQ,qBAAA;EACR,WAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,aAAa;EAC5C,OAAO;AAAA;AAAA,KAGG,eAAA,GAAkB,aAAa;EACzC,KAAK;AAAA"}
@@ -0,0 +1,22 @@
1
+ import { i as SystemsModuleNodeData, n as EntityNodeData } from "./node-props-BtAkmdqr.mjs";
2
+ import { Node, NodeProps } from "@xyflow/react";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/nodes/node-entity.d.ts
6
+ declare function EntityNode({
7
+ id,
8
+ data,
9
+ selected,
10
+ type
11
+ }: NodeProps<Node<EntityNodeData>>): _$react_jsx_runtime0.JSX.Element;
12
+ //#endregion
13
+ //#region src/nodes/node-systems-module.d.ts
14
+ declare function SystemsModuleNode({
15
+ id,
16
+ data,
17
+ selected,
18
+ type
19
+ }: NodeProps<Node<SystemsModuleNodeData>>): _$react_jsx_runtime0.JSX.Element;
20
+ //#endregion
21
+ export { EntityNode as n, SystemsModuleNode as t };
22
+ //# sourceMappingURL=node-systems-module-CPDV8u8O.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-systems-module-CPDV8u8O.d.mts","names":[],"sources":["../src/nodes/node-entity.tsx","../src/nodes/node-systems-module.tsx"],"mappings":";;;;;iBAQS,UAAA,CAAA;EAAa,EAAA;EAAI,IAAA;EAAM,QAAA;EAAU;AAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,cAAA,KAAgB,oBAAA,CAAA,GAAA,CAAA,OAAA;;;iBCAxE,iBAAA,CAAA;EAAoB,EAAA;EAAI,IAAA;EAAM,QAAA;EAAU;AAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,qBAAA,KAAuB,oBAAA,CAAA,GAAA,CAAA,OAAA"}