@medicine-wheel/graph-viz 0.11.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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lineage-layout.d.ts +73 -0
- package/dist/lineage-layout.d.ts.map +1 -0
- package/dist/lineage-layout.js +97 -0
- package/dist/lineage-layout.js.map +1 -0
- package/package.json +2 -2
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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.
|
|
50
|
+
"@medicine-wheel/ontology-core": "^0.12.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"react": ">=18.0.0",
|