@tuprolog/arg2p-ui 0.0.0-stage → 0.1.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/README.md +48 -2
- package/dist/components/arg2p-editor.d.ts +73 -0
- package/dist/components/arg2p-editor.js +244 -0
- package/dist/components/arg2p-editor.js.map +1 -0
- package/dist/components/arg2p-flags.d.ts +58 -0
- package/dist/components/arg2p-flags.js +358 -0
- package/dist/components/arg2p-flags.js.map +1 -0
- package/dist/components/arg2p-framework.d.ts +102 -0
- package/dist/components/arg2p-framework.js +513 -0
- package/dist/components/arg2p-framework.js.map +1 -0
- package/dist/components/arg2p-graph.d.ts +112 -0
- package/dist/components/arg2p-graph.js +577 -0
- package/dist/components/arg2p-graph.js.map +1 -0
- package/dist/components/arg2p-solutions.d.ts +75 -0
- package/dist/components/arg2p-solutions.js +391 -0
- package/dist/components/arg2p-solutions.js.map +1 -0
- package/dist/data.d.ts +9 -0
- package/dist/data.js +11 -0
- package/dist/data.js.map +1 -0
- package/dist/editor/language.d.ts +9 -0
- package/dist/editor/language.js +78 -0
- package/dist/editor/language.js.map +1 -0
- package/dist/engine.d.ts +94 -0
- package/dist/engine.js +2 -0
- package/dist/engine.js.map +1 -0
- package/dist/flags/schema.d.ts +50 -0
- package/dist/flags/schema.js +195 -0
- package/dist/flags/schema.js.map +1 -0
- package/dist/flags/text.d.ts +18 -0
- package/dist/flags/text.js +85 -0
- package/dist/flags/text.js.map +1 -0
- package/dist/formats/declarations.d.ts +9 -0
- package/dist/formats/declarations.js +193 -0
- package/dist/formats/declarations.js.map +1 -0
- package/dist/formats/frameworks.d.ts +23 -0
- package/dist/formats/frameworks.js +130 -0
- package/dist/formats/frameworks.js.map +1 -0
- package/dist/graph/canvas.d.ts +21 -0
- package/dist/graph/canvas.js +76 -0
- package/dist/graph/canvas.js.map +1 -0
- package/dist/graph/drawing.d.ts +24 -0
- package/dist/graph/drawing.js +64 -0
- package/dist/graph/drawing.js.map +1 -0
- package/dist/graph/layout.d.ts +28 -0
- package/dist/graph/layout.js +167 -0
- package/dist/graph/layout.js.map +1 -0
- package/dist/graph/levels.d.ts +6 -0
- package/dist/graph/levels.js +25 -0
- package/dist/graph/levels.js.map +1 -0
- package/dist/graph/positions.d.ts +24 -0
- package/dist/graph/positions.js +43 -0
- package/dist/graph/positions.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/js/engine.d.ts +35 -0
- package/dist/js/engine.js +110 -0
- package/dist/js/engine.js.map +1 -0
- package/dist/js/host.d.ts +75 -0
- package/dist/js/host.js +237 -0
- package/dist/js/host.js.map +1 -0
- package/dist/js/index.d.ts +2 -0
- package/dist/js/index.js +4 -0
- package/dist/js/index.js.map +1 -0
- package/dist/js/worker.d.ts +1 -0
- package/dist/js/worker.js +7 -0
- package/dist/js/worker.js.map +1 -0
- package/dist/theme.d.ts +5 -0
- package/dist/theme.js +48 -0
- package/dist/theme.js.map +1 -0
- package/package.json +65 -4
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
import { LitElement, css, html, nothing } from 'lit';
|
|
2
|
+
import { EMPTY_GRAPH } from '../engine.js';
|
|
3
|
+
import { NODE_FONT, drawing, fit, followSize, nodeSize, png } from '../graph/canvas.js';
|
|
4
|
+
import { attacksAround, curveOf, isAbstract, kindOf, nameOf, nodeLabel } from '../graph/drawing.js';
|
|
5
|
+
import { layeredLayout } from '../graph/layout.js';
|
|
6
|
+
import { MUTUAL_STYLE, markMutual, placeByName, positionsOf } from '../graph/positions.js';
|
|
7
|
+
import { levelsOf, supportsOf } from '../graph/levels.js';
|
|
8
|
+
import { cssColor, labelColor, tokens } from '../theme.js';
|
|
9
|
+
// The layout keeps nodes this far apart, edge to edge, and rows at least LEVEL_SEPARATION apart
|
|
10
|
+
const NODE_GAP = 40;
|
|
11
|
+
const LEVEL_SEPARATION = 100;
|
|
12
|
+
// Nodes and edges take their colours, sizes and curves from their data, computed as the graph is drawn
|
|
13
|
+
const STYLE = [
|
|
14
|
+
{
|
|
15
|
+
selector: 'node',
|
|
16
|
+
style: {
|
|
17
|
+
shape: 'ellipse',
|
|
18
|
+
'background-color': 'data(color)',
|
|
19
|
+
label: 'data(label)',
|
|
20
|
+
color: '#ffffff',
|
|
21
|
+
'font-family': NODE_FONT.family,
|
|
22
|
+
'font-size': NODE_FONT.size,
|
|
23
|
+
'text-valign': 'center',
|
|
24
|
+
'text-halign': 'center',
|
|
25
|
+
'text-wrap': 'wrap',
|
|
26
|
+
width: 'data(width)',
|
|
27
|
+
height: 'data(height)',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{ selector: 'node:selected', style: { 'border-width': 3, 'border-color': 'data(outline)' } },
|
|
31
|
+
{
|
|
32
|
+
selector: 'edge',
|
|
33
|
+
style: {
|
|
34
|
+
width: 2,
|
|
35
|
+
'line-color': 'data(color)',
|
|
36
|
+
'target-arrow-color': 'data(color)',
|
|
37
|
+
'target-arrow-shape': 'triangle',
|
|
38
|
+
'curve-style': 'unbundled-bezier',
|
|
39
|
+
'control-point-distances': 'data(curve)',
|
|
40
|
+
'control-point-weights': 0.5,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
// an abstract framework is placed by forces: its attacks bend apart when they are mutual
|
|
44
|
+
{ selector: 'edge.free', style: { 'curve-style': 'bezier' } },
|
|
45
|
+
MUTUAL_STYLE,
|
|
46
|
+
{
|
|
47
|
+
selector: 'edge.support',
|
|
48
|
+
style: { 'curve-style': 'straight', 'line-style': 'dashed', 'line-dash-pattern': [3, 4], width: 1.5, 'arrow-scale': 0.7 },
|
|
49
|
+
},
|
|
50
|
+
{ selector: 'edge.support.hidden', style: { display: 'none' } },
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* The argument graph of a solution: every argument a node in the colour of its label, built on the arguments below it
|
|
54
|
+
* (facts at the bottom) and attacking others. Hovering an argument (or tapping it, the only way on touch screens)
|
|
55
|
+
* tells about it; the stages of the computation can be browsed back; the graph can be saved as a picture.
|
|
56
|
+
*
|
|
57
|
+
* An abstract framework (profile abstract) has no structure: its arguments go by the names the theory gives them and
|
|
58
|
+
* are placed by their attacks alone.
|
|
59
|
+
*
|
|
60
|
+
* Events: `arg2p-toggle` when supports or conclusions are shown or hidden (to remember it), and `arg2p-export` with
|
|
61
|
+
* the picture (cancel it to save the picture another way; otherwise it is downloaded).
|
|
62
|
+
*/
|
|
63
|
+
export class Arg2pGraph extends LitElement {
|
|
64
|
+
constructor() {
|
|
65
|
+
super(...arguments);
|
|
66
|
+
/** The graph shown */
|
|
67
|
+
this.graph = EMPTY_GRAPH;
|
|
68
|
+
/** The stages of the computation of [graph], if it can be browsed */
|
|
69
|
+
this.stages = null;
|
|
70
|
+
/** Where the arguments of an abstract framework are, by name: shared with its drawing (see arg2p-positions) */
|
|
71
|
+
this.positions = null;
|
|
72
|
+
this.showSupports = true;
|
|
73
|
+
this.showConclusions = false;
|
|
74
|
+
/** The name of the picture the graph is saved as, with no extension */
|
|
75
|
+
this.fileName = 'graph';
|
|
76
|
+
/** Set when there is nothing to show: no arguments, and no stages to browse (a page may hide the graph) */
|
|
77
|
+
this.empty = true;
|
|
78
|
+
this.stage = 0;
|
|
79
|
+
// the graph drawn: [graph], or one of its stages
|
|
80
|
+
this.drawn = EMPTY_GRAPH;
|
|
81
|
+
// the argument the popup is about, and whether a tap keeps it open
|
|
82
|
+
this.shown = null;
|
|
83
|
+
this.pinned = null;
|
|
84
|
+
// One drawing per element: moving between the stages updates it in place, so that arguments keep their place
|
|
85
|
+
this.cy = null;
|
|
86
|
+
this.unfollow = () => { };
|
|
87
|
+
}
|
|
88
|
+
static { this.properties = {
|
|
89
|
+
graph: { attribute: false },
|
|
90
|
+
positions: { attribute: false },
|
|
91
|
+
stages: { attribute: false },
|
|
92
|
+
showSupports: { type: Boolean, attribute: 'show-supports', reflect: true },
|
|
93
|
+
showConclusions: { type: Boolean, attribute: 'show-conclusions', reflect: true },
|
|
94
|
+
fileName: { attribute: 'file-name' },
|
|
95
|
+
empty: { type: Boolean, reflect: true },
|
|
96
|
+
stage: { state: true },
|
|
97
|
+
drawn: { state: true },
|
|
98
|
+
shown: { state: true },
|
|
99
|
+
}; }
|
|
100
|
+
/** Shows the graph of [solution], its stages browsable through [run] */
|
|
101
|
+
showSolution(solution, run = null) {
|
|
102
|
+
this.graph = solution.graph;
|
|
103
|
+
this.stages = run !== null && solution.branch > 0 ? { last: solution.branch, graphAt: branch => run.graphAt(branch) } : null;
|
|
104
|
+
}
|
|
105
|
+
clear() {
|
|
106
|
+
this.graph = EMPTY_GRAPH;
|
|
107
|
+
this.stages = null;
|
|
108
|
+
}
|
|
109
|
+
/** The graph as a PNG picture, as a data URL: the whole of it, on the background of the element */
|
|
110
|
+
png() {
|
|
111
|
+
if (this.cy === null)
|
|
112
|
+
return '';
|
|
113
|
+
return png(this.cy, getComputedStyle(this).getPropertyValue('--_surface').trim() || '#ffffff');
|
|
114
|
+
}
|
|
115
|
+
/** Fits the drawing to the element */
|
|
116
|
+
fit() {
|
|
117
|
+
if (this.cy === null)
|
|
118
|
+
return;
|
|
119
|
+
this.cy.resize();
|
|
120
|
+
fit(this.cy);
|
|
121
|
+
}
|
|
122
|
+
/** Draws the graph again, in the colours the page sets now (after a change of theme) */
|
|
123
|
+
restyle() {
|
|
124
|
+
this.draw();
|
|
125
|
+
}
|
|
126
|
+
/** The drawing, for what the element does not do itself (and for tests) */
|
|
127
|
+
get drawing() {
|
|
128
|
+
return this.cy;
|
|
129
|
+
}
|
|
130
|
+
willUpdate(changed) {
|
|
131
|
+
if (changed.has('graph') || changed.has('stages')) {
|
|
132
|
+
this.stage = this.stages?.last ?? 0;
|
|
133
|
+
this.drawn = this.graph;
|
|
134
|
+
}
|
|
135
|
+
// the popup of an argument the graph no longer has is closed
|
|
136
|
+
if (this.shown !== null && !this.drawn.arguments.some(it => it.id === this.shown)) {
|
|
137
|
+
this.pinned = null;
|
|
138
|
+
this.shown = null;
|
|
139
|
+
}
|
|
140
|
+
this.empty = this.drawn.arguments.length === 0 && this.stages === null;
|
|
141
|
+
}
|
|
142
|
+
firstUpdated() {
|
|
143
|
+
const cy = drawing(this.renderRoot.querySelector('.canvas'), STYLE);
|
|
144
|
+
cy.on('mouseover', 'node', (event) => this.show(event.target.id()));
|
|
145
|
+
cy.on('mouseout', 'node', () => this.show(this.pinned));
|
|
146
|
+
cy.on('tap', (event) => {
|
|
147
|
+
this.pinned = event.target !== cy && event.target.isNode() ? event.target.id() : null;
|
|
148
|
+
this.show(this.pinned);
|
|
149
|
+
});
|
|
150
|
+
// the popup follows its node while the graph is dragged or zoomed
|
|
151
|
+
cy.on('viewport position', () => this.placePopup());
|
|
152
|
+
cy.on('dragfree', 'node', () => {
|
|
153
|
+
if (isAbstract(this.drawn))
|
|
154
|
+
this.tellPositions();
|
|
155
|
+
});
|
|
156
|
+
this.cy = cy;
|
|
157
|
+
this.unfollow = followSize(cy, this.renderRoot.querySelector('.canvas'));
|
|
158
|
+
}
|
|
159
|
+
updated(changed) {
|
|
160
|
+
if (changed.has('drawn') || changed.has('showSupports') || changed.has('showConclusions'))
|
|
161
|
+
this.draw();
|
|
162
|
+
// placed elsewhere (by the drawing of the framework): moved there
|
|
163
|
+
else if (changed.has('positions') && this.cy !== null && isAbstract(this.drawn))
|
|
164
|
+
placeByName(this.cy, nameOfNode, this.positions);
|
|
165
|
+
if (changed.has('shown'))
|
|
166
|
+
this.placePopup();
|
|
167
|
+
}
|
|
168
|
+
disconnectedCallback() {
|
|
169
|
+
super.disconnectedCallback();
|
|
170
|
+
this.unfollow();
|
|
171
|
+
this.cy?.destroy();
|
|
172
|
+
this.cy = null;
|
|
173
|
+
}
|
|
174
|
+
connectedCallback() {
|
|
175
|
+
super.connectedCallback();
|
|
176
|
+
// put back in a page after being taken out of it
|
|
177
|
+
if (this.hasUpdated && this.cy === null) {
|
|
178
|
+
this.firstUpdated();
|
|
179
|
+
this.draw();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
draw() {
|
|
183
|
+
const cy = this.cy;
|
|
184
|
+
if (cy === null)
|
|
185
|
+
return;
|
|
186
|
+
const graph = this.drawn;
|
|
187
|
+
const abstract = isAbstract(graph);
|
|
188
|
+
const wasEmpty = cy.nodes().length === 0;
|
|
189
|
+
const labels = new Map(graph.arguments.map(it => [it.id, it.label]));
|
|
190
|
+
const supports = abstract ? [] : supportsOf(graph.arguments);
|
|
191
|
+
const support = cssColor(this, 'support');
|
|
192
|
+
const outline = getComputedStyle(this).getPropertyValue('--_accent').trim() || '#008080';
|
|
193
|
+
const nodes = graph.arguments.map(it => {
|
|
194
|
+
const label = nodeLabel(it, abstract, this.showConclusions);
|
|
195
|
+
return { data: { id: it.id, name: nameOf(it, abstract), label, color: labelColor(this, it.label), outline, ...nodeSize(label) }, classes: '' };
|
|
196
|
+
});
|
|
197
|
+
const edges = [
|
|
198
|
+
...graph.attacks.map(it => ({
|
|
199
|
+
data: { id: `${it.from}->${it.to}`, source: it.from, target: it.to, color: labelColor(this, labels.get(it.from)), curve: 0 },
|
|
200
|
+
classes: abstract ? 'attack free' : 'attack',
|
|
201
|
+
})),
|
|
202
|
+
...supports.map(it => ({
|
|
203
|
+
data: { id: `${it.from}=>${it.to}`, source: it.from, target: it.to, color: support, curve: 0 },
|
|
204
|
+
classes: this.showSupports ? 'support' : 'support hidden',
|
|
205
|
+
})),
|
|
206
|
+
];
|
|
207
|
+
const wanted = new Set([...nodes, ...edges].map(it => it.data.id));
|
|
208
|
+
cy.batch(() => {
|
|
209
|
+
cy.elements().filter(it => !wanted.has(it.id())).remove();
|
|
210
|
+
[...nodes, ...edges].forEach(({ data, classes }) => {
|
|
211
|
+
const element = cy.getElementById(data.id);
|
|
212
|
+
if (element.nonempty())
|
|
213
|
+
element.data(data).classes(classes);
|
|
214
|
+
else
|
|
215
|
+
cy.add({ group: 'source' in data ? 'edges' : 'nodes', data, classes });
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
markMutual(cy);
|
|
219
|
+
this.place(graph, abstract, supports, wasEmpty);
|
|
220
|
+
}
|
|
221
|
+
// Where the arguments of an abstract framework are now, for its drawing to place them alike
|
|
222
|
+
tellPositions() {
|
|
223
|
+
if (this.cy === null)
|
|
224
|
+
return;
|
|
225
|
+
this.positions = positionsOf(this.cy, nameOfNode);
|
|
226
|
+
this.dispatchEvent(new CustomEvent('arg2p-positions', { detail: { positions: this.positions }, bubbles: true, composed: true }));
|
|
227
|
+
}
|
|
228
|
+
// Computed again for every graph drawn: the same arguments get the same place, so stepping through the stages does
|
|
229
|
+
// not move them around. An abstract framework has no rows: its arguments are placed by their attacks, as forces,
|
|
230
|
+
// from where they are (all of them anew when it is drawn first).
|
|
231
|
+
place(graph, abstract, supports, first) {
|
|
232
|
+
const cy = this.cy;
|
|
233
|
+
if (graph.arguments.length === 0)
|
|
234
|
+
return;
|
|
235
|
+
if (abstract) {
|
|
236
|
+
if (placeByName(cy, nameOfNode, this.positions))
|
|
237
|
+
this.tellPositions();
|
|
238
|
+
if (first)
|
|
239
|
+
fit(cy);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const area = this.renderRoot.querySelector('.area');
|
|
243
|
+
const sizes = new Map(cy.nodes().map(it => [it.id(), { width: it.data('width'), height: it.data('height') }]));
|
|
244
|
+
const positions = layeredLayout(levelsOf(graph.arguments), supports, {
|
|
245
|
+
sizes,
|
|
246
|
+
gap: NODE_GAP,
|
|
247
|
+
levelSeparation: LEVEL_SEPARATION,
|
|
248
|
+
attacks: graph.attacks,
|
|
249
|
+
// filling the area rather than drawing a thin strip in its middle
|
|
250
|
+
aspect: area.clientWidth > 0 ? area.clientHeight / area.clientWidth : null,
|
|
251
|
+
});
|
|
252
|
+
cy.batch(() => {
|
|
253
|
+
positions.forEach((point, id) => cy.getElementById(id).position({ x: point.x, y: point.y }));
|
|
254
|
+
// attacks bend by a share of their length (a smaller one for long attacks, or they would arc across the
|
|
255
|
+
// whole drawing): mutual attacks bend to either side
|
|
256
|
+
graph.attacks.forEach(it => {
|
|
257
|
+
const from = positions.get(it.from);
|
|
258
|
+
const to = positions.get(it.to);
|
|
259
|
+
if (from === undefined || to === undefined)
|
|
260
|
+
return;
|
|
261
|
+
cy.getElementById(`${it.from}->${it.to}`).data('curve', curveOf(from, to) * Math.hypot(to.x - from.x, to.y - from.y));
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
if (first)
|
|
265
|
+
fit(cy);
|
|
266
|
+
}
|
|
267
|
+
// The graph of a stage comes from the engine: a later click wins
|
|
268
|
+
goTo(target) {
|
|
269
|
+
const stages = this.stages;
|
|
270
|
+
if (stages === null || target < 0 || target > stages.last)
|
|
271
|
+
return;
|
|
272
|
+
this.stage = target;
|
|
273
|
+
if (target === stages.last) {
|
|
274
|
+
this.drawn = this.graph;
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
stages.graphAt(target).then(graph => {
|
|
278
|
+
if (this.stage === target && this.stages === stages)
|
|
279
|
+
this.drawn = graph;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
show(id) {
|
|
283
|
+
this.shown = id !== null && this.drawn.arguments.some(it => it.id === id) ? id : null;
|
|
284
|
+
}
|
|
285
|
+
// Next to its node, flipped to the other side or held in when it would leave the area
|
|
286
|
+
placePopup() {
|
|
287
|
+
const popup = this.renderRoot.querySelector('.popup');
|
|
288
|
+
const area = this.renderRoot.querySelector('.area');
|
|
289
|
+
if (this.shown === null || popup === null || area === null || this.cy === null)
|
|
290
|
+
return;
|
|
291
|
+
const node = this.cy.getElementById(this.shown);
|
|
292
|
+
if (node.empty())
|
|
293
|
+
return;
|
|
294
|
+
const point = node.renderedPosition();
|
|
295
|
+
const margin = 8;
|
|
296
|
+
const gap = node.renderedWidth() / 2 + 8;
|
|
297
|
+
const width = popup.offsetWidth;
|
|
298
|
+
const height = popup.offsetHeight;
|
|
299
|
+
let left = point.x + gap;
|
|
300
|
+
if (left + width > area.clientWidth - margin)
|
|
301
|
+
left = point.x - gap - width;
|
|
302
|
+
left = Math.max(margin, Math.min(left, area.clientWidth - width - margin));
|
|
303
|
+
const top = Math.max(margin, Math.min(point.y - height / 2, area.clientHeight - height - margin));
|
|
304
|
+
popup.style.left = `${left}px`;
|
|
305
|
+
popup.style.top = `${top}px`;
|
|
306
|
+
}
|
|
307
|
+
toggle(which, on) {
|
|
308
|
+
this[which] = on;
|
|
309
|
+
this.dispatchEvent(new CustomEvent('arg2p-toggle', {
|
|
310
|
+
detail: { showSupports: this.showSupports, showConclusions: this.showConclusions },
|
|
311
|
+
bubbles: true,
|
|
312
|
+
composed: true,
|
|
313
|
+
}));
|
|
314
|
+
}
|
|
315
|
+
export() {
|
|
316
|
+
const fileName = `${this.fileName}.png`;
|
|
317
|
+
const dataUrl = this.png();
|
|
318
|
+
const event = new CustomEvent('arg2p-export', { detail: { fileName, dataUrl }, bubbles: true, composed: true, cancelable: true });
|
|
319
|
+
if (!this.dispatchEvent(event))
|
|
320
|
+
return;
|
|
321
|
+
const link = document.createElement('a');
|
|
322
|
+
link.href = dataUrl;
|
|
323
|
+
link.download = fileName;
|
|
324
|
+
link.click();
|
|
325
|
+
}
|
|
326
|
+
render() {
|
|
327
|
+
const abstract = isAbstract(this.drawn);
|
|
328
|
+
const stages = this.stages;
|
|
329
|
+
return html `
|
|
330
|
+
<div class="bar" part="bar">
|
|
331
|
+
<div class="legend">
|
|
332
|
+
<span class="item"><span class="line attack"></span>attack</span>
|
|
333
|
+
${abstract
|
|
334
|
+
? nothing
|
|
335
|
+
: html `
|
|
336
|
+
<label class="item toggle" title="Show which sub-arguments every argument is built on">
|
|
337
|
+
<input type="checkbox" .checked=${this.showSupports} @change=${(e) => this.toggle('showSupports', e.target.checked)} />
|
|
338
|
+
<span class="line support"></span>supports
|
|
339
|
+
</label>
|
|
340
|
+
<label class="item toggle" title="Write the conclusion of every argument under its name">
|
|
341
|
+
<input type="checkbox" .checked=${this.showConclusions} @change=${(e) => this.toggle('showConclusions', e.target.checked)} />
|
|
342
|
+
conclusions
|
|
343
|
+
</label>
|
|
344
|
+
`}
|
|
345
|
+
</div>
|
|
346
|
+
<button type="button" class="png" title="Download the graph as a picture" ?disabled=${this.drawn.arguments.length === 0} @click=${() => this.export()}>
|
|
347
|
+
<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true"><path d="M12 3v12m0 0l-5-5m5 5l5-5M4 19h16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /></svg>
|
|
348
|
+
PNG
|
|
349
|
+
</button>
|
|
350
|
+
${stages === null
|
|
351
|
+
? nothing
|
|
352
|
+
: html `
|
|
353
|
+
<div class="stages">
|
|
354
|
+
<button type="button" class="previous" title="Previous stage of the computation" aria-label="Previous stage" ?disabled=${this.stage <= 0} @click=${() => this.goTo(this.stage - 1)}>◀</button>
|
|
355
|
+
<span class="stage" title="Every step of the computation keeps its own context: browse them to see how the graph is built">Stage ${this.stage} / ${stages.last}</span>
|
|
356
|
+
<button type="button" class="next" title="Next stage of the computation" aria-label="Next stage" ?disabled=${this.stage >= stages.last} @click=${() => this.goTo(this.stage + 1)}>▶</button>
|
|
357
|
+
</div>
|
|
358
|
+
`}
|
|
359
|
+
</div>
|
|
360
|
+
<div class="area">
|
|
361
|
+
<div class="canvas"></div>
|
|
362
|
+
${this.drawn.arguments.length === 0 && stages !== null ? html `<div class="none">No arguments at this stage.</div>` : nothing}
|
|
363
|
+
${this.popup(abstract)}
|
|
364
|
+
</div>
|
|
365
|
+
`;
|
|
366
|
+
}
|
|
367
|
+
popup(abstract) {
|
|
368
|
+
const argument = this.drawn.arguments.find(it => it.id === this.shown);
|
|
369
|
+
if (argument === undefined)
|
|
370
|
+
return nothing;
|
|
371
|
+
const { by, on } = attacksAround(this.drawn, argument.id);
|
|
372
|
+
const kind = kindOf(argument, abstract);
|
|
373
|
+
const attack = (id, type, target) => html `
|
|
374
|
+
<span class="attack">${this.chip(id)}${abstract || type === null ? nothing : html `<span class="type">${type}${target !== null && target !== argument.id ? html ` on ${this.chip(target)}` : nothing}</span>`}</span>
|
|
375
|
+
`;
|
|
376
|
+
return html `
|
|
377
|
+
<div class="popup" part="popup" role="tooltip">
|
|
378
|
+
<div class="header">
|
|
379
|
+
${this.chip(argument.id)}
|
|
380
|
+
<span class="label">${argument.label === 'na' ? 'not labelled yet' : argument.label}</span>
|
|
381
|
+
${kind === 'assumption' || kind === 'premise' ? html `<span class="kind">${kind}</span>` : nothing}
|
|
382
|
+
</div>
|
|
383
|
+
${abstract ? nothing : this.row('Conclusion', html `<div class="term">${argument.conclusion}</div>`)}
|
|
384
|
+
${kind === 'rule' ? this.row('Top rule', html `<div class="term">${argument.topRule}</div>`) : nothing}
|
|
385
|
+
${abstract ? nothing : this.row('Built on', this.chips(argument.supports.map(id => this.chip(id))))}
|
|
386
|
+
${this.row('Attacked by', this.chips(by.map(it => attack(it.from, it.type, it.on))))}
|
|
387
|
+
${this.row('Attacks', this.chips(on.map(it => attack(it.to, it.type, it.on))))}
|
|
388
|
+
</div>
|
|
389
|
+
`;
|
|
390
|
+
}
|
|
391
|
+
row(title, content) {
|
|
392
|
+
return html `<div class="row"><div class="title">${title}</div>${content}</div>`;
|
|
393
|
+
}
|
|
394
|
+
chips(items) {
|
|
395
|
+
return html `<div class="chips">${items.length === 0 ? html `<span class="muted">none</span>` : items}</div>`;
|
|
396
|
+
}
|
|
397
|
+
// An argument by its name, in the colour of its label
|
|
398
|
+
chip(id) {
|
|
399
|
+
const argument = this.drawn.arguments.find(it => it.id === id);
|
|
400
|
+
const label = argument?.label ?? 'na';
|
|
401
|
+
const name = argument === undefined ? id : nameOf(argument, isAbstract(this.drawn));
|
|
402
|
+
return html `<span class="chip ${label}">${name}</span>`;
|
|
403
|
+
}
|
|
404
|
+
static { this.styles = [
|
|
405
|
+
tokens,
|
|
406
|
+
css `
|
|
407
|
+
:host {
|
|
408
|
+
display: flex;
|
|
409
|
+
flex-direction: column;
|
|
410
|
+
min-height: 200px;
|
|
411
|
+
background: var(--_surface);
|
|
412
|
+
font-size: 13px;
|
|
413
|
+
}
|
|
414
|
+
.bar {
|
|
415
|
+
display: flex;
|
|
416
|
+
flex-wrap: wrap;
|
|
417
|
+
align-items: center;
|
|
418
|
+
gap: 6px 16px;
|
|
419
|
+
padding: 6px 10px;
|
|
420
|
+
border-bottom: 1px solid var(--_border);
|
|
421
|
+
color: var(--_muted);
|
|
422
|
+
}
|
|
423
|
+
.legend {
|
|
424
|
+
display: flex;
|
|
425
|
+
align-items: center;
|
|
426
|
+
gap: 14px;
|
|
427
|
+
margin-right: auto;
|
|
428
|
+
}
|
|
429
|
+
.item {
|
|
430
|
+
display: inline-flex;
|
|
431
|
+
align-items: center;
|
|
432
|
+
gap: 6px;
|
|
433
|
+
}
|
|
434
|
+
.toggle {
|
|
435
|
+
cursor: pointer;
|
|
436
|
+
user-select: none;
|
|
437
|
+
}
|
|
438
|
+
/* attacks take the colour of the attacker: the legend shows the stroke alone */
|
|
439
|
+
.line {
|
|
440
|
+
display: inline-block;
|
|
441
|
+
width: 26px;
|
|
442
|
+
border-top: 2px solid var(--_muted);
|
|
443
|
+
}
|
|
444
|
+
.line.support {
|
|
445
|
+
border-top: 2px dashed var(--_support);
|
|
446
|
+
}
|
|
447
|
+
button {
|
|
448
|
+
display: inline-flex;
|
|
449
|
+
align-items: center;
|
|
450
|
+
gap: 4px;
|
|
451
|
+
font: inherit;
|
|
452
|
+
color: var(--_text);
|
|
453
|
+
background: var(--_surface);
|
|
454
|
+
border: 1px solid var(--_border);
|
|
455
|
+
border-radius: 4px;
|
|
456
|
+
padding: 2px 8px;
|
|
457
|
+
cursor: pointer;
|
|
458
|
+
}
|
|
459
|
+
button:hover:not(:disabled) {
|
|
460
|
+
background: var(--_hover);
|
|
461
|
+
}
|
|
462
|
+
button:disabled {
|
|
463
|
+
opacity: 0.5;
|
|
464
|
+
cursor: default;
|
|
465
|
+
}
|
|
466
|
+
.stages {
|
|
467
|
+
display: flex;
|
|
468
|
+
align-items: center;
|
|
469
|
+
gap: 8px;
|
|
470
|
+
}
|
|
471
|
+
.stage {
|
|
472
|
+
min-width: 80px;
|
|
473
|
+
text-align: center;
|
|
474
|
+
font-variant-numeric: tabular-nums;
|
|
475
|
+
}
|
|
476
|
+
.area {
|
|
477
|
+
flex: 1;
|
|
478
|
+
min-height: 0;
|
|
479
|
+
position: relative;
|
|
480
|
+
overflow: hidden;
|
|
481
|
+
}
|
|
482
|
+
.canvas {
|
|
483
|
+
position: absolute;
|
|
484
|
+
inset: 0;
|
|
485
|
+
}
|
|
486
|
+
.none {
|
|
487
|
+
position: absolute;
|
|
488
|
+
top: 40%;
|
|
489
|
+
width: 100%;
|
|
490
|
+
text-align: center;
|
|
491
|
+
color: var(--_muted);
|
|
492
|
+
font-style: italic;
|
|
493
|
+
pointer-events: none;
|
|
494
|
+
}
|
|
495
|
+
.popup {
|
|
496
|
+
position: absolute;
|
|
497
|
+
z-index: 20;
|
|
498
|
+
width: max-content;
|
|
499
|
+
max-width: min(320px, calc(100% - 16px));
|
|
500
|
+
padding: 10px 12px;
|
|
501
|
+
background: var(--_surface);
|
|
502
|
+
border: 1px solid var(--_border);
|
|
503
|
+
border-radius: 8px;
|
|
504
|
+
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.15);
|
|
505
|
+
pointer-events: none;
|
|
506
|
+
}
|
|
507
|
+
.header {
|
|
508
|
+
display: flex;
|
|
509
|
+
align-items: center;
|
|
510
|
+
gap: 8px;
|
|
511
|
+
margin-bottom: 6px;
|
|
512
|
+
}
|
|
513
|
+
.label,
|
|
514
|
+
.kind {
|
|
515
|
+
font-size: 11px;
|
|
516
|
+
font-weight: bold;
|
|
517
|
+
text-transform: uppercase;
|
|
518
|
+
letter-spacing: 0.04em;
|
|
519
|
+
color: var(--_muted);
|
|
520
|
+
}
|
|
521
|
+
.kind {
|
|
522
|
+
font-weight: normal;
|
|
523
|
+
}
|
|
524
|
+
.row {
|
|
525
|
+
display: grid;
|
|
526
|
+
grid-template-columns: 82px 1fr;
|
|
527
|
+
column-gap: 8px;
|
|
528
|
+
align-items: baseline;
|
|
529
|
+
padding: 3px 0;
|
|
530
|
+
}
|
|
531
|
+
.title,
|
|
532
|
+
.muted,
|
|
533
|
+
.type {
|
|
534
|
+
color: var(--_muted);
|
|
535
|
+
}
|
|
536
|
+
.term {
|
|
537
|
+
font-family: var(--_mono);
|
|
538
|
+
word-break: break-word;
|
|
539
|
+
}
|
|
540
|
+
.chips {
|
|
541
|
+
display: flex;
|
|
542
|
+
flex-wrap: wrap;
|
|
543
|
+
gap: 4px;
|
|
544
|
+
}
|
|
545
|
+
.attack {
|
|
546
|
+
display: inline-flex;
|
|
547
|
+
align-items: center;
|
|
548
|
+
gap: 4px;
|
|
549
|
+
}
|
|
550
|
+
.type {
|
|
551
|
+
font-size: 12px;
|
|
552
|
+
}
|
|
553
|
+
.chip {
|
|
554
|
+
color: #ffffff;
|
|
555
|
+
border-radius: 10px;
|
|
556
|
+
padding: 0 8px;
|
|
557
|
+
font-size: 12px;
|
|
558
|
+
background: var(--_unlabelled);
|
|
559
|
+
}
|
|
560
|
+
.chip.in {
|
|
561
|
+
background: var(--_in);
|
|
562
|
+
}
|
|
563
|
+
.chip.out {
|
|
564
|
+
background: var(--_out);
|
|
565
|
+
}
|
|
566
|
+
.chip.und {
|
|
567
|
+
background: var(--_und);
|
|
568
|
+
}
|
|
569
|
+
`,
|
|
570
|
+
]; }
|
|
571
|
+
}
|
|
572
|
+
// The name of an argument drawn: what the theory calls it, in an abstract framework
|
|
573
|
+
function nameOfNode(node) {
|
|
574
|
+
return node.data('name');
|
|
575
|
+
}
|
|
576
|
+
customElements.define('arg2p-graph', Arg2pGraph);
|
|
577
|
+
//# sourceMappingURL=arg2p-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arg2p-graph.js","sourceRoot":"","sources":["../../src/components/arg2p-graph.ts"],"names":[],"mappings":"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"}
|