@formicoidea/labre-framework-uml 0.42.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 (114) hide show
  1. package/LICENSE +384 -0
  2. package/dist/actions.d.ts +430 -0
  3. package/dist/actions.js +724 -0
  4. package/dist/background.d.ts +153 -0
  5. package/dist/background.js +557 -0
  6. package/dist/board-hit.d.ts +137 -0
  7. package/dist/board-hit.js +191 -0
  8. package/dist/commands-manifest.d.ts +19 -0
  9. package/dist/commands-manifest.js +571 -0
  10. package/dist/commands.d.ts +4 -0
  11. package/dist/commands.js +983 -0
  12. package/dist/component.d.ts +521 -0
  13. package/dist/component.js +708 -0
  14. package/dist/consts.d.ts +365 -0
  15. package/dist/consts.js +463 -0
  16. package/dist/descriptor.d.ts +12 -0
  17. package/dist/descriptor.js +10 -0
  18. package/dist/drawio-decode.d.ts +32 -0
  19. package/dist/drawio-decode.js +96 -0
  20. package/dist/drawio-import.d.ts +133 -0
  21. package/dist/drawio-import.js +885 -0
  22. package/dist/edge-morph.d.ts +154 -0
  23. package/dist/edge-morph.js +153 -0
  24. package/dist/edge-styles.d.ts +78 -0
  25. package/dist/edge-styles.js +210 -0
  26. package/dist/effects.d.ts +9 -0
  27. package/dist/effects.js +6 -0
  28. package/dist/element-renderer.d.ts +64 -0
  29. package/dist/element-renderer.js +114 -0
  30. package/dist/element-view.d.ts +234 -0
  31. package/dist/element-view.js +430 -0
  32. package/dist/export.d.ts +61 -0
  33. package/dist/export.js +41 -0
  34. package/dist/filename.d.ts +17 -0
  35. package/dist/filename.js +26 -0
  36. package/dist/frame-tag.d.ts +70 -0
  37. package/dist/frame-tag.js +78 -0
  38. package/dist/grammar.d.ts +695 -0
  39. package/dist/grammar.js +1436 -0
  40. package/dist/import.d.ts +306 -0
  41. package/dist/import.js +1270 -0
  42. package/dist/index.d.ts +47 -0
  43. package/dist/index.js +67 -0
  44. package/dist/interchange.d.ts +125 -0
  45. package/dist/interchange.js +372 -0
  46. package/dist/keywords.d.ts +204 -0
  47. package/dist/keywords.js +361 -0
  48. package/dist/kinds.d.ts +73 -0
  49. package/dist/kinds.js +91 -0
  50. package/dist/legend.d.ts +30 -0
  51. package/dist/legend.js +255 -0
  52. package/dist/model.d.ts +862 -0
  53. package/dist/model.js +1316 -0
  54. package/dist/morph.d.ts +178 -0
  55. package/dist/morph.js +496 -0
  56. package/dist/node/act-glyphs.d.ts +30 -0
  57. package/dist/node/act-glyphs.js +142 -0
  58. package/dist/node/compartment-watcher.d.ts +107 -0
  59. package/dist/node/compartment-watcher.js +163 -0
  60. package/dist/node/fit.d.ts +85 -0
  61. package/dist/node/fit.js +129 -0
  62. package/dist/node/node-renderer.d.ts +49 -0
  63. package/dist/node/node-renderer.js +611 -0
  64. package/dist/node/node-view.d.ts +51 -0
  65. package/dist/node/node-view.js +89 -0
  66. package/dist/node/paint.d.ts +84 -0
  67. package/dist/node/paint.js +143 -0
  68. package/dist/node/sd-glyphs.d.ts +36 -0
  69. package/dist/node/sd-glyphs.js +79 -0
  70. package/dist/node/stm-glyphs.d.ts +22 -0
  71. package/dist/node/stm-glyphs.js +111 -0
  72. package/dist/node/tier-metrics.d.ts +38 -0
  73. package/dist/node/tier-metrics.js +45 -0
  74. package/dist/operators.d.ts +45 -0
  75. package/dist/operators.js +75 -0
  76. package/dist/plantuml-import.d.ts +113 -0
  77. package/dist/plantuml-import.js +1723 -0
  78. package/dist/plantuml.d.ts +94 -0
  79. package/dist/plantuml.js +985 -0
  80. package/dist/presets.d.ts +149 -0
  81. package/dist/presets.js +302 -0
  82. package/dist/profiles.d.ts +2 -0
  83. package/dist/profiles.js +358 -0
  84. package/dist/reading.d.ts +160 -0
  85. package/dist/reading.js +648 -0
  86. package/dist/roles.d.ts +257 -0
  87. package/dist/roles.js +997 -0
  88. package/dist/rules.d.ts +267 -0
  89. package/dist/rules.js +3090 -0
  90. package/dist/templates.d.ts +2 -0
  91. package/dist/templates.js +197 -0
  92. package/dist/toolbar/config.d.ts +228 -0
  93. package/dist/toolbar/config.js +833 -0
  94. package/dist/toolbar/icons.d.ts +440 -0
  95. package/dist/toolbar/icons.js +711 -0
  96. package/dist/toolbar/senior-tool.d.ts +11 -0
  97. package/dist/toolbar/senior-tool.js +21 -0
  98. package/dist/toolbar/uml-menu.d.ts +17 -0
  99. package/dist/toolbar/uml-menu.js +20 -0
  100. package/dist/toolbar/uml-senior-button.d.ts +18 -0
  101. package/dist/toolbar/uml-senior-button.js +22 -0
  102. package/dist/translations.d.ts +27 -0
  103. package/dist/translations.js +117 -0
  104. package/dist/view.d.ts +33 -0
  105. package/dist/view.js +236 -0
  106. package/dist/xmi-import.d.ts +174 -0
  107. package/dist/xmi-import.js +2268 -0
  108. package/dist/xmi.d.ts +61 -0
  109. package/dist/xmi.js +1860 -0
  110. package/dist/xml-reader.d.ts +157 -0
  111. package/dist/xml-reader.js +430 -0
  112. package/dist/xml.d.ts +72 -0
  113. package/dist/xml.js +96 -0
  114. package/package.json +38 -0
@@ -0,0 +1,267 @@
1
+ import type { EndpointTriplet, ValidationRule } from '@formicoidea/labre-core/blocks/surface';
2
+ /**
3
+ * Every ordered pair of the element roles — the ALPHABET, and not a grammar.
4
+ *
5
+ * This table sanctions all four hundred and forty-one sentences — twenty-one
6
+ * element roles squared, since the behaviour vocabulary joined the alphabet —
7
+ * so a rule holding it judges none of them. It exists so {@link untypedEdge}
8
+ * can say "between two
9
+ * UML artefacts" — which is the only thing `flagNeutral` reads a matrix FOR —
10
+ * without inheriting a judgement that belongs to {@link actorActorAssociation}.
11
+ */
12
+ export declare const UML_ELEMENT_MATRIX: readonly EndpointTriplet[];
13
+ export declare const UML_ASSOCIATION_MATRIX: readonly EndpointTriplet[];
14
+ /**
15
+ * The permissive table — every ordered pair of {@link UML_GENERALIZATION_ROLES}.
16
+ *
17
+ * Held by {@link generalizationSelfLoop} alone, for the reason C4 states: a
18
+ * second rule carrying the real grammar would report every wrong sentence a
19
+ * second time, with two brackets and two suggestions for one gesture to fix. The
20
+ * loop rule needs the same ALPHABET (so a generalization looped onto a note or a
21
+ * frame stays outside the conversation) and no grammar at all.
22
+ */
23
+ export declare const UML_GENERALIZATION_ALPHABET: readonly EndpointTriplet[];
24
+ /**
25
+ * The generalization GRAMMAR: like specialises like, and an instance is not a
26
+ * kind of anything.
27
+ *
28
+ * Four diagonal sentences and one ALPHABET entry. The fifth triplet is a link
29
+ * between two instances (§9.8.4) — a true sentence, carrying the ASSOCIATION
30
+ * role — and it is here so that `uml:object` is a role this rule speaks about:
31
+ * without it a generalization drawn onto an instance would be outside the
32
+ * alphabet and silently unjudged. `inMatrix` matches the edge role with
33
+ * `roleIsA`, so it can never sanction a generalization.
34
+ *
35
+ * The enumeration is absent from both ends, and that is a silence rather than a
36
+ * permission: a generalization between two enumerations is legal in the
37
+ * metamodel (an Enumeration is a DataType) and vanishingly rare on a drawing, so
38
+ * the pack declines to have an opinion about it.
39
+ */
40
+ export declare const UML_GENERALIZATION_MATRIX: readonly EndpointTriplet[];
41
+ /**
42
+ * What a REALIZATION points at: an interface, and nothing else (§10.4.3, whose
43
+ * `contract` end is typed `Interface`).
44
+ *
45
+ * One sentence, and an alphabet of one role — `uml:interface` specialises
46
+ * `uml:classifier`, so the source entry covers both ends of every realization
47
+ * drawn between two compartmented boxes. A realization onto a package, an
48
+ * object, an actor or a use case is outside the alphabet and is not judged:
49
+ * those are drawings of something else entirely, and the notation has no reading
50
+ * of them to correct.
51
+ */
52
+ export declare const UML_REALIZATION_MATRIX: readonly EndpointTriplet[];
53
+ export declare const UML_DEPENDENCY_MATRIX: readonly EndpointTriplet[];
54
+ /**
55
+ * The use case diagram's grammar, whole — read by TWO rules, each seeing the
56
+ * slice its own edge role selects.
57
+ *
58
+ * §18.1.3 types both ends of an Include (`addition: UseCase`) and both ends of
59
+ * an Extend (`extendedCase: UseCase`), so the only sentence either sanctions is
60
+ * use case → use case. That alone would give each rule an alphabet of one role
61
+ * and nothing it could ever report — an include drawn from an ACTOR, which is
62
+ * the mistake these two exist for, would be outside the alphabet and silent.
63
+ *
64
+ * The two ASSOCIATION triplets are what fix that. They are true sentences of
65
+ * §18.1.3 (an actor associates with a use case) and they carry the association
66
+ * role, so `inMatrix` — which matches a triplet's edge with `roleIsA` — can never
67
+ * let them sanction an include or an extend. Their only effect is to put
68
+ * `uml:actor` in the alphabet both rules speak.
69
+ *
70
+ * The two rules never double-report: an edge carries one role, and the include
71
+ * rule reads `uml:include` while the extend rule reads `uml:extend` — flat
72
+ * siblings, so neither reaches the other's edges, and neither reaches the
73
+ * associations this table also describes.
74
+ */
75
+ export declare const UML_USE_CASE_MATRIX: readonly EndpointTriplet[];
76
+ /**
77
+ * What a DEPLOY may run between: an artefact onto a node, and nothing else.
78
+ *
79
+ * §19.4.4 draws it as the dashed arrow with the `«deploy»` keyword, and §19.2.3
80
+ * types its two ends — a DeployedArtifact onto a DeploymentTarget. `uml:node` is
81
+ * the parent of `uml:device` and `uml:execution-environment` (`roles.ts`), so the
82
+ * single sentence below reaches all three targets through `roleIsA` rather than
83
+ * being restated once per cube.
84
+ *
85
+ * The second triplet is an ALPHABET entry, the device the file header explains:
86
+ * a manifestation is a true sentence of §19.3.4, it carries the `uml:manifest`
87
+ * role and can therefore never sanction a deploy, and its whole effect is to put
88
+ * `uml:component` into the alphabet this rule speaks. Without it a `«deploy»`
89
+ * drawn from a component — which is the mistake this rule exists for, since a
90
+ * component is not what gets deployed, its artefact is — would be outside the
91
+ * alphabet and silently unjudged.
92
+ */
93
+ export declare const UML_DEPLOY_MATRIX: readonly EndpointTriplet[];
94
+ /**
95
+ * What a MANIFEST may run between: an artefact onto the element it embodies.
96
+ *
97
+ * §19.3.3 — "An Artifact may embody, or manifest, a number of model elements" —
98
+ * and §19.3.4 draws it as the dashed open arrow labelled `«manifest»`. The
99
+ * metamodel's `utilizedElement` is a PackageableElement, so a manifestation may
100
+ * point at a great many things; this pack draws the one §19.3.5's own figure
101
+ * draws, "A Manifestation relationship between an Artifact and a Component",
102
+ * because a component diagram is where a manifestation is drawn at all.
103
+ *
104
+ * {@link UML_DEPLOY_MATRIX}'s twin, mirrored: the foreign triplet here is the
105
+ * DEPLOY, which puts `uml:node` in the alphabet so that a `«manifest»` aimed at
106
+ * a cube — the same arrow drawn at the wrong end of the deployment story — is a
107
+ * finding rather than silence.
108
+ */
109
+ export declare const UML_MANIFEST_MATRIX: readonly EndpointTriplet[];
110
+ /**
111
+ * What a COMMUNICATION PATH may run between: two nodes.
112
+ *
113
+ * §19.4.3 is as narrow as a clause gets — "A CommunicationPath is an Association
114
+ * between two DeploymentTargets, through which they may exchange Signals and
115
+ * Messages" — and §19.4.4 draws it as the plain association link between two
116
+ * cubes. One sentence, and `uml:node` on both ends, so a device talking to an
117
+ * execution environment is sanctioned through the parent role.
118
+ *
119
+ * TWO alphabet entries this time, and both are foreign edges: they put
120
+ * `uml:artifact` and `uml:component` into the alphabet, which is what makes a
121
+ * network line drawn onto a `.jar` or onto a component box a finding. A
122
+ * communication path is about MACHINES talking to machines, and the wire drawn
123
+ * to the software running on one of them is the confusion the rule is for.
124
+ */
125
+ export declare const UML_COMMUNICATION_PATH_MATRIX: readonly EndpointTriplet[];
126
+ /**
127
+ * What a CONTROL FLOW may run between: the activity vertices, and never an
128
+ * object node.
129
+ *
130
+ * §15.7.9.4 is one of the few constraints in Clause 15 that OCL can state in a
131
+ * line — "ControlFlows may not have ObjectNodes at either end, except for
132
+ * ObjectNodes with control type" — and the exception is the reason the rule that
133
+ * holds this table stays a remark rather than a defect: `isControlType` is a
134
+ * property of the metamodel with no notation at all (§15.4.4 draws the same
135
+ * rectangle either way), so a canvas cannot say which of the two an author meant.
136
+ * The table therefore reports the drawing the specification's own default
137
+ * forbids, and the rule's suggestion names the exception.
138
+ *
139
+ * Twenty-five sentences over five roles, plus the four alphabet entries: the
140
+ * grammar judges WHICH vertices, never how many edges reach one. The counts are
141
+ * {@link initialNoIncomingFlow}, {@link activityFinalNoOutgoing},
142
+ * {@link flowFinalNoOutgoing} and {@link decisionIncomingCount}, and keeping the
143
+ * two apart is what stops one wrong arrow being reported twice.
144
+ */
145
+ export declare const UML_CONTROL_FLOW_MATRIX: readonly EndpointTriplet[];
146
+ export declare const UML_OBJECT_FLOW_MATRIX: readonly EndpointTriplet[];
147
+ /**
148
+ * What a TRANSITION may run between: the vertices of a state machine, and
149
+ * nothing else.
150
+ *
151
+ * §14.5.12 in one sentence — "A Transition is a single directed arc originating
152
+ * from a single source Vertex and terminating on a single target Vertex" — and a
153
+ * Vertex is a State, a FinalState or a Pseudostate (§14.5.14). So the table is
154
+ * the full square over {@link UML_STATE_VERTEX_ROLES}: twenty-five sentences,
155
+ * judging WHICH vertices and not how many arcs reach one.
156
+ *
157
+ * ## The square is deliberate, and it is what stops the double report
158
+ *
159
+ * A transition INTO an initial disc and a transition OUT OF a final state are
160
+ * both wrong, and both are already said — by {@link initialNoIncomingTransition}
161
+ * and {@link finalStateNoOutgoing}, each of which names the side the author has
162
+ * to act on. Removing those two sentences from this table would make the same
163
+ * arrow off-matrix as well, and the user would get two brackets and two
164
+ * suggestions for one drag to fix. The DEGREE rules own the counts; this table
165
+ * owns the vocabulary.
166
+ */
167
+ export declare const UML_TRANSITION_MATRIX: readonly EndpointTriplet[];
168
+ /**
169
+ * What a MESSAGE may run between, sort by sort — §17.4.4, which is the one place
170
+ * in Clause 17 where the notation constrains an ARROW's ends rather than its
171
+ * shape.
172
+ *
173
+ * Three of the five sorts are the full square over {@link UML_MESSAGE_ENDS}: a
174
+ * call, a signal and a reply run from a participant to a participant, and the
175
+ * clause says nothing more. The other two each carry a sentence the
176
+ * specification states outright:
177
+ *
178
+ * - a **create** message "has a dashed line with an open arrow head" and is
179
+ * drawn to the HEAD of the lifeline it brings into existence (§17.4.4,
180
+ * Figure 17.13), so its target is a LIFELINE and never an execution — there
181
+ * is nothing to be executing on a participant that does not exist yet;
182
+ * - a **delete** message "must end in a DestructionOccurrenceSpecification"
183
+ * (§17.4.4, quoted in the rule's provenance), which is the X this canvas
184
+ * draws as `uml:destruction`. The LIFELINE is admitted beside it, and that is
185
+ * a deliberate tolerance rather than a reading of the clause: an author draws
186
+ * the arrow first and drops the cross on its end afterwards, and a grammar
187
+ * that indicted the intermediate state would be indicting the gesture.
188
+ * `uml.strict` promotes this rule, so the tolerance is the same at both
189
+ * levels — the finding that is worth having is the delete drawn onto an
190
+ * EXECUTION, which is a participant carrying on after it has been destroyed.
191
+ *
192
+ * Self-loops are NOT forbidden, and §17.4.4 is explicit about why: "The send and
193
+ * receive events may both be on the same lifeline." A participant calling itself
194
+ * is the notation's own figure for a nested activation.
195
+ */
196
+ export declare const UML_MESSAGE_MATRIX: readonly EndpointTriplet[];
197
+ /**
198
+ * The pack, whole: forty-three rules over ten families.
199
+ *
200
+ * Sixteen in phase 1, and not that brief's seventeen ids because the actor's
201
+ * name and the use case's name are ONE rule: they are the same tier role, and
202
+ * two rules on one role report one emptied word twice (see
203
+ * {@link unnamedActorOrUseCase}). The structural sheets appended three — the
204
+ * grammars of the three edges they draw — and skipped two the engine could not
205
+ * be asked; one of those two came back as the forty-third rule below, once the
206
+ * engine grew the family it needed. The BEHAVIOUR sheets appended fifteen, which is the largest single
207
+ * addition this library has taken: an activity and a state machine are the two
208
+ * diagrams UML constrains arithmetically, so where a class diagram's pack is
209
+ * mostly a vocabulary these are counts, degrees and a graph walk.
210
+ *
211
+ * The SEQUENCE sheet appended four, and all four are families this pack already
212
+ * had — which says something about the notation rather than about the effort:
213
+ * an interaction's whole grammar is "who may exchange a message with whom",
214
+ * "what a message label says", and the two questions any tier is asked about
215
+ * the words in a lifeline's head. Those last two are the ones that cost a role:
216
+ * `uml:lifeline-ident` exists because §17.3.4 prints a BNF for a head and
217
+ * §18.1.4 prints none for an actor's word, and one tier carrying both would have
218
+ * had to ask them the same question (`roles.ts`, {@link unnamedLifeline}). The
219
+ * four requirements Clause 17 states that this library CANNOT state — a message
220
+ * never traversed upwards (§17.4.4), an execution bar sat on a lifeline's spine
221
+ * (§17.3.4), a create message landing on a head, an operand's guard written in
222
+ * brackets (§17.6.4) — are each a geometry no family expresses, and they are
223
+ * recorded in `docs/adr/0022` rather than approximated here. A rule that fires
224
+ * on the wrong thing costs more than a requirement nobody checks.
225
+ *
226
+ * The PO recette of 2026-09-16 appended the forty-third, and it is the one rule
227
+ * in the pack that was written down as impossible before it was written: a port
228
+ * dragged into the middle of its component (§11.3.4). See {@link portOnBorder},
229
+ * and the paragraph above the six remaining gaps on how it left that list.
230
+ *
231
+ * ## TWO of the ten families are new to the ENGINE, and they are the only ones
232
+ *
233
+ * `label-syntax` (`docs/adr/0021`) arrived with four spelling rules and carries
234
+ * six, and it was the first family this library added for a reason no table
235
+ * could meet: a notation's GRAMMAR is a parser, and the clauses these rules cite
236
+ * are already written as one in `grammar.ts` for the exporters.
237
+ * `border-proximity` (`docs/adr/0024`) is the second, and its reason is the
238
+ * opposite one — pure geometry that three existing families each get NEARLY
239
+ * right and none of them states: a distance from a glyph's centre to another
240
+ * artefact's outline. In both cases the family owns the walk and the pack owns
241
+ * the reading, and in both cases the alternative on the table was approximating
242
+ * the requirement with a neighbouring family. Everything else the thirty-odd
243
+ * roles of phases 2 and 3 needed, the engine already had.
244
+ *
245
+ * ## The other eight are the engine's, and two of them are BPMN's
246
+ *
247
+ * `role-count` and `reachability` are BPMN's, registered here with UML's own
248
+ * roles and nothing else: a state machine with two beginnings and a ring of
249
+ * states nothing enters are the same two questions a pool with two start events
250
+ * and an unreachable task ask. So the claim `docs/add-a-framework` makes about
251
+ * the seam survives the largest notation in the library twice over — the
252
+ * fifteen edge roles are fifteen readings of `relation-endpoints`, the four
253
+ * frames are the membership families C4 already uses, and the sheet's own
254
+ * declaration is the `view-admissibility` C4 opened.
255
+ *
256
+ * ## Several rules say one sentence twice, and the reason is always the same
257
+ *
258
+ * Five pairs — the two histories, the two initial-node counts, the two finals,
259
+ * the two reachability walks — are one requirement declared twice because the
260
+ * family that answers it names ONE role: one subject role, or one edge role.
261
+ * They never double-report (an element carries one role, an edge carries one
262
+ * role, and each pair's two halves are flat siblings), and each half carries the
263
+ * sentence and the authority its own half of the notation has. Where the pair
264
+ * could have been collapsed by inventing an ancestor role, it was not: this
265
+ * vocabulary's whole authority is that every role in it is the specification's.
266
+ */
267
+ export declare const UML_RULES: readonly ValidationRule[];