@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,2 @@
|
|
|
1
|
+
import{unwrap}from"@sectile/core/result";import{tryCreateChartViewState}from"./contract.js";import{chartFail,chartOK}from"./internal/result.js";import{chartAxisView,reduceChartViewAction}from"./view.js";const EMPTY_COMMANDS=Object.freeze([]);const pointSelectionIndexes=new WeakMap;function chartSelectionContains(selection,id){if(selection.type!=="points")return false;let index=pointSelectionIndexes.get(selection);if(index===void 0){index=new Set(selection.ids);pointSelectionIndexes.set(selection,index)}return index.has(id)}function createChartState(model,controlled={}){return unwrap(tryCreateChartState(model,controlled))}function tryCreateChartState(model,controlled={}){if(controlled===null||typeof controlled!=="object")return invalidInteraction("Controlled chart values must be an object.");const active=validateOptionalDatum(model,controlled.activeDatum??null);if(!active.ok)return active;const cursor=validateOptionalDatum(model,controlled.cursor??null);if(!cursor.ok)return cursor;const view=normalizeView(controlled.view??null);if(!view.ok)return view;const selection=normalizeSelection(model,controlled.selection??{type:"points",ids:[]},view.value);if(!selection.ok)return selection;return chartOK(freezeState(model.generation,active.value,cursor.value,selection.value,view.value))}function reconcileChartState(state,model,controlled={}){if(controlled===null||typeof controlled!=="object")return invalidInteraction("Controlled chart values must be an object.");const active=controlled.activeDatum!==void 0?validateOptionalDatum(model,controlled.activeDatum):chartOK(state.activeDatum!==null&&model.indexOf(state.activeDatum)>=0?state.activeDatum:null);if(!active.ok)return active;const cursor=controlled.cursor!==void 0?validateOptionalDatum(model,controlled.cursor):chartOK(state.cursor!==null&&model.indexOf(state.cursor)>=0?state.cursor:null);if(!cursor.ok)return cursor;const view=controlled.view===void 0?chartOK(state.view):normalizeView(controlled.view);if(!view.ok)return view;const selection=controlled.selection===void 0?reconcileSelection(model,state.selection,view.value):normalizeSelection(model,controlled.selection,view.value);if(!selection.ok)return selection;const next=freezeState(model.generation,active.value,cursor.value,selection.value,view.value);return chartOK(sameState(state,next)?state:next)}function reduceChartEvent(model,state,event,controlled={}){if(state.generation!==model.generation)return invalidInteraction("Chart state generation must match its model generation.");if(event===null||typeof event!=="object"||typeof event.type!=="string")return invalidInteraction("Chart event is invalid.");if(event.type==="pointer-candidate"||event.type==="set-active"){const candidate=validateOptionalDatum(model,event.id);return candidate.ok?updateActive(state,candidate.value,controlled.activeDatum===true):candidate}if(event.type==="set-cursor"){const candidate=validateOptionalDatum(model,event.id);return candidate.ok?updateCursor(state,candidate.value,controlled.cursor===true):candidate}if(event.type==="set-selection"){const selection=normalizeSelection(model,event.selection,state.view);return selection.ok?updateSelection(state,selection.value,controlled.selection===true):selection}if(event.type==="move-focus"){if(event.direction!=="next"&&event.direction!=="previous"&&event.direction!=="first"&&event.direction!=="last")return invalidInteraction("Chart focus direction is invalid.");return updateCursor(state,movedCursor(model,state.cursor,event.direction),controlled.cursor===true)}if(event.type==="set-axis-view"||event.type==="pan-axis-view"||event.type==="zoom-axis-view"||event.type==="reset-axis-view"){if(state.view===null)return invalidInteraction("Chart axis view action requires enabled axis view state.");const reduced=reduceChartViewAction(state.view,event);if(!reduced.ok)return reduced;const phase=Object.freeze({type:"view-phase",axisID:event.axisID,phase:reduced.value.phase,changed:reduced.value.changed});if(!reduced.value.changed)return transition(state,[phase],false);if(controlled.view===true)return transition(state,[Object.freeze({type:"view-change-requested",view:reduced.value.state,phase:reduced.value.phase}),phase],false);return changedState(state,{view:reduced.value.state},[phase])}return invalidInteraction("Chart event type is invalid.")}function updateActive(state,id,controlled){if(state.activeDatum===id)return unchanged(state);if(controlled)return transition(state,[Object.freeze({type:"active-change-requested",id})],false);return changedState(state,{activeDatum:id})}function updateCursor(state,id,controlled){if(state.cursor===id)return unchanged(state);const commands=[];if(controlled)commands.push(Object.freeze({type:"cursor-change-requested",id}));if(id!==null){commands.push(Object.freeze({type:"focus-datum",id}));commands.push(Object.freeze({type:"announce-datum",id}))}return controlled?transition(state,commands,false):changedState(state,{cursor:id},commands)}function updateSelection(state,selection,controlled){if(sameSelection(state.selection,selection))return unchanged(state);if(controlled)return transition(state,[Object.freeze({type:"selection-change-requested",selection})],false);return changedState(state,{selection})}function changedState(state,patch,commands=EMPTY_COMMANDS){const next=freezeState(state.generation,"activeDatum"in patch?patch.activeDatum:state.activeDatum,"cursor"in patch?patch.cursor:state.cursor,patch.selection??state.selection,"view"in patch?patch.view:state.view);return transition(next,[...commands,Object.freeze({type:"render-requested",generation:state.generation})],true)}function transition(state,commands,changed){return chartOK(Object.freeze({state,commands:Object.freeze([...commands]),changed}))}function unchanged(state){return chartOK(Object.freeze({state,commands:EMPTY_COMMANDS,changed:false}))}function movedCursor(model,current,direction){if(model.size===0)return null;if(direction==="first")return model.identityAt(0);if(direction==="last")return model.identityAt(model.size-1);if(current===null)return direction==="next"?model.identityAt(0):model.identityAt(model.size-1);const index=model.indexOf(current);if(index<0)return direction==="next"?model.identityAt(0):model.identityAt(model.size-1);return direction==="next"?model.identityAt(Math.min(model.size-1,index+1)):model.identityAt(Math.max(0,index-1))}function normalizeSelection(model,selection,view){if(selection===null||typeof selection!=="object")return invalidInteraction("Chart selection is invalid.");if(selection.type==="axis-interval"){const axis=view===null?null:chartAxisView(view,selection.axisID);if(axis===null||!validSelectionBounds(axis,selection.start,selection.end)){return invalidInteraction("Chart axis selection must reference an enabled axis and contain finite ordered bounds.")}return chartOK(Object.freeze({type:"axis-interval",axisID:selection.axisID,start:selection.start,end:selection.end}))}if(selection.type==="domain-region"){const xAxis=view===null?null:chartAxisView(view,selection.xAxisID);const yAxis=view===null?null:chartAxisView(view,selection.yAxisID);if(xAxis===null||yAxis===null||xAxis.orientation!==void 0&&xAxis.orientation!=="x"||yAxis.orientation!==void 0&&yAxis.orientation!=="y"||!validSelectionBounds(xAxis,selection.xStart,selection.xEnd)||!validSelectionBounds(yAxis,selection.yStart,selection.yEnd)){return invalidInteraction("Chart domain region must reference enabled axes and contain finite ordered bounds.")}return chartOK(Object.freeze({...selection}))}if(selection.type!=="points"||!Array.isArray(selection.ids))return invalidInteraction("Chart point selection must contain an identity array.");const seen=new Set;const ids=[];for(const id of selection.ids){if(model.indexOf(id)<0)return missingDatum(id);if(seen.has(id))return invalidInteraction("Chart point selection identities must be unique.");seen.add(id);ids.push(id)}return chartOK(Object.freeze({type:"points",ids:Object.freeze(ids)}))}function validSelectionBounds(axis,start,end){if(!finite(start)||!finite(end)||start>end)return false;const baseStart=axis.base.kind==="continuous"?axis.base.minimum:axis.base.start;const baseEnd=axis.base.kind==="continuous"?axis.base.maximum:axis.base.end;return start>=baseStart&&end<=baseEnd&&(axis.scale!=="categorical"||Number.isSafeInteger(start)&&Number.isSafeInteger(end))}function reconcileSelection(model,selection,view){if(selection.type!=="points")return normalizeSelection(model,selection,view);const ids=selection.ids.filter(id=>model.indexOf(id)>=0);return ids.length===selection.ids.length?chartOK(selection):chartOK(Object.freeze({type:"points",ids:Object.freeze(ids)}))}function validateOptionalDatum(model,id){return id===null||model.indexOf(id)>=0?chartOK(id):missingDatum(id)}function missingDatum(id){return chartFail("transition-rejection","chart-datum-missing","Chart datum identity does not exist.",{id})}function freezeState(generation,activeDatum,cursor,selection,view){return Object.freeze({generation,activeDatum,cursor,selection,view})}function sameState(left,right){return left.generation===right.generation&&left.activeDatum===right.activeDatum&&left.cursor===right.cursor&&sameSelection(left.selection,right.selection)&&left.view===right.view}function normalizeView(view){if(view===null)return chartOK(null);const normalized=tryCreateChartViewState(view.axes,view.revision);if(!normalized.ok)return normalized;return chartOK(sameViewState(view,normalized.value)?view:normalized.value)}function sameViewState(left,right){if(left.revision!==right.revision||left.axes.length!==right.axes.length)return false;for(let index=0;index<left.axes.length;index+=1){const a=left.axes[index];const b=right.axes[index];if(a===void 0||b===void 0||a.axisID!==b.axisID||a.orientation!==b.orientation||a.scale!==b.scale||a.revision!==b.revision||a.minimumSpan!==b.minimumSpan||a.maximumSpan!==b.maximumSpan||a.update!==b.update||a.followingEnd!==b.followingEnd||!sameViewWindow(a.base,b.base)||!sameViewWindow(a.initial??a.visible,b.initial??b.visible)||!sameViewWindow(a.visible,b.visible))return false;if(a.categories===void 0||b.categories===void 0){if(a.categories!==b.categories)return false}else{if(a.categories.length!==b.categories.length)return false;for(let category=0;category<a.categories.length;category+=1){if(a.categories[category]!==b.categories[category])return false}}}return true}function sameViewWindow(left,right){return left.kind===right.kind&&(left.kind==="continuous"&&right.kind==="continuous"?left.minimum===right.minimum&&left.maximum===right.maximum:left.kind==="categorical"&&right.kind==="categorical"&&left.start===right.start&&left.end===right.end)}function sameSelection(left,right){if(left.type!==right.type)return false;if(left.type==="axis-interval"&&right.type==="axis-interval"){return left.axisID===right.axisID&&left.start===right.start&&left.end===right.end}if(left.type==="domain-region"&&right.type==="domain-region"){return left.xAxisID===right.xAxisID&&left.xStart===right.xStart&&left.xEnd===right.xEnd&&left.yAxisID===right.yAxisID&&left.yStart===right.yStart&&left.yEnd===right.yEnd}if(left.type!=="points"||right.type!=="points"||left.ids.length!==right.ids.length)return false;for(let index=0;index<left.ids.length;index+=1)if(left.ids[index]!==right.ids[index])return false;return true}function invalidInteraction(message){return chartFail("construction","chart-interaction-invalid",message)}function finite(value){return typeof value==="number"&&Number.isFinite(value)}export{chartSelectionContains,createChartState,reconcileChartState,reduceChartEvent,tryCreateChartState};
|
|
2
|
+
//# sourceMappingURL=interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/interaction.ts"],"mappings":"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","names":[],"file":"interaction.js"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { StableID } from '@sectile/core';
|
|
2
|
+
import { type Sequence } from '@sectile/core/sequence';
|
|
3
|
+
import type { ChartDatum, ChartProfile } from '../model.js';
|
|
4
|
+
export interface ChartLayerRevisions {
|
|
5
|
+
readonly identity: number;
|
|
6
|
+
readonly order: number;
|
|
7
|
+
readonly value: number;
|
|
8
|
+
readonly geometry: number;
|
|
9
|
+
readonly aggregate: number;
|
|
10
|
+
readonly style: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ChartLayerBounds {
|
|
13
|
+
readonly hasValues: boolean;
|
|
14
|
+
readonly minimumX: number;
|
|
15
|
+
readonly maximumX: number;
|
|
16
|
+
readonly minimumY: number;
|
|
17
|
+
readonly maximumY: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ChartLayerWork {
|
|
20
|
+
readonly scannedDatums: number;
|
|
21
|
+
readonly copiedValueBlocks: number;
|
|
22
|
+
readonly repairedIndexEntries: number;
|
|
23
|
+
readonly rebuiltIndexEntries: number;
|
|
24
|
+
}
|
|
25
|
+
export interface OrderedProfileIndex {
|
|
26
|
+
readonly kind: 'ordered';
|
|
27
|
+
readonly hierarchy: PackedAggregateHierarchy;
|
|
28
|
+
}
|
|
29
|
+
export interface SpatialProfileIndex {
|
|
30
|
+
readonly kind: 'spatial';
|
|
31
|
+
readonly order: Uint32Array;
|
|
32
|
+
readonly positions: Uint32Array;
|
|
33
|
+
readonly hierarchy: PackedAggregateHierarchy;
|
|
34
|
+
}
|
|
35
|
+
export interface HeatmapProfileIndex {
|
|
36
|
+
readonly kind: 'heatmap';
|
|
37
|
+
readonly representation: 'dense' | 'sparse';
|
|
38
|
+
readonly order: Uint32Array;
|
|
39
|
+
readonly positions: Uint32Array;
|
|
40
|
+
readonly rowValues: Float64Array;
|
|
41
|
+
readonly rowOffsets: Uint32Array;
|
|
42
|
+
readonly datumIndices: Uint32Array;
|
|
43
|
+
readonly hierarchy: PackedAggregateHierarchy;
|
|
44
|
+
}
|
|
45
|
+
export interface CategoricalProfileIndex {
|
|
46
|
+
readonly kind: 'categorical';
|
|
47
|
+
readonly slots: Float64Array;
|
|
48
|
+
readonly hierarchy: PackedAggregateHierarchy;
|
|
49
|
+
}
|
|
50
|
+
export interface RadialProfileIndex {
|
|
51
|
+
readonly kind: 'radial';
|
|
52
|
+
readonly prefix: Float64Array;
|
|
53
|
+
readonly total: number;
|
|
54
|
+
readonly hierarchy: PackedAggregateHierarchy;
|
|
55
|
+
}
|
|
56
|
+
export type ChartProfileIndex = OrderedProfileIndex | SpatialProfileIndex | HeatmapProfileIndex | CategoricalProfileIndex | RadialProfileIndex;
|
|
57
|
+
export interface PackedChartLayerOwner<ID extends StableID = StableID> {
|
|
58
|
+
readonly id: ID;
|
|
59
|
+
readonly profile: ChartProfile;
|
|
60
|
+
readonly size: number;
|
|
61
|
+
readonly stride: number;
|
|
62
|
+
readonly identities: Sequence<ID>;
|
|
63
|
+
readonly values: PackedValueStore;
|
|
64
|
+
readonly index: ChartProfileIndex;
|
|
65
|
+
readonly bounds: ChartLayerBounds;
|
|
66
|
+
readonly revisions: ChartLayerRevisions;
|
|
67
|
+
readonly geometryToken: object;
|
|
68
|
+
readonly styleToken: object;
|
|
69
|
+
}
|
|
70
|
+
export interface PackedLayerInput<ID extends StableID = StableID> {
|
|
71
|
+
readonly id: ID;
|
|
72
|
+
readonly profile: ChartProfile;
|
|
73
|
+
readonly identities: readonly ID[];
|
|
74
|
+
readonly values: Float64Array;
|
|
75
|
+
readonly stride: number;
|
|
76
|
+
}
|
|
77
|
+
export interface PackedLayerPatch<ID extends StableID = StableID> {
|
|
78
|
+
readonly index: number;
|
|
79
|
+
readonly identities: readonly ID[];
|
|
80
|
+
readonly values: Float64Array;
|
|
81
|
+
}
|
|
82
|
+
export interface PackedLayerMutation<ID extends StableID = StableID> {
|
|
83
|
+
readonly owner: PackedChartLayerOwner<ID>;
|
|
84
|
+
readonly changed: boolean;
|
|
85
|
+
readonly work: ChartLayerWork;
|
|
86
|
+
}
|
|
87
|
+
export interface PackedValueStore {
|
|
88
|
+
readonly size: number;
|
|
89
|
+
readonly stride: number;
|
|
90
|
+
readonly depth: number;
|
|
91
|
+
readonly base: Float64Array | null;
|
|
92
|
+
readonly parent: PackedValueStore | null;
|
|
93
|
+
readonly blocks: ReadonlyMap<number, Float64Array>;
|
|
94
|
+
}
|
|
95
|
+
export interface PackedAggregateHierarchy {
|
|
96
|
+
readonly size: number;
|
|
97
|
+
readonly leafCount: number;
|
|
98
|
+
readonly depth: number;
|
|
99
|
+
readonly base: Float64Array | null;
|
|
100
|
+
readonly parent: PackedAggregateHierarchy | null;
|
|
101
|
+
readonly overrides: ReadonlyMap<number, Float64Array>;
|
|
102
|
+
}
|
|
103
|
+
export interface PackedOrderedEnvelopeSelection {
|
|
104
|
+
readonly indices: Uint32Array;
|
|
105
|
+
readonly visitedNodes: number;
|
|
106
|
+
readonly visibleDatums: number;
|
|
107
|
+
readonly aggregated: boolean;
|
|
108
|
+
}
|
|
109
|
+
export interface PackedAggregateSelectionEntry {
|
|
110
|
+
readonly minimumX: number;
|
|
111
|
+
readonly maximumX: number;
|
|
112
|
+
readonly minimumY: number;
|
|
113
|
+
readonly maximumY: number;
|
|
114
|
+
readonly minimumValue: number;
|
|
115
|
+
readonly maximumValue: number;
|
|
116
|
+
readonly sum: number;
|
|
117
|
+
readonly count: number;
|
|
118
|
+
readonly firstIndex: number;
|
|
119
|
+
}
|
|
120
|
+
export interface PackedAggregateSelection {
|
|
121
|
+
readonly entries: readonly PackedAggregateSelectionEntry[];
|
|
122
|
+
readonly visitedNodes: number;
|
|
123
|
+
readonly visibleDatums: number;
|
|
124
|
+
readonly overflow: boolean;
|
|
125
|
+
}
|
|
126
|
+
export interface PackedSelectionBounds {
|
|
127
|
+
readonly minimumX: number;
|
|
128
|
+
readonly maximumX: number;
|
|
129
|
+
readonly minimumY: number;
|
|
130
|
+
readonly maximumY: number;
|
|
131
|
+
}
|
|
132
|
+
export interface PackedVisibleSelection {
|
|
133
|
+
readonly indices: Uint32Array;
|
|
134
|
+
readonly visitedNodes: number;
|
|
135
|
+
readonly visibleDatums: number;
|
|
136
|
+
readonly overflow: boolean;
|
|
137
|
+
}
|
|
138
|
+
export declare function createPackedChartLayerOwner<ID extends StableID>(input: PackedLayerInput<ID>, maxDatums: number, maxIDCodeUnits: number, previous?: PackedChartLayerOwner<ID>): PackedLayerMutation<ID>;
|
|
139
|
+
export declare function patchPackedChartLayerOwner<ID extends StableID>(previous: PackedChartLayerOwner<ID>, patch: PackedLayerPatch<ID>): PackedLayerMutation<ID>;
|
|
140
|
+
export declare function materializePackedLayerValues(owner: PackedChartLayerOwner): Float64Array;
|
|
141
|
+
export declare function materializePackedLayer<ID extends StableID>(owner: PackedChartLayerOwner<ID>): ChartDatum<ID>[];
|
|
142
|
+
export declare function readPackedLayerValue(owner: PackedChartLayerOwner, datumIndex: number, component: number): number;
|
|
143
|
+
export declare function selectPackedOrderedEnvelope(owner: PackedChartLayerOwner, minimumX: number, maximumX: number, pixelColumns: number, maximumRepresentatives: number): PackedOrderedEnvelopeSelection;
|
|
144
|
+
export declare function selectPackedAggregateFrontier(owner: PackedChartLayerOwner, maximumRepresentatives: number, bounds?: PackedSelectionBounds): PackedAggregateSelection;
|
|
145
|
+
export declare function selectPackedVisibleIndices(owner: PackedChartLayerOwner, bounds: PackedSelectionBounds, maximumRepresentatives: number): PackedVisibleSelection;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{applySequencePatch,createSequence}from"@sectile/core/sequence";const VALUE_BLOCK_DATUMS=256;const MAX_VALUE_PATCH_DEPTH=16;const MAX_HIERARCHY_PATCH_DEPTH=16;const HIERARCHY_STRIDE=12;function createPackedChartLayerOwner(input,maxDatums,maxIDCodeUnits,previous){const identities=createSequence(input.identities,{maxItems:maxDatums,maxIDCodeUnits});const values=createPackedValueStore(input.values,input.stride);if(previous!==void 0&&sameOwnerInput(previous,input)){return{owner:previous,changed:false,work:emptyWork(input.identities.length)}}const identityChanged=previous===void 0||!sameIdentitySet(previous.identities,identities);const orderChanged=previous===void 0||!sameIdentityOrder(previous.identities,identities);const valueChanged=previous===void 0||!sameSemanticValues(previous,input);const geometryChanged=previous===void 0||!sameGeometryValues(previous,input);const aggregateChanged=previous===void 0||!sameAggregateValues(previous,input);const index=createProfileIndex(input.profile,values,input.identities.length);const revisions=Object.freeze({identity:previous===void 0?0:previous.revisions.identity+(identityChanged?1:0),order:previous===void 0?0:previous.revisions.order+(orderChanged?1:0),value:previous===void 0?0:previous.revisions.value+(valueChanged?1:0),geometry:previous===void 0?0:previous.revisions.geometry+(geometryChanged?1:0),aggregate:previous===void 0?0:previous.revisions.aggregate+(aggregateChanged||orderChanged?1:0),style:previous?.revisions.style??0});const owner=freezeOwner({id:input.id,profile:input.profile,size:input.identities.length,stride:input.stride,identities,values,index,bounds:boundsForIndex(index),revisions,geometryToken:previous!==void 0&&!geometryChanged?previous.geometryToken:Object.freeze({}),styleToken:previous?.styleToken??Object.freeze({})});return{owner,changed:true,work:Object.freeze({scannedDatums:input.identities.length,copiedValueBlocks:Math.ceil(input.identities.length/VALUE_BLOCK_DATUMS),repairedIndexEntries:0,rebuiltIndexEntries:indexEntryCount(index)})}}function patchPackedChartLayerOwner(previous,patch){if(patch.identities.length===0)return{owner:previous,changed:false,work:emptyWork(0)};let changed=false;let packedChanged=false;let valueChanged=false;let geometryChanged=false;let aggregateChanged=false;let orderChanged=false;let identityChanged=false;for(let offset=0;offset<patch.identities.length;offset+=1){const index=patch.index+offset;const nextID=patch.identities[offset];const previousID=previous.identities.at(index);if(previousID!==nextID){changed=true;orderChanged=true;if(!previous.identities.contains(nextID))identityChanged=true}const valueOffset=offset*previous.stride;const previousOffset=index*previous.stride;for(let component=0;component<previous.stride;component+=1){if(!Object.is(readPackedValue(previous.values,previousOffset+component),patch.values[valueOffset+component])){changed=true;packedChanged=true;if(isValueComponent(previous.profile,component))valueChanged=true;if(isGeometryComponent(previous.profile,component))geometryChanged=true;if(isAggregateComponent(previous.profile,component))aggregateChanged=true}}}if(!changed)return{owner:previous,changed:false,work:emptyWork(patch.identities.length)};const identities=applySequencePatch(previous.identities,{type:"splice",index:patch.index,deleteCount:patch.identities.length,inserted:patch.identities});const valuePatch=packedChanged?patchPackedValueStore(previous.values,patch.index,patch.values):{store:previous.values,copiedBlocks:0,materializedDatums:0};const indexRepair=packedChanged?repairProfileIndex(previous.index,previous.profile,previous.values,valuePatch.store,patch.index,patch.identities.length):{index:previous.index,repairedEntries:0,rebuiltEntries:0};const revisions=Object.freeze({identity:previous.revisions.identity+(identityChanged?1:0),order:previous.revisions.order+(orderChanged?1:0),value:previous.revisions.value+(valueChanged?1:0),geometry:previous.revisions.geometry+(geometryChanged?1:0),aggregate:previous.revisions.aggregate+(aggregateChanged?1:0),style:previous.revisions.style});const owner=freezeOwner({id:previous.id,profile:previous.profile,size:previous.size,stride:previous.stride,identities,values:valuePatch.store,index:indexRepair.index,bounds:boundsForIndex(indexRepair.index),revisions,geometryToken:geometryChanged?Object.freeze({}):previous.geometryToken,styleToken:previous.styleToken});return{owner,changed:true,work:Object.freeze({scannedDatums:patch.identities.length+valuePatch.materializedDatums,copiedValueBlocks:valuePatch.copiedBlocks,repairedIndexEntries:indexRepair.repairedEntries,rebuiltIndexEntries:indexRepair.rebuiltEntries})}}function materializePackedLayerValues(owner){return materializePackedValueStore(owner.values)}function materializePackedLayer(owner){const datums=[];for(let index=0;index<owner.size;index+=1){const id=owner.identities.at(index);const offset=index*owner.stride;datums.push(materializeDatum(owner.profile,id,owner.values,offset))}return datums}function readPackedLayerValue(owner,datumIndex,component){return readPackedValue(owner.values,datumIndex*owner.stride+component)}function selectPackedOrderedEnvelope(owner,minimumX,maximumX,pixelColumns,maximumRepresentatives){if(owner.profile!=="ordered-series"||maximumRepresentatives<=0||owner.size===0||maximumX<minimumX){return Object.freeze({indices:new Uint32Array(0),visitedNodes:0,visibleDatums:0,aggregated:false})}let start=lowerBoundPackedX(owner,minimumX);let end=upperBoundPackedX(owner,maximumX);if(start>0)start-=1;if(end<owner.size)end+=1;const visibleDatums=Math.max(0,end-start);if(visibleDatums<=maximumRepresentatives){return Object.freeze({indices:Uint32Array.from({length:visibleDatums},(_,index)=>start+index),visitedNodes:Math.ceil(Math.log2(Math.max(1,owner.size)))*2,visibleDatums,aggregated:false})}if(maximumRepresentatives<4){return Object.freeze({indices:new Uint32Array(0),visitedNodes:0,visibleDatums,aggregated:true})}const columns=Math.max(1,pixelColumns);const selected=new Set;let visitedNodes=0;const span=maximumX-minimumX;for(let column=0;column<columns;column+=1){const left=span===0?minimumX:minimumX+span*column/columns;const right=span===0?maximumX:minimumX+span*(column+1)/columns;const rangeStart=column===0?start:Math.max(start,lowerBoundPackedX(owner,left));const rangeEnd=Math.min(end,column===columns-1?upperBoundPackedX(owner,right):lowerBoundPackedX(owner,right));if(rangeStart>=rangeEnd)continue;const aggregate=queryHierarchyRange(owner.index.hierarchy,rangeStart,rangeEnd);visitedNodes+=aggregate.visitedNodes;if(aggregate.first>=0)selected.add(aggregate.first);if(aggregate.minimum>=0)selected.add(aggregate.minimum);if(aggregate.maximum>=0)selected.add(aggregate.maximum);if(aggregate.last>=0)selected.add(aggregate.last)}const ordered=[...selected].sort((left,right)=>left-right);if(ordered.length>maximumRepresentatives){return Object.freeze({indices:new Uint32Array(0),visitedNodes,visibleDatums,aggregated:true})}return Object.freeze({indices:Uint32Array.from(ordered),visitedNodes,visibleDatums,aggregated:true})}function selectPackedAggregateFrontier(owner,maximumRepresentatives,bounds){if(owner.size===0)return Object.freeze({entries:Object.freeze([]),visitedNodes:0,visibleDatums:0,overflow:false});const hierarchy=owner.index.hierarchy;const lookup=new Map;if(maximumRepresentatives<=0&&bounds===void 0){return Object.freeze({entries:Object.freeze([]),visitedNodes:1,visibleDatums:owner.size,overflow:true})}const visible=bounds===void 0?{nodes:[1],visitedNodes:1,visibleDatums:owner.size,overflow:false}:collectVisibleHierarchyNodes(owner,bounds,maximumRepresentatives,lookup);if(visible.overflow)return Object.freeze({entries:Object.freeze([]),visitedNodes:visible.visitedNodes,visibleDatums:visible.visibleDatums,overflow:true});const heap=[];for(const node of visible.nodes)pushHierarchyNode(heap,node,hierarchy,lookup);let visitedNodes=visible.visitedNodes;while(heap.length<maximumRepresentatives){const node=popLargestHierarchyNode(heap,hierarchy,lookup);if(node===null)break;if(node>=hierarchy.leafCount){pushHierarchyNode(heap,node,hierarchy,lookup);break}const left=node*2;const right=left+1;const leftValues=hierarchyNode(hierarchy,lookup,left);const rightValues=hierarchyNode(hierarchy,lookup,right);visitedNodes+=2;if(leftValues[7]>0)pushHierarchyNode(heap,left,hierarchy,lookup);if(rightValues[7]>0)pushHierarchyNode(heap,right,hierarchy,lookup)}heap.sort((left,right)=>hierarchyNode(hierarchy,lookup,left)[8]-hierarchyNode(hierarchy,lookup,right)[8]);const entries=heap.map(node=>{const values=hierarchyNode(hierarchy,lookup,node);return Object.freeze({minimumX:values[0],maximumX:values[1],minimumY:values[2],maximumY:values[3],minimumValue:values[4],maximumValue:values[5],sum:values[6],count:values[7],firstIndex:values[8]})});return Object.freeze({entries:Object.freeze(entries),visitedNodes,visibleDatums:visible.visibleDatums,overflow:false})}function selectPackedVisibleIndices(owner,bounds,maximumRepresentatives){if(owner.size===0||maximumRepresentatives<0){return Object.freeze({indices:new Uint32Array(0),visitedNodes:0,visibleDatums:0,overflow:false})}const hierarchy=owner.index.hierarchy;const lookup=new Map;const stack=[1];const indices=[];let visitedNodes=0;let visibleDatums=0;let overflow=false;while(stack.length>0){const node=stack.pop();const values=hierarchyNode(hierarchy,lookup,node);visitedNodes+=1;const count=values[7];if(count===0||!intersectsSelection(owner.profile,values,bounds))continue;if(containedBySelection(owner.profile,values,bounds)){visibleDatums+=count;if(indices.length+count>maximumRepresentatives){overflow=true;continue}visitedNodes+=appendHierarchyLeaves(hierarchy,lookup,node,indices);continue}if(node>=hierarchy.leafCount){visibleDatums+=1;if(indices.length<maximumRepresentatives)indices.push(values[8]);else overflow=true;continue}stack.push(node*2+1,node*2)}return Object.freeze({indices:Uint32Array.from(indices),visitedNodes,visibleDatums,overflow})}function createPackedValueStore(values,stride){return Object.freeze({size:values.length/stride,stride,depth:0,base:values,parent:null,blocks:new Map})}function patchPackedValueStore(previousInput,datumIndex,replacement){const materialized=previousInput.depth>=MAX_VALUE_PATCH_DEPTH;const previous=materialized?createPackedValueStore(materializePackedValueStore(previousInput),previousInput.stride):previousInput;const datumCount=replacement.length/previous.stride;const firstBlock=Math.floor(datumIndex/VALUE_BLOCK_DATUMS);const lastBlock=Math.floor((datumIndex+datumCount-1)/VALUE_BLOCK_DATUMS);const blocks=new Map;for(let blockIndex=firstBlock;blockIndex<=lastBlock;blockIndex+=1){const blockStartDatum=blockIndex*VALUE_BLOCK_DATUMS;const blockDatums=Math.min(VALUE_BLOCK_DATUMS,previous.size-blockStartDatum);const block=new Float64Array(blockDatums*previous.stride);const scalarStart=blockStartDatum*previous.stride;for(let scalar=0;scalar<block.length;scalar+=1){block[scalar]=readPackedValue(previous,scalarStart+scalar)}blocks.set(blockIndex,block)}for(let datumOffset=0;datumOffset<datumCount;datumOffset+=1){const targetDatum=datumIndex+datumOffset;const blockIndex=Math.floor(targetDatum/VALUE_BLOCK_DATUMS);const block=blocks.get(blockIndex);const targetOffset=targetDatum%VALUE_BLOCK_DATUMS*previous.stride;const sourceOffset=datumOffset*previous.stride;block.set(replacement.subarray(sourceOffset,sourceOffset+previous.stride),targetOffset)}return{store:Object.freeze({size:previous.size,stride:previous.stride,depth:previous.depth+1,base:null,parent:previous,blocks}),copiedBlocks:blocks.size+(materialized?Math.ceil(previousInput.size/VALUE_BLOCK_DATUMS):0),materializedDatums:materialized?previousInput.size:0}}function readPackedValue(store,scalarIndex){let current=store;while(current!==null){if(current.base!==null)return current.base[scalarIndex];const datumIndex=Math.floor(scalarIndex/current.stride);const blockIndex=Math.floor(datumIndex/VALUE_BLOCK_DATUMS);const block=current.blocks.get(blockIndex);if(block!==void 0){const localDatum=datumIndex%VALUE_BLOCK_DATUMS;return block[localDatum*current.stride+scalarIndex%current.stride]}current=current.parent}throw new Error("Packed chart value is unavailable.")}function materializePackedValueStore(store){if(store.base!==null)return store.base;const values=new Float64Array(store.size*store.stride);for(let index=0;index<values.length;index+=1)values[index]=readPackedValue(store,index);return values}function createSpatialOrder(values,size){let minimumX=Number.POSITIVE_INFINITY;let maximumX=Number.NEGATIVE_INFINITY;let minimumY=Number.POSITIVE_INFINITY;let maximumY=Number.NEGATIVE_INFINITY;for(let index=0;index<size;index+=1){const x=readPackedValue(values,index*values.stride);const y=readPackedValue(values,index*values.stride+1);minimumX=Math.min(minimumX,x);maximumX=Math.max(maximumX,x);minimumY=Math.min(minimumY,y);maximumY=Math.max(maximumY,y)}const spanX=maximumX-minimumX||1;const spanY=maximumY-minimumY||1;const keys=new Uint32Array(size);let order=Uint32Array.from({length:size},(_,index)=>index);let output=new Uint32Array(size);for(let index=0;index<size;index+=1){const x=Math.max(0,Math.min(65535,Math.floor((readPackedValue(values,index*values.stride)-minimumX)/spanX*65535)));const y=Math.max(0,Math.min(65535,Math.floor((readPackedValue(values,index*values.stride+1)-minimumY)/spanY*65535)));keys[index]=interleaveSpatial16(x)|interleaveSpatial16(y)<<1}for(let shift=0;shift<32;shift+=8){const counts=new Uint32Array(256);for(const datum of order){const bucket=keys[datum]>>>shift&255;counts[bucket]=counts[bucket]+1}let cursor=0;for(let bucket=0;bucket<counts.length;bucket+=1){const count=counts[bucket];counts[bucket]=cursor;cursor+=count}for(const datum of order){const bucket=keys[datum]>>>shift&255;output[counts[bucket]]=datum;counts[bucket]=counts[bucket]+1}const temporary=order;order=output;output=temporary}return order}function interleaveSpatial16(input){let value=input&65535;value=(value|value<<8)&16711935;value=(value|value<<4)&252645135;value=(value|value<<2)&858993459;value=(value|value<<1)&1431655765;return value}function createProfileIndex(profile,values,size){if(profile==="point"||profile==="grid-cell"){const order=createSpatialOrder(values,size);const positions=new Uint32Array(size);for(let position=0;position<order.length;position+=1)positions[order[position]]=position;const hierarchy2=buildHierarchy(profile,values,size,order);if(profile==="point")return Object.freeze({kind:"spatial",order,positions,hierarchy:hierarchy2});return createHeatmapIndex(values,size,hierarchy2,order,positions)}const hierarchy=buildHierarchy(profile,values,size);if(profile==="ordered-series")return Object.freeze({kind:"ordered",hierarchy});if(profile==="cartesian-segment"){const slots=new Float64Array(size*2);for(let index=0;index<size;index+=1){slots[index*2]=readPackedValue(values,index*4);slots[index*2+1]=readPackedValue(values,index*4+2)}return Object.freeze({kind:"categorical",slots,hierarchy})}return createRadialIndex(values,size,hierarchy)}function repairProfileIndex(previous,profile,previousValues,values,index,count){if((previous.kind==="spatial"||previous.kind==="heatmap")&&previous.hierarchy.depth>=MAX_HIERARCHY_PATCH_DEPTH){const rebuilt2=createProfileIndex(profile,values,values.size);return{index:rebuilt2,repairedEntries:0,rebuiltEntries:indexEntryCount(rebuilt2)}}const positions=previous.kind==="spatial"||previous.kind==="heatmap"?previous.positions:void 0;const repaired=repairHierarchy(previous.hierarchy,profile,values,index,count,positions,previous.kind==="spatial"||previous.kind==="heatmap"?previous.order:void 0);if(previous.kind==="ordered")return{index:Object.freeze({kind:"ordered",hierarchy:repaired.hierarchy}),repairedEntries:repaired.entries,rebuiltEntries:repaired.rebuiltEntries};if(previous.kind==="spatial")return{index:Object.freeze({kind:"spatial",order:previous.order,positions:previous.positions,hierarchy:repaired.hierarchy}),repairedEntries:repaired.entries,rebuiltEntries:repaired.rebuiltEntries};if(previous.kind==="heatmap"){let geometryChanged=false;for(let datum=index;datum<index+count;datum+=1){const offset=datum*3;if(!Object.is(readPackedValue(previousValues,offset),readPackedValue(values,offset))||!Object.is(readPackedValue(previousValues,offset+1),readPackedValue(values,offset+1))){geometryChanged=true;break}}if(!geometryChanged){return{index:Object.freeze({...previous,hierarchy:repaired.hierarchy}),repairedEntries:repaired.entries,rebuiltEntries:repaired.rebuiltEntries}}}if(previous.kind==="radial"){const prefix=new Float64Array(previous.prefix);let cumulative=index===0?0:prefix[index];for(let datum=index;datum<values.size;datum+=1){cumulative+=readPackedValue(values,datum*values.stride);prefix[datum+1]=cumulative}return{index:Object.freeze({kind:"radial",prefix,total:cumulative,hierarchy:repaired.hierarchy}),repairedEntries:repaired.entries+values.size-index,rebuiltEntries:repaired.rebuiltEntries}}const rebuilt=createProfileIndex(profile,values,values.size);return{index:rebuilt,repairedEntries:repaired.entries,rebuiltEntries:repaired.rebuiltEntries+indexEntryCount(rebuilt)}}function buildHierarchy(profile,values,size,order){let leafCount=1;while(leafCount<Math.max(1,size))leafCount*=2;const data=new Float64Array(leafCount*2*HIERARCHY_STRIDE);fillEmptyNodes(data);for(let index=0;index<size;index+=1)writeLeaf(data,leafCount+index,profile,values,order?.[index]??index);for(let node=leafCount-1;node>0;node-=1)mergeNodes(data,node,data,node*2,data,node*2+1);return Object.freeze({size,leafCount,depth:0,base:data,parent:null,overrides:new Map})}function repairHierarchy(previousInput,profile,values,index,count,positions,order){const materialized=previousInput.depth>=MAX_HIERARCHY_PATCH_DEPTH;const previous=materialized?materializeHierarchy(previousInput):previousInput;const levels=[];for(let datum=index;datum<index+count;datum+=1){let node=previous.leafCount+(positions?.[datum]??datum);let level=0;while(node>0){let nodes=levels[level];if(nodes===void 0){nodes=new Set;levels.push(nodes)}nodes.add(node);node=Math.floor(node/2);level+=1}}const overrides=new Map;for(const nodes of levels){for(const node of nodes){const data=new Float64Array(HIERARCHY_STRIDE);fillEmptyNode(data,0);if(node>=previous.leafCount){const leafPosition=node-previous.leafCount;const datumIndex=order?.[leafPosition]??leafPosition;writeLeaf(data,0,profile,values,datumIndex)}else{mergeNodeValues(data,0,hierarchyNode(previous,overrides,node*2),hierarchyNode(previous,overrides,node*2+1))}overrides.set(node,data)}}return{hierarchy:Object.freeze({size:previous.size,leafCount:previous.leafCount,depth:previous.depth+1,base:null,parent:previous,overrides}),entries:overrides.size,rebuiltEntries:materialized?previousInput.leafCount*2:0}}function hierarchyNode(hierarchy,local,node){const current=local.get(node);if(current!==void 0)return current;let owner=hierarchy;while(owner!==null){const override=owner.overrides.get(node);if(override!==void 0)return override;if(owner.base!==null)return owner.base.subarray(node*HIERARCHY_STRIDE,(node+1)*HIERARCHY_STRIDE);owner=owner.parent}throw new Error("Chart hierarchy node is unavailable.")}function queryHierarchyRange(hierarchy,start,end){let first=-1;let last=-1;let minimum=-1;let maximum=-1;let minimumValue=Number.POSITIVE_INFINITY;let maximumValue=Number.NEGATIVE_INFINITY;let visitedNodes=0;const overrides=new Map;const visit=(node,nodeStart,nodeEnd)=>{visitedNodes+=1;if(nodeEnd<=start||nodeStart>=end)return;if(start<=nodeStart&&nodeEnd<=end){const values=hierarchyNode(hierarchy,overrides,node);if(values[7]===0)return;if(first<0)first=values[8];last=values[9];if(values[4]<minimumValue){minimumValue=values[4];minimum=values[10]}if(values[5]>maximumValue){maximumValue=values[5];maximum=values[11]}return}const middle=nodeStart+nodeEnd>>>1;visit(node*2,nodeStart,middle);visit(node*2+1,middle,nodeEnd)};visit(1,0,hierarchy.leafCount);return{first,last,minimum,maximum,minimumValue,maximumValue,visitedNodes}}function lowerBoundPackedX(owner,value){let low=0;let high=owner.size;while(low<high){const middle=low+high>>>1;if(readPackedLayerValue(owner,middle,0)<value)low=middle+1;else high=middle}return low}function upperBoundPackedX(owner,value){let low=0;let high=owner.size;while(low<high){const middle=low+high>>>1;if(readPackedLayerValue(owner,middle,0)<=value)low=middle+1;else high=middle}return low}function collectVisibleHierarchyNodes(owner,bounds,maximumNodes,lookup){const hierarchy=owner.index.hierarchy;const stack=[1];const nodes=[];let visitedNodes=0;let visibleDatums=0;let overflow=false;while(stack.length>0){const node=stack.pop();const values=hierarchyNode(hierarchy,lookup,node);visitedNodes+=1;const count=values[7];if(count===0||!intersectsSelection(owner.profile,values,bounds))continue;if(containedBySelection(owner.profile,values,bounds)||node>=hierarchy.leafCount){visibleDatums+=count;if(nodes.length<maximumNodes)nodes.push(node);else overflow=true;continue}stack.push(node*2+1,node*2)}return{nodes,visitedNodes,visibleDatums,overflow}}function intersectsSelection(profile,values,bounds){if(profile==="point"){return values[1]>=bounds.minimumX&&values[0]<=bounds.maximumX&&values[3]>=bounds.minimumY&&values[2]<=bounds.maximumY}return values[1]>bounds.minimumX&&values[0]<bounds.maximumX&&values[3]>bounds.minimumY&&values[2]<bounds.maximumY}function containedBySelection(_profile,values,bounds){return values[0]>=bounds.minimumX&&values[1]<=bounds.maximumX&&values[2]>=bounds.minimumY&&values[3]<=bounds.maximumY}function appendHierarchyLeaves(hierarchy,lookup,root,output){const stack=[root];let visitedNodes=0;while(stack.length>0){const node=stack.pop();const values=hierarchyNode(hierarchy,lookup,node);visitedNodes+=1;if(values[7]===0)continue;if(node>=hierarchy.leafCount)output.push(values[8]);else stack.push(node*2+1,node*2)}return visitedNodes}function pushHierarchyNode(heap,node,hierarchy,lookup){heap.push(node);let index=heap.length-1;while(index>0){const parent=index-1>>>1;if(compareHierarchyPriority(heap[parent],node,hierarchy,lookup)>=0)break;heap[index]=heap[parent];index=parent}heap[index]=node}function popLargestHierarchyNode(heap,hierarchy,lookup){if(heap.length===0)return null;const root=heap[0];const tail=heap.pop();if(heap.length>0){let index=0;while(true){const left=index*2+1;if(left>=heap.length)break;const right=left+1;const child=right<heap.length&&compareHierarchyPriority(heap[right],heap[left],hierarchy,lookup)>0?right:left;if(compareHierarchyPriority(tail,heap[child],hierarchy,lookup)>=0)break;heap[index]=heap[child];index=child}heap[index]=tail}return root}function compareHierarchyPriority(left,right,hierarchy,lookup){const leftCount=hierarchyNode(hierarchy,lookup,left)[7];const rightCount=hierarchyNode(hierarchy,lookup,right)[7];return leftCount-rightCount||Number(left<hierarchy.leafCount)-Number(right<hierarchy.leafCount)||right-left}function materializeHierarchy(hierarchy){const data=new Float64Array(hierarchy.leafCount*2*HIERARCHY_STRIDE);const overrides=new Map;for(let node=0;node<hierarchy.leafCount*2;node+=1)data.set(hierarchyNode(hierarchy,overrides,node),node*HIERARCHY_STRIDE);return Object.freeze({size:hierarchy.size,leafCount:hierarchy.leafCount,depth:0,base:data,parent:null,overrides:new Map})}function createHeatmapIndex(values,size,hierarchy,order,positions){const rows=new Map;let minimumRow=Number.POSITIVE_INFINITY;let maximumRow=Number.NEGATIVE_INFINITY;let minimumColumn=Number.POSITIVE_INFINITY;let maximumColumn=Number.NEGATIVE_INFINITY;const occupied=new Map;for(let index=0;index<size;index+=1){const offset=index*3;const column=readPackedValue(values,offset);const row=readPackedValue(values,offset+1);const rowItems=rows.get(row);if(rowItems===void 0)rows.set(row,[index]);else rowItems.push(index);const columns=occupied.get(row);if(columns===void 0)occupied.set(row,new Set([column]));else columns.add(column);minimumRow=Math.min(minimumRow,row);maximumRow=Math.max(maximumRow,row);minimumColumn=Math.min(minimumColumn,column);maximumColumn=Math.max(maximumColumn,column)}const rowValues=Float64Array.from(rows.keys());const rowOffsets=new Uint32Array(rowValues.length+1);const datumIndices=new Uint32Array(size);let cursor=0;for(let rowIndex=0;rowIndex<rowValues.length;rowIndex+=1){rowOffsets[rowIndex]=cursor;const items=rows.get(rowValues[rowIndex]);datumIndices.set(items,cursor);cursor+=items.length}rowOffsets[rowValues.length]=cursor;const area=size===0?0:(maximumRow-minimumRow+1)*(maximumColumn-minimumColumn+1);const dense=Number.isSafeInteger(area)&&area===size&&[...occupied.values()].every(columns=>columns.size===maximumColumn-minimumColumn+1);return Object.freeze({kind:"heatmap",representation:dense?"dense":"sparse",order,positions,rowValues,rowOffsets,datumIndices,hierarchy})}function createRadialIndex(values,size,hierarchy){const prefix=new Float64Array(size+1);let total=0;for(let index=0;index<size;index+=1){total+=readPackedValue(values,index*3);prefix[index+1]=total}return Object.freeze({kind:"radial",prefix,total,hierarchy})}function writeLeaf(target,node,profile,values,datumIndex){if(datumIndex>=values.size)return;const offset=node*HIERARCHY_STRIDE;const valueOffset=datumIndex*values.stride;let minimumX;let maximumX;let minimumY;let maximumY;let aggregate;if(profile==="point"||profile==="ordered-series"){minimumX=maximumX=readPackedValue(values,valueOffset);minimumY=maximumY=readPackedValue(values,valueOffset+1);aggregate=maximumY}else if(profile==="cartesian-segment"){const x1=readPackedValue(values,valueOffset);const y1=readPackedValue(values,valueOffset+1);const x2=readPackedValue(values,valueOffset+2);const y2=readPackedValue(values,valueOffset+3);minimumX=Math.min(x1,x2);maximumX=Math.max(x1,x2);minimumY=Math.min(y1,y2);maximumY=Math.max(y1,y2);aggregate=y2}else if(profile==="grid-cell"){minimumX=readPackedValue(values,valueOffset);maximumX=minimumX+1;minimumY=readPackedValue(values,valueOffset+1);maximumY=minimumY+1;aggregate=readPackedValue(values,valueOffset+2)}else{minimumX=maximumX=datumIndex;minimumY=readPackedValue(values,valueOffset+1);maximumY=readPackedValue(values,valueOffset+2);aggregate=readPackedValue(values,valueOffset)}target[offset]=minimumX;target[offset+1]=maximumX;target[offset+2]=minimumY;target[offset+3]=maximumY;target[offset+4]=aggregate;target[offset+5]=aggregate;target[offset+6]=aggregate;target[offset+7]=1;target[offset+8]=datumIndex;target[offset+9]=datumIndex;target[offset+10]=datumIndex;target[offset+11]=datumIndex}function mergeNodes(target,targetNode,left,leftNode,right,rightNode){mergeNodeValues(target,targetNode*HIERARCHY_STRIDE,left.subarray(leftNode*HIERARCHY_STRIDE,(leftNode+1)*HIERARCHY_STRIDE),right.subarray(rightNode*HIERARCHY_STRIDE,(rightNode+1)*HIERARCHY_STRIDE))}function mergeNodeValues(target,offset,left,right){const leftCount=left[7];const rightCount=right[7];if(leftCount===0){target.set(right,offset);return}if(rightCount===0){target.set(left,offset);return}target[offset]=Math.min(left[0],right[0]);target[offset+1]=Math.max(left[1],right[1]);target[offset+2]=Math.min(left[2],right[2]);target[offset+3]=Math.max(left[3],right[3]);target[offset+4]=Math.min(left[4],right[4]);target[offset+5]=Math.max(left[5],right[5]);target[offset+6]=left[6]+right[6];target[offset+7]=leftCount+rightCount;target[offset+8]=left[8];target[offset+9]=right[9];target[offset+10]=left[4]<=right[4]?left[10]:right[10];target[offset+11]=left[5]>=right[5]?left[11]:right[11]}function fillEmptyNodes(data){for(let node=0;node<data.length/HIERARCHY_STRIDE;node+=1)fillEmptyNode(data,node*HIERARCHY_STRIDE)}function fillEmptyNode(data,offset){data[offset]=Number.POSITIVE_INFINITY;data[offset+1]=Number.NEGATIVE_INFINITY;data[offset+2]=Number.POSITIVE_INFINITY;data[offset+3]=Number.NEGATIVE_INFINITY;data[offset+4]=Number.POSITIVE_INFINITY;data[offset+5]=Number.NEGATIVE_INFINITY;data[offset+6]=0;data[offset+7]=0;data[offset+8]=-1;data[offset+9]=-1;data[offset+10]=-1;data[offset+11]=-1}function boundsForIndex(index){const root=hierarchyNode(index.hierarchy,new Map,1);return Object.freeze({hasValues:root[7]>0&&index.kind!=="radial",minimumX:root[0],maximumX:root[1],minimumY:root[2],maximumY:root[3]})}function indexEntryCount(index){const hierarchyEntries=index.hierarchy.leafCount*2;if(index.kind==="spatial")return hierarchyEntries+index.order.length+index.positions.length;if(index.kind==="heatmap"){return hierarchyEntries+index.order.length+index.positions.length+index.rowOffsets.length+index.datumIndices.length}if(index.kind==="categorical")return hierarchyEntries+index.slots.length/2;if(index.kind==="radial")return hierarchyEntries+index.prefix.length;return hierarchyEntries}function sameOwnerInput(owner,input){return owner.id===input.id&&owner.profile===input.profile&&sameIdentityArray(owner.identities,input.identities)&&samePackedValues(owner.values,input.values)}function sameIdentityArray(sequence,ids){if(sequence.size!==ids.length)return false;for(let index=0;index<ids.length;index+=1)if(sequence.at(index)!==ids[index])return false;return true}function sameIdentityOrder(left,right){if(left.size!==right.size)return false;for(let index=0;index<left.size;index+=1)if(left.at(index)!==right.at(index))return false;return true}function sameIdentitySet(left,right){if(left.size!==right.size)return false;for(let index=0;index<right.size;index+=1){const id=right.at(index);if(id===null||!left.contains(id))return false}return true}function samePackedValues(store,values){if(store.size*store.stride!==values.length)return false;for(let index=0;index<values.length;index+=1)if(!Object.is(readPackedValue(store,index),values[index]))return false;return true}function sameSemanticValues(owner,input){return sameSelectedValues(owner,input,isValueComponent)}function sameGeometryValues(owner,input){return sameSelectedValues(owner,input,isGeometryComponent)}function sameAggregateValues(owner,input){return sameSelectedValues(owner,input,isAggregateComponent)}function sameSelectedValues(owner,input,selected){if(owner.profile!==input.profile||owner.stride!==input.stride||owner.size*owner.stride!==input.values.length)return false;for(let scalar=0;scalar<input.values.length;scalar+=1){const component=scalar%owner.stride;if(selected(owner.profile,component)&&!Object.is(readPackedValue(owner.values,scalar),input.values[scalar]))return false}return true}function isValueComponent(profile,component){if(profile==="point"||profile==="ordered-series")return component===1;if(profile==="cartesian-segment")return component===1||component===3;if(profile==="grid-cell")return component===2;return component===0}function isGeometryComponent(profile,component){return profile!=="grid-cell"||component<2}function isAggregateComponent(profile,component){if(profile==="point"||profile==="ordered-series")return component===1;if(profile==="cartesian-segment")return component===3;if(profile==="grid-cell")return component===2;return component===0}function freezeOwner(owner){return Object.freeze(owner)}function emptyWork(scannedDatums){return Object.freeze({scannedDatums,copiedValueBlocks:0,repairedIndexEntries:0,rebuiltIndexEntries:0})}function materializeDatum(profile,id,values,offset){if(profile==="point"||profile==="ordered-series"){return Object.freeze({id,x:readPackedValue(values,offset),y:readPackedValue(values,offset+1)})}if(profile==="cartesian-segment"){return Object.freeze({id,x1:readPackedValue(values,offset),y1:readPackedValue(values,offset+1),x2:readPackedValue(values,offset+2),y2:readPackedValue(values,offset+3)})}if(profile==="grid-cell"){return Object.freeze({id,column:readPackedValue(values,offset),row:readPackedValue(values,offset+1),value:readPackedValue(values,offset+2)})}return Object.freeze({id,value:readPackedValue(values,offset),innerRadius:readPackedValue(values,offset+1),outerRadius:readPackedValue(values,offset+2)})}export{createPackedChartLayerOwner,materializePackedLayer,materializePackedLayerValues,patchPackedChartLayerOwner,readPackedLayerValue,selectPackedAggregateFrontier,selectPackedOrderedEnvelope,selectPackedVisibleIndices};
|
|
2
|
+
//# sourceMappingURL=layer-owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/layer-owner.ts"],"mappings":"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","names":["hierarchy","rebuilt"],"file":"layer-owner.js"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StableID } from '@sectile/core';
|
|
2
|
+
import type { Sequence } from '@sectile/core/sequence';
|
|
3
|
+
import { type ChartProfileIndex, type PackedChartLayerOwner } from './layer-owner.js';
|
|
4
|
+
import type { ChartLimits, ChartProfile } from '../model.js';
|
|
5
|
+
export interface PackedChartLayer<ID extends StableID = StableID> {
|
|
6
|
+
readonly id: ID;
|
|
7
|
+
readonly profile: ChartProfile;
|
|
8
|
+
readonly identityIndices: Uint32Array;
|
|
9
|
+
readonly identityOffset: number;
|
|
10
|
+
readonly values: Float64Array;
|
|
11
|
+
readonly stride: number;
|
|
12
|
+
readonly owner: PackedChartLayerOwner<ID>;
|
|
13
|
+
readonly index: ChartProfileIndex;
|
|
14
|
+
}
|
|
15
|
+
export interface ChartCartesianBounds {
|
|
16
|
+
readonly hasValues: boolean;
|
|
17
|
+
readonly minimumX: number;
|
|
18
|
+
readonly maximumX: number;
|
|
19
|
+
readonly minimumY: number;
|
|
20
|
+
readonly maximumY: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ChartModelData<ID extends StableID = StableID> {
|
|
23
|
+
readonly limits: Required<ChartLimits>;
|
|
24
|
+
readonly identities: Sequence<ID>;
|
|
25
|
+
readonly layerIndex: ReadonlyMap<ID, number>;
|
|
26
|
+
readonly layers: readonly PackedChartLayer<ID>[];
|
|
27
|
+
readonly cartesianBounds: ChartCartesianBounds;
|
|
28
|
+
}
|
|
29
|
+
export declare function createPackedChartLayerView<ID extends StableID>(owner: PackedChartLayerOwner<ID>, identityOffset: number): PackedChartLayer<ID>;
|
|
30
|
+
export declare function chartCartesianBounds(layers: readonly PackedChartLayer[]): ChartCartesianBounds;
|
|
31
|
+
export declare function bindChartModelData<ID extends StableID>(owner: object, data: ChartModelData<ID>): void;
|
|
32
|
+
export declare function getChartModelData<ID extends StableID>(owner: object): ChartModelData<ID>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{materializePackedLayerValues}from"./layer-owner.js";const modelData=new WeakMap;const localIdentityIndices=new WeakMap;const materializedValues=new WeakMap;function createPackedChartLayerView(owner,identityOffset){let identityIndices=localIdentityIndices.get(owner);if(identityIndices===void 0){identityIndices=Uint32Array.from({length:owner.size},(_,index)=>index);localIdentityIndices.set(owner,identityIndices)}const view={id:owner.id,profile:owner.profile,identityIndices,identityOffset,get values(){const retained=materializedValues.get(owner);if(retained!==void 0)return retained;const values=materializePackedLayerValues(owner);materializedValues.set(owner,values);return values},stride:owner.stride,owner,index:owner.index};return Object.freeze(view)}function chartCartesianBounds(layers){let hasValues=false;let minimumX=Number.POSITIVE_INFINITY;let maximumX=Number.NEGATIVE_INFINITY;let minimumY=Number.POSITIVE_INFINITY;let maximumY=Number.NEGATIVE_INFINITY;for(const layer of layers){const bounds=layer.owner.bounds;if(!bounds.hasValues)continue;hasValues=true;minimumX=Math.min(minimumX,bounds.minimumX);maximumX=Math.max(maximumX,bounds.maximumX);minimumY=Math.min(minimumY,bounds.minimumY);maximumY=Math.max(maximumY,bounds.maximumY)}return Object.freeze({hasValues,minimumX,maximumX,minimumY,maximumY})}function bindChartModelData(owner,data){modelData.set(owner,data)}function getChartModelData(owner){const data=modelData.get(owner);if(data===void 0)throw new Error("Chart model data is unavailable.");return data}export{bindChartModelData,chartCartesianBounds,createPackedChartLayerView,getChartModelData};
|
|
2
|
+
//# sourceMappingURL=model-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/model-store.ts"],"mappings":"AAEA,OACE,iCAIK,mBA8BP,MAAM,UAAY,IAAI,QACtB,MAAM,qBAAuB,IAAI,QACjC,MAAM,mBAAqB,IAAI,QAEzB,SAAU,2BACd,MACA,eAAsB,CAEtB,IAAI,gBAAkB,qBAAqB,IAAI,KAAK,EACpD,GAAI,kBAAoB,OAAW,CACjC,gBAAkB,YAAY,KAAK,CAAE,OAAQ,MAAM,IAAI,EAAI,CAAC,EAAG,QAAU,KAAK,EAC9E,qBAAqB,IAAI,MAAO,eAAe,CACjD,CACA,MAAM,KAAO,CACX,GAAI,MAAM,GACV,QAAS,MAAM,QACf,gBACA,eACA,IAAI,QAAM,CACR,MAAM,SAAW,mBAAmB,IAAI,KAAK,EAC7C,GAAI,WAAa,OAAW,OAAO,SACnC,MAAM,OAAS,6BAA6B,KAAK,EACjD,mBAAmB,IAAI,MAAO,MAAM,EACpC,OAAO,MACT,EACA,OAAQ,MAAM,OACd,MACA,MAAO,MAAM,OAEf,OAAO,OAAO,OAAO,IAAI,CAC3B,CAEM,SAAU,qBAAqB,OAAmC,CACtE,IAAI,UAAY,MAChB,IAAI,SAAW,OAAO,kBACtB,IAAI,SAAW,OAAO,kBACtB,IAAI,SAAW,OAAO,kBACtB,IAAI,SAAW,OAAO,kBACtB,UAAW,SAAS,OAAQ,CAC1B,MAAM,OAA2B,MAAM,MAAM,OAC7C,GAAI,CAAC,OAAO,UAAW,SACvB,UAAY,KACZ,SAAW,KAAK,IAAI,SAAU,OAAO,QAAQ,EAC7C,SAAW,KAAK,IAAI,SAAU,OAAO,QAAQ,EAC7C,SAAW,KAAK,IAAI,SAAU,OAAO,QAAQ,EAC7C,SAAW,KAAK,IAAI,SAAU,OAAO,QAAQ,CAC/C,CACA,OAAO,OAAO,OAAO,CAAE,UAAW,SAAU,SAAU,SAAU,QAAQ,CAAE,CAC5E,CAEM,SAAU,mBAAwC,MAAe,KAAwB,CAC7F,UAAU,IAAI,MAAO,IAAI,CAC3B,CAEM,SAAU,kBAAuC,MAAa,CAClE,MAAM,KAAO,UAAU,IAAI,KAAK,EAChC,GAAI,OAAS,OAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,OAAO,IACT","names":[],"file":"model-store.js"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ChartProjection } from '../projection.js';
|
|
2
|
+
export interface ProjectionQueryIndex {
|
|
3
|
+
readonly order: Uint32Array;
|
|
4
|
+
readonly bounds: Float32Array;
|
|
5
|
+
readonly batchIndices: Uint16Array;
|
|
6
|
+
readonly primitiveIndices: Uint32Array;
|
|
7
|
+
readonly kinds: Uint8Array;
|
|
8
|
+
readonly verticalBarOrder: Uint32Array;
|
|
9
|
+
readonly horizontalBarOrder: Uint32Array;
|
|
10
|
+
readonly nodes: readonly QueryNode[];
|
|
11
|
+
readonly root: number;
|
|
12
|
+
}
|
|
13
|
+
export interface QueryNode {
|
|
14
|
+
readonly minimumX: number;
|
|
15
|
+
readonly minimumY: number;
|
|
16
|
+
readonly maximumX: number;
|
|
17
|
+
readonly maximumY: number;
|
|
18
|
+
readonly left: number;
|
|
19
|
+
readonly right: number;
|
|
20
|
+
readonly start: number;
|
|
21
|
+
readonly count: number;
|
|
22
|
+
readonly kindMask: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function projectionQueryIndex(projection: ChartProjection): ProjectionQueryIndex;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const indexes=new WeakMap;const LEAF_SIZE=8;function projectionQueryIndex(projection){const retained=indexes.get(projection);if(retained!==void 0)return retained;const built=buildProjectionQueryIndex(projection);indexes.set(projection,built);return built}function buildProjectionQueryIndex(projection){const count=primitiveCount(projection.batches);const bounds=new Float32Array(count*4);const batchIndices=new Uint16Array(count);const primitiveIndices=new Uint32Array(count);const kinds=new Uint8Array(count);const verticalBars=[];const horizontalBars=[];const barAxes=categoricalBarAxes(projection);let cursor=0;for(let batchIndex=0;batchIndex<projection.batches.length;batchIndex+=1){const batch=projection.batches[batchIndex];const batchCount=batchPrimitiveCount(batch);const barAxis=batch.type==="rectangle"?barAxes.get(batch.layerIndex):void 0;for(let primitiveIndex=0;primitiveIndex<batchCount;primitiveIndex+=1){writePrimitiveBounds(batch,primitiveIndex,bounds,cursor*4);batchIndices[cursor]=batchIndex;primitiveIndices[cursor]=primitiveIndex;kinds[cursor]=kindOf(batch);if(barAxis==="x")verticalBars.push(cursor);else if(barAxis==="y")horizontalBars.push(cursor);cursor+=1}}const sortable=Array.from({length:count},(_,index)=>index);const width=projection.viewport.width;const height=projection.viewport.height;sortable.sort((left,right)=>mortonFor(bounds,left,width,height)-mortonFor(bounds,right,width,height));const order=Uint32Array.from(sortable);const nodes=[];const root=count===0?-1:buildNode(order,bounds,kinds,nodes,0,count);verticalBars.sort((left,right)=>center(bounds,left,0)-center(bounds,right,0)||left-right);horizontalBars.sort((left,right)=>center(bounds,left,1)-center(bounds,right,1)||left-right);return{order,bounds,batchIndices,primitiveIndices,kinds,verticalBarOrder:Uint32Array.from(verticalBars),horizontalBarOrder:Uint32Array.from(horizontalBars),nodes:Object.freeze(nodes),root}}function categoricalBarAxes(projection){if(projection.dataBatches===void 0||projection.layout===void 0)return new Map;const axisKinds=new Map(projection.layout.axes.map(({axis,descriptor})=>[axis.id,descriptor.kind]));const result=new Map;for(const batch of projection.dataBatches){if(batch.type!=="rectangle"||batch.xAxisID===void 0||batch.yAxisID===void 0)continue;const xKind=axisKinds.get(batch.xAxisID);const yKind=axisKinds.get(batch.yAxisID);if(xKind==="categorical"&&yKind!==void 0&&yKind!=="categorical")result.set(batch.layerIndex,"x");else if(yKind==="categorical"&&xKind!==void 0&&xKind!=="categorical")result.set(batch.layerIndex,"y")}return result}function center(bounds,record,axisOffset){const offset=record*4+axisOffset;return(bounds[offset]+bounds[offset+2])*.5}function buildNode(order,bounds,kinds,nodes,start,count){let minimumX=Number.POSITIVE_INFINITY;let minimumY=Number.POSITIVE_INFINITY;let maximumX=Number.NEGATIVE_INFINITY;let maximumY=Number.NEGATIVE_INFINITY;let kindMask=0;for(let position=start;position<start+count;position+=1){const record=order[position];const offset=record*4;minimumX=Math.min(minimumX,bounds[offset]);minimumY=Math.min(minimumY,bounds[offset+1]);maximumX=Math.max(maximumX,bounds[offset+2]);maximumY=Math.max(maximumY,bounds[offset+3]);kindMask|=1<<kinds[record]}const nodeIndex=nodes.length;nodes.push({minimumX,minimumY,maximumX,maximumY,left:-1,right:-1,start,count,kindMask});if(count>LEAF_SIZE){const leftCount=count>>>1;const left=buildNode(order,bounds,kinds,nodes,start,leftCount);const right=buildNode(order,bounds,kinds,nodes,start+leftCount,count-leftCount);nodes[nodeIndex]={minimumX,minimumY,maximumX,maximumY,left,right,start:0,count:0,kindMask}}return nodeIndex}function primitiveCount(batches){let count=0;for(const batch of batches)count+=batchPrimitiveCount(batch);return count}function batchPrimitiveCount(batch){if(batch.type==="point")return batch.identityIndices.length;if(batch.type==="polyline")return Math.max(1,batch.identityIndices.length-1);return batch.identityIndices.length}function kindOf(batch){if(batch.type==="point")return 0;if(batch.type==="polyline")return 1;if(batch.type==="rectangle")return 2;if(batch.type==="cell")return 3;return 4}function writePrimitiveBounds(batch,primitive,output,target){if(batch.type==="point"){const source=primitive*2;const x=batch.positions[source];const y=batch.positions[source+1];writeBounds(output,target,x,y,x,y)}else if(batch.type==="polyline"){const source=primitive*2;const next=Math.min(source+2,batch.positions.length-2);const x1=batch.positions[source];const y1=batch.positions[source+1];const x2=batch.positions[next];const y2=batch.positions[next+1];writeBounds(output,target,Math.min(x1,x2),Math.min(y1,y2),Math.max(x1,x2),Math.max(y1,y2))}else if(batch.type==="rectangle"){const source=primitive*4;const x=batch.rectangles[source];const y=batch.rectangles[source+1];writeBounds(output,target,x,y,x+batch.rectangles[source+2],y+batch.rectangles[source+3])}else if(batch.type==="cell"){const source=primitive*5;const x=batch.cells[source];const y=batch.cells[source+1];writeBounds(output,target,x,y,x+batch.cells[source+2],y+batch.cells[source+3])}else{const source=primitive*6;const x=batch.arcs[source];const y=batch.arcs[source+1];const radius=batch.arcs[source+3];writeBounds(output,target,x-radius,y-radius,x+radius,y+radius)}}function writeBounds(output,offset,minX,minY,maxX,maxY){output[offset]=minX;output[offset+1]=minY;output[offset+2]=maxX;output[offset+3]=maxY}function mortonFor(bounds,index,width,height){const offset=index*4;const x=Math.max(0,Math.min(65535,Math.floor((bounds[offset]+bounds[offset+2])*.5/width*65535)));const y=Math.max(0,Math.min(65535,Math.floor((bounds[offset+1]+bounds[offset+3])*.5/height*65535)));return interleave16(x)|interleave16(y)<<1}function interleave16(input){let value=input&65535;value=(value|value<<8)&16711935;value=(value|value<<4)&252645135;value=(value|value<<2)&858993459;value=(value|value<<1)&1431655765;return value}export{projectionQueryIndex};
|
|
2
|
+
//# sourceMappingURL=query-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/query-index.ts"],"mappings":"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","names":[],"file":"query-index.js"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ErrorClass } from '@sectile/core/result';
|
|
2
|
+
import type { ChartErrorCode, ChartResult } from '../result.js';
|
|
3
|
+
export declare function chartOK<T>(value: T): ChartResult<T>;
|
|
4
|
+
export declare function chartFail<T = never>(errorClass: ErrorClass, code: ChartErrorCode, message: string, details?: Readonly<Record<string, unknown>>): ChartResult<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/result.ts"],"mappings":"AAGM,SAAU,QAAW,MAAQ,CACjC,MAAO,CAAE,GAAI,KAAM,KAAK,CAC1B,CAEM,SAAU,UACd,WACA,KACA,QACA,QAA2C,CAE3C,MAAO,CACL,GAAI,MACJ,MAAO,CACL,MAAO,WACP,KACA,QACA,GAAI,UAAY,OAAY,CAAA,EAAK,CAAE,OAAO,GAGhD","names":[],"file":"result.js"}
|
package/dist/layout.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { StableID } from '@sectile/core';
|
|
2
|
+
import type { UnitID } from '@sectile/core/units';
|
|
3
|
+
import type { ChartAxisDomain, ChartAxisOrientation, ChartAxisValue, ChartViewState, NormalizedChartCartesianCoordinateDefinition } from './contract.js';
|
|
4
|
+
import type { ChartViewport } from './projection.js';
|
|
5
|
+
import type { ChartResult } from './result.js';
|
|
6
|
+
import { type ChartRange, type ChartScale, type ChartScaleKind, type ChartTick } from './scale.js';
|
|
7
|
+
export type ResolvedChartAxisDomain = Exclude<ChartAxisDomain, 'auto'>;
|
|
8
|
+
export interface ChartAxisObservations<ID extends StableID = StableID> {
|
|
9
|
+
readonly axisID: ID;
|
|
10
|
+
readonly values: readonly ChartAxisValue[];
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedChartAxis<ID extends StableID = StableID> {
|
|
13
|
+
readonly id: ID;
|
|
14
|
+
readonly orientation: ChartAxisOrientation;
|
|
15
|
+
readonly scale: ChartScaleKind;
|
|
16
|
+
readonly domain: ResolvedChartAxisDomain;
|
|
17
|
+
readonly ticks: number;
|
|
18
|
+
readonly label?: string;
|
|
19
|
+
readonly unit?: UnitID;
|
|
20
|
+
}
|
|
21
|
+
export interface ChartPlotInsets {
|
|
22
|
+
readonly top: number;
|
|
23
|
+
readonly right: number;
|
|
24
|
+
readonly bottom: number;
|
|
25
|
+
readonly left: number;
|
|
26
|
+
}
|
|
27
|
+
export interface ChartPlotRect {
|
|
28
|
+
readonly x: number;
|
|
29
|
+
readonly y: number;
|
|
30
|
+
readonly width: number;
|
|
31
|
+
readonly height: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ChartScaleDescriptor<ID extends StableID = StableID> {
|
|
34
|
+
readonly axisID: ID;
|
|
35
|
+
readonly orientation: ChartAxisOrientation;
|
|
36
|
+
readonly kind: ChartScaleKind;
|
|
37
|
+
readonly domain: ResolvedChartAxisDomain;
|
|
38
|
+
readonly geometryDomain: Readonly<{
|
|
39
|
+
minimum: number;
|
|
40
|
+
maximum: number;
|
|
41
|
+
}>;
|
|
42
|
+
readonly range: ChartRange;
|
|
43
|
+
}
|
|
44
|
+
export interface ChartAxisLayout<ID extends StableID = StableID> {
|
|
45
|
+
readonly axis: ResolvedChartAxis<ID>;
|
|
46
|
+
readonly descriptor: ChartScaleDescriptor<ID>;
|
|
47
|
+
readonly scale: ChartScale;
|
|
48
|
+
readonly geometryScale: ChartScale<number>;
|
|
49
|
+
readonly ticks: readonly ChartTick[];
|
|
50
|
+
}
|
|
51
|
+
export interface ChartPlotLayout<ID extends StableID = StableID> {
|
|
52
|
+
readonly viewport: ChartViewport;
|
|
53
|
+
readonly insets: ChartPlotInsets;
|
|
54
|
+
readonly plot: ChartPlotRect;
|
|
55
|
+
readonly axes: readonly ChartAxisLayout<ID>[];
|
|
56
|
+
}
|
|
57
|
+
export declare const DEFAULT_CHART_PLOT_INSETS: ChartPlotInsets;
|
|
58
|
+
export declare function resolveChartAxes<Datum, ID extends StableID>(coordinate: NormalizedChartCartesianCoordinateDefinition<Datum, ID>, observations: readonly ChartAxisObservations<ID>[]): readonly ResolvedChartAxis<ID>[];
|
|
59
|
+
export declare function tryResolveChartAxes<Datum, ID extends StableID>(coordinate: NormalizedChartCartesianCoordinateDefinition<Datum, ID>, observations: readonly ChartAxisObservations<ID>[]): ChartResult<readonly ResolvedChartAxis<ID>[]>;
|
|
60
|
+
export declare function createChartPlotLayout<ID extends StableID>(axes: readonly ResolvedChartAxis<ID>[], viewport: ChartViewport, insets?: ChartPlotInsets, view?: ChartViewState<ID>): ChartPlotLayout<ID>;
|
|
61
|
+
export declare function tryCreateChartPlotLayout<ID extends StableID>(axes: readonly ResolvedChartAxis<ID>[], viewport: ChartViewport, insets?: ChartPlotInsets, view?: ChartViewState<ID>): ChartResult<ChartPlotLayout<ID>>;
|
package/dist/layout.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{unwrap}from"@sectile/core/result";import{chartFail,chartOK}from"./internal/result.js";import{createCategoricalScale,createLinearScale,createLogarithmicScale,createTemporalScale}from"./scale.js";const DEFAULT_CHART_PLOT_INSETS=Object.freeze({top:16,right:16,bottom:40,left:48});function resolveChartAxes(coordinate,observations){return unwrap(tryResolveChartAxes(coordinate,observations))}function tryResolveChartAxes(coordinate,observations){if(coordinate===null||coordinate.kind!=="cartesian"||!Array.isArray(observations)){return invalidLayout("Cartesian axis resolution requires a normalized Cartesian coordinate and observations.")}const valuesByAxis=new Map;for(const observation of observations){if(observation===null||typeof observation!=="object"||!Array.isArray(observation.values)||valuesByAxis.has(observation.axisID)){return invalidLayout("Chart axis observations must be unique arrays keyed by axis identity.")}valuesByAxis.set(observation.axisID,observation.values)}const resolved=[];for(const axis of coordinate.axes){const domain=resolveAxisDomain(axis,valuesByAxis.get(axis.id)??[]);if(!domain.ok)return domain;resolved.push(Object.freeze({id:axis.id,orientation:axis.orientation,scale:axis.scale,domain:domain.value,ticks:axis.ticks??0,...axis.label===void 0?{}:{label:axis.label},...axis.unit===void 0?{}:{unit:axis.unit}}))}return chartOK(Object.freeze(resolved))}function createChartPlotLayout(axes,viewport,insets=DEFAULT_CHART_PLOT_INSETS,view){return unwrap(tryCreateChartPlotLayout(axes,viewport,insets,view))}function tryCreateChartPlotLayout(axes,viewport,insets=DEFAULT_CHART_PLOT_INSETS,view){if(!validViewport(viewport)||!validInsets(insets))return invalidLayout("Chart layout viewport and insets must be finite and non-negative.");const width=viewport.width-insets.left-insets.right;const height=viewport.height-insets.top-insets.bottom;if(!(width>0)||!(height>0))return invalidLayout("Chart plot insets must leave a positive plot rectangle.");const plot=Object.freeze({x:insets.left,y:insets.top,width,height});const views=new Map(view?.axes.map(axis=>[axis.axisID,axis])??[]);const layouts=[];for(const baseAxis of axes){const viewAxis=views.get(baseAxis.id);views.delete(baseAxis.id);const resolved=resolveVisibleAxis(baseAxis,viewAxis);if(!resolved.ok)return resolved;const axis=resolved.value;const range=axis.orientation==="x"?Object.freeze({start:plot.x,end:plot.x+plot.width}):Object.freeze({start:plot.y+plot.height,end:plot.y});const scale=scaleFor(axis,range);if(!scale.ok)return scale;const maximumTicks=axis.ticks===0?Math.max(2,Math.min(12,Math.floor((axis.orientation==="x"?width:height)/72))):axis.ticks;const ticks=scale.value.tryTicks(maximumTicks);if(!ticks.ok)return ticks;const axisGeometryDomain=geometryDomain(baseAxis,viewAxis);const geometryScale=axis.domain.kind==="categorical"?createLinearScale(axisGeometryDomain,range):scale.value;layouts.push(Object.freeze({axis,descriptor:Object.freeze({axisID:axis.id,orientation:axis.orientation,kind:axis.scale,domain:axis.domain,geometryDomain:axisGeometryDomain,range}),scale:scale.value,geometryScale,ticks:ticks.value}))}if(views.size>0)return invalidLayout("Chart view contains an axis outside the resolved plot.");return chartOK(Object.freeze({viewport:Object.freeze({...viewport}),insets:Object.freeze({...insets}),plot,axes:Object.freeze(layouts)}))}function resolveVisibleAxis(axis,view){if(view===void 0)return chartOK(axis);if(view.scale!==axis.scale||view.orientation!==void 0&&view.orientation!==axis.orientation){return invalidLayout("Chart axis view scale or orientation does not match its resolved axis.")}if(axis.domain.kind==="categorical"){if(view.visible.kind!=="categorical"||view.base.kind!=="categorical"||view.base.start!==0||view.base.end!==axis.domain.values.length){return invalidLayout("Categorical chart axis view does not match its resolved base domain.")}return chartOK(Object.freeze({...axis,domain:Object.freeze({kind:"categorical",values:Object.freeze(axis.domain.values.slice(view.visible.start,view.visible.end))})}))}if(view.visible.kind!=="continuous"||view.base.kind!=="continuous"||view.base.minimum!==axis.domain.minimum||view.base.maximum!==axis.domain.maximum){return invalidLayout("Continuous chart axis view does not match its resolved base domain.")}return chartOK(Object.freeze({...axis,domain:Object.freeze({kind:axis.domain.kind,minimum:view.visible.minimum,maximum:view.visible.maximum})}))}function geometryDomain(axis,view){if(view!==void 0)return view.visible.kind==="categorical"?Object.freeze({minimum:view.visible.start,maximum:view.visible.end}):Object.freeze({minimum:view.visible.minimum,maximum:view.visible.maximum});return axis.domain.kind==="categorical"?Object.freeze({minimum:0,maximum:axis.domain.values.length}):Object.freeze({minimum:axis.domain.minimum,maximum:axis.domain.maximum})}function resolveAxisDomain(axis,values){if(axis.domain!=="auto"){if(axis.domain.kind==="categorical"){const declared=new Set(axis.domain.values);for(const value of values)if(!declared.has(value)){return invalidDomain(axis.id,"Observed category is outside the declared axis domain.")}}else{for(const value of values)if(typeof value!=="number"||!Number.isFinite(value)||axis.scale==="logarithmic"&&value<=0){return invalidDomain(axis.id,"Observed value is incompatible with the declared continuous axis domain.")}}return chartOK(axis.domain)}if(axis.scale==="categorical"){const categories=[];const seen=new Set;for(const value of values){if(!validCategory(value))return invalidDomain(axis.id,"Categorical axis observations must be finite numbers or non-empty strings.");if(!seen.has(value)){seen.add(value);categories.push(value)}}return categories.length===0?invalidDomain(axis.id,"Automatic categorical domains require at least one observed category."):chartOK(Object.freeze({kind:"categorical",values:Object.freeze(categories)}))}let minimum=Number.POSITIVE_INFINITY;let maximum=Number.NEGATIVE_INFINITY;for(const value of values){if(typeof value!=="number"||!Number.isFinite(value)||axis.scale==="logarithmic"&&value<=0){return invalidDomain(axis.id,"Continuous axis observations must be finite and compatible with their scale.")}minimum=Math.min(minimum,value);maximum=Math.max(maximum,value)}if(minimum===Number.POSITIVE_INFINITY){minimum=axis.scale==="logarithmic"?1:0;maximum=axis.scale==="logarithmic"?10:1}else if(minimum===maximum){if(axis.scale==="logarithmic"){minimum/=10;maximum*=10}else{minimum-=.5;maximum+=.5}}return chartOK(Object.freeze({kind:axis.scale==="temporal"?"temporal":"numeric",minimum,maximum}))}function scaleFor(axis,range){if(axis.domain.kind==="categorical")return chartOK(createCategoricalScale({values:axis.domain.values},range));const domain={minimum:axis.domain.minimum,maximum:axis.domain.maximum};if(axis.scale==="logarithmic")return chartOK(createLogarithmicScale(domain,range));if(axis.scale==="temporal")return chartOK(createTemporalScale(domain,range));return chartOK(createLinearScale(domain,range))}function invalidDomain(axisID,message){return chartFail("construction","chart-domain-invalid",message,{axisID})}function invalidLayout(message){return chartFail("construction","chart-layout-invalid",message)}function validViewport(value){return value!==null&&typeof value==="object"&&finitePositive(value.width)&&finitePositive(value.height)&&(value.devicePixelRatio===void 0||finitePositive(value.devicePixelRatio))}function validInsets(value){return value!==null&&typeof value==="object"&&finiteNonNegative(value.top)&&finiteNonNegative(value.right)&&finiteNonNegative(value.bottom)&&finiteNonNegative(value.left)}function validCategory(value){return typeof value==="string"?value.length>0:typeof value==="number"&&Number.isFinite(value)}function finitePositive(value){return typeof value==="number"&&Number.isFinite(value)&&value>0}function finiteNonNegative(value){return typeof value==="number"&&Number.isFinite(value)&&value>=0}export{DEFAULT_CHART_PLOT_INSETS,createChartPlotLayout,resolveChartAxes,tryCreateChartPlotLayout,tryResolveChartAxes};
|
|
2
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/layout.ts"],"mappings":"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","names":[],"file":"layout.js"}
|