@sectile/chart 0.11.1
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/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/contract.d.ts +194 -0
- package/dist/contract.js +2 -0
- package/dist/contract.js.map +1 -0
- package/dist/controller.d.ts +45 -0
- package/dist/controller.js +2 -0
- package/dist/controller.js.map +1 -0
- package/dist/definition.d.ts +40 -0
- package/dist/definition.js +2 -0
- package/dist/definition.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +95 -0
- package/dist/interaction.js +2 -0
- package/dist/interaction.js.map +1 -0
- package/dist/internal/layer-owner.d.ts +145 -0
- package/dist/internal/layer-owner.js +2 -0
- package/dist/internal/layer-owner.js.map +1 -0
- package/dist/internal/model-store.d.ts +32 -0
- package/dist/internal/model-store.js +2 -0
- package/dist/internal/model-store.js.map +1 -0
- package/dist/internal/query-index.d.ts +24 -0
- package/dist/internal/query-index.js +2 -0
- package/dist/internal/query-index.js.map +1 -0
- package/dist/internal/result.d.ts +4 -0
- package/dist/internal/result.js +2 -0
- package/dist/internal/result.js.map +1 -0
- package/dist/layout.d.ts +61 -0
- package/dist/layout.js +2 -0
- package/dist/layout.js.map +1 -0
- package/dist/model.d.ts +128 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/projection.d.ts +149 -0
- package/dist/projection.js +2 -0
- package/dist/projection.js.map +1 -0
- package/dist/query.d.ts +47 -0
- package/dist/query.js +2 -0
- package/dist/query.js.map +1 -0
- package/dist/result.d.ts +5 -0
- package/dist/result.js +2 -0
- package/dist/result.js.map +1 -0
- package/dist/scale.d.ts +70 -0
- package/dist/scale.js +2 -0
- package/dist/scale.js.map +1 -0
- package/dist/view.d.ts +52 -0
- package/dist/view.js +2 -0
- package/dist/view.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":""}
|
package/dist/scale.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ChartResult } from './result.js';
|
|
2
|
+
export type ChartScaleKind = 'linear' | 'logarithmic' | 'temporal' | 'categorical';
|
|
3
|
+
export interface ChartNumericDomain {
|
|
4
|
+
readonly minimum: number;
|
|
5
|
+
readonly maximum: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ChartCategoricalDomain<Value extends number | string = number | string> {
|
|
8
|
+
readonly values: readonly Value[];
|
|
9
|
+
}
|
|
10
|
+
export interface ChartRange {
|
|
11
|
+
readonly start: number;
|
|
12
|
+
readonly end: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ChartViewTransform {
|
|
15
|
+
readonly xScale: number;
|
|
16
|
+
readonly xOffset: number;
|
|
17
|
+
readonly yScale: number;
|
|
18
|
+
readonly yOffset: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ChartCoordinate {
|
|
21
|
+
readonly x: number;
|
|
22
|
+
readonly y: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ChartTick<Value extends number | string = number | string> {
|
|
25
|
+
readonly value: Value;
|
|
26
|
+
readonly position: number;
|
|
27
|
+
}
|
|
28
|
+
export interface ChartScale<Value extends number | string = number | string> {
|
|
29
|
+
readonly kind: ChartScaleKind;
|
|
30
|
+
readonly range: ChartRange;
|
|
31
|
+
normalize(value: Value): number | null;
|
|
32
|
+
invert(position: number): Value | null;
|
|
33
|
+
ticks(maximum: number): readonly ChartTick<Value>[];
|
|
34
|
+
tryTicks(maximum: number): ChartResult<readonly ChartTick<Value>[]>;
|
|
35
|
+
}
|
|
36
|
+
export type ChartColor = readonly [red: number, green: number, blue: number, alpha: number];
|
|
37
|
+
export interface ChartColorStop {
|
|
38
|
+
readonly offset: number;
|
|
39
|
+
readonly color: ChartColor;
|
|
40
|
+
}
|
|
41
|
+
export interface ChartContinuousColorScale {
|
|
42
|
+
readonly kind: 'continuous';
|
|
43
|
+
readonly domain: ChartNumericDomain;
|
|
44
|
+
readonly stops: readonly ChartColorStop[];
|
|
45
|
+
color(value: number): ChartColor | null;
|
|
46
|
+
}
|
|
47
|
+
export interface ChartOrdinalColorScale<Value extends number | string = number | string> {
|
|
48
|
+
readonly kind: 'ordinal';
|
|
49
|
+
readonly palette: readonly ChartColor[];
|
|
50
|
+
color(value: Value): ChartColor;
|
|
51
|
+
}
|
|
52
|
+
export declare const MAX_CHART_TICKS = 10000;
|
|
53
|
+
export declare const IDENTITY_CHART_VIEW_TRANSFORM: ChartViewTransform;
|
|
54
|
+
export declare function createLinearScale(domain: ChartNumericDomain, range: ChartRange): ChartScale<number>;
|
|
55
|
+
export declare function tryCreateLinearScale(domain: ChartNumericDomain, range: ChartRange): ChartResult<ChartScale<number>>;
|
|
56
|
+
export declare function createTemporalScale(domain: ChartNumericDomain, range: ChartRange): ChartScale<number>;
|
|
57
|
+
export declare function tryCreateTemporalScale(domain: ChartNumericDomain, range: ChartRange): ChartResult<ChartScale<number>>;
|
|
58
|
+
export declare function createLogarithmicScale(domain: ChartNumericDomain, range: ChartRange, base?: number): ChartScale<number>;
|
|
59
|
+
export declare function tryCreateLogarithmicScale(domain: ChartNumericDomain, range: ChartRange, base?: number): ChartResult<ChartScale<number>>;
|
|
60
|
+
export declare function createCategoricalScale<Value extends number | string>(domain: ChartCategoricalDomain<Value>, range: ChartRange): ChartScale<Value>;
|
|
61
|
+
export declare function tryCreateCategoricalScale<Value extends number | string>(domain: ChartCategoricalDomain<Value>, range: ChartRange): ChartResult<ChartScale<Value>>;
|
|
62
|
+
export declare function createContinuousColorScale(domain: ChartNumericDomain, stops: readonly ChartColorStop[]): ChartContinuousColorScale;
|
|
63
|
+
export declare function tryCreateContinuousColorScale(domain: ChartNumericDomain, stops: readonly ChartColorStop[]): ChartResult<ChartContinuousColorScale>;
|
|
64
|
+
export declare function createOrdinalColorScale<Value extends number | string>(palette: readonly ChartColor[]): ChartOrdinalColorScale<Value>;
|
|
65
|
+
export declare function tryCreateOrdinalColorScale<Value extends number | string>(palette: readonly ChartColor[]): ChartResult<ChartOrdinalColorScale<Value>>;
|
|
66
|
+
export declare function createChartViewTransform(input?: Partial<ChartViewTransform>): ChartViewTransform;
|
|
67
|
+
export declare function tryCreateChartViewTransform(input?: Partial<ChartViewTransform>): ChartResult<ChartViewTransform>;
|
|
68
|
+
export declare function transformChartCoordinate(coordinate: ChartCoordinate, transform: ChartViewTransform): ChartCoordinate;
|
|
69
|
+
export declare function invertChartCoordinate(coordinate: ChartCoordinate, transform: ChartViewTransform): ChartCoordinate;
|
|
70
|
+
export declare function composeChartViewTransforms(first: ChartViewTransform, second: ChartViewTransform): ChartViewTransform;
|
package/dist/scale.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{unwrap}from"@sectile/core/result";import{chartFail,chartOK}from"./internal/result.js";const MAX_CHART_TICKS=1e4;const IDENTITY_CHART_VIEW_TRANSFORM=Object.freeze({xScale:1,xOffset:0,yScale:1,yOffset:0});function createLinearScale(domain,range){return unwrap(tryCreateLinearScale(domain,range))}function tryCreateLinearScale(domain,range){return createNumericScale("linear",domain,range,identity,identity)}function createTemporalScale(domain,range){return unwrap(tryCreateTemporalScale(domain,range))}function tryCreateTemporalScale(domain,range){return createNumericScale("temporal",domain,range,identity,identity)}function createLogarithmicScale(domain,range,base=10){return unwrap(tryCreateLogarithmicScale(domain,range,base))}function tryCreateLogarithmicScale(domain,range,base=10){if(!finite(base)||base<=0||base===1)return invalidScale("Logarithmic scale base must be finite, positive, and not one.");if(!validNumericDomain(domain)||domain.minimum<=0)return invalidScale("Logarithmic scale domain must be finite, increasing, and positive.");const denominator=Math.log(base);return createNumericScale("logarithmic",domain,range,value=>value>0?Math.log(value)/denominator:Number.NaN,value=>base**value,base)}function createCategoricalScale(domain,range){return unwrap(tryCreateCategoricalScale(domain,range))}function tryCreateCategoricalScale(domain,range){if(!validRange(range))return invalidScale("Chart scale range must contain finite distinct endpoints.");if(domain===null||typeof domain!=="object"||!Array.isArray(domain.values)||domain.values.length===0){return invalidScale("Categorical scale domain must contain at least one value.")}const values=[];const indices=new Map;for(const value of domain.values){const category=value;if(!validCategory(category)||indices.has(category)){return invalidScale("Categorical scale values must be unique finite numbers or non-empty strings.")}indices.set(category,values.length);values.push(category)}const frozenRange=freezeRange(range);const frozenValues=Object.freeze(values);const span=frozenRange.end-frozenRange.start;const scale={kind:"categorical",range:frozenRange,normalize(value){const index=indices.get(value);return index===void 0?null:frozenRange.start+(index+.5)/frozenValues.length*span},invert(position){if(!finite(position))return null;const ratio=(position-frozenRange.start)/span;if(ratio<0||ratio>1)return null;const index=Math.min(frozenValues.length-1,Math.floor(ratio*frozenValues.length));return frozenValues[index]??null},ticks(maximum){return unwrap(this.tryTicks(maximum))},tryTicks(maximum){const checked=validateTickMaximum(maximum);if(!checked.ok)return checked;if(maximum===0)return chartOK(Object.freeze([]));const step=Math.max(1,Math.ceil(frozenValues.length/maximum));const ticks=[];for(let index=0;index<frozenValues.length&&ticks.length<maximum;index+=step){const value=frozenValues[index];ticks.push(Object.freeze({value,position:frozenRange.start+(index+.5)/frozenValues.length*span}))}return chartOK(Object.freeze(ticks))}};return chartOK(Object.freeze(scale))}function createContinuousColorScale(domain,stops){return unwrap(tryCreateContinuousColorScale(domain,stops))}function tryCreateContinuousColorScale(domain,stops){if(!validNumericDomain(domain)||!Array.isArray(stops)||stops.length<2){return invalidScale("Continuous color scales require an increasing domain and at least two stops.")}const normalized=[];let previousOffset=-1;for(const stop of stops){if(stop===null||typeof stop!=="object"||!finite(stop.offset)||stop.offset<0||stop.offset>1||stop.offset<=previousOffset||!validColor(stop.color)){return invalidScale("Continuous color stops require increasing offsets from zero to one and normalized RGBA colors.")}previousOffset=stop.offset;normalized.push(Object.freeze({offset:stop.offset,color:freezeColor(stop.color)}))}if(normalized[0]?.offset!==0||normalized.at(-1)?.offset!==1){return invalidScale("Continuous color stops must include offsets zero and one.")}const frozenDomain=Object.freeze({minimum:domain.minimum,maximum:domain.maximum});const frozenStops=Object.freeze(normalized);return chartOK(Object.freeze({kind:"continuous",domain:frozenDomain,stops:frozenStops,color(value){if(!finite(value))return null;const ratio=Math.max(0,Math.min(1,(value-frozenDomain.minimum)/(frozenDomain.maximum-frozenDomain.minimum)));let upper=1;while(upper<frozenStops.length-1&&ratio>frozenStops[upper].offset)upper+=1;const left=frozenStops[upper-1];const right=frozenStops[upper];const local=right.offset===left.offset?0:(ratio-left.offset)/(right.offset-left.offset);return Object.freeze([interpolate(left.color[0],right.color[0],local),interpolate(left.color[1],right.color[1],local),interpolate(left.color[2],right.color[2],local),interpolate(left.color[3],right.color[3],local)])}}))}function createOrdinalColorScale(palette){return unwrap(tryCreateOrdinalColorScale(palette))}function tryCreateOrdinalColorScale(palette){if(!Array.isArray(palette)||palette.length===0||palette.some(color=>!validColor(color))){return invalidScale("Ordinal color scales require at least one normalized RGBA color.")}const frozenPalette=Object.freeze(palette.map(freezeColor));return chartOK(Object.freeze({kind:"ordinal",palette:frozenPalette,color(value){return frozenPalette[stableColorHash(value)%frozenPalette.length]}}))}function createChartViewTransform(input={}){return unwrap(tryCreateChartViewTransform(input))}function tryCreateChartViewTransform(input={}){if(input===null||typeof input!=="object")return invalidTransform("Chart view transform must be an object.");const value={xScale:input.xScale??1,xOffset:input.xOffset??0,yScale:input.yScale??1,yOffset:input.yOffset??0};if(!finite(value.xScale)||value.xScale<=0||!finite(value.yScale)||value.yScale<=0||!finite(value.xOffset)||!finite(value.yOffset)){return invalidTransform("Chart view scales must be positive finite numbers and offsets must be finite.")}return chartOK(Object.freeze(value))}function transformChartCoordinate(coordinate,transform){return Object.freeze({x:coordinate.x*transform.xScale+transform.xOffset,y:coordinate.y*transform.yScale+transform.yOffset})}function invertChartCoordinate(coordinate,transform){return Object.freeze({x:(coordinate.x-transform.xOffset)/transform.xScale,y:(coordinate.y-transform.yOffset)/transform.yScale})}function composeChartViewTransforms(first,second){return createChartViewTransform({xScale:first.xScale*second.xScale,xOffset:first.xOffset*second.xScale+second.xOffset,yScale:first.yScale*second.yScale,yOffset:first.yOffset*second.yScale+second.yOffset})}function createNumericScale(kind,domain,range,forward,backward,logBase){if(!validNumericDomain(domain))return invalidScale("Numeric scale domain must contain finite increasing bounds.");if(!validRange(range))return invalidScale("Chart scale range must contain finite distinct endpoints.");const transformedMinimum=forward(domain.minimum);const transformedMaximum=forward(domain.maximum);if(!finite(transformedMinimum)||!finite(transformedMaximum)||transformedMinimum===transformedMaximum){return invalidScale("Chart scale domain cannot be transformed into finite distinct bounds.")}const frozenRange=freezeRange(range);const domainSpan=transformedMaximum-transformedMinimum;const rangeSpan=frozenRange.end-frozenRange.start;const scale={kind,range:frozenRange,normalize(value){if(!finite(value))return null;const transformed=forward(value);return finite(transformed)?frozenRange.start+(transformed-transformedMinimum)/domainSpan*rangeSpan:null},invert(position){if(!finite(position))return null;const transformed=transformedMinimum+(position-frozenRange.start)/rangeSpan*domainSpan;const value=backward(transformed);return finite(value)?value:null},ticks(maximum){return unwrap(this.tryTicks(maximum))},tryTicks(maximum){const checked=validateTickMaximum(maximum);if(!checked.ok)return checked;if(maximum===0)return chartOK(Object.freeze([]));return chartOK(kind==="logarithmic"?logarithmicTicks(domain,frozenRange,maximum,logBase):uniformTicks(domain,frozenRange,maximum))}};return chartOK(Object.freeze(scale))}function uniformTicks(domain,range,maximum){if(maximum===1)return Object.freeze([Object.freeze({value:domain.minimum,position:range.start})]);const ticks=[];for(let index=0;index<maximum;index+=1){const ratio=index/(maximum-1);ticks.push(Object.freeze({value:domain.minimum+(domain.maximum-domain.minimum)*ratio,position:range.start+(range.end-range.start)*ratio}))}return Object.freeze(ticks)}function logarithmicTicks(domain,range,maximum,base){const logarithm=value=>Math.log(value)/Math.log(base);const startExponent=Math.ceil(logarithm(domain.minimum)-1e-12);const endExponent=Math.floor(logarithm(domain.maximum)+1e-12);const candidateCount=Math.max(0,endExponent-startExponent+1);if(candidateCount===0||candidateCount>maximum)return uniformLogTicks(domain,range,maximum,base);const ticks=[];const domainStart=logarithm(domain.minimum);const domainSpan=logarithm(domain.maximum)-domainStart;for(let exponent=startExponent;exponent<=endExponent;exponent+=1){const value=base**exponent;const ratio=(exponent-domainStart)/domainSpan;ticks.push(Object.freeze({value,position:range.start+(range.end-range.start)*ratio}))}return Object.freeze(ticks)}function uniformLogTicks(domain,range,maximum,base){if(maximum===1)return Object.freeze([Object.freeze({value:domain.minimum,position:range.start})]);const minimum=Math.log(domain.minimum)/Math.log(base);const span=Math.log(domain.maximum)/Math.log(base)-minimum;const ticks=[];for(let index=0;index<maximum;index+=1){const ratio=index/(maximum-1);ticks.push(Object.freeze({value:base**(minimum+span*ratio),position:range.start+(range.end-range.start)*ratio}))}return Object.freeze(ticks)}function validateTickMaximum(maximum){return Number.isSafeInteger(maximum)&&maximum>=0&&maximum<=MAX_CHART_TICKS?chartOK(true):chartFail("resource-rejection","chart-tick-ceiling-exceeded","Chart tick maximum is invalid or exceeds its ceiling.",{maximum,ceiling:MAX_CHART_TICKS})}function validNumericDomain(value){return value!==null&&typeof value==="object"&&finite(value.minimum)&&finite(value.maximum)&&value.minimum<value.maximum}function validRange(value){return value!==null&&typeof value==="object"&&finite(value.start)&&finite(value.end)&&value.start!==value.end}function freezeRange(range){return Object.freeze({start:range.start,end:range.end})}function invalidScale(message){return chartFail("construction","chart-scale-invalid",message)}function invalidTransform(message){return chartFail("construction","chart-view-transform-invalid",message)}function validColor(value){return Array.isArray(value)&&value.length===4&&value.every(channel=>finite(channel)&&channel>=0&&channel<=1)}function freezeColor(color){return Object.freeze([color[0],color[1],color[2],color[3]])}function stableColorHash(value){const text=typeof value==="number"?`n:${Object.is(value,-0)?0:value}`:`s:${value}`;let hash=2166136261;for(let index=0;index<text.length;index+=1){hash^=text.charCodeAt(index);hash=Math.imul(hash,16777619)}return hash>>>0}function interpolate(start,end,ratio){return start+(end-start)*ratio}function validCategory(value){return typeof value==="string"?value.length>0:finite(value)}function identity(value){return value}function finite(value){return typeof value==="number"&&Number.isFinite(value)}export{IDENTITY_CHART_VIEW_TRANSFORM,MAX_CHART_TICKS,composeChartViewTransforms,createCategoricalScale,createChartViewTransform,createContinuousColorScale,createLinearScale,createLogarithmicScale,createOrdinalColorScale,createTemporalScale,invertChartCoordinate,transformChartCoordinate,tryCreateCategoricalScale,tryCreateChartViewTransform,tryCreateContinuousColorScale,tryCreateLinearScale,tryCreateLogarithmicScale,tryCreateOrdinalColorScale,tryCreateTemporalScale};
|
|
2
|
+
//# sourceMappingURL=scale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scale.ts"],"mappings":"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","names":[],"file":"scale.js"}
|
package/dist/view.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { StableID } from '@sectile/core';
|
|
2
|
+
import { type ChartAxisView, type ChartAxisViewUpdateMode, type ChartAxisViewWindow, type ChartViewState } from './contract.js';
|
|
3
|
+
import type { ResolvedChartAxis } from './layout.js';
|
|
4
|
+
import type { ChartResult } from './result.js';
|
|
5
|
+
export interface ChartAxisViewCapability<ID extends StableID = StableID> {
|
|
6
|
+
readonly axisID: ID;
|
|
7
|
+
readonly initial?: ChartAxisViewWindow;
|
|
8
|
+
readonly minimumSpan?: number;
|
|
9
|
+
readonly maximumSpan?: number;
|
|
10
|
+
readonly update?: ChartAxisViewUpdateMode;
|
|
11
|
+
}
|
|
12
|
+
export type ChartViewPhase = 'start' | 'update' | 'end' | 'settled';
|
|
13
|
+
export type ChartViewAction<ID extends StableID = StableID> = {
|
|
14
|
+
readonly type: 'set-axis-view';
|
|
15
|
+
readonly axisID: ID;
|
|
16
|
+
readonly visible: ChartAxisViewWindow;
|
|
17
|
+
readonly phase?: ChartViewPhase;
|
|
18
|
+
} | {
|
|
19
|
+
readonly type: 'pan-axis-view';
|
|
20
|
+
readonly axisID: ID;
|
|
21
|
+
readonly fraction: number;
|
|
22
|
+
readonly phase?: ChartViewPhase;
|
|
23
|
+
} | {
|
|
24
|
+
readonly type: 'zoom-axis-view';
|
|
25
|
+
readonly axisID: ID;
|
|
26
|
+
readonly factor: number;
|
|
27
|
+
readonly anchor?: number;
|
|
28
|
+
readonly phase?: ChartViewPhase;
|
|
29
|
+
} | {
|
|
30
|
+
readonly type: 'reset-axis-view';
|
|
31
|
+
readonly axisID: ID;
|
|
32
|
+
readonly to?: 'initial' | 'latest';
|
|
33
|
+
readonly phase?: ChartViewPhase;
|
|
34
|
+
};
|
|
35
|
+
export interface ChartViewWork {
|
|
36
|
+
readonly indexedAxes: number;
|
|
37
|
+
readonly axisLookups: number;
|
|
38
|
+
readonly mathOperations: number;
|
|
39
|
+
readonly publishedAxes: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ChartViewTransition<ID extends StableID = StableID> {
|
|
42
|
+
readonly state: ChartViewState<ID>;
|
|
43
|
+
readonly axis: ChartAxisView<ID>;
|
|
44
|
+
readonly phase: ChartViewPhase;
|
|
45
|
+
readonly changed: boolean;
|
|
46
|
+
readonly work: ChartViewWork;
|
|
47
|
+
}
|
|
48
|
+
export declare function createChartAxisViewState<ID extends StableID>(axes: readonly ResolvedChartAxis<ID>[], capabilities: readonly ChartAxisViewCapability<ID>[]): ChartViewState<ID>;
|
|
49
|
+
export declare function tryCreateChartAxisViewState<ID extends StableID>(axes: readonly ResolvedChartAxis<ID>[], capabilities: readonly ChartAxisViewCapability<ID>[]): ChartResult<ChartViewState<ID>>;
|
|
50
|
+
export declare function chartAxisView<ID extends StableID>(state: ChartViewState<ID>, axisID: ID): ChartAxisView<ID> | null;
|
|
51
|
+
export declare function reduceChartViewAction<ID extends StableID>(state: ChartViewState<ID>, action: ChartViewAction<ID>): ChartResult<ChartViewTransition<ID>>;
|
|
52
|
+
export declare function reconcileChartAxisViewState<ID extends StableID>(previous: ChartViewState<ID>, axes: readonly ResolvedChartAxis<ID>[], capabilities: readonly ChartAxisViewCapability<ID>[]): ChartResult<ChartViewState<ID>>;
|
package/dist/view.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{unwrap}from"@sectile/core/result";import{tryCreateChartViewState}from"./contract.js";import{chartFail,chartOK}from"./internal/result.js";const stateIndexes=new WeakMap;function createChartAxisViewState(axes,capabilities){return unwrap(tryCreateChartAxisViewState(axes,capabilities))}function tryCreateChartAxisViewState(axes,capabilities){if(!Array.isArray(axes)||!Array.isArray(capabilities))return invalidView("Chart axis view creation requires axis and capability arrays.");const available=new Map(axes.map(axis=>[axis.id,axis]));const views=[];for(const capability of capabilities){if(capability===null||typeof capability!=="object")return invalidView("Chart axis view capability must be an object.");const axis=available.get(capability.axisID);if(axis===void 0)return chartFail("construction","chart-axis-missing","Chart axis view capability references a missing axis.",{id:capability.axisID});const base=baseWindow(axis);const initial=capability.initial??base;views.push({axisID:axis.id,orientation:axis.orientation,scale:axis.scale,base,initial,visible:initial,...capability.minimumSpan===void 0?{}:{minimumSpan:capability.minimumSpan},...capability.maximumSpan===void 0?{}:{maximumSpan:capability.maximumSpan},update:capability.update??"preserve",followingEnd:(capability.update??"preserve")==="follow-end"&&windowEnd(initial)===windowEnd(base),...axis.domain.kind==="categorical"?{categories:axis.domain.values}:{},revision:0})}const state=tryCreateChartViewState(views);if(!state.ok)return state;bindIndex(state.value,createIndex(state.value.axes));return state}function chartAxisView(state,axisID){const lookup=stateIndex(state);const index=lookup.index.get(axisID);return index===void 0?null:state.axes[index]??null}function reduceChartViewAction(state,action){if(state===null||typeof state!=="object"||!Array.isArray(state.axes)||action===null||typeof action!=="object")return invalidView("Chart view action and state must be objects.");const lookup=stateIndex(state);const position=lookup.index.get(action.axisID);if(position===void 0)return chartFail("transition-rejection","chart-axis-missing","Chart view action references a disabled or missing axis.",{id:action.axisID});const axis=state.axes[position];const phase=action.phase??"settled";if(!validPhase(phase))return invalidView("Chart view action phase is invalid.");let visible;let followingEnd=false;let mathOperations=0;if(action.type==="set-axis-view"){if(!compatibleWindow(axis,action.visible))return invalidView("Set-axis-view window does not match the axis scale.");visible=constrainWindow(axis,action.visible,.5);mathOperations=12}else if(action.type==="pan-axis-view"){if(!finite(action.fraction))return invalidView("Chart pan fraction must be finite.");visible=panWindow(axis,action.fraction);mathOperations=axis.scale==="logarithmic"?18:10}else if(action.type==="zoom-axis-view"){const anchor=action.anchor??.5;if(!finite(action.factor)||action.factor<=0||!finite(anchor)||anchor<0||anchor>1){return invalidView("Chart zoom factor must be positive and its normalized anchor must be between zero and one.")}visible=zoomWindow(axis,action.factor,anchor);mathOperations=axis.scale==="logarithmic"?24:14}else if(action.type==="reset-axis-view"){if(action.to!==void 0&&action.to!=="initial"&&action.to!=="latest")return invalidView("Chart reset target is invalid.");if(action.to==="latest"){visible=latestWindow(axis);followingEnd=axis.update==="follow-end"}else visible=axis.initial??axis.base;mathOperations=8}else return invalidView("Chart view action type is invalid.");if(sameWindow(axis.visible,visible)&&!(action.type==="reset-axis-view"&&action.to==="latest")){followingEnd=axis.followingEnd??false}const changed=!sameWindow(axis.visible,visible)||axis.followingEnd!==followingEnd;if(!changed)return chartOK(Object.freeze({state,axis,phase,changed:false,work:Object.freeze({indexedAxes:lookup.built,axisLookups:1,mathOperations,publishedAxes:0})}));if(state.revision===Number.MAX_SAFE_INTEGER||axis.revision===Number.MAX_SAFE_INTEGER)return revisionExhausted();const nextAxis=Object.freeze({...axis,visible,followingEnd,revision:axis.revision+1});const nextAxes=state.axes.slice();nextAxes[position]=nextAxis;const next=Object.freeze({revision:state.revision+1,axes:Object.freeze(nextAxes)});bindIndex(next,lookup.index);return chartOK(Object.freeze({state:next,axis:nextAxis,phase,changed:true,work:Object.freeze({indexedAxes:lookup.built,axisLookups:1,mathOperations,publishedAxes:nextAxes.length})}))}function reconcileChartAxisViewState(previous,axes,capabilities){const created=tryCreateChartAxisViewState(axes,capabilities);if(!created.ok)return created;const previousIndex=stateIndex(previous).index;let changed=previous.axes.length!==created.value.axes.length;const reconciled=[];for(let nextPosition=0;nextPosition<created.value.axes.length;nextPosition+=1){const proposed=created.value.axes[nextPosition];const priorPosition=previousIndex.get(proposed.axisID);const prior=priorPosition===void 0?void 0:previous.axes[priorPosition];if(prior===void 0||prior.scale!==proposed.scale){reconciled.push(proposed);changed=true;continue}if(priorPosition!==nextPosition)changed=true;const visible=reconcileVisible(prior,proposed);const followingEnd=proposed.update==="follow-end"&&prior.followingEnd===true;if(prior.revision===Number.MAX_SAFE_INTEGER&&(!sameAxisBase(prior,proposed)||!sameWindow(prior.visible,visible))){return revisionExhausted()}const next=Object.freeze({...proposed,visible,followingEnd,revision:sameAxisBase(prior,proposed)&&sameWindow(prior.visible,visible)?prior.revision:prior.revision+1});if(!sameAxisView(prior,next))changed=true;reconciled.push(sameAxisView(prior,next)?prior:next)}if(!changed)return chartOK(previous);if(previous.revision===Number.MAX_SAFE_INTEGER)return revisionExhausted();const state=Object.freeze({revision:previous.revision+1,axes:Object.freeze(reconciled)});bindIndex(state,createIndex(state.axes));return chartOK(state)}function reconcileVisible(prior,next){if(next.update==="reset")return next.initial??next.base;if(next.update==="follow-end"&&prior.followingEnd===true)return latestWindow({...next,visible:prior.visible});if(prior.visible.kind==="categorical"&&next.base.kind==="categorical"){const preserved=preserveCategories(prior,next);return constrainWindow(next,preserved,.5)}return constrainWindow(next,prior.visible,.5)}function preserveCategories(prior,next){if(prior.visible.kind!=="categorical"||next.base.kind!=="categorical"||prior.categories===void 0||next.categories===void 0){return prior.visible}const first=prior.categories[prior.visible.start-windowStart(prior.base)];const last=prior.categories[prior.visible.end-windowStart(prior.base)-1];const firstIndex=first===void 0?-1:next.categories.indexOf(first);const lastIndex=last===void 0?-1:next.categories.indexOf(last);return firstIndex>=0&&lastIndex>=firstIndex?Object.freeze({kind:"categorical",start:windowStart(next.base)+firstIndex,end:windowStart(next.base)+lastIndex+1}):prior.visible}function panWindow(axis,fraction){const current=transformed(axis,axis.visible);const shift=(current.end-current.start)*fraction;return fromTransformed(axis,constrainTransformed(axis,current.start+shift,current.end+shift,.5))}function zoomWindow(axis,factor,anchor){const current=transformed(axis,axis.visible);const anchorValue=current.start+(current.end-current.start)*anchor;const span=(current.end-current.start)/factor;const start=anchorValue-span*anchor;return fromTransformed(axis,constrainTransformed(axis,start,start+span,anchor))}function constrainWindow(axis,window,anchor){const desired=transformed(axis,window);return fromTransformed(axis,constrainTransformed(axis,desired.start,desired.end,anchor))}function constrainTransformed(axis,inputStart,inputEnd,anchor){const base=transformed(axis,axis.base);const baseSpan=base.end-base.start;const minimum=Math.min(baseSpan,axis.minimumSpan??(axis.scale==="categorical"?1:0));const maximum=Math.min(baseSpan,axis.maximumSpan??baseSpan);const requested=Math.max(0,inputEnd-inputStart);const span=Math.max(minimum,Math.min(maximum,requested));const anchored=inputStart+requested*anchor;let start=anchored-span*anchor;let end=start+span;if(start<base.start){start=base.start;end=start+span}if(end>base.end){end=base.end;start=end-span}if(axis.scale==="categorical"){start=Math.round(start);end=Math.round(end);if(end<=start)end=start+1;if(end>base.end){end=base.end;start=Math.max(base.start,end-Math.max(1,Math.round(span)))}}return{start,end}}function latestWindow(axis){const base=transformed(axis,axis.base);const visible=transformed(axis,axis.visible);const span=Math.min(base.end-base.start,visible.end-visible.start);return fromTransformed(axis,constrainTransformed(axis,base.end-span,base.end,1))}function transformed(axis,window){const start=windowStart(window);const end=windowEnd(window);return axis.scale==="logarithmic"?{start:Math.log(start),end:Math.log(end)}:{start,end}}function fromTransformed(axis,window){if(axis.scale==="categorical")return Object.freeze({kind:"categorical",start:Math.round(window.start),end:Math.round(window.end)});return Object.freeze({kind:"continuous",minimum:axis.scale==="logarithmic"?Math.exp(window.start):window.start,maximum:axis.scale==="logarithmic"?Math.exp(window.end):window.end})}function baseWindow(axis){return axis.domain.kind==="categorical"?Object.freeze({kind:"categorical",start:0,end:axis.domain.values.length}):Object.freeze({kind:"continuous",minimum:axis.domain.minimum,maximum:axis.domain.maximum})}function compatibleWindow(axis,window){if(window===null||typeof window!=="object")return false;if(axis.scale==="categorical"!==(window.kind==="categorical"))return false;const start=windowStart(window);const end=windowEnd(window);if(!finite(start)||!finite(end)||end<=start)return false;if(axis.scale==="logarithmic"&&start<=0)return false;return axis.scale!=="categorical"||Number.isSafeInteger(start)&&Number.isSafeInteger(end)}function sameAxisBase(left,right){if(left.orientation!==right.orientation||left.scale!==right.scale||!sameWindow(left.base,right.base)||!sameWindow(left.initial??left.visible,right.initial??right.visible)||left.minimumSpan!==right.minimumSpan||left.maximumSpan!==right.maximumSpan||left.update!==right.update)return false;if(left.categories===void 0||right.categories===void 0)return left.categories===right.categories;if(left.categories.length!==right.categories.length)return false;for(let index=0;index<left.categories.length;index+=1)if(left.categories[index]!==right.categories[index])return false;return true}function sameAxisView(left,right){return sameAxisBase(left,right)&&sameWindow(left.visible,right.visible)&&left.followingEnd===right.followingEnd&&left.revision===right.revision}function sameWindow(left,right){return left.kind===right.kind&&windowStart(left)===windowStart(right)&&windowEnd(left)===windowEnd(right)}function windowStart(window){return window.kind==="continuous"?window.minimum:window.start}function windowEnd(window){return window.kind==="continuous"?window.maximum:window.end}function finite(value){return typeof value==="number"&&Number.isFinite(value)}function validPhase(value){return value==="start"||value==="update"||value==="end"||value==="settled"}function createIndex(axes){return new Map(axes.map((axis,index)=>[axis.axisID,index]))}function bindIndex(state,index){stateIndexes.set(state,index)}function stateIndex(state){const retained=stateIndexes.get(state);if(retained!==void 0)return{index:retained,built:0};const index=createIndex(state.axes);bindIndex(state,index);return{index,built:state.axes.length}}function invalidView(message){return chartFail("construction","chart-view-invalid",message)}function revisionExhausted(){return chartFail("resource-rejection","revision-ceiling-reached","Chart view revision is exhausted.")}export{chartAxisView,createChartAxisViewState,reconcileChartAxisViewState,reduceChartViewAction,tryCreateChartAxisViewState};
|
|
2
|
+
//# sourceMappingURL=view.js.map
|
package/dist/view.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/view.ts"],"mappings":"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","names":[],"file":"view.js"}
|
package/package.json
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sectile/chart",
|
|
3
|
+
"version": "0.11.1",
|
|
4
|
+
"description": "Renderer-neutral chart models, interaction, and packed projections for Sectile.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=24"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/sectile/sectile.git",
|
|
20
|
+
"directory": "packages/chart"
|
|
21
|
+
},
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.js",
|
|
27
|
+
"default": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./model": {
|
|
30
|
+
"types": "./dist/model.d.ts",
|
|
31
|
+
"import": "./dist/model.js",
|
|
32
|
+
"default": "./dist/model.js"
|
|
33
|
+
},
|
|
34
|
+
"./result": {
|
|
35
|
+
"types": "./dist/result.d.ts",
|
|
36
|
+
"import": "./dist/result.js",
|
|
37
|
+
"default": "./dist/result.js"
|
|
38
|
+
},
|
|
39
|
+
"./scale": {
|
|
40
|
+
"types": "./dist/scale.d.ts",
|
|
41
|
+
"import": "./dist/scale.js",
|
|
42
|
+
"default": "./dist/scale.js"
|
|
43
|
+
},
|
|
44
|
+
"./projection": {
|
|
45
|
+
"types": "./dist/projection.d.ts",
|
|
46
|
+
"import": "./dist/projection.js",
|
|
47
|
+
"default": "./dist/projection.js"
|
|
48
|
+
},
|
|
49
|
+
"./query": {
|
|
50
|
+
"types": "./dist/query.d.ts",
|
|
51
|
+
"import": "./dist/query.js",
|
|
52
|
+
"default": "./dist/query.js"
|
|
53
|
+
},
|
|
54
|
+
"./interaction": {
|
|
55
|
+
"types": "./dist/interaction.d.ts",
|
|
56
|
+
"import": "./dist/interaction.js",
|
|
57
|
+
"default": "./dist/interaction.js"
|
|
58
|
+
},
|
|
59
|
+
"./controller": {
|
|
60
|
+
"types": "./dist/controller.d.ts",
|
|
61
|
+
"import": "./dist/controller.js",
|
|
62
|
+
"default": "./dist/controller.js"
|
|
63
|
+
},
|
|
64
|
+
"./contract": {
|
|
65
|
+
"types": "./dist/contract.d.ts",
|
|
66
|
+
"import": "./dist/contract.js",
|
|
67
|
+
"default": "./dist/contract.js"
|
|
68
|
+
},
|
|
69
|
+
"./layout": {
|
|
70
|
+
"types": "./dist/layout.d.ts",
|
|
71
|
+
"import": "./dist/layout.js",
|
|
72
|
+
"default": "./dist/layout.js"
|
|
73
|
+
},
|
|
74
|
+
"./definition": {
|
|
75
|
+
"types": "./dist/definition.d.ts",
|
|
76
|
+
"import": "./dist/definition.js",
|
|
77
|
+
"default": "./dist/definition.js"
|
|
78
|
+
},
|
|
79
|
+
"./view": {
|
|
80
|
+
"types": "./dist/view.d.ts",
|
|
81
|
+
"import": "./dist/view.js",
|
|
82
|
+
"default": "./dist/view.js"
|
|
83
|
+
},
|
|
84
|
+
"./package.json": "./package.json"
|
|
85
|
+
},
|
|
86
|
+
"dependencies": {
|
|
87
|
+
"@sectile/core": "0.11.1"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"typescript": "7.0.2"
|
|
91
|
+
},
|
|
92
|
+
"scripts": {
|
|
93
|
+
"build": "node scripts/build.mjs production",
|
|
94
|
+
"build:verification": "node scripts/build.mjs verification",
|
|
95
|
+
"typecheck": "tsc --project tsconfig.json --pretty false",
|
|
96
|
+
"typecheck:public": "pnpm --silent run build && tsc --project type-tests/tsconfig.json --pretty false",
|
|
97
|
+
"test": "pnpm --silent run build:verification && node --test --test-concurrency=1 tests/*/*.test.mjs",
|
|
98
|
+
"benchmark": "pnpm --silent run build && node benchmarks/projection.mjs",
|
|
99
|
+
"benchmark:model-repair": "pnpm --silent run build && node benchmarks/model-repair.mjs",
|
|
100
|
+
"benchmark:semantic-projection": "pnpm --silent run build && node benchmarks/semantic-projection.mjs",
|
|
101
|
+
"benchmark:view-transition": "pnpm --silent run build && node benchmarks/view-transition.mjs",
|
|
102
|
+
"benchmark:retention": "pnpm --silent run build && node --expose-gc benchmarks/retention.mjs",
|
|
103
|
+
"check:package": "node scripts/check-package.mjs",
|
|
104
|
+
"verify:reproducible-build": "node scripts/check-reproducible-build.mjs"
|
|
105
|
+
}
|
|
106
|
+
}
|