@medicine-wheel/graph-viz 0.10.0 → 0.12.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/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@
9
9
  */
10
10
  export { MedicineWheelGraph } from './MedicineWheelGraph.js';
11
11
  export type { MWGraphNode, MWGraphNodePosition, MWGraphNodePositions, MWGraphLink, MWGraphData, LinkStyle, LayoutMode, WheelLayoutConfig, MedicineWheelGraphProps, QuadrantGeometry, } from './types.js';
12
+ export { applyLineageLayout, DEFAULT_LINEAGE_LAYOUT, } from './lineage-layout.js';
13
+ export type { LineageLayoutConfig, LineageLayoutResult } from './lineage-layout.js';
12
14
  export { applyWheelLayout, DEFAULT_LAYOUT, getQuadrantGeometries, quadrantArcPath, curvedLinkPath, directionLabelPosition, directionForPoint, constrainToWheel, } from './layout.js';
13
15
  export { nodesToGraphNodes, edgesToGraphLinks, relationsToGraphLinks, buildGraphData, } from './converters.js';
14
16
  export type { KinshipGraphNode, KinshipGraphEdge, FlowDiagramNode, FlowDiagramLink, DirectionWheelSegment, TimelineEntry, } from './rsis-viz.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -9,11 +9,14 @@
9
9
  * @packageDocumentation
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.toMermaidDiagram = exports.toCeremonyTimelineData = exports.toDirectionWheelData = exports.toReciprocityFlowDiagram = exports.toKinshipGraphLayout = exports.buildGraphData = exports.relationsToGraphLinks = exports.edgesToGraphLinks = exports.nodesToGraphNodes = exports.constrainToWheel = exports.directionForPoint = exports.directionLabelPosition = exports.curvedLinkPath = exports.quadrantArcPath = exports.getQuadrantGeometries = exports.DEFAULT_LAYOUT = exports.applyWheelLayout = exports.MedicineWheelGraph = void 0;
12
+ exports.toMermaidDiagram = exports.toCeremonyTimelineData = exports.toDirectionWheelData = exports.toReciprocityFlowDiagram = exports.toKinshipGraphLayout = exports.buildGraphData = exports.relationsToGraphLinks = exports.edgesToGraphLinks = exports.nodesToGraphNodes = exports.constrainToWheel = exports.directionForPoint = exports.directionLabelPosition = exports.curvedLinkPath = exports.quadrantArcPath = exports.getQuadrantGeometries = exports.DEFAULT_LAYOUT = exports.applyWheelLayout = exports.DEFAULT_LINEAGE_LAYOUT = exports.applyLineageLayout = exports.MedicineWheelGraph = void 0;
13
13
  // ── Component ───────────────────────────────────────────────────────────────
14
14
  var MedicineWheelGraph_js_1 = require("./MedicineWheelGraph.js");
15
15
  Object.defineProperty(exports, "MedicineWheelGraph", { enumerable: true, get: function () { return MedicineWheelGraph_js_1.MedicineWheelGraph; } });
16
16
  // ── Layout Engine ───────────────────────────────────────────────────────────
17
+ var lineage_layout_js_1 = require("./lineage-layout.js");
18
+ Object.defineProperty(exports, "applyLineageLayout", { enumerable: true, get: function () { return lineage_layout_js_1.applyLineageLayout; } });
19
+ Object.defineProperty(exports, "DEFAULT_LINEAGE_LAYOUT", { enumerable: true, get: function () { return lineage_layout_js_1.DEFAULT_LINEAGE_LAYOUT; } });
17
20
  var layout_js_1 = require("./layout.js");
18
21
  Object.defineProperty(exports, "applyWheelLayout", { enumerable: true, get: function () { return layout_js_1.applyWheelLayout; } });
19
22
  Object.defineProperty(exports, "DEFAULT_LAYOUT", { enumerable: true, get: function () { return layout_js_1.DEFAULT_LAYOUT; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+EAA+E;AAC/E,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAgB3B,+EAA+E;AAC/E,yCASqB;AARnB,6GAAA,gBAAgB,OAAA;AAChB,2GAAA,cAAc,OAAA;AACd,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,mHAAA,sBAAsB,OAAA;AACtB,8GAAA,iBAAiB,OAAA;AACjB,6GAAA,gBAAgB,OAAA;AAGlB,+EAA+E;AAC/E,iDAKyB;AAJvB,kHAAA,iBAAiB,OAAA;AACjB,kHAAA,iBAAiB,OAAA;AACjB,sHAAA,qBAAqB,OAAA;AACrB,+GAAA,cAAc,OAAA;AAahB,6CAMuB;AALrB,mHAAA,oBAAoB,OAAA;AACpB,uHAAA,wBAAwB,OAAA;AACxB,mHAAA,oBAAoB,OAAA;AACpB,qHAAA,sBAAsB,OAAA;AACtB,+GAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+EAA+E;AAC/E,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAgB3B,+EAA+E;AAC/E,yDAG6B;AAF3B,uHAAA,kBAAkB,OAAA;AAClB,2HAAA,sBAAsB,OAAA;AAIxB,yCASqB;AARnB,6GAAA,gBAAgB,OAAA;AAChB,2GAAA,cAAc,OAAA;AACd,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,mHAAA,sBAAsB,OAAA;AACtB,8GAAA,iBAAiB,OAAA;AACjB,6GAAA,gBAAgB,OAAA;AAGlB,+EAA+E;AAC/E,iDAKyB;AAJvB,kHAAA,iBAAiB,OAAA;AACjB,kHAAA,iBAAiB,OAAA;AACjB,sHAAA,qBAAqB,OAAA;AACrB,+GAAA,cAAc,OAAA;AAahB,6CAMuB;AALrB,mHAAA,oBAAoB,OAAA;AACpB,uHAAA,wBAAwB,OAAA;AACxB,mHAAA,oBAAoB,OAAA;AACpB,qHAAA,sBAAsB,OAAA;AACtB,+GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Lineage layout — the chronicle as a spine you read left to right.
3
+ *
4
+ * `applyWheelLayout` answers "what direction is this?" and answers it well. It
5
+ * cannot answer "what came before this?", because a circle has no before. At 85
6
+ * episodes with 93 of them in one quadrant, the wheel is also simply full.
7
+ *
8
+ * So: **x is time, y is direction.** Each episode sits at its own date along a
9
+ * horizontal spine, in the band of its direction, and a relation arcs from what
10
+ * an episode continues from to the episode itself.
11
+ *
12
+ * ## This layout requires `metadata.occurred_at`
13
+ *
14
+ * `created_at` records when the wheel *learned* of a node, not when the thing
15
+ * happened. Measured 2026-09-05 before the backfill: 0 of 84 episodes carried
16
+ * an occurrence date, and twelve May episodes shared one September `created_at`
17
+ * from a single import batch — so a timeline drawn on `created_at` would have
18
+ * stacked four months of work on one pixel and looked correct while being
19
+ * wrong.
20
+ *
21
+ * Migration 0002 backfilled `occurred_at` from each `episode.yaml`; 34 of 76
22
+ * episodes had a `created_at` that disagreed with when they happened, episode
23
+ * 001 by four months. Nodes still lacking it fall back to `created_at` and are
24
+ * reported in `undated`, so a caller can say so rather than implying a history
25
+ * the data does not have.
26
+ *
27
+ * Ported from the mechanism in `/src/Miadi/app/chronicle/components/
28
+ * LineageWeb.tsx`, which solved this for the chronicle app first.
29
+ */
30
+ import type { MWGraphData } from './types.js';
31
+ import type { DirectionName } from '@medicine-wheel/ontology-core';
32
+ export interface LineageLayoutConfig {
33
+ /** Horizontal padding either side of the spine. */
34
+ marginX: number;
35
+ /** Minimum pixels between adjacent nodes before the canvas widens. */
36
+ minStep: number;
37
+ /** Vertical centre of each direction's band. */
38
+ bandY: Record<DirectionName, number>;
39
+ /** Band for a node carrying no direction. */
40
+ undirectedY: number;
41
+ /**
42
+ * Vertical stagger applied to consecutive nodes in the same band, so episodes
43
+ * on the same day do not land on one another. Deterministic, not random —
44
+ * the same graph must lay out identically twice or a saved disposition is
45
+ * meaningless.
46
+ */
47
+ stagger: number;
48
+ }
49
+ export declare const DEFAULT_LINEAGE_LAYOUT: LineageLayoutConfig;
50
+ export interface LineageLayoutResult extends MWGraphData {
51
+ /** Canvas width the spine needs — grows with the corpus. */
52
+ width: number;
53
+ /** Earliest and latest date placed, or null when nothing was datable. */
54
+ span: {
55
+ from: string;
56
+ to: string;
57
+ } | null;
58
+ /**
59
+ * Ids placed by `created_at` because they carry no `occurred_at`. Surfaced so
60
+ * a caller can name them rather than presenting registration order as
61
+ * history.
62
+ */
63
+ undated: string[];
64
+ }
65
+ /**
66
+ * Lay a graph out as a chronological spine.
67
+ *
68
+ * Returns new node objects rather than mutating — `applyWheelLayout` mutates in
69
+ * place, and a caller switching between the two needs the wheel's positions to
70
+ * survive the round trip.
71
+ */
72
+ export declare function applyLineageLayout(data: MWGraphData, config?: Partial<LineageLayoutConfig>): LineageLayoutResult;
73
+ //# sourceMappingURL=lineage-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-layout.d.ts","sourceRoot":"","sources":["../src/lineage-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,sBAAsB,EAAE,mBAMpC,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAiBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,mBAAmB,CA6CrB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Lineage layout — the chronicle as a spine you read left to right.
4
+ *
5
+ * `applyWheelLayout` answers "what direction is this?" and answers it well. It
6
+ * cannot answer "what came before this?", because a circle has no before. At 85
7
+ * episodes with 93 of them in one quadrant, the wheel is also simply full.
8
+ *
9
+ * So: **x is time, y is direction.** Each episode sits at its own date along a
10
+ * horizontal spine, in the band of its direction, and a relation arcs from what
11
+ * an episode continues from to the episode itself.
12
+ *
13
+ * ## This layout requires `metadata.occurred_at`
14
+ *
15
+ * `created_at` records when the wheel *learned* of a node, not when the thing
16
+ * happened. Measured 2026-09-05 before the backfill: 0 of 84 episodes carried
17
+ * an occurrence date, and twelve May episodes shared one September `created_at`
18
+ * from a single import batch — so a timeline drawn on `created_at` would have
19
+ * stacked four months of work on one pixel and looked correct while being
20
+ * wrong.
21
+ *
22
+ * Migration 0002 backfilled `occurred_at` from each `episode.yaml`; 34 of 76
23
+ * episodes had a `created_at` that disagreed with when they happened, episode
24
+ * 001 by four months. Nodes still lacking it fall back to `created_at` and are
25
+ * reported in `undated`, so a caller can say so rather than implying a history
26
+ * the data does not have.
27
+ *
28
+ * Ported from the mechanism in `/src/Miadi/app/chronicle/components/
29
+ * LineageWeb.tsx`, which solved this for the chronicle app first.
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.DEFAULT_LINEAGE_LAYOUT = void 0;
33
+ exports.applyLineageLayout = applyLineageLayout;
34
+ exports.DEFAULT_LINEAGE_LAYOUT = {
35
+ marginX: 80,
36
+ minStep: 19,
37
+ bandY: { east: 120, south: 260, west: 400, north: 540 },
38
+ undirectedY: 670,
39
+ stagger: 16,
40
+ };
41
+ /** When a node says it happened, falling back to when the wheel learned of it. */
42
+ function occurrenceDate(node) {
43
+ const occurred = node.metadata?.occurred_at;
44
+ if (typeof occurred === 'string' && occurred)
45
+ return { date: occurred, exact: true };
46
+ // `created_at` sits on the node itself, not in metadata — `buildGraphData`
47
+ // keeps the whole RelationalNode on `data`, which is where to find it.
48
+ const created = node.data?.created_at ??
49
+ node.metadata?.created_at;
50
+ if (typeof created === 'string' && created)
51
+ return { date: created.slice(0, 10), exact: false };
52
+ return { date: '', exact: false };
53
+ }
54
+ /**
55
+ * Lay a graph out as a chronological spine.
56
+ *
57
+ * Returns new node objects rather than mutating — `applyWheelLayout` mutates in
58
+ * place, and a caller switching between the two needs the wheel's positions to
59
+ * survive the round trip.
60
+ */
61
+ function applyLineageLayout(data, config = {}) {
62
+ const cfg = { ...exports.DEFAULT_LINEAGE_LAYOUT, ...config };
63
+ const dated = data.nodes.map((node) => ({ node, ...occurrenceDate(node) }));
64
+ const undated = dated.filter((d) => !d.exact).map((d) => d.node.id);
65
+ // Sort by date, then by id — a stable tiebreak so two nodes on the same day
66
+ // keep their order between renders.
67
+ const sorted = [...dated].sort((a, b) => {
68
+ const byDate = a.date.localeCompare(b.date);
69
+ return byDate !== 0 ? byDate : a.node.id.localeCompare(b.node.id);
70
+ });
71
+ const width = Math.max(1180, sorted.length * cfg.minStep + cfg.marginX * 2);
72
+ const step = sorted.length > 1 ? (width - cfg.marginX * 2) / (sorted.length - 1) : 0;
73
+ // Stagger counts within a band, not across the whole row: two neighbours in
74
+ // different directions are already far apart vertically and do not need it.
75
+ const seenInBand = new Map();
76
+ const nodes = sorted.map((entry, index) => {
77
+ const band = entry.node.direction ?? 'undirected';
78
+ const nth = seenInBand.get(band) ?? 0;
79
+ seenInBand.set(band, nth + 1);
80
+ const baseY = entry.node.direction
81
+ ? cfg.bandY[entry.node.direction]
82
+ : cfg.undirectedY;
83
+ return {
84
+ ...entry.node,
85
+ x: cfg.marginX + index * step,
86
+ // -stagger, 0, +stagger, repeating — enough to separate same-day nodes
87
+ // without breaking the band's readability.
88
+ y: baseY + ((nth % 3) - 1) * cfg.stagger,
89
+ };
90
+ });
91
+ const withDates = sorted.filter((d) => d.date);
92
+ const span = withDates.length > 0
93
+ ? { from: withDates[0].date, to: withDates[withDates.length - 1].date }
94
+ : null;
95
+ return { nodes, links: data.links, width, span, undated };
96
+ }
97
+ //# sourceMappingURL=lineage-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage-layout.js","sourceRoot":"","sources":["../src/lineage-layout.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medicine-wheel/graph-viz",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Medicine Wheel graph visualization — circular layout with four-direction node positioning, ceremony-aware edges, and OCAP® indicators",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -47,7 +47,7 @@
47
47
  "directory": "src/graph-viz"
48
48
  },
49
49
  "dependencies": {
50
- "@medicine-wheel/ontology-core": "^0.10.0"
50
+ "@medicine-wheel/ontology-core": "^0.12.0"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "react": ">=18.0.0",