Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
fd7e342
feat(renderer): migrate core rendering from G6 to Sigma.js (phases 0-1)
Mnikley Jun 10, 2026
e2ab107
feat(renderer): add visual parity for sigma renderer (phase 2)
Mnikley Jun 10, 2026
c1f8227
feat(renderer): wire sigma interactions (phase 3)
Mnikley Jun 10, 2026
f83313f
feat(renderer): render overlays natively on sigma (phase 4)
Mnikley Jun 10, 2026
5913906
feat(renderer): add layout parity via headless @antv/layout (phase 5)
Mnikley Jun 10, 2026
bb94a56
chore(release): remove G6 and release 1.15.0 (phase 6)
Mnikley Jun 10, 2026
cb190f8
fix(bubbles): correct manual-group visibility filter precedence
Mnikley Jun 10, 2026
be9fc04
fix(interactions): group drag, lasso toggle, drag label pinning
Mnikley Jun 10, 2026
f821ea4
fix(renderer): texture black boxes, restyle flicker, hover theft, con…
Mnikley Jun 10, 2026
d3a5e9e
fix(core): listener stacking, style re-apply on rebuild, metrics gate…
Mnikley Jun 10, 2026
4b25352
fix(bubbles): zoom-invariant outlines; implement label placement/clos…
Mnikley Jun 10, 2026
f472233
feat(renderer): restore node badges on sigma
Mnikley Jun 10, 2026
755009b
feat(layout): live-animating ForceAtlas2 via web-worker supervisor
Mnikley Jun 11, 2026
bd51a3b
feat(metrics): replace hand-rolled centralities with graphology-metrics
Mnikley Jun 11, 2026
c75bcb6
feat(bubbles): detect Louvain communities into manual bubble groups
Mnikley Jun 11, 2026
e857f6c
feat(layout): optional noverlap overlap-removal post-pass
Mnikley Jun 11, 2026
fb9f74c
feat(renderer): GLSL borders for circles via @sigma/node-border
Mnikley Jun 11, 2026
891f5b6
fix(renderer): WebGL2-unavailable guard and post-resize redraw
Mnikley Jun 11, 2026
4adf4f1
feat(renderer): edge arrow markers and edge halos
Mnikley Jun 11, 2026
67fd850
feat(renderer): badge size control and scale-with-node option
Mnikley Jun 11, 2026
a8edbfe
feat(ui): dark mode toggle
Mnikley Jun 11, 2026
1d2795b
fix(renderer): keep node labels stable around hover and drag
Mnikley Jun 11, 2026
35e22c0
feat(ui): subtle top-center loading indicator card
Mnikley Jun 11, 2026
f33f6e3
feat(renderer): arrow fill, border color and border size controls
Mnikley Jun 11, 2026
cdc7db7
perf(renderer): remove automatic hover-effect disabling on large graphs
Mnikley Jun 11, 2026
8a8f1a3
fix(ui): widen styling panel to 420px to fit arrow controls on one line
Mnikley Jun 11, 2026
4eec8bf
perf(metrics): compute network metrics lazily only while panel is open
Mnikley Jun 11, 2026
0dfe2ab
fix(bubbles): use integer outline sample stride so zoom never crashes
Mnikley Jun 11, 2026
95a0fc5
fix(ui): use continuous step for float filter sliders so column max s…
Mnikley Jun 11, 2026
59e52f7
feat(bubbles): weighted + resolution-tunable Louvain community detection
Mnikley Jun 11, 2026
3c20368
feat(ui): redesign selection, styling, toolbar and filter for clarity
Mnikley Jun 11, 2026
a084dc1
feat(ui): high-res export, compact header, snap-grid selection HUD
Mnikley Jun 12, 2026
f735b22
feat(ui): compact, density-aware filter panel redesign
Mnikley Jun 12, 2026
79ee96d
feat(ui): rework selection grouping + selection-driven styling cards
Mnikley Jun 12, 2026
58da0f6
fix(cache): eliminate stale assets in dev and web deployment
Mnikley Jun 12, 2026
85db7da
fix(ui): harmonize styling-panel status margins to 8px rhythm
Mnikley Jun 12, 2026
3385056
feat(ui): suppress tooltip on shift+click multi-select
Mnikley Jun 12, 2026
700c491
feat(ui): default selection HUD to top-right corner
Mnikley Jun 12, 2026
f8c944b
fix(ui): clamp anchored popovers to viewport so right edge never trun…
Mnikley Jun 12, 2026
a74dfe7
fix(bubble): prevent phantom self-intersecting outlines on zoom
Mnikley Jun 12, 2026
1043bd5
fix(export): correct dark-mode background, hi-res scaling, label z-order
Mnikley Jun 12, 2026
3876105
feat(graph): add pie-chart nodes, Dagre layout, and workspace transit…
Mnikley Jun 12, 2026
62befb1
feat(graph): add animated directional edge flow on straight edges
Mnikley Jun 12, 2026
cdfbdff
feat(graph): extend edge flow animation to curved edges
Mnikley Jun 12, 2026
e0fb124
feat(graph): add density heatmap and selection glow canvas layer
Mnikley Jun 12, 2026
4e88684
feat(export): add support for SVG vector export, fix PNG exports (blu…
Mnikley Jun 12, 2026
150b1e4
Merge branch 'feat/edge-flow-heatmap' into feat/sigma-renderer
Mnikley Jun 12, 2026
c9549e2
feat(heatmap): replace selection glow with configurable density heatm…
Mnikley Jun 12, 2026
6522333
feat(flow): add comet/chevron edge-flow types plus opacity and densit…
Mnikley Jun 12, 2026
86029a1
style(ui): remove separator between Query and Assistant toolbar pills
Mnikley Jun 13, 2026
016f1eb
fix(style): stop reset-style button claiming it resets positions
Mnikley Jun 13, 2026
4740522
docs: sync docs with post-1.15.0 features and rename AGENTS.md
Mnikley Jun 13, 2026
cb28a37
docs(templates): sync simple-template readme tab with importer
Mnikley Jun 13, 2026
5a50ef8
feat(io): stamp version and persist heatmap in JSON save/load
Mnikley Jun 13, 2026
5e8141b
fix(layout): keep UI blocked during heavy layouts on large graphs
Mnikley Jun 15, 2026
9799846
fix(export): drop unreliable 8x PNG scale, add GPU ceiling margin
Mnikley Jun 15, 2026
f3b55b3
fix(bubble): stabilize group outlines across zoom
Mnikley Jun 15, 2026
19c85eb
fix(io): refresh manual bubble group panel after JSON load
Mnikley Jun 15, 2026
f398a65
fix(bubble): sync group counts, controls, and quadrant button
Mnikley Jun 15, 2026
c1ab0bc
feat(layout): add full-workspace re-layout control
Mnikley Jun 16, 2026
3f94e24
docs(tour): sync guided tour with sigma-branch features and reorder s…
Mnikley Jun 16, 2026
db3f763
feat(layout): add circlepack and random workspace layouts
Mnikley Jun 16, 2026
8c2cc2f
style: normalize formatting to Prettier config
Mnikley Jun 16, 2026
6cb39c1
fix(security): escape untrusted HTML and guard external URL opening
Mnikley Jun 16, 2026
245a522
fix: correct bugs surfaced by static analysis
Mnikley Jun 16, 2026
9f32c20
chore: remove debug stubs and obsolete files
Mnikley Jun 16, 2026
b63c523
chore(repo): add CI, linting, coverage, security policy, and license …
Mnikley Jun 16, 2026
08345a4
docs(changelog): finalize 1.15.0 release notes
Mnikley Jun 16, 2026
5845974
fix(perf): calibrate wheel-zoom and load gates for no-GPU CI runners
Mnikley Jun 16, 2026
23c80ae
fix(perf): detect software rendering via WebGL renderer string
Mnikley Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: CI

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

# Cancel superseded runs on the same ref to save runner minutes.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: Unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm

- name: Install dependencies
run: npm ci

- name: Lint
run: npm run lint

- name: Run tests
run: npm test

perf:
name: Renderer perf gates
runs-on: ubuntu-latest
# Timing/FPS gates can be noisy on shared runners, so this job reports but
# does not block merges. Treat a failure here as a signal to investigate.
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm

- name: Install dependencies
run: npm ci

- name: Run perf benchmark (acceptance gates)
run: node scripts/perf_benchmark.js --assert
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,16 @@
node_modules/
dist/

# Coverage reports (npm run test:coverage)
coverage/

# Generated bundle (rebuilt during dist/build)
src/gll.bundle.js
src/gll.bundle.js.map

# Perf benchmark artifacts (regenerate via npm run perf:fixture / npm run perf)
scripts/fixtures/

# Compiled Java class files
*.class

Expand Down
22 changes: 22 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Dependencies & environments
node_modules/
.venv/

# Build output & generated artifacts
dist/
coverage/
src/lib/
src/gll.bundle.js
src/gll.bundle.js.map
src/**/*_prompt.js
scripts/fixtures/

# Lockfiles
package-lock.json
uv.lock

# Research manuscript (kept as-is)
manuscript/

# Minified vendor files
*.min.js
9 changes: 9 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": true,
"printWidth": 100,
"tabWidth": 2,
"trailingComma": "es5",
"arrowParens": "always",
"endOfLine": "lf"
}
97 changes: 0 additions & 97 deletions AGENTS.md

This file was deleted.

32 changes: 22 additions & 10 deletions API.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,26 +196,38 @@ An edge is an object. `source` and `target` are required and must match node
| `id` | string | `"<source>::<target>"` | Explicit edge id. Auto-generated if omitted. |
| `label` | string | — | Display text along the edge. |
| `description` | string | — | Tooltip text. |
| `type` | string | `"line"` | `line` (straight); also `cubic`, `quadratic`, `polyline`. |
| `type` | string | `"line"` | `line` (straight); also `cubic`, `quadratic`, `polyline`. **Note:** since the Sigma renderer, `polyline` renders as a curve (same as `cubic`/`quadratic`). |
| `style` | object | — | Visual styling — see below. |
| `D4Data` | object | — | Data attributes that define filters — see §6. |

### `edge.style` — line, arrows, halo
### `edge.style` — line, arrows, halo, flow

| Path | Type | Default | Meaning |
| ---------------- | ------- | ------------- | ---------------------------------------------------- |
| `stroke` | hex | `"#403C5390"` | Line colour (last 2 hex digits = alpha). |
| `lineWidth` | number | `0.75` | Line thickness (px). |
| `lineDash` | number | `0` | Dash length; `0` = solid, e.g. `10` = dashed. |
| `startArrow` | boolean | `false` | Arrowhead at the source end. |
| `startArrowType` | string | `"triangle"` | `triangle`/`circle`/`diamond`/`vee`/`rect`/`simple`. |
| `startArrowSize` | number | `8` | Source arrowhead size. |
| `endArrow` | boolean | `false` | Arrowhead at the target end. |
| `endArrowType` | string | `"triangle"` | Same enum as `startArrowType`. |
| `endArrowSize` | number | `8` | Target arrowhead size. |
| `halo` | boolean | `false` | Glow behind the edge. |
| `lineDash` | number | `0` | Dash length. **Note:** kept in the data model and round-trips through export, but the Sigma renderer draws all edges solid (dashes are not rendered in v1). |
| `startArrow` | boolean | `false` | End marker at the source end. |
| `startArrowType` | string | `"arrow"` | `arrow`/`rect`/`diamond`/`circle`/`tee` (⊣ inhibition bar). Legacy G6 names still load and round-trip unchanged (`triangle`/`vee`/`simple` → arrow, `triangleRect`/`square` → rect). |
| `startArrowSize` | number | `8` | Source marker length (graph px). Unset/0 → sized proportionally to the line width. |
| `startArrowColor` | hex | `null` | Source marker fill. `null` → inherits the edge stroke colour. |
| `startArrowBorderColor` | hex | `null` | Source marker border colour. `null` → no border (transparent). |
| `startArrowBorderSize` | number | `0` | Source marker border thickness (px). `0` → auto (~20% of the marker). |
| `endArrow` | boolean | `false` | End marker at the target end. |
| `endArrowType` | string | `"arrow"` | Same enum as `startArrowType`. |
| `endArrowSize` | number | `8` | Target marker length (graph px). |
| `endArrowColor` | hex | `null` | Target marker fill. `null` → inherits the edge stroke colour. |
| `endArrowBorderColor` | hex | `null` | Target marker border colour. `null` → no border (transparent). |
| `endArrowBorderSize` | number | `0` | Target marker border thickness (px). `0` → auto (~20% of the marker). |
| `halo` | boolean | `false` | Glow drawn under the edge (total width = line + 2 × `haloLineWidth`), on straight and curved edges. Selecting an edge widens line and halo together. |
| `haloStroke` | hex | `"#403C53"` | Halo colour. |
| `haloLineWidth` | number | `3` | Halo thickness (px). |
| `flow` | boolean | `false` | Enable the animated source→target flow overlay. |
| `flowType` | string | `"dash"` | `dash` / `pulse` / `comet` / `chevron`. |
| `flowSpeed` | number | `1` | Animation speed multiplier. |
| `flowStroke` | hex | `null` | Flow colour. `null` → derived from the edge stroke (lightened). |
| `flowOpacity` | number | `1` | Multiplies into the overlay colour's alpha (0–1). |
| `flowDensity` | number | `1` | Scales the pattern period (higher = sparser dashes/dots). |

Edge labels use the same `label*` fields as nodes (§4), with edge-specific
defaults: `labelPlacement` defaults to `"center"` (`start`/`center`/`end`),
Expand Down
Loading
Loading