@ai-gui/plugin-bigscreen 0.36.3 → 0.37.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/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
1
  # @ai-gui/plugin-bigscreen
2
2
 
3
+ ## 0.37.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8f3663c: A `graph3d` panel is a 3D model now, not a flat hairball.
8
+
9
+ The new default, `mode: "orbit"`, lays the entities out in space with a spring–electrical
10
+ simulation written for this — repulsion between every pair, springs along the edges, a weak pull
11
+ to the origin so a disconnected component cannot leave the panel, and a falling temperature that
12
+ cools the graph into a shape. It is drawn as a `scatter3D` of entities and a `lines3D` of edges
13
+ inside an invisible cube, lit from both sides so the far half is still readable, with the camera
14
+ turning slowly around it. The layout is deterministic — the starting positions are a hash of the
15
+ node ids — and it is stepped a few steps per animation frame rather than run to convergence, so
16
+ the reader watches the clusters arrive instead of being handed a settled picture. Node colours,
17
+ the type legend, the tooltip and `events.onNodeClick` are unchanged.
18
+
19
+ A graph re-rendered from a growing fence resumes rather than reshuffles: the positions each graph
20
+ settled into are remembered by node id, so the twenty entities already on screen stay where they
21
+ are and only the three that just arrived have to find a place.
22
+
23
+ `mode: "flat"` keeps the previous `graphGL` picture, byte for byte and pinned by a test, for
24
+ graphs big enough that depth hides more than it shows. `rotate: false`, and a host's
25
+ `animate: false`, hand over the settled model without turning it.
26
+
27
+ - ae86ea6: A globe panel can now be drawn on a real earth. `bigscreen({ globe })` takes the host's planet: a
28
+ `baseTexture` (an equirectangular photograph the host serves itself), or a `countries` GeoJSON
29
+ FeatureCollection rasterised onto a 2:1 canvas in the screen's palette, plus `shading`,
30
+ `heightTexture`, `atmosphere` and a `light.time` that puts the terminator where the sun actually
31
+ is. With a host earth the points carry labels only for the largest few and the rest move to a
32
+ tooltip. The fence is unchanged — it still says only where the points and arcs are — and a host
33
+ that sets nothing gets the painted graticule it always got.
34
+ - 84a9e1b: Two panels for provenance: `timeline` and `graph3d`.
35
+
36
+ `timeline` gives every source its own swim-lane and every claim its own point, with a line drawn
37
+ between claims that are related — `contradicts` in the palette's danger red, which is the picture
38
+ the panel exists for: two outlets said things that cannot both be true, and the red segment runs
39
+ between their two rows. Lanes stay in the order they were written, time runs across, the twelve
40
+ claims with the most empty space around them carry a label and the rest are one hover away, and a
41
+ claim with a `url` opens it on click. Up to 24 lanes, 500 claims and 500 links; `at` is ISO 8601;
42
+ `url` must be `http` or `https`, because that string reaches `window.open`.
43
+
44
+ `graph3d` draws entities and typed edges as a knowledge graph, laid out by force-atlas2 on the GPU
45
+ through `echarts-gl`'s `graphGL`. A type's colour is a hash of its name, so `outlet` is the same
46
+ colour in every panel on the wall whatever order the types appear in, and `types` pins any of them
47
+ to a colour of its own. Nodes are sized by degree or by `value`, the twenty busiest carry a label
48
+ along with `focus`, the types are keyed in the panel's corner in HTML over the canvas, and
49
+ `rotate` says whether the layout settles in front of the reader or arrives settled. Up to 2000
50
+ nodes and 5000 edges — a graph near that size also needs the host to raise `maxSourceBytes`.
51
+ Without the optional `echarts-gl` peer the panel shows the same one-line note the globe does.
52
+
53
+ New `bigscreen({ events })`: `onItemClick` takes a timeline click, `url` and all, and `onNodeClick`
54
+ gives a host something to do with an entity — a node is not a link, so there is no default.
55
+
56
+ ### Patch Changes
57
+
58
+ - @ai-gui/core@0.37.0
59
+
3
60
  ## 0.36.3
4
61
 
5
62
  ### Patch Changes
package/README.md CHANGED
@@ -8,12 +8,13 @@ model lays out.
8
8
 
9
9
  ```sh
10
10
  pnpm add @ai-gui/plugin-bigscreen echarts
11
- # for the chart3d and globe panels
11
+ # for the chart3d, globe and graph3d panels
12
12
  pnpm add echarts-gl
13
13
  ```
14
14
 
15
- `echarts-gl` is an optional peer: without it the 3D and globe panels show a one-line note and the
16
- rest of the wall is unaffected. It is imported lazily, once, the first time such a panel mounts.
15
+ `echarts-gl` is an optional peer: without it the `chart3d`, `globe` and `graph3d` panels show a
16
+ one-line note and the rest of the wall is unaffected. It is imported lazily, once, the first time
17
+ such a panel mounts.
17
18
 
18
19
  ## Usage
19
20
 
@@ -54,10 +55,26 @@ The model then emits:
54
55
  | `chart` | any ECharts option in the wall's palette, with entrance animation | `option` |
55
56
  | `chart3d` | `bar3D`, `scatter3D`, `surface` or `line3D`, slowly turning | `type`, `data`, `xAxis`, `yAxis`, `rotate` |
56
57
  | `globe` | a globe with arcing routes and sized points | `arcs`, `points`, `rotate` |
58
+ | `timeline` | a swim-lane per source, a point per claim, lines between claims — `contradicts` in danger red | `lanes`, `items`, `links`, `from`, `to` |
59
+ | `graph3d` | entities and typed edges, laid out by force-atlas2 on the GPU, coloured by type | `nodes`, `edges`, `types`, `focus`, `rotate` |
57
60
 
58
61
  Every panel takes `title`, `span` (columns of the grid, default 4 of 12) and `height`. The screen
59
62
  takes `title`, `subtitle`, `theme` (`dark` by default, or `light`), `accent` (hex) and `columns`.
60
63
 
64
+ ## Clicks
65
+
66
+ A `timeline` claim with a `url` opens it in a new tab, opener cut off. A host that has its own
67
+ idea of what a claim is takes the click instead, and a graph entity has no default at all:
68
+
69
+ ```ts
70
+ bigscreen({
71
+ events: {
72
+ onItemClick: (item) => openClaim(item.id),
73
+ onNodeClick: (node) => selectEntity(node.id),
74
+ },
75
+ })
76
+ ```
77
+
61
78
  ## Why the protocol looks like this
62
79
 
63
80
  **Presentation, not evidence.** [`@ai-gui/plugin-dashboard`](../plugin-dashboard/README.md) is the