aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/src/index.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/frontend/src/index.tsx')
-rw-r--r--subprojects/frontend/src/index.tsx127
1 files changed, 97 insertions, 30 deletions
diff --git a/subprojects/frontend/src/index.tsx b/subprojects/frontend/src/index.tsx
index cb11e6c3..60debd6b 100644
--- a/subprojects/frontend/src/index.tsx
+++ b/subprojects/frontend/src/index.tsx
@@ -4,46 +4,113 @@
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6 6
7import { styled } from '@mui/material/styles';
7import { configure } from 'mobx'; 8import { configure } from 'mobx';
8import { type Root, createRoot } from 'react-dom/client'; 9import { type Root, createRoot } from 'react-dom/client';
9 10
10import App from './App'; 11import App from './App';
11import RootStore from './RootStore'; 12import RootStore from './RootStore';
12 13
13const initialValue = `// Metamodel 14// Make sure `styled` ends up in the entry chunk.
14class Person { 15// https://github.com/mui/material-ui/issues/32727#issuecomment-1659945548
15 Person[] friend opposite friend 16(window as unknown as { fixViteIssue: unknown }).fixViteIssue = styled;
17
18const initialValue = `% Metamodel
19
20abstract class CompositeElement {
21 contains Region[] regions
16} 22}
17 23
18class Post { 24class Region {
19 Person author 25 contains Vertex[] vertices opposite region
20 Post[0..1] replyTo
21} 26}
22 27
23// Constraints 28abstract class Vertex {
24error replyToNotFriend(Post x, Post y) <-> 29 container Region region opposite vertices
25 replyTo(x, y), 30 contains Transition[] outgoingTransition opposite source
26 author(x, xAuthor), 31 Transition[] incomingTransition opposite target
27 author(y, yAuthor), 32}
28 !friend(xAuthor, yAuthor). 33
29 34class Transition {
30error replyToCycle(Post x) <-> replyTo+(x,x). 35 container Vertex source opposite outgoingTransition
31 36 Vertex[1] target opposite incomingTransition
32// Instance model 37}
33Person(a). 38
34Person(b). 39abstract class Pseudostate extends Vertex.
35friend(a, b). 40
36friend(b, a). 41abstract class RegularState extends Vertex.
37Post(p1). 42
38author(p1, a). 43class Entry extends Pseudostate.
39Post(p2). 44
40author(p2, b). 45class Exit extends Pseudostate.
41replyTo(p2, p1). 46
42 47class Choice extends Pseudostate.
43!author(Post::new, a). // Automatically inferred: author(Post::new, b). 48
44 49class FinalState extends RegularState.
45// Scope 50
46scope Post = 10..15, Person += 0. 51class State extends RegularState, CompositeElement.
52
53class Statechart extends CompositeElement.
54
55% Constraints
56
57%% Entry
58
59pred entryInRegion(Region r, Entry e) <->
60 vertices(r, e).
61
62error noEntryInRegion(Region r) <->
63 !entryInRegion(r, _).
64
65error multipleEntryInRegion(Region r) <->
66 entryInRegion(r, e1),
67 entryInRegion(r, e2),
68 e1 != e2.
69
70error incomingToEntry(Transition t, Entry e) <->
71 target(t, e).
72
73error noOutgoingTransitionFromEntry(Entry e) <->
74 !source(_, e).
75
76error multipleTransitionFromEntry(Entry e, Transition t1, Transition t2) <->
77 outgoingTransition(e, t1),
78 outgoingTransition(e, t2),
79 t1 != t2.
80
81%% Exit
82
83error outgoingFromExit(Transition t, Exit e) <->
84 source(t, e).
85
86%% Final
87
88error outgoingFromFinal(Transition t, FinalState e) <->
89 source(t, e).
90
91%% State vs Region
92
93pred stateInRegion(Region r, State s) <->
94 vertices(r, s).
95
96error noStateInRegion(Region r) <->
97 !stateInRegion(r, _).
98
99%% Choice
100
101error choiceHasNoOutgoing(Choice c) <->
102 !source(_, c).
103
104error choiceHasNoIncoming(Choice c) <->
105 !target(_, c).
106
107% Instance model
108
109Statechart(sct).
110
111% Scope
112
113scope node = 20..30, Region = 2..*, Choice = 1..*, Statechart += 0.
47`; 114`;
48 115
49configure({ 116configure({