structured-context-map-views 0.1.0 → 0.2.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.
Files changed (32) hide show
  1. package/dist/{definition-KuPoA1mO.js → definition-Cft28YUA.js} +41 -7
  2. package/dist/definition-Cft28YUA.js.map +1 -0
  3. package/dist/index.js +385 -229
  4. package/dist/index.js.map +1 -1
  5. package/dist/node.js +2 -2
  6. package/dist/node.js.map +1 -1
  7. package/dist/styles.css +31 -0
  8. package/dist/types/core/annotations.d.ts +47 -0
  9. package/dist/types/core/definition.d.ts +6 -1
  10. package/dist/types/core/{schemas/definition.d.ts → format/definition-schema.d.ts} +18 -0
  11. package/dist/types/core/{schemas → format}/index.d.ts +33 -1
  12. package/dist/types/core/{schemas → format}/settings.d.ts +14 -0
  13. package/dist/types/index.d.ts +4 -1
  14. package/dist/types/layouts/EdgeOverlay.d.ts +1 -1
  15. package/dist/types/layouts/LandscapeLayout.d.ts +1 -1
  16. package/dist/types/layouts/MapView.d.ts +8 -2
  17. package/dist/types/layouts/NodeCard.d.ts +1 -1
  18. package/dist/types/layouts/ParameterControls.d.ts +3 -3
  19. package/dist/types/layouts/ParameterInputs.d.ts +21 -0
  20. package/dist/types/layouts/TreeLayout.d.ts +1 -1
  21. package/dist/types/layouts/XYLayout.d.ts +1 -1
  22. package/dist/types/layouts/annotations-context.d.ts +4 -0
  23. package/dist/types/layouts/useParameterControls.d.ts +13 -0
  24. package/dist/types/node/index.d.ts +1 -1
  25. package/package.json +3 -3
  26. package/dist/definition-KuPoA1mO.js.map +0 -1
  27. package/dist/types/core/index.d.ts +0 -6
  28. /package/dist/types/core/{schemas → format}/landscape-layout.d.ts +0 -0
  29. /package/dist/types/core/{schemas → format}/param-ref.d.ts +0 -0
  30. /package/dist/types/core/{schemas → format}/schema-url.d.ts +0 -0
  31. /package/dist/types/core/{schemas → format}/tree-layout.d.ts +0 -0
  32. /package/dist/types/core/{schemas → format}/xy-layout.d.ts +0 -0
@@ -138,6 +138,24 @@ export declare const definitionSchema: {
138
138
  readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
139
139
  }];
140
140
  };
141
+ readonly validation: {
142
+ readonly description: string;
143
+ readonly default: "off";
144
+ readonly anyOf: readonly [{
145
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/settings.json#/$defs/validationLevel";
146
+ }, {
147
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
148
+ }];
149
+ };
150
+ readonly validationSources: {
151
+ readonly description: string;
152
+ readonly default: readonly ["schema", "hierarchy", "rule"];
153
+ readonly anyOf: readonly [{
154
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/settings.json#/$defs/validationSources";
155
+ }, {
156
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
157
+ }];
158
+ };
141
159
  };
142
160
  };
143
161
  readonly edges: {
@@ -1,4 +1,4 @@
1
- import { definitionSchema } from './definition';
1
+ import { definitionSchema } from './definition-schema';
2
2
  import { landscapeLayoutSchema } from './landscape-layout';
3
3
  import { settingsSchema } from './settings';
4
4
  import { treeLayoutSchema } from './tree-layout';
@@ -139,6 +139,24 @@ export declare const MAP_VIEW_SCHEMAS: readonly [{
139
139
  readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
140
140
  }];
141
141
  };
142
+ readonly validation: {
143
+ readonly description: string;
144
+ readonly default: "off";
145
+ readonly anyOf: readonly [{
146
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/settings.json#/$defs/validationLevel";
147
+ }, {
148
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
149
+ }];
150
+ };
151
+ readonly validationSources: {
152
+ readonly description: string;
153
+ readonly default: readonly ["schema", "hierarchy", "rule"];
154
+ readonly anyOf: readonly [{
155
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/settings.json#/$defs/validationSources";
156
+ }, {
157
+ readonly $ref: "https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated/latest/definition.json#/$defs/paramRef";
158
+ }];
159
+ };
142
160
  };
143
161
  };
144
162
  readonly edges: {
@@ -175,6 +193,20 @@ export declare const MAP_VIEW_SCHEMAS: readonly [{
175
193
  readonly description: 'card: a box with the title and selected fields. shape: a compact marker with a tooltip.';
176
194
  readonly enum: readonly ['card', 'shape'];
177
195
  };
196
+ readonly validationLevel: {
197
+ readonly title: 'Validation overlay';
198
+ readonly description: 'The lowest severity of validation result shown on nodes, or off. error: only errors. warning: errors and warnings. info: everything.';
199
+ readonly enum: readonly ['off', 'error', 'warning', 'info'];
200
+ };
201
+ readonly validationSources: {
202
+ readonly title: 'Validation sources';
203
+ readonly description: 'Which kinds of validation result are shown. schema: a node failing its schema. hierarchy: a node under a parent type it is not allowed under. rule: a schema rule violation.';
204
+ readonly type: 'array';
205
+ readonly items: {
206
+ readonly enum: readonly ['schema', 'hierarchy', 'rule'];
207
+ };
208
+ readonly uniqueItems: true;
209
+ };
178
210
  readonly fieldList: {
179
211
  readonly title: 'Fields';
180
212
  readonly type: 'array';
@@ -14,6 +14,20 @@ export declare const settingsSchema: {
14
14
  readonly description: 'card: a box with the title and selected fields. shape: a compact marker with a tooltip.';
15
15
  readonly enum: readonly ['card', 'shape'];
16
16
  };
17
+ readonly validationLevel: {
18
+ readonly title: 'Validation overlay';
19
+ readonly description: 'The lowest severity of validation result shown on nodes, or off. error: only errors. warning: errors and warnings. info: everything.';
20
+ readonly enum: readonly ['off', 'error', 'warning', 'info'];
21
+ };
22
+ readonly validationSources: {
23
+ readonly title: 'Validation sources';
24
+ readonly description: 'Which kinds of validation result are shown. schema: a node failing its schema. hierarchy: a node under a parent type it is not allowed under. rule: a schema rule violation.';
25
+ readonly type: 'array';
26
+ readonly items: {
27
+ readonly enum: readonly ['schema', 'hierarchy', 'rule'];
28
+ };
29
+ readonly uniqueItems: true;
30
+ };
17
31
  readonly fieldList: {
18
32
  readonly title: 'Fields';
19
33
  readonly type: 'array';
@@ -2,6 +2,9 @@
2
2
  * The package's public surface. Everything else (layouts, node cards, the edge overlay, the projections)
3
3
  * is internal; add an export here when a host needs it.
4
4
  */
5
- export { MAP_VIEW_SCHEMAS, type MapViewDefinition, MapViewDefinitionError, mapViewsForSchema, type ParameterValues, parseMapViewDefinition, resolveParameterValues, selectionFilter, } from './core';
5
+ export { type AnnotationIndex, type AnnotationSource, annotationsFrom, type NodeAnnotation, type Severity, type UnattachedAnnotation, type ValidationInput, worstSeverity, } from './core/annotations';
6
+ export { MAP_VIEW_SCHEMAS, type MapViewDefinition, MapViewDefinitionError, mapViewsForSchema, type Parameter, type ParameterControl, type ParameterValues, parseMapViewDefinition, resolveParameterValues, selectionFilter, viewValidationLevel, } from './core/definition';
6
7
  export { MapView } from './layouts/MapView';
7
8
  export { ParameterControls } from './layouts/ParameterControls';
9
+ export { MultiSelectParameterInput, ParameterInput, SelectParameterInput, ToggleParameterInput, } from './layouts/ParameterInputs';
10
+ export { type ParameterControlState, useParameterControls } from './layouts/useParameterControls';
@@ -1,4 +1,4 @@
1
- import type { Orientation } from '../core';
1
+ import type { Orientation } from '../core/definition';
2
2
  /**
3
3
  * A connector between two occurrences. `cross` links (e.g. extra parents) are drawn dashed.
4
4
  * `id` tells apart several links between the same occurrences; straight links between the same
@@ -1,4 +1,4 @@
1
- import { type LandscapeLayoutConfig } from '../core';
1
+ import type { LandscapeLayoutConfig } from '../core/definition';
2
2
  import type { LayoutProps } from './TreeLayout';
3
3
  /**
4
4
  * Nested containers following the layout's grouping levels; the last level is drawn as nodes.
@@ -1,12 +1,18 @@
1
1
  import type { SpaceGraph, SpaceNode } from 'structured-context/api';
2
- import { type MapViewDefinition, type ParameterValues } from '../core';
2
+ import { type AnnotationIndex } from '../core/annotations';
3
+ import { type MapViewDefinition, type ParameterValues } from '../core/definition';
3
4
  type Props = {
4
5
  definition: MapViewDefinition;
5
6
  graph: SpaceGraph;
6
7
  /** Current parameter values (host-owned session state); missing values use defaults. */
7
8
  values?: ParameterValues;
9
+ /**
10
+ * Validation results by node (see `annotationsFrom`). Which of them show, and at what severity, is
11
+ * the region's `nodes.validation` setting; with none supplied, nothing is drawn.
12
+ */
13
+ annotations?: AnnotationIndex;
8
14
  onNodeSelect?: (node: SpaceNode) => void;
9
15
  };
10
16
  /** Renders a map view definition against a space. Sizes to its container and scrolls within it. */
11
- export declare function MapView({ definition, graph, values, onNodeSelect }: Props): import("react").JSX.Element;
17
+ export declare function MapView({ definition, graph, values, annotations, onNodeSelect }: Props): import("react").JSX.Element;
12
18
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { SpaceNode } from 'structured-context/api';
2
- import type { NodesConfig } from '../core';
2
+ import type { NodesConfig } from '../core/definition';
3
3
  type Props = {
4
4
  node: SpaceNode;
5
5
  /** The node's subtree is rendered at another occurrence. */
@@ -1,4 +1,4 @@
1
- import { type MapViewDefinition, type ParameterValues } from '../core';
1
+ import type { MapViewDefinition, ParameterValues } from '../core/definition';
2
2
  type Props = {
3
3
  definition: MapViewDefinition;
4
4
  /** Host-owned values; missing or stale ones show as the default, matching what renders. */
@@ -6,8 +6,8 @@ type Props = {
6
6
  onChange: (name: string, value: unknown) => void;
7
7
  };
8
8
  /**
9
- * Controls generated from a map view's declared parameters. Hosts own the values (session
10
- * state) and decide where the controls go.
9
+ * Default layout for a map view's parameter controls: a wrapping row. Hosts wanting their own layout
10
+ * use `useParameterControls` with `ParameterInput` (or the typed inputs) instead.
11
11
  */
12
12
  export declare function ParameterControls({ definition, values, onChange }: Props): import("react").JSX.Element | null;
13
13
  export {};
@@ -0,0 +1,21 @@
1
+ import type { Parameter, ParameterControl } from '../core/definition';
2
+ type InputProps<Kind extends ParameterControl['kind']> = {
3
+ parameter: Parameter & {
4
+ control: Extract<ParameterControl, {
5
+ kind: Kind;
6
+ }>;
7
+ };
8
+ value: unknown;
9
+ onChange: (value: unknown) => void;
10
+ };
11
+ /** A checkbox for a boolean parameter, labelled with the parameter's title. */
12
+ export declare function ToggleParameterInput({ parameter, value, onChange }: InputProps<'toggle'>): import("react").JSX.Element;
13
+ /** A dropdown for a parameter with one of several options. */
14
+ export declare function SelectParameterInput({ parameter, value, onChange }: InputProps<'select'>): import("react").JSX.Element;
15
+ /** A checkbox group for a parameter taking any subset of its options. */
16
+ export declare function MultiSelectParameterInput({ parameter, value, onChange }: InputProps<'multiselect'>): import("react").JSX.Element;
17
+ /** The input matching a parameter's control kind. */
18
+ export declare function ParameterInput({ parameter, value, onChange, }: Omit<InputProps<ParameterControl['kind']>, 'parameter'> & {
19
+ parameter: Parameter;
20
+ }): import("react").JSX.Element;
21
+ export {};
@@ -1,5 +1,5 @@
1
1
  import type { SpaceGraph, SpaceNode } from 'structured-context/api';
2
- import { type LayoutConfig, type Region, type TreeLayoutConfig } from '../core';
2
+ import type { LayoutConfig, Region, TreeLayoutConfig } from '../core/definition';
3
3
  export type LayoutProps<L extends LayoutConfig = LayoutConfig> = {
4
4
  graph: SpaceGraph;
5
5
  /** The region with parameter values applied, narrowed to the layout's own settings. */
@@ -1,4 +1,4 @@
1
- import { type XYLayoutConfig } from '../core';
1
+ import type { XYLayoutConfig } from '../core/definition';
2
2
  import type { LayoutProps } from './TreeLayout';
3
3
  /**
4
4
  * Nodes positioned by two numeric fields, with straight connectors between them. Positions are
@@ -0,0 +1,4 @@
1
+ import type { AnnotationIndex } from '../core/annotations';
2
+ /** The annotations a map view shows, already narrowed by its validation settings. Read by node cards. */
3
+ export declare const AnnotationsContext: import("react").Context<AnnotationIndex>;
4
+ export declare const useAnnotations: () => AnnotationIndex;
@@ -0,0 +1,13 @@
1
+ import { type MapViewDefinition, type Parameter, type ParameterValues } from '../core/definition';
2
+ /** One parameter with its current value and a setter, ready for a host to lay out. */
3
+ export type ParameterControlState = {
4
+ parameter: Parameter;
5
+ /** The value in effect: the host's value, else the default, matching what renders. */
6
+ value: unknown;
7
+ setValue: (value: unknown) => void;
8
+ };
9
+ /**
10
+ * The state behind a map view's parameter controls, with no markup, for hosts that lay the controls
11
+ * out themselves. Pair each entry with `ParameterInput`, or with one of the typed inputs.
12
+ */
13
+ export declare function useParameterControls(definition: MapViewDefinition, values: ParameterValues, onChange: (name: string, value: unknown) => void): ParameterControlState[];
@@ -1,5 +1,5 @@
1
1
  import { type Config } from 'structured-context/api';
2
- import { type MapViewDefinition } from '../core';
2
+ import { type MapViewDefinition } from '../core/definition';
3
3
  export type LoadMapViewDefinitionsOptions = {
4
4
  /** Directory of the main config file. Defaults to where structured-context finds it. */
5
5
  configDir?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "structured-context-map-views",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Declarative map views of structured-context spaces: render a space as a tree, nested containers or an XY plot from a short definition.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -49,7 +49,7 @@
49
49
  "peerDependencies": {
50
50
  "react": "^19.3.0",
51
51
  "react-dom": "^19.3.0",
52
- "structured-context": "^0.17.1"
52
+ "structured-context": "^0.19.0"
53
53
  },
54
54
  "dependencies": {
55
55
  "ajv": "^8.20.0",
@@ -64,7 +64,7 @@
64
64
  "@vitejs/plugin-react": "^6.1.1",
65
65
  "react": "^19.3.0",
66
66
  "react-dom": "^19.3.0",
67
- "structured-context": "^0.17.1",
67
+ "structured-context": "^0.19.0",
68
68
  "tailwindcss": "^4.3.3",
69
69
  "vite": "^8.3.2"
70
70
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition-KuPoA1mO.js","names":[],"sources":["../src/core/schemas/schema-url.ts","../src/core/schemas/param-ref.ts","../src/core/schemas/definition.ts","../src/core/schemas/landscape-layout.ts","../src/core/schemas/settings.ts","../src/core/schemas/tree-layout.ts","../src/core/schemas/xy-layout.ts","../src/core/schemas/index.ts","../src/core/definition.ts"],"sourcesContent":["/**\n * Where the format schemas are published. `latest` follows the newest format; a release that changes it\n * freezes a copy under its own version folder (`bun run generate:schemas --release`).\n */\nexport const SCHEMA_BASE_URL =\n 'https://raw.githubusercontent.com/mindsocket/structured-context-map-views/main/schemas/generated';\n\n/** Base of the `$id`s the sources use: the `latest` folder. */\nexport const SCHEMA_URL = `${SCHEMA_BASE_URL}/latest` as const;\n","import { SCHEMA_URL } from './schema-url';\n/** `$ref` target for a setting whose value comes from a declared parameter. */\nexport const PARAM_REF = `${SCHEMA_URL}/definition.json#/$defs/paramRef` as const;\n\n/** A setting that takes either a fixed value matching `valueSchema` or a `{ $param }` binding. */\nexport function parameterisable<const S extends object, const D>(valueSchema: S, defaultValue: D, description: string) {\n return { description, default: defaultValue, anyOf: [valueSchema, { $ref: PARAM_REF }] } as const;\n}\n","import { PARAM_REF, parameterisable } from './param-ref';\nimport { SCHEMA_URL } from './schema-url';\n\n/**\n * The map view definition format: shared parameters, and the regions a map view is composed of.\n *\n * Written as TypeScript so the definition types derive from it (`FromSchema`); the JSON files\n * for `$schema` references and editors are generated (`bun run generate:schemas`).\n */\nexport const definitionSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `${SCHEMA_URL}/definition.json`,\n title: 'Map view definition',\n description:\n 'Declares how spaces of one schema are projected into a map view: shared parameters, and the regions the map view is composed of.',\n type: 'object',\n required: ['$id', 'schema', 'regions'],\n additionalProperties: false,\n properties: {\n $schema: { type: 'string' },\n $id: {\n type: 'string',\n pattern: '^sctx-map-view://[^/]+(/[^/]+)?$',\n description:\n 'Identifier, namespaced by where the definition is found: \"sctx-map-view://core/<name>\" (bundled), \"sctx-map-view://<plugin>/<name>\" (a plugin) or \"sctx-map-view://<name>\" (the config folder).',\n },\n title: { type: 'string', minLength: 1, description: 'Display name. Defaults to the last segment of the `$id`.' },\n description: { type: 'string' },\n schema: {\n type: 'string',\n minLength: 1,\n description: '`$id` of the structured-context schema whose spaces this map view applies to.',\n },\n parameters: {\n type: 'object',\n description:\n 'Settings the reader can change. Each is a JSON Schema with a default, bound to settings anywhere in the definition with { \"$param\": \"<name>\" }.',\n additionalProperties: { $ref: '#/$defs/parameter' },\n },\n regions: {\n type: 'array',\n minItems: 1,\n description:\n 'Parts of the map view, each with its own layout, nodes and edges. Only the first region is rendered for now.',\n items: { $ref: '#/$defs/region' },\n },\n },\n $defs: {\n parameter: {\n type: 'object',\n description:\n \"A JSON Schema for the parameter's values (it can $ref, narrow or extend the bundled setting definitions), plus a title for its control.\",\n required: ['default'],\n properties: {\n title: { type: 'string' },\n description: { type: 'string' },\n default: {},\n },\n },\n paramRef: {\n type: 'object',\n description: \"Takes this setting's value from a declared parameter.\",\n required: ['$param'],\n additionalProperties: false,\n properties: { $param: { type: 'string', minLength: 1 } },\n },\n region: {\n type: 'object',\n required: ['id', 'layout'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique within the map view; part of every occurrence id in the region.',\n },\n select: {\n type: 'object',\n description: 'Which nodes of the space the region shows. By default, all of them.',\n additionalProperties: false,\n properties: {\n filter: {\n type: 'string',\n minLength: 1,\n description:\n \"A structured-context filter: a view name from the space's config, or an expression such as `WHERE …` or `SELECT … WHERE …`.\",\n },\n },\n },\n layout: {\n description: 'How the region is arranged, chosen by `type`.',\n type: 'object',\n required: ['type'],\n // Ajv validates only the branch `type` selects, so errors name that layout's settings.\n discriminator: { propertyName: 'type' },\n oneOf: [\n { $ref: `${SCHEMA_URL}/layouts/tree.json` },\n { $ref: `${SCHEMA_URL}/layouts/landscape.json` },\n { $ref: `${SCHEMA_URL}/layouts/xy.json` },\n ],\n },\n nodes: {\n type: 'object',\n additionalProperties: false,\n default: {},\n properties: {\n style: parameterisable(\n { $ref: `${SCHEMA_URL}/settings.json#/$defs/nodeStyle` },\n 'card',\n 'How nodes are drawn.',\n ),\n fields: parameterisable(\n { $ref: `${SCHEMA_URL}/settings.json#/$defs/fieldList` },\n [],\n 'Schema fields shown on cards.',\n ),\n },\n },\n edges: {\n type: 'object',\n additionalProperties: false,\n default: {},\n properties: {\n show: parameterisable({ type: 'boolean' }, true, 'Whether connectors are drawn.'),\n },\n },\n },\n },\n },\n} as const;\n\nexport { PARAM_REF };\n","import { PARAM_REF, parameterisable } from './param-ref';\nimport { SCHEMA_URL } from './schema-url';\n\n/** Settings of the landscape layout: nested containers following an authored grouping. */\nexport const landscapeLayoutSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `${SCHEMA_URL}/layouts/landscape.json`,\n title: 'Landscape layout',\n description:\n 'Nested containers: each grouping level becomes containers inside the level above, and the last level is drawn as nodes.',\n type: 'object',\n required: ['type', 'group'],\n additionalProperties: false,\n properties: {\n type: { const: 'landscape' },\n orientation: parameterisable(\n { $ref: `${SCHEMA_URL}/settings.json#/$defs/orientation` },\n 'horizontal',\n 'horizontal: top-level containers side by side, as columns. vertical: stacked, as rows.',\n ),\n group: {\n type: 'array',\n minItems: 1,\n description:\n 'Grouping levels, outermost first. The last level is drawn as nodes; the others as containers. Adjacent node levels are joined by any edge between their types, in either direction.',\n // Dispatch on `field`, so errors come from the kind of level written, not both.\n items: {\n type: 'object',\n if: { type: 'object', required: ['field'] },\n // biome-ignore lint/suspicious/noThenProperty: JSON Schema's `then` keyword.\n then: {\n type: 'object',\n description:\n \"Containers labelled by the values of a field of the next node level's nodes. A node with several values appears under each.\",\n required: ['field'],\n additionalProperties: false,\n properties: { field: { type: 'string', minLength: 1 } },\n },\n else: {\n type: 'object',\n description: 'A level of nodes of one type.',\n required: ['type'],\n additionalProperties: false,\n properties: {\n type: {\n description: 'Node type at this level.',\n anyOf: [{ type: 'string', minLength: 1 }, { $ref: PARAM_REF }],\n },\n edge: {\n type: 'object',\n description:\n 'Which edges join this level to the node level above (or to the last `via` type). By default, any edge between the two types.',\n required: ['field'],\n additionalProperties: false,\n properties: { field: { type: 'string', minLength: 1 } },\n },\n via: {\n type: 'array',\n minItems: 1,\n description:\n 'Types skipped between the node level above and this one, in order. Nodes are joined through a chain of edges across them. Ignored on the first level, which has no level above.',\n items: { type: 'string', minLength: 1 },\n },\n intermediate: parameterisable(\n { $ref: `${SCHEMA_URL}/layouts/landscape.json#/$defs/intermediate` },\n 'hidden',\n 'How the skipped nodes of a `via` chain are shown.',\n ),\n },\n },\n },\n },\n },\n $defs: {\n intermediate: {\n title: 'Skipped levels',\n description: 'hidden: not shown. breadcrumb: listed on each node reached through them.',\n enum: ['hidden', 'breadcrumb'],\n },\n },\n} as const;\n","import { SCHEMA_URL } from './schema-url';\n/** Reusable setting definitions. Parameters can `$ref` these and narrow them, e.g. with `allOf` and `enum`. */\nexport const settingsSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `${SCHEMA_URL}/settings.json`,\n title: 'Shared map view settings',\n description: 'Reusable setting definitions. Parameters can $ref these and narrow them, e.g. with allOf and enum.',\n $defs: {\n orientation: {\n title: 'Orientation',\n enum: ['vertical', 'horizontal'],\n },\n nodeStyle: {\n title: 'Node style',\n description: 'card: a box with the title and selected fields. shape: a compact marker with a tooltip.',\n enum: ['card', 'shape'],\n },\n fieldList: {\n title: 'Fields',\n type: 'array',\n items: { type: 'string', minLength: 1 },\n uniqueItems: true,\n },\n },\n} as const;\n","import { parameterisable } from './param-ref';\nimport { SCHEMA_URL } from './schema-url';\n\n/** Settings of the tree layout: a tree over the schema's hierarchy. */\nexport const treeLayoutSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `${SCHEMA_URL}/layouts/tree.json`,\n title: 'Tree layout',\n description: \"A tree over the schema's hierarchy: root-type nodes at the top, children via hierarchy edges.\",\n type: 'object',\n required: ['type'],\n additionalProperties: false,\n properties: {\n type: { const: 'tree' },\n orientation: parameterisable(\n { $ref: `${SCHEMA_URL}/settings.json#/$defs/orientation` },\n 'vertical',\n 'Direction the tree grows.',\n ),\n dag: parameterisable(\n { $ref: `${SCHEMA_URL}/layouts/tree.json#/$defs/dag` },\n 'repeat',\n 'How a node with several parents is shown.',\n ),\n },\n $defs: {\n dag: {\n title: 'Nodes with several parents',\n description:\n 'repeat: the node appears under each parent, its subtree shown once. cross-edge: the node appears under its first parent, with extra connectors from the others.',\n enum: ['repeat', 'cross-edge'],\n },\n },\n} as const;\n","import { PARAM_REF, parameterisable } from './param-ref';\nimport { SCHEMA_URL } from './schema-url';\n\n/** Settings of the XY layout: nodes positioned by two numeric fields. */\nexport const xyLayoutSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `${SCHEMA_URL}/layouts/xy.json`,\n title: 'XY layout',\n description:\n 'Nodes positioned on two axes by numeric fields. Nodes of the plotted types without a usable value on both axes are listed beside the plot, not dropped.',\n type: 'object',\n required: ['type', 'x', 'y'],\n additionalProperties: false,\n properties: {\n type: { const: 'xy' },\n x: { $ref: `${SCHEMA_URL}/layouts/xy.json#/$defs/axis` },\n y: { $ref: `${SCHEMA_URL}/layouts/xy.json#/$defs/axis` },\n types: parameterisable(\n { type: 'array', items: { type: 'string', minLength: 1 }, uniqueItems: true },\n [],\n 'Node types to plot. Empty: every type with a value on either axis.',\n ),\n edgeFields: parameterisable(\n { $ref: `${SCHEMA_URL}/settings.json#/$defs/fieldList` },\n [],\n 'Fields whose edges are drawn between plotted nodes. Empty: all edges.',\n ),\n },\n $defs: {\n axis: {\n title: 'Axis',\n type: 'object',\n required: ['field'],\n additionalProperties: false,\n properties: {\n field: {\n description: 'Numeric field giving the position.',\n anyOf: [{ type: 'string', minLength: 1 }, { $ref: PARAM_REF }],\n },\n domain: {\n description:\n 'Values at the two ends of the axis: [min, max], or \"data\" for the smallest and largest plotted values. Nodes outside a fixed domain are listed as unplaced.',\n default: 'data',\n anyOf: [{ const: 'data' }, { type: 'array', items: { type: 'number' }, minItems: 2, maxItems: 2 }],\n },\n direction: parameterisable(\n { $ref: `${SCHEMA_URL}/layouts/xy.json#/$defs/direction` },\n 'ascending',\n 'ascending: values grow rightwards (x) or upwards (y). descending: the reverse.',\n ),\n label: { type: 'string', description: 'Axis title. Defaults to the field name.' },\n },\n },\n direction: {\n title: 'Axis direction',\n enum: ['ascending', 'descending'],\n },\n },\n} as const;\n","import { definitionSchema } from './definition';\nimport { landscapeLayoutSchema } from './landscape-layout';\nimport { settingsSchema } from './settings';\nimport { treeLayoutSchema } from './tree-layout';\nimport { xyLayoutSchema } from './xy-layout';\n\nexport { PARAM_REF } from './param-ref';\nexport { definitionSchema, landscapeLayoutSchema, settingsSchema, treeLayoutSchema, xyLayoutSchema };\n\n/** The bundled schemas describing the map view definition format. */\nexport const MAP_VIEW_SCHEMAS = [\n definitionSchema,\n settingsSchema,\n treeLayoutSchema,\n landscapeLayoutSchema,\n xyLayoutSchema,\n] as const;\n","import Ajv2020, { type AnySchemaObject, type ErrorObject } from 'ajv/dist/2020';\nimport type { FromSchema } from 'json-schema-to-ts';\nimport JSON5 from 'json5';\nimport {\n definitionSchema,\n type landscapeLayoutSchema,\n MAP_VIEW_SCHEMAS,\n type settingsSchema,\n type treeLayoutSchema,\n type xyLayoutSchema,\n} from './schemas';\nimport { SCHEMA_URL } from './schemas/schema-url';\n\nexport { MAP_VIEW_SCHEMAS };\n\ntype References = {\n references: [\n typeof settingsSchema,\n typeof treeLayoutSchema,\n typeof landscapeLayoutSchema,\n typeof xyLayoutSchema,\n typeof definitionSchema,\n ];\n // Grouping levels dispatch with if/then/else (see the landscape layout schema).\n parseIfThenElseKeywords: true;\n};\ntype ParamRef = { $param: string };\n/** Drop `{ $param }` bindings from every setting's type: what remains after resolution. */\ntype Resolved<T> = T extends ParamRef\n ? never\n : T extends readonly (infer U)[]\n ? Resolved<U>[]\n : T extends object\n ? { [K in keyof T]: Resolved<T[K]> }\n : T;\n\n/** A definition as authored: settings may be `{ $param }` bindings, defaulted properties may be absent. */\nexport type AuthoredDefinition = FromSchema<\n typeof definitionSchema,\n References & { keepDefaultedPropertiesOptional: true }\n>;\ntype FilledDefinition = FromSchema<typeof definitionSchema, References>;\n\n/** A region with parameters applied and defaults filled in: what layouts receive. */\nexport type Region = Resolved<FilledDefinition['regions'][number]>;\nexport type LayoutConfig = Region['layout'];\nexport type TreeLayoutConfig = Extract<LayoutConfig, { type: 'tree' }>;\nexport type LandscapeLayoutConfig = Extract<LayoutConfig, { type: 'landscape' }>;\nexport type XYLayoutConfig = Extract<LayoutConfig, { type: 'xy' }>;\nexport type AxisConfig = XYLayoutConfig['x'];\nexport type GroupLevel = LandscapeLayoutConfig['group'][number];\nexport type IntermediateDisplay = Extract<GroupLevel, { type: string }>['intermediate'];\nexport type NodesConfig = Region['nodes'];\nexport type EdgesConfig = Region['edges'];\nexport type Orientation = TreeLayoutConfig['orientation'];\nexport type DagMode = TreeLayoutConfig['dag'];\nexport type NodeStyle = NodesConfig['style'];\n\n/**\n * A validated map view definition. Plain data, so hosts can pass it across a server/browser\n * boundary. Settings in `source` may still be `{ $param }` bindings; {@link resolveRegions}\n * replaces them with parameter values.\n */\nexport type MapViewDefinition = {\n /** The definition's `$id`. */\n id: string;\n title: string;\n description?: string;\n /** `$id` of the schema whose spaces this map view applies to. */\n schema: string;\n parameters: Parameter[];\n /** The definition as authored. */\n source: AuthoredDefinition;\n};\n\n/** A setting the reader can change, with the control generated from its schema. */\nexport type Parameter = {\n name: string;\n title: string;\n description?: string;\n default: unknown;\n control: ParameterControl;\n};\n\n/** Options are JSON primitives, so they can be labelled and compared directly. */\nexport type ParameterControl =\n | { kind: 'select'; options: readonly Primitive[] }\n | { kind: 'multiselect'; options: readonly Primitive[] }\n | { kind: 'toggle' };\n\ntype Primitive = string | number | boolean | null;\n\nexport type ParameterValues = Readonly<Record<string, unknown>>;\n\nexport class MapViewDefinitionError extends Error {\n constructor(name: string, message: string) {\n super(`Map view \"${name}\": ${message}`);\n this.name = 'MapViewDefinitionError';\n }\n}\n\nconst newAjv = (options: { useDefaults?: boolean } = {}) =>\n new Ajv2020({\n allErrors: true,\n discriminator: true,\n ...options,\n schemas: MAP_VIEW_SCHEMAS.map((s) => structuredClone(s) as AnySchemaObject),\n });\n\n/** Validates definitions as authored. */\nconst ajv = newAjv();\nconst validateDefinition = ajv.getSchema(definitionSchema.$id)!;\n/** Validates resolved definitions, filling in setting defaults from the schemas. */\nconst fillDefaults = newAjv({ useDefaults: true }).getSchema(definitionSchema.$id)!;\n\n/**\n * Parse a JSON5 map view definition and check it against the bundled schemas. `name` labels\n * error messages (hosts pass where the definition came from).\n *\n * Beyond schema validation: every parameter needs a control derivable from its schema, and\n * every value that control can produce must satisfy the parameter's schema; every `$param`\n * must name a declared parameter; and each parameter's values must be valid wherever it's\n * bound, checked by substituting them and re-validating.\n */\nexport function parseMapViewDefinition(name: string, text: string): MapViewDefinition {\n const fail = (message: string): never => {\n throw new MapViewDefinitionError(name, message);\n };\n\n let raw: unknown;\n try {\n raw = JSON5.parse(text);\n } catch (err) {\n return fail(`invalid JSON5: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (!validateDefinition(raw)) return fail(formatErrors(validateDefinition.errors, raw));\n const source = raw as AuthoredDefinition;\n\n // A fresh instance per parse, so compiled parameter schemas aren't cached indefinitely.\n const parameterAjv = newAjv();\n const declared = (source.parameters ?? {}) as Record<string, AnySchemaObject>;\n const parameters = Object.entries(declared).map(([paramName, schema]) =>\n parseParameter(paramName, schema, parameterAjv, (message) => fail(`parameter \"${paramName}\": ${message}`)),\n );\n\n for (const bound of paramNames(source.regions)) {\n if (!(bound in declared)) fail(`\"$param\": \"${bound}\" is not a declared parameter`);\n }\n checkBindings(source, parameters, fail);\n\n const regionIds = new Set<string>();\n for (const region of source.regions) {\n if (regionIds.has(region.id)) fail(`duplicate region id \"${region.id}\"`);\n regionIds.add(region.id);\n // A field level labels the nodes of a later level, so a node level must come last.\n if (region.layout.type === 'landscape' && !('type' in region.layout.group.at(-1)!)) {\n fail(`region \"${region.id}\": the last grouping level must be a node type, not a field`);\n }\n if (region.layout.type === 'xy') {\n for (const axis of ['x', 'y'] as const) {\n const { domain } = region.layout[axis];\n if (Array.isArray(domain) && !(domain[0]! < domain[1]!)) {\n fail(`region \"${region.id}\": ${axis} domain must be [min, max] with min < max`);\n }\n }\n }\n }\n\n return {\n id: source.$id,\n title: source.title ?? source.$id.slice(source.$id.lastIndexOf('/') + 1),\n ...(source.description !== undefined && { description: source.description }),\n schema: source.schema,\n parameters,\n source,\n };\n}\n\n/**\n * The value each parameter takes: the given value if its control could produce it, otherwise\n * (missing, or stale saved state) the default. Hosts' controls and rendering both use this.\n */\nexport function resolveParameterValues(definition: MapViewDefinition, values: ParameterValues = {}): ParameterValues {\n return Object.fromEntries(\n definition.parameters.map((param) => {\n const value = values[param.name];\n const chosen = value !== undefined && isProducible(param.control, value) ? value : param.default;\n return [param.name, structuredClone(chosen)];\n }),\n );\n}\n\n/** Apply parameter values to a definition's regions and fill in setting defaults. */\nexport function resolveRegions(definition: MapViewDefinition, values: ParameterValues = {}): Region[] {\n const resolved = resolveParameterValues(definition, values);\n const filled = substitute(definition.source, (paramName) => resolved[paramName]);\n if (!fillDefaults(filled)) {\n // parseMapViewDefinition checked every producible value, so this means a bug, not bad input.\n throw new MapViewDefinitionError(\n definition.id,\n `resolved definition is invalid: ${formatErrors(fillDefaults.errors, filled)}`,\n );\n }\n return (filled as FilledDefinition).regions as Region[];\n}\n\n/**\n * The filter selecting the nodes a map view shows, if any. Hosts apply it when loading the space.\n * PROTOTYPE: filters are evaluated by the host, not per region in the browser, because\n * structured-context's filter evaluator can't yet be bundled for a browser (its only entry point,\n * `structured-context/api`, imports Node built-ins). That's fine while only the first region renders.\n */\nexport function selectionFilter(definition: MapViewDefinition, values: ParameterValues = {}): string | undefined {\n return resolveRegions(definition, values)[0]?.select?.filter;\n}\n\n/** Map view definitions that apply to a space with the given schema. */\nexport function mapViewsForSchema(\n definitions: readonly MapViewDefinition[],\n schemaId: string | undefined,\n): MapViewDefinition[] {\n return schemaId === undefined ? [] : definitions.filter((d) => d.schema === schemaId);\n}\n\n/** Resolve `$ref`s relative to the format schemas, so parameters can write `settings.json#/$defs/orientation`. */\nfunction absoluteRefs(node: unknown): unknown {\n if (Array.isArray(node)) return node.map(absoluteRefs);\n if (typeof node !== 'object' || node === null) return node;\n return Object.fromEntries(\n Object.entries(node).map(([key, value]) => [\n key,\n key === '$ref' && typeof value === 'string' ? new URL(value, `${SCHEMA_URL}/`).href : absoluteRefs(value),\n ]),\n );\n}\n\nfunction parseParameter(\n name: string,\n schema: AnySchemaObject,\n parameterAjv: Ajv2020,\n fail: (message: string) => never,\n): Parameter {\n const { title, description, default: defaultValue, ...authored } = schema;\n const valueSchema = absoluteRefs(authored) as AnySchemaObject;\n let validate: (value: unknown) => boolean;\n try {\n validate = parameterAjv.compile(valueSchema);\n } catch (err) {\n return fail(`invalid schema: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (!validate(defaultValue)) return fail(`default ${JSON.stringify(defaultValue)} doesn't match its schema`);\n\n const control = controlFor(valueSchema, fail);\n const invalid = producibleValues(control).filter((value) => !validate(value));\n if (invalid.length > 0) {\n fail(\n `its ${control.kind} control can produce ${invalid.map((v) => JSON.stringify(v)).join(', ')}, which its schema rejects; remove constraints the control can't enforce`,\n );\n }\n\n return {\n name,\n title: typeof title === 'string' ? title : (titleFromRef(valueSchema) ?? name),\n ...(typeof description === 'string' && { description }),\n default: defaultValue,\n control,\n };\n}\n\n/**\n * Values a control can produce, as checked against schemas. For a multi-select that's none,\n * each option alone, and all of them. PROTOTYPE: other subsets are assumed valid if these are,\n * which holds for the constraints in use (enum items, uniqueItems) but not, say, `contains`.\n */\nfunction producibleValues(control: ParameterControl): unknown[] {\n switch (control.kind) {\n case 'toggle':\n return [true, false];\n case 'select':\n return [...control.options];\n case 'multiselect':\n return [[], ...control.options.map((option) => [option]), [...control.options]];\n }\n}\n\n/**\n * Every `$param` binding must accept each value the parameter's control can produce.\n * PROTOTYPE: parameters are checked one at a time, with the others at their defaults, which\n * assumes their bindings don't constrain each other.\n */\nfunction checkBindings(source: AuthoredDefinition, parameters: Parameter[], fail: (message: string) => never) {\n const defaults = new Map(parameters.map((p) => [p.name, p.default]));\n for (const param of parameters) {\n for (const candidate of producibleValues(param.control)) {\n const substituted = substitute(source, (n) => (n === param.name ? candidate : defaults.get(n)));\n if (!validateDefinition(substituted)) {\n fail(\n `parameter \"${param.name}\" value ${JSON.stringify(candidate)} isn't valid where it's used: ${formatErrors(validateDefinition.errors, substituted)}`,\n );\n }\n }\n }\n}\n\n/**\n * Derive a control from a parameter's value schema: `enum` (directly, via `$ref`, or narrowed\n * with `allOf`) gives a select, an array of such items a multi-select, `boolean` a toggle.\n */\nfunction controlFor(schema: AnySchemaObject, fail: (message: string) => never): ParameterControl {\n if (typeOf(schema) === 'boolean') return { kind: 'toggle' };\n const isArray = typeOf(schema) === 'array';\n const options = isArray ? intersect(itemSchemas(schema).map(enumOf)) : enumOf(schema);\n if (!options) {\n return fail(\n 'no control can be generated: give it enum options (directly, or via $ref/allOf), array items with enum options, or type boolean',\n );\n }\n if (options.length === 0) return fail('its options narrow to nothing');\n if (!options.every(isPrimitive)) return fail('options must be strings, numbers, booleans or null');\n return { kind: isArray ? 'multiselect' : 'select', options };\n}\n\n/** Schemas linked from this one through `$ref` and `allOf`. */\nfunction linked(schema: AnySchemaObject): AnySchemaObject[] {\n const ref = typeof schema.$ref === 'string' ? ajv.getSchema(schema.$ref)?.schema : undefined;\n return [...(typeof ref === 'object' ? [ref] : []), ...((schema.allOf as AnySchemaObject[] | undefined) ?? [])];\n}\n\n/** Allowed values, intersecting `enum`/`const` with those reached through `$ref` and `allOf`. */\nfunction enumOf(schema: AnySchemaObject): unknown[] | undefined {\n return intersect([\n Array.isArray(schema.enum) ? schema.enum : undefined,\n 'const' in schema ? [schema.const] : undefined,\n ...linked(schema).map(enumOf),\n ]);\n}\n\nfunction typeOf(schema: AnySchemaObject): unknown {\n if (schema.type !== undefined) return schema.type;\n return linked(schema)\n .map(typeOf)\n .find((type) => type !== undefined);\n}\n\n/** Every `items` schema applying to an array, so their constraints can be intersected. */\nfunction itemSchemas(schema: AnySchemaObject): AnySchemaObject[] {\n return [...(typeof schema.items === 'object' ? [schema.items] : []), ...linked(schema).flatMap(itemSchemas)];\n}\n\nfunction intersect(sets: (unknown[] | undefined)[]): unknown[] | undefined {\n const defined = sets.filter((set): set is unknown[] => set !== undefined);\n if (defined.length === 0) return undefined;\n const key = (v: unknown) => JSON.stringify(v);\n return defined.reduce((acc, set) => acc.filter((v) => set.some((w) => key(w) === key(v))));\n}\n\nfunction titleFromRef(schema: AnySchemaObject): string | undefined {\n const title = linked(schema)[0]?.title;\n return typeof title === 'string' ? title : undefined;\n}\n\nfunction isPrimitive(value: unknown): value is Primitive {\n return value === null || ['string', 'number', 'boolean'].includes(typeof value);\n}\n\nfunction isProducible(control: ParameterControl, value: unknown): boolean {\n switch (control.kind) {\n case 'toggle':\n return typeof value === 'boolean';\n case 'select':\n return control.options.includes(value as Primitive);\n case 'multiselect':\n return Array.isArray(value) && value.every((v) => control.options.includes(v));\n }\n}\n\nfunction isParamRef(value: unknown): value is ParamRef {\n return typeof value === 'object' && value !== null && typeof (value as { $param?: unknown }).$param === 'string';\n}\n\n/** Copy a JSON value, replacing each `{ $param }` binding with its value. */\nfunction substitute(value: unknown, valueFor: (paramName: string) => unknown): unknown {\n if (isParamRef(value)) return structuredClone(valueFor(value.$param));\n if (Array.isArray(value)) return value.map((v) => substitute(v, valueFor));\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, substitute(v, valueFor)]));\n }\n return value;\n}\n\nfunction paramNames(value: unknown): string[] {\n if (isParamRef(value)) return [value.$param];\n if (Array.isArray(value)) return value.flatMap(paramNames);\n if (typeof value === 'object' && value !== null) return Object.values(value).flatMap(paramNames);\n return [];\n}\n\n/**\n * Readable Ajv errors. A setting accepts a value or a `{ $param }` binding (`anyOf`), so a bad\n * value also fails the binding branch; those errors, and the bare anyOf summary, are dropped\n * unless the value actually is a binding. An `if` failure only repeats its branch's errors.\n */\nfunction formatErrors(errors: ErrorObject[] | null | undefined, instance: unknown): string {\n const relevant = (errors ?? []).filter(\n (e) =>\n e.keyword !== 'anyOf' &&\n e.keyword !== 'if' &&\n !(e.schemaPath.includes('/$defs/paramRef') && !isParamRef(at(instance, e.instancePath))),\n );\n return relevant.map((e) => `${e.instancePath || '/'} ${message(e)}${detail(e)}`).join('; ');\n}\n\n/** The value at a JSON pointer. */\nfunction at(value: unknown, pointer: string): unknown {\n return pointer\n .split('/')\n .slice(1)\n .map((segment) => segment.replaceAll('~1', '/').replaceAll('~0', '~'))\n .reduce<unknown>(\n (node, key) => (typeof node === 'object' && node !== null ? (node as Record<string, unknown>)[key] : undefined),\n value,\n );\n}\n\nfunction message(error: ErrorObject): string | undefined {\n if (error.keyword === 'discriminator' && error.params.error === 'mapping') {\n return `has unknown ${error.params.tag} ${JSON.stringify(error.params.tagValue)}`;\n }\n return error.message;\n}\n\nfunction detail(error: ErrorObject): string {\n if (error.keyword === 'additionalProperties') return ` (\"${error.params.additionalProperty}\")`;\n if (error.keyword === 'enum') {\n return ` (${(error.params.allowedValues as unknown[]).map((v) => JSON.stringify(v)).join(', ')})`;\n }\n return '';\n}\n"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export { type AuthoredDefinition, type AxisConfig, type DagMode, type EdgesConfig, type GroupLevel, type IntermediateDisplay, type LandscapeLayoutConfig, type LayoutConfig, MAP_VIEW_SCHEMAS, type MapViewDefinition, MapViewDefinitionError, mapViewsForSchema, type NodeStyle, type NodesConfig, type Orientation, type Parameter, type ParameterControl, type ParameterValues, parseMapViewDefinition, type Region, resolveParameterValues, resolveRegions, selectionFilter, type TreeLayoutConfig, type XYLayoutConfig, } from './definition';
2
- export { type Edge, isHierarchyEdge } from './graph';
3
- export { buildLandscape, type Landscape, type LandscapeOccurrence, type ViaStep } from './landscape';
4
- export { occurrenceKey, type PathSegment } from './occurrence';
5
- export { buildTree, type Tree, type TreeLink, type TreeOccurrence, treeLinks } from './tree';
6
- export { buildXYPlot, type Unplaced, type XYLink, type XYPlot, type XYPoint } from './xy';