@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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/contract.d.ts +194 -0
  4. package/dist/contract.js +2 -0
  5. package/dist/contract.js.map +1 -0
  6. package/dist/controller.d.ts +45 -0
  7. package/dist/controller.js +2 -0
  8. package/dist/controller.js.map +1 -0
  9. package/dist/definition.d.ts +40 -0
  10. package/dist/definition.js +2 -0
  11. package/dist/definition.js.map +1 -0
  12. package/dist/index.d.ts +12 -0
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/interaction.d.ts +95 -0
  16. package/dist/interaction.js +2 -0
  17. package/dist/interaction.js.map +1 -0
  18. package/dist/internal/layer-owner.d.ts +145 -0
  19. package/dist/internal/layer-owner.js +2 -0
  20. package/dist/internal/layer-owner.js.map +1 -0
  21. package/dist/internal/model-store.d.ts +32 -0
  22. package/dist/internal/model-store.js +2 -0
  23. package/dist/internal/model-store.js.map +1 -0
  24. package/dist/internal/query-index.d.ts +24 -0
  25. package/dist/internal/query-index.js +2 -0
  26. package/dist/internal/query-index.js.map +1 -0
  27. package/dist/internal/result.d.ts +4 -0
  28. package/dist/internal/result.js +2 -0
  29. package/dist/internal/result.js.map +1 -0
  30. package/dist/layout.d.ts +61 -0
  31. package/dist/layout.js +2 -0
  32. package/dist/layout.js.map +1 -0
  33. package/dist/model.d.ts +128 -0
  34. package/dist/model.js +2 -0
  35. package/dist/model.js.map +1 -0
  36. package/dist/projection.d.ts +149 -0
  37. package/dist/projection.js +2 -0
  38. package/dist/projection.js.map +1 -0
  39. package/dist/query.d.ts +47 -0
  40. package/dist/query.js +2 -0
  41. package/dist/query.js.map +1 -0
  42. package/dist/result.d.ts +5 -0
  43. package/dist/result.js +2 -0
  44. package/dist/result.js.map +1 -0
  45. package/dist/scale.d.ts +70 -0
  46. package/dist/scale.js +2 -0
  47. package/dist/scale.js.map +1 -0
  48. package/dist/view.d.ts +52 -0
  49. package/dist/view.js +2 -0
  50. package/dist/view.js.map +1 -0
  51. package/package.json +106 -0
@@ -0,0 +1,128 @@
1
+ import type { StableID } from '@sectile/core';
2
+ import type { ChartResult } from './result.js';
3
+ export type ChartProfile = 'point' | 'ordered-series' | 'cartesian-segment' | 'grid-cell' | 'radial-segment';
4
+ export interface PointChartDatum<ID extends StableID = StableID> {
5
+ readonly id: ID;
6
+ readonly x: number;
7
+ readonly y: number;
8
+ }
9
+ export interface OrderedSeriesDatum<ID extends StableID = StableID> extends PointChartDatum<ID> {
10
+ }
11
+ export interface CartesianSegmentDatum<ID extends StableID = StableID> {
12
+ readonly id: ID;
13
+ readonly x1: number;
14
+ readonly y1: number;
15
+ readonly x2: number;
16
+ readonly y2: number;
17
+ }
18
+ export interface GridCellDatum<ID extends StableID = StableID> {
19
+ readonly id: ID;
20
+ readonly column: number;
21
+ readonly row: number;
22
+ readonly value: number;
23
+ }
24
+ export interface RadialSegmentDatum<ID extends StableID = StableID> {
25
+ readonly id: ID;
26
+ readonly value: number;
27
+ readonly innerRadius?: number;
28
+ readonly outerRadius?: number;
29
+ }
30
+ export type ChartDatum<ID extends StableID = StableID> = PointChartDatum<ID> | CartesianSegmentDatum<ID> | GridCellDatum<ID> | RadialSegmentDatum<ID>;
31
+ export type ChartLayer<ID extends StableID = StableID> = {
32
+ readonly id: ID;
33
+ readonly profile: 'point';
34
+ readonly data: readonly PointChartDatum<ID>[];
35
+ } | {
36
+ readonly id: ID;
37
+ readonly profile: 'ordered-series';
38
+ readonly data: readonly OrderedSeriesDatum<ID>[];
39
+ } | {
40
+ readonly id: ID;
41
+ readonly profile: 'cartesian-segment';
42
+ readonly data: readonly CartesianSegmentDatum<ID>[];
43
+ } | {
44
+ readonly id: ID;
45
+ readonly profile: 'grid-cell';
46
+ readonly data: readonly GridCellDatum<ID>[];
47
+ } | {
48
+ readonly id: ID;
49
+ readonly profile: 'radial-segment';
50
+ readonly data: readonly RadialSegmentDatum<ID>[];
51
+ };
52
+ export interface ChartModel<ID extends StableID = StableID> {
53
+ readonly layers: readonly ChartLayer<ID>[];
54
+ }
55
+ export interface ChartLimits {
56
+ readonly maxAxes?: number;
57
+ readonly maxLayers?: number;
58
+ readonly maxDatums?: number;
59
+ readonly maxPatchOperations?: number;
60
+ readonly maxIDCodeUnits?: number;
61
+ }
62
+ export declare const DEFAULT_CHART_LIMITS: Readonly<Required<ChartLimits>>;
63
+ export type ChartPatchOperation<ID extends StableID = StableID> = {
64
+ readonly type: 'insert';
65
+ readonly layerID: ID;
66
+ readonly index: number;
67
+ readonly data: readonly ChartDatum<ID>[];
68
+ } | {
69
+ readonly type: 'remove';
70
+ readonly layerID: ID;
71
+ readonly index: number;
72
+ readonly count: number;
73
+ } | {
74
+ readonly type: 'replace';
75
+ readonly layerID: ID;
76
+ readonly index: number;
77
+ readonly data: readonly ChartDatum<ID>[];
78
+ };
79
+ export interface ChartPatch<ID extends StableID = StableID> {
80
+ readonly expectedGeneration?: number;
81
+ readonly operations: readonly ChartPatchOperation<ID>[];
82
+ }
83
+ export interface ChartGeneration {
84
+ readonly value: number;
85
+ }
86
+ export interface ChartLayerSummary<ID extends StableID = StableID> {
87
+ readonly id: ID;
88
+ readonly profile: ChartProfile;
89
+ readonly size: number;
90
+ readonly revisions: Readonly<{
91
+ readonly identity: number;
92
+ readonly order: number;
93
+ readonly value: number;
94
+ readonly geometry: number;
95
+ readonly aggregate: number;
96
+ readonly style: number;
97
+ }>;
98
+ }
99
+ export interface ChartModelDiagnostics {
100
+ readonly normalizedLayers: number;
101
+ readonly normalizedDatums: number;
102
+ readonly reusedLayers: number;
103
+ readonly rebuiltLayers: number;
104
+ readonly repairedLayers: number;
105
+ readonly copiedValueBlocks: number;
106
+ readonly repairedIndexEntries: number;
107
+ readonly rebuiltIndexEntries: number;
108
+ }
109
+ export interface ChartModelState<ID extends StableID = StableID> {
110
+ readonly generation: number;
111
+ readonly size: number;
112
+ readonly layerCount: number;
113
+ readonly identities: readonly ID[];
114
+ readonly limits: Readonly<Required<ChartLimits>>;
115
+ readonly diagnostics: ChartModelDiagnostics;
116
+ identityAt(index: number): ID | null;
117
+ indexOf(id: ID): number;
118
+ layerAt(index: number): ChartLayerSummary<ID> | null;
119
+ toModel(): ChartModel<ID>;
120
+ }
121
+ export declare function createChartModel<ID extends StableID>(input: ChartModel<ID>, limits?: ChartLimits): ChartModelState<ID>;
122
+ export declare function tryCreateChartModel<ID extends StableID>(input: ChartModel<ID>, limits?: ChartLimits): ChartResult<ChartModelState<ID>>;
123
+ export declare function replaceChartModel<ID extends StableID>(state: ChartModelState<ID>, input: ChartModel<ID>, expectedGeneration?: number): ChartModelState<ID>;
124
+ export declare function tryReplaceChartModel<ID extends StableID>(state: ChartModelState<ID>, input: ChartModel<ID>, expectedGeneration?: number): ChartResult<ChartModelState<ID>>;
125
+ export declare function replaceChartLayer<ID extends StableID>(state: ChartModelState<ID>, layer: ChartLayer<ID>, expectedGeneration?: number): ChartModelState<ID>;
126
+ export declare function tryReplaceChartLayer<ID extends StableID>(state: ChartModelState<ID>, layer: ChartLayer<ID>, expectedGeneration?: number): ChartResult<ChartModelState<ID>>;
127
+ export declare function applyChartPatch<ID extends StableID>(state: ChartModelState<ID>, patch: ChartPatch<ID>): ChartModelState<ID>;
128
+ export declare function tryApplyChartPatch<ID extends StableID>(state: ChartModelState<ID>, patch: ChartPatch<ID>): ChartResult<ChartModelState<ID>>;
package/dist/model.js ADDED
@@ -0,0 +1,2 @@
1
+ import{validateStableID}from"@sectile/core/identity";import{unwrap}from"@sectile/core/result";import{applySequencePatch,createSequence}from"@sectile/core/sequence";import{createPackedChartLayerOwner,materializePackedLayer,patchPackedChartLayerOwner,readPackedLayerValue}from"./internal/layer-owner.js";import{bindChartModelData,chartCartesianBounds,createPackedChartLayerView,getChartModelData}from"./internal/model-store.js";import{chartFail,chartOK}from"./internal/result.js";const DEFAULT_CHART_LIMITS=Object.freeze({maxAxes:16,maxLayers:64,maxDatums:1e6,maxPatchOperations:1e5,maxIDCodeUnits:1024});class ImmutableChartModel{generation;size;layerCount;limits;diagnostics;constructor(generation,data,diagnostics){this.generation=generation;this.size=data.identities.size;this.layerCount=data.layers.length;this.limits=data.limits;this.diagnostics=Object.freeze(diagnostics);bindChartModelData(this,data);Object.freeze(this)}get identities(){return getChartModelData(this).identities.ids}identityAt(index){return getChartModelData(this).identities.at(index)}indexOf(id){return getChartModelData(this).identities.indexOf(id)??-1}layerAt(index){if(!Number.isSafeInteger(index)||index<0)return null;const layer=getChartModelData(this).layers[index];return layer===void 0?null:Object.freeze({id:layer.id,profile:layer.profile,size:layer.identityIndices.length,revisions:layer.owner.revisions})}toModel(){return materializeModel(this,getChartModelData(this))}}function createChartModel(input,limits={}){return unwrap(tryCreateChartModel(input,limits))}function tryCreateChartModel(input,limits={}){return normalizeChartModel(input,limits,0)}function replaceChartModel(state,input,expectedGeneration){return unwrap(tryReplaceChartModel(state,input,expectedGeneration))}function tryReplaceChartModel(state,input,expectedGeneration){const stale=staleGeneration(state.generation,expectedGeneration);if(stale!==null)return stale;if(state.generation===Number.MAX_SAFE_INTEGER){return chartFail("resource-rejection","chart-generation-exhausted","Chart generation is exhausted.")}const next=normalizeChartModel(input,state.limits,state.generation+1,state);if(!next.ok)return next;return sameModel(state,next.value)?chartOK(state):next}function replaceChartLayer(state,layer,expectedGeneration){return unwrap(tryReplaceChartLayer(state,layer,expectedGeneration))}function tryReplaceChartLayer(state,layer,expectedGeneration){const stale=staleGeneration(state.generation,expectedGeneration);if(stale!==null)return stale;if(state.generation===Number.MAX_SAFE_INTEGER){return chartFail("resource-rejection","chart-generation-exhausted","Chart generation is exhausted.")}const data=getChartModelData(state);const layerPosition=data.layerIndex.get(layer.id);if(layerPosition===void 0){return chartFail("transition-rejection","chart-layer-missing","Chart layer does not exist.",{layerID:layer.id})}const previous=data.layers[layerPosition];const packed=packLayerInput(layer,layerPosition,state.limits);if(!packed.ok)return packed;const nextSize=data.identities.size-previous.owner.size+packed.value.identities.length;if(nextSize>state.limits.maxDatums){return chartFail("resource-rejection","chart-datum-ceiling-exceeded","Chart datum count exceeds its ceiling.",{actual:nextSize,ceiling:state.limits.maxDatums})}for(const id of packed.value.identities){const existing=data.identities.indexOf(id);if(existing!==null&&!previous.owner.identities.contains(id)){return chartFail("construction","chart-datum-duplicate","Chart datum identities must be globally unique.",{id})}}const mutation=createPackedChartLayerOwner(packed.value,state.limits.maxDatums,state.limits.maxIDCodeUnits,previous.owner);if(!mutation.changed)return chartOK(state);const identities=applySequencePatch(data.identities,{type:"splice",index:previous.identityOffset,deleteCount:previous.owner.size,inserted:packed.value.identities});const owners=data.layers.map((candidate,index)=>index===layerPosition?mutation.owner:candidate.owner);return chartOK(assembleChartModel(state.generation+1,owners,identities,state.limits,diagnosticsForMutation(owners.length,mutation.work,"rebuild")))}function applyChartPatch(state,patch){return unwrap(tryApplyChartPatch(state,patch))}function tryApplyChartPatch(state,patch){if(patch===null||typeof patch!=="object"||!Array.isArray(patch.operations)){return chartFail("construction","chart-patch-invalid","Chart patch operations must be an array.")}const stale=staleGeneration(state.generation,patch.expectedGeneration);if(stale!==null)return stale;if(patch.operations.length>state.limits.maxPatchOperations){return chartFail("resource-rejection","chart-patch-ceiling-exceeded","Chart patch operation count exceeds its ceiling.",{actual:patch.operations.length,ceiling:state.limits.maxPatchOperations})}if(patch.operations.length===0)return chartOK(state);if(state.generation===Number.MAX_SAFE_INTEGER){return chartFail("resource-rejection","chart-generation-exhausted","Chart generation is exhausted.")}const data=getChartModelData(state);const owners=data.layers.map(layer=>layer.owner);let identities=data.identities;let changed=false;let scannedDatums=0;let copiedValueBlocks=0;let repairedIndexEntries=0;let rebuiltIndexEntries=0;let repairedLayers=0;let rebuiltLayers=0;for(const operation of patch.operations){if(operation===null||typeof operation!=="object"||!("layerID"in operation)){return chartFail("construction","chart-patch-invalid","Chart patch operation is invalid.")}const targetIndex=data.layerIndex.get(operation.layerID);if(targetIndex===void 0){return chartFail("transition-rejection","chart-layer-missing","Chart patch layer does not exist.",{layerID:operation.layerID})}const owner=owners[targetIndex];if(!Number.isSafeInteger(operation.index)||operation.index<0||operation.index>owner.size){return chartFail("construction","chart-patch-invalid","Chart patch index is outside the target layer.",{index:operation.index,size:owner.size})}if(operation.type==="replace"){if(!Array.isArray(operation.data)||operation.index+operation.data.length>owner.size){return chartFail("construction","chart-patch-invalid","Chart patch replacement is outside the target layer.")}if(operation.data.length===0)continue;const packed=packLayerPatch(owner,operation.data,targetIndex,operation.index,state.limits);if(!packed.ok)return packed;const localDuplicate=duplicateOutsideReplacedRange(owner,operation.index,operation.data.length,packed.value.identities);if(localDuplicate!==null)return chartFail("construction","chart-datum-duplicate","Chart datum identities must be unique within a layer.",{id:localDuplicate});const duplicate2=duplicateOutsideLayer(identities,owner.identities,packed.value.identities);if(duplicate2!==null)return chartFail("construction","chart-datum-duplicate","Chart datum identities must be globally unique.",{id:duplicate2});const mutation2=patchPackedChartLayerOwner(owner,packed.value);if(!mutation2.changed)continue;const identityOffset2=ownerOffset(owners,targetIndex)+operation.index;identities=applySequencePatch(identities,{type:"splice",index:identityOffset2,deleteCount:operation.data.length,inserted:packed.value.identities});owners[targetIndex]=mutation2.owner;changed=true;repairedLayers+=1;scannedDatums+=mutation2.work.scannedDatums;copiedValueBlocks+=mutation2.work.copiedValueBlocks;repairedIndexEntries+=mutation2.work.repairedIndexEntries;rebuiltIndexEntries+=mutation2.work.rebuiltIndexEntries;continue}const datums=materializePackedLayer(owner);if(operation.type==="insert"){if(!Array.isArray(operation.data))return chartFail("construction","chart-patch-invalid","Inserted chart data must be an array.");if(operation.data.length===0)continue;datums.splice(operation.index,0,...operation.data)}else if(operation.type==="remove"){if(!Number.isSafeInteger(operation.count)||operation.count<0||operation.index+operation.count>owner.size){return chartFail("construction","chart-patch-invalid","Chart patch removal is outside the target layer.")}if(operation.count===0)continue;datums.splice(operation.index,operation.count)}else{return chartFail("construction","chart-patch-invalid","Chart patch operation type is invalid.")}const nextSize=identities.size-owner.size+datums.length;if(nextSize>state.limits.maxDatums){return chartFail("resource-rejection","chart-datum-ceiling-exceeded","Chart datum count exceeds its ceiling.",{actual:nextSize,ceiling:state.limits.maxDatums})}const rebuilt=packLayerInput({id:owner.id,profile:owner.profile,data:datums},targetIndex,state.limits);if(!rebuilt.ok)return rebuilt;const duplicate=duplicateOutsideLayer(identities,owner.identities,rebuilt.value.identities);if(duplicate!==null)return chartFail("construction","chart-datum-duplicate","Chart datum identities must be globally unique.",{id:duplicate});const mutation=createPackedChartLayerOwner(rebuilt.value,state.limits.maxDatums,state.limits.maxIDCodeUnits,owner);const identityOffset=ownerOffset(owners,targetIndex);identities=applySequencePatch(identities,{type:"splice",index:identityOffset,deleteCount:owner.size,inserted:rebuilt.value.identities});owners[targetIndex]=mutation.owner;changed=true;rebuiltLayers+=1;scannedDatums+=mutation.work.scannedDatums;copiedValueBlocks+=mutation.work.copiedValueBlocks;repairedIndexEntries+=mutation.work.repairedIndexEntries;rebuiltIndexEntries+=mutation.work.rebuiltIndexEntries}if(!changed)return chartOK(state);return chartOK(assembleChartModel(state.generation+1,owners,identities,state.limits,{normalizedLayers:rebuiltLayers,normalizedDatums:scannedDatums,reusedLayers:owners.length-rebuiltLayers-repairedLayers,rebuiltLayers,repairedLayers,copiedValueBlocks,repairedIndexEntries,rebuiltIndexEntries}))}function normalizeChartModel(input,limitsInput,generation,previousState){const limits=normalizeLimits(limitsInput);if(!limits.ok)return limits;if(input===null||typeof input!=="object"||!Array.isArray(input.layers)){return chartFail("construction","chart-model-invalid","Chart model layers must be an array.")}if(input.layers.length>limits.value.maxLayers){return chartFail("resource-rejection","chart-layer-ceiling-exceeded","Chart layer count exceeds its ceiling.",{actual:input.layers.length,ceiling:limits.value.maxLayers})}const identities=[];const identitySet=new Set;const layerIndex=new Map;const owners=[];const previousData=previousState===void 0?null:getChartModelData(previousState);let datumCount=0;let reusedLayers=0;let rebuiltLayers=0;let copiedValueBlocks=0;let rebuiltIndexEntries=0;for(let layerPosition=0;layerPosition<input.layers.length;layerPosition+=1){const layer=input.layers[layerPosition];if(layer===null||typeof layer!=="object"||!Array.isArray(layer.data)){return chartFail("construction","chart-model-invalid","Chart layer data must be an array.",{layer:layerPosition})}if(layerIndex.has(layer.id)){return chartFail("construction","chart-layer-duplicate","Chart layer identities must be unique.",{id:layer.id})}datumCount+=layer.data.length;if(datumCount>limits.value.maxDatums){return chartFail("resource-rejection","chart-datum-ceiling-exceeded","Chart datum count exceeds its ceiling.",{actual:datumCount,ceiling:limits.value.maxDatums})}const packed=packLayerInput(layer,layerPosition,limits.value);if(!packed.ok)return packed;for(const id of packed.value.identities){if(identitySet.has(id))return chartFail("construction","chart-datum-duplicate","Chart datum identities must be globally unique.",{id});identitySet.add(id);identities.push(id)}const previousPosition=previousData?.layerIndex.get(layer.id);const previousOwner=previousPosition===void 0?void 0:previousData?.layers[previousPosition]?.owner;const mutation=createPackedChartLayerOwner(packed.value,limits.value.maxDatums,limits.value.maxIDCodeUnits,previousOwner);owners.push(mutation.owner);if(mutation.changed){rebuiltLayers+=1;copiedValueBlocks+=mutation.work.copiedValueBlocks;rebuiltIndexEntries+=mutation.work.rebuiltIndexEntries}else reusedLayers+=1;layerIndex.set(layer.id,layerPosition)}const sequence=createSequence(identities,{maxItems:limits.value.maxDatums,maxIDCodeUnits:limits.value.maxIDCodeUnits});return chartOK(assembleChartModel(generation,owners,sequence,limits.value,{normalizedLayers:rebuiltLayers,normalizedDatums:datumCount,reusedLayers,rebuiltLayers,repairedLayers:0,copiedValueBlocks,repairedIndexEntries:0,rebuiltIndexEntries}))}function packLayerInput(layer,layerPosition,limits){if(layer===null||typeof layer!=="object"||!Array.isArray(layer.data)){return chartFail("construction","chart-model-invalid","Chart layer data must be an array.",{layer:layerPosition})}const layerIDError=validateStableID(layer.id,limits.maxIDCodeUnits);if(layerIDError!==null)return{ok:false,error:layerIDError};if(!isChartProfile(layer.profile)){return chartFail("construction","chart-profile-invalid","Chart layer profile is invalid.",{profile:layer.profile})}const stride=strideFor(layer.profile);const values=new Float64Array(layer.data.length*stride);const identities=[];const identitySet=new Set;let previousX=-Infinity;for(let datumPosition=0;datumPosition<layer.data.length;datumPosition+=1){const datum=layer.data[datumPosition];if(datum===null||typeof datum!=="object"||!("id"in datum)){return invalidDatum(layerPosition,datumPosition)}const id=datum.id;const idError=validateStableID(id,limits.maxIDCodeUnits);if(idError!==null)return{ok:false,error:idError};if(identitySet.has(id))return chartFail("construction","chart-datum-duplicate","Chart datum identities must be unique within a layer.",{id});identitySet.add(id);identities.push(id);const offset=datumPosition*stride;const packed=packDatum(layer.profile,datum,values,offset);if(!packed)return invalidDatum(layerPosition,datumPosition);if(layer.profile==="ordered-series"){const x=values[offset];if(x<previousX){return chartFail("construction","chart-datum-invalid","Ordered-series x values must be nondecreasing.",{layer:layerPosition,datum:datumPosition})}previousX=x}}return chartOK({id:layer.id,profile:layer.profile,identities:Object.freeze(identities),values,stride})}function packDatum(profile,datum,values,offset){const value=datum;if(profile==="point"||profile==="ordered-series"){if(!finite(value["x"])||!finite(value["y"]))return false;values[offset]=value["x"];values[offset+1]=value["y"];return true}if(profile==="cartesian-segment"){if(!finite(value["x1"])||!finite(value["y1"])||!finite(value["x2"])||!finite(value["y2"]))return false;values[offset]=value["x1"];values[offset+1]=value["y1"];values[offset+2]=value["x2"];values[offset+3]=value["y2"];return true}if(profile==="grid-cell"){if(!nonNegativeSafeInteger(value["column"])||!nonNegativeSafeInteger(value["row"])||!finite(value["value"]))return false;values[offset]=value["column"];values[offset+1]=value["row"];values[offset+2]=value["value"];return true}const innerRadius=value["innerRadius"]??0;const outerRadius=value["outerRadius"]??1;if(!finite(value["value"])||value["value"]<0||!finite(innerRadius)||!finite(outerRadius)||innerRadius<0||outerRadius<innerRadius)return false;values[offset]=value["value"];values[offset+1]=innerRadius;values[offset+2]=outerRadius;return true}function materializeModel(_state,data){const layers=data.layers.map(layer=>{const datums=materializePackedLayer(layer.owner);return Object.freeze({id:layer.id,profile:layer.profile,data:Object.freeze(datums)})});return Object.freeze({layers:Object.freeze(layers)})}function packLayerPatch(owner,datums,layerPosition,index,limits){const identities=[];const seen=new Set;const values=new Float64Array(datums.length*owner.stride);let previousX=owner.profile==="ordered-series"&&index>0?readPackedLayerValue(owner,index-1,0):Number.NEGATIVE_INFINITY;for(let offset=0;offset<datums.length;offset+=1){const datum=datums[offset];if(datum===null||typeof datum!=="object"||!("id"in datum))return invalidDatum(layerPosition,index+offset);const id=datum.id;const idError=validateStableID(id,limits.maxIDCodeUnits);if(idError!==null)return{ok:false,error:idError};if(seen.has(id))return chartFail("construction","chart-datum-duplicate","Chart patch identities must be unique.",{id});seen.add(id);identities.push(id);const valueOffset=offset*owner.stride;if(!packDatum(owner.profile,datum,values,valueOffset))return invalidDatum(layerPosition,index+offset);if(owner.profile==="ordered-series"){const x=values[valueOffset];if(x<previousX)return invalidDatum(layerPosition,index+offset);previousX=x}}if(owner.profile==="ordered-series"&&index+datums.length<owner.size&&previousX>readPackedLayerValue(owner,index+datums.length,0)){return invalidDatum(layerPosition,index+datums.length-1)}return chartOK({index,identities:Object.freeze(identities),values})}function assembleChartModel(generation,owners,identities,limits,diagnostics){const layers=[];const layerIndex=new Map;let identityOffset=0;for(let index=0;index<owners.length;index+=1){const owner=owners[index];layers.push(createPackedChartLayerView(owner,identityOffset));layerIndex.set(owner.id,index);identityOffset+=owner.size}const frozenLayers=Object.freeze(layers);const data={limits,identities,layerIndex,layers:frozenLayers,cartesianBounds:chartCartesianBounds(frozenLayers)};return new ImmutableChartModel(generation,data,diagnostics)}function diagnosticsForMutation(layerCount,work,kind){return{normalizedLayers:kind==="rebuild"?1:0,normalizedDatums:work.scannedDatums,reusedLayers:layerCount-1,rebuiltLayers:kind==="rebuild"?1:0,repairedLayers:kind==="repair"?1:0,copiedValueBlocks:work.copiedValueBlocks,repairedIndexEntries:work.repairedIndexEntries,rebuiltIndexEntries:work.rebuiltIndexEntries}}function ownerOffset(owners,target){let offset=0;for(let index=0;index<target;index+=1)offset+=owners[index].size;return offset}function duplicateOutsideLayer(global,previousLayer,identities){for(const id of identities)if(global.contains(id)&&!previousLayer.contains(id))return id;return null}function duplicateOutsideReplacedRange(owner,index,count,identities){const end=index+count;for(const id of identities){const previousIndex=owner.identities.indexOf(id);if(previousIndex!==null&&(previousIndex<index||previousIndex>=end))return id}return null}function normalizeLimits(input){if(input===null||typeof input!=="object"){return chartFail("construction","chart-model-invalid","Chart limits must be an object.")}const value={maxAxes:input.maxAxes??DEFAULT_CHART_LIMITS.maxAxes,maxLayers:input.maxLayers??DEFAULT_CHART_LIMITS.maxLayers,maxDatums:input.maxDatums??DEFAULT_CHART_LIMITS.maxDatums,maxPatchOperations:input.maxPatchOperations??DEFAULT_CHART_LIMITS.maxPatchOperations,maxIDCodeUnits:input.maxIDCodeUnits??DEFAULT_CHART_LIMITS.maxIDCodeUnits};for(const[name,limit]of Object.entries(value)){if(!Number.isSafeInteger(limit)||limit<(name==="maxIDCodeUnits"?1:0)){return chartFail("construction","chart-model-invalid","Chart limits must be non-negative safe integers.",{name,value:limit})}}return chartOK(Object.freeze(value))}function staleGeneration(actual,expected){return expected===void 0||expected===actual?null:chartFail("transition-rejection","chart-stale-generation","Chart generation does not match.",{actual,expected})}function sameModel(left,right){if(left.size!==right.size||left.layerCount!==right.layerCount)return false;const leftData=getChartModelData(left);const rightData=getChartModelData(right);for(let index=0;index<leftData.layers.length;index+=1){const a=leftData.layers[index];const b=rightData.layers[index];if(a.owner!==b.owner)return false}return true}function invalidDatum(layer,datum){return chartFail("construction","chart-datum-invalid","Chart datum is invalid for its layer profile.",{layer,datum})}function isChartProfile(value){return value==="point"||value==="ordered-series"||value==="cartesian-segment"||value==="grid-cell"||value==="radial-segment"}function strideFor(profile){if(profile==="point"||profile==="ordered-series")return 2;if(profile==="cartesian-segment")return 4;return 3}function finite(value){return typeof value==="number"&&Number.isFinite(value)}function nonNegativeSafeInteger(value){return typeof value==="number"&&Number.isSafeInteger(value)&&value>=0}export{DEFAULT_CHART_LIMITS,applyChartPatch,createChartModel,replaceChartLayer,replaceChartModel,tryApplyChartPatch,tryCreateChartModel,tryReplaceChartLayer,tryReplaceChartModel};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model.ts"],"mappings":"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","names":["duplicate","mutation","identityOffset"],"file":"model.js"}
@@ -0,0 +1,149 @@
1
+ import type { StableID } from '@sectile/core';
2
+ import type { ChartRepresentative, ChartViewState } from './contract.js';
3
+ import type { ChartDefinitionState } from './definition.js';
4
+ import { type ChartPlotInsets, type ChartPlotLayout } from './layout.js';
5
+ import type { ChartModelState, ChartProfile } from './model.js';
6
+ import type { ChartResult } from './result.js';
7
+ import { type ChartScale, type ChartViewTransform } from './scale.js';
8
+ export interface ChartViewport {
9
+ readonly width: number;
10
+ readonly height: number;
11
+ readonly devicePixelRatio?: number;
12
+ }
13
+ export interface ChartPointBatch {
14
+ readonly type: 'point';
15
+ readonly layerIndex: number;
16
+ readonly positions: Float32Array;
17
+ readonly identityIndices: Uint32Array;
18
+ readonly colors?: Uint8Array;
19
+ readonly representatives?: readonly ChartRepresentative[];
20
+ readonly revision?: ChartBatchRevision;
21
+ }
22
+ export interface ChartPolylineBatch {
23
+ readonly type: 'polyline';
24
+ readonly layerIndex: number;
25
+ readonly positions: Float32Array;
26
+ readonly offsets: Uint32Array;
27
+ readonly identityIndices: Uint32Array;
28
+ readonly colors?: Uint8Array;
29
+ readonly representatives?: readonly ChartRepresentative[];
30
+ readonly revision?: ChartBatchRevision;
31
+ }
32
+ export interface ChartRectangleBatch {
33
+ readonly type: 'rectangle';
34
+ readonly layerIndex: number;
35
+ readonly rectangles: Float32Array;
36
+ readonly identityIndices: Uint32Array;
37
+ readonly colors?: Uint8Array;
38
+ readonly representatives?: readonly ChartRepresentative[];
39
+ readonly revision?: ChartBatchRevision;
40
+ }
41
+ export interface ChartCellBatch {
42
+ readonly type: 'cell';
43
+ readonly layerIndex: number;
44
+ readonly cells: Float32Array;
45
+ readonly identityIndices: Uint32Array;
46
+ readonly colors?: Uint8Array;
47
+ readonly representatives?: readonly ChartRepresentative[];
48
+ readonly reduction?: 'density' | 'sum' | 'mean' | 'minimum' | 'maximum';
49
+ readonly revision?: ChartBatchRevision;
50
+ }
51
+ export interface ChartArcBatch {
52
+ readonly type: 'arc';
53
+ readonly layerIndex: number;
54
+ readonly arcs: Float32Array;
55
+ readonly identityIndices: Uint32Array;
56
+ readonly colors?: Uint8Array;
57
+ readonly representatives?: readonly ChartRepresentative[];
58
+ readonly revision?: ChartBatchRevision;
59
+ }
60
+ export type ChartProjectionBatch = ChartPointBatch | ChartPolylineBatch | ChartRectangleBatch | ChartCellBatch | ChartArcBatch;
61
+ export interface ChartDataPointGeometry {
62
+ readonly type: 'point' | 'polyline';
63
+ readonly positions: Float64Array;
64
+ readonly offsets?: Uint32Array;
65
+ }
66
+ export interface ChartDataRectangleGeometry {
67
+ readonly type: 'rectangle';
68
+ readonly segments: Float64Array;
69
+ }
70
+ export interface ChartDataCellGeometry {
71
+ readonly type: 'cell';
72
+ readonly bounds: Float64Array;
73
+ }
74
+ export interface ChartDataArcGeometry {
75
+ readonly type: 'arc';
76
+ readonly arcs: Float64Array;
77
+ }
78
+ export type ChartDataGeometry = ChartDataPointGeometry | ChartDataRectangleGeometry | ChartDataCellGeometry | ChartDataArcGeometry;
79
+ export interface ChartDataBatch {
80
+ readonly type: ChartProjectionBatch['type'];
81
+ readonly layerIndex: number;
82
+ readonly xAxisID?: StableID;
83
+ readonly yAxisID?: StableID;
84
+ readonly geometry: ChartDataGeometry;
85
+ readonly values?: Float64Array;
86
+ readonly identityIndices: Uint32Array;
87
+ readonly representatives: readonly ChartRepresentative[];
88
+ readonly revision: ChartBatchRevision;
89
+ readonly colors?: Uint8Array;
90
+ }
91
+ export interface ChartProjectionDiagnostics {
92
+ readonly sourceDatums: number;
93
+ readonly representedDatums: number;
94
+ readonly emittedPrimitives: number;
95
+ readonly aggregateRepresentatives?: number;
96
+ readonly visitedIndexNodes?: number;
97
+ readonly fullSourceScans?: number;
98
+ readonly reusedBatches?: number;
99
+ }
100
+ export interface ChartBatchRevision {
101
+ readonly identity: number;
102
+ readonly order: number;
103
+ readonly value: number;
104
+ readonly geometry: number;
105
+ readonly aggregate: number;
106
+ readonly style: number;
107
+ readonly level: number;
108
+ }
109
+ export interface ChartProjectionLayerRevision<ID extends StableID = StableID> extends ChartBatchRevision {
110
+ readonly layerID: ID;
111
+ }
112
+ export interface ChartProjectionDelta<ID extends StableID = StableID> {
113
+ readonly enter: readonly ID[];
114
+ readonly update: readonly ID[];
115
+ readonly exit: readonly ID[];
116
+ }
117
+ export interface ChartProjection<ID extends StableID = StableID> {
118
+ readonly generation: number;
119
+ readonly profile: ChartProfile | 'layered';
120
+ readonly viewport: ChartViewport;
121
+ readonly identities: readonly ID[];
122
+ readonly batches: readonly ChartProjectionBatch[];
123
+ readonly dataBatches?: readonly ChartDataBatch[];
124
+ readonly diagnostics: ChartProjectionDiagnostics;
125
+ readonly coordinate?: 'cartesian' | 'radial';
126
+ readonly layout?: ChartPlotLayout<ID>;
127
+ readonly layerRevisions?: readonly ChartProjectionLayerRevision<ID>[];
128
+ readonly delta?: ChartProjectionDelta<ID>;
129
+ }
130
+ export interface ChartProjectionInput {
131
+ readonly viewport: ChartViewport;
132
+ readonly maximumRepresentatives?: number;
133
+ readonly xScale?: ChartScale<number>;
134
+ readonly yScale?: ChartScale<number>;
135
+ readonly viewTransform?: ChartViewTransform;
136
+ readonly view?: ChartViewState;
137
+ readonly insets?: ChartPlotInsets;
138
+ readonly previous?: ChartProjection;
139
+ }
140
+ export type ChartProjectionSource<ID extends StableID = StableID> = ChartModelState<ID> | ChartDefinitionState<ID>;
141
+ export declare const DEFAULT_MAXIMUM_CHART_REPRESENTATIVES = 100000;
142
+ export declare const MAXIMUM_CHART_REPRESENTATIVES = 1000000;
143
+ /** Packed strides consumed directly by Canvas2D and WebGL2 adapters. */
144
+ export declare const CHART_POINT_STRIDE = 2;
145
+ export declare const CHART_RECTANGLE_STRIDE = 4;
146
+ export declare const CHART_CELL_STRIDE = 5;
147
+ export declare const CHART_ARC_STRIDE = 6;
148
+ export declare function createChartProjection<ID extends StableID>(source: ChartProjectionSource<ID>, input: ChartProjectionInput): ChartProjection<ID>;
149
+ export declare function tryCreateChartProjection<ID extends StableID>(source: ChartProjectionSource<ID>, input: ChartProjectionInput): ChartResult<ChartProjection<ID>>;
@@ -0,0 +1,2 @@
1
+ import{unwrap}from"@sectile/core/result";import{readPackedLayerValue,selectPackedAggregateFrontier,selectPackedOrderedEnvelope,selectPackedVisibleIndices}from"./internal/layer-owner.js";import{getChartModelData}from"./internal/model-store.js";import{chartFail,chartOK}from"./internal/result.js";import{tryCreateChartPlotLayout}from"./layout.js";import{createLinearScale,createContinuousColorScale,createOrdinalColorScale,IDENTITY_CHART_VIEW_TRANSFORM,tryCreateChartViewTransform}from"./scale.js";const DEFAULT_MAXIMUM_CHART_REPRESENTATIVES=1e5;const MAXIMUM_CHART_REPRESENTATIVES=1e6;const CHART_POINT_STRIDE=2;const CHART_RECTANGLE_STRIDE=4;const CHART_CELL_STRIDE=5;const CHART_ARC_STRIDE=6;function createChartProjection(source,input){return unwrap(tryCreateChartProjection(source,input))}function tryCreateChartProjection(source,input){if(isDefinitionState(source))return tryCreateDefinitionProjection(source,input);const model=source;if(input===null||typeof input!=="object"||!validViewport(input.viewport)){return invalidProjection("Chart projection viewport must have finite positive dimensions and device pixel ratio.")}const maximum=input.maximumRepresentatives??Math.min(model.size,DEFAULT_MAXIMUM_CHART_REPRESENTATIVES);if(!Number.isSafeInteger(maximum)||maximum<0||maximum>MAXIMUM_CHART_REPRESENTATIVES){return chartFail("resource-rejection","chart-projection-ceiling-exceeded","Chart representative maximum is invalid or exceeds its ceiling.",{maximum,ceiling:MAXIMUM_CHART_REPRESENTATIVES})}const transformResult=tryCreateChartViewTransform(input.viewTransform??IDENTITY_CHART_VIEW_TRANSFORM);if(!transformResult.ok)return transformResult;const data=getChartModelData(model);const bounds=projectionBounds(data.cartesianBounds);const xScale=input.xScale??createLinearScale(bounds.x,{start:0,end:input.viewport.width});const yScale=input.yScale??createLinearScale(bounds.y,{start:input.viewport.height,end:0});const quotas=representativeQuotas(data.layers,model.size,maximum);const batches=[];let representedDatums=0;let emittedPrimitives=0;for(let layerIndex=0;layerIndex<data.layers.length;layerIndex+=1){const layer=data.layers[layerIndex];const quota=quotas[layerIndex]??0;const selected=selectRepresentativeIndices(layer.identityIndices.length,quota);representedDatums+=selected.length;emittedPrimitives+=selected.length;const batch=projectLayer(layer,layerIndex,selected,xScale,yScale,transformResult.value,input.viewport);if(!batch.ok)return batch;if(selected.length>0)batches.push(batch.value)}const profiles=new Set(data.layers.map(layer=>layer.profile));return chartOK(Object.freeze({generation:model.generation,profile:profiles.size===1?data.layers[0]?.profile??"layered":"layered",viewport:Object.freeze({width:input.viewport.width,height:input.viewport.height,...input.viewport.devicePixelRatio===void 0?{}:{devicePixelRatio:input.viewport.devicePixelRatio}}),identities:model.identities,batches:Object.freeze(batches),diagnostics:Object.freeze({sourceDatums:model.size,representedDatums,emittedPrimitives})}))}function isDefinitionState(source){return source!==null&&typeof source==="object"&&"model"in source&&"coordinate"in source&&"layers"in source}function tryCreateDefinitionProjection(source,input){if(input===null||typeof input!=="object"||!validViewport(input.viewport)){return invalidProjection("Chart projection viewport must have finite positive dimensions and device pixel ratio.")}const model=source.model;const maximum=input.maximumRepresentatives??Math.min(model.size,DEFAULT_MAXIMUM_CHART_REPRESENTATIVES);if(!Number.isSafeInteger(maximum)||maximum<0||maximum>MAXIMUM_CHART_REPRESENTATIVES){return chartFail("resource-rejection","chart-projection-ceiling-exceeded","Chart representative maximum is invalid or exceeds its ceiling.",{maximum,ceiling:MAXIMUM_CHART_REPRESENTATIVES})}if(input.viewTransform!==void 0&&(input.viewTransform.xScale!==1||input.viewTransform.xOffset!==0||input.viewTransform.yScale!==1||input.viewTransform.yOffset!==0)){return invalidProjection("Declarative chart projection accepts axis-domain view state instead of a renderer-pixel transform.")}if(source.coordinate.kind==="radial"&&(input.view?.axes.length??0)>0){return invalidProjection("Radial chart projection does not accept Cartesian axis view state.")}const transform=IDENTITY_CHART_VIEW_TRANSFORM;const layoutResult=source.coordinate.kind==="cartesian"?tryCreateChartPlotLayout(source.axes,input.viewport,input.insets,input.view):chartOK(void 0);if(!layoutResult.ok)return layoutResult;const data=getChartModelData(model);const quotas=representativeQuotas(data.layers,model.size,maximum);for(let index=0;index<source.layers.length;index+=1){const semantics=source.layers[index];const layer=data.layers[index];const quota=quotas[index];const radialEmpty=layer.index.kind==="radial"&&layer.index.total===0;if((semantics.kind==="pie"||semantics.kind==="donut")&&!radialEmpty&&quota<layer.owner.size){return exactCeiling(semantics.id,layer.owner.size,quota)}}const axisLayouts=new Map;if(layoutResult.value!==void 0)for(const axis of layoutResult.value.axes)axisLayouts.set(axis.axis.id,axis);const batches=[];const dataBatches=[];const layerRevisions=[];let representedDatums=0;let emittedPrimitives=0;let aggregateRepresentatives=0;let visitedIndexNodes=0;for(let index=0;index<source.layers.length;index+=1){const semantics=source.layers[index];const layer=data.layers[index];const quota=quotas[index];const projected=projectDefinitionLayer(model,layer,semantics,index,quota,axisLayouts,input.viewport,transform);if(!projected.ok)return projected;if(projected.value.batch!==null)batches.push(projected.value.batch);if(projected.value.dataBatch!==null)dataBatches.push(projected.value.dataBatch);representedDatums+=projected.value.representedDatums;emittedPrimitives+=projected.value.emittedPrimitives;aggregateRepresentatives+=projected.value.aggregateRepresentatives;visitedIndexNodes+=projected.value.visitedIndexNodes;layerRevisions.push(Object.freeze({layerID:semantics.id,...projected.value.revision}))}const frozenBatches=Object.freeze(batches);const frozenRevisions=Object.freeze(layerRevisions);const previous=input.previous;const previousGeometry=new Map(previous?.dataBatches?.map(batch=>[batch.layerIndex,batch.geometry])??[]);const reusedBatches=dataBatches.reduce((count,batch)=>previousGeometry.get(batch.layerIndex)===batch.geometry?count+1:count,0);const projection=Object.freeze({generation:model.generation,profile:source.layers.length===1?source.layers[0]?.profile??"layered":"layered",viewport:Object.freeze({...input.viewport}),identities:model.identities,batches:frozenBatches,dataBatches:Object.freeze(dataBatches),coordinate:source.coordinate.kind,...layoutResult.value===void 0?{}:{layout:layoutResult.value},layerRevisions:frozenRevisions,delta:projectionDelta(frozenBatches,Object.freeze(dataBatches),frozenRevisions,previous),diagnostics:Object.freeze({sourceDatums:model.size,representedDatums,emittedPrimitives,aggregateRepresentatives,visitedIndexNodes,fullSourceScans:0,reusedBatches})});return chartOK(projection)}function projectDefinitionLayer(model,layer,semantics,layerIndex,quota,axes,viewport,transform){const revision=batchRevision(layer,0);if(semantics.kind==="pie"||semantics.kind==="donut"){if(layer.index.kind!=="radial")return invalidProjection("Radial layer index is unavailable.");if(layer.index.total===0)return chartOK({batch:null,dataBatch:null,representedDatums:0,emittedPrimitives:0,aggregateRepresentatives:0,visitedIndexNodes:1,revision});const selected2=Uint32Array.from({length:layer.owner.size},(_,index)=>index);const batch2=projectArcs(layer,layerIndex,selected2,viewport,transform);if(!batch2.ok)return batch2;const decorated2=decorateExactBatch(model,batch2.value,revision);return chartOK({batch:decorated2,dataBatch:createDataBatch(layer,semantics,decorated2,revision),representedDatums:selected2.length,emittedPrimitives:selected2.length,aggregateRepresentatives:0,visitedIndexNodes:1,revision})}const xAxis=semantics.xAxis===void 0?void 0:axes.get(semantics.xAxis);const yAxis=semantics.yAxis===void 0?void 0:axes.get(semantics.yAxis);if(xAxis===void 0||yAxis===void 0)return invalidProjection("Cartesian layer axes are unavailable in the plot layout.");const xScale=geometryScale(xAxis);const yScale=geometryScale(yAxis);const cartesianBounds=Object.freeze({minimumX:xAxis.descriptor.geometryDomain.minimum,maximumX:xAxis.descriptor.geometryDomain.maximum,minimumY:yAxis.descriptor.geometryDomain.minimum,maximumY:yAxis.descriptor.geometryDomain.maximum});if(semantics.kind==="line"){const domain=geometryDomain(xAxis);const selected2=selectPackedOrderedEnvelope(layer.owner,domain.minimum,domain.maximum,Math.max(1,Math.floor(xAxis.descriptor.range.end-xAxis.descriptor.range.start)),quota);if(selected2.indices.length===0&&layer.owner.size>0)return exactCeiling(semantics.id,selected2.visibleDatums,quota);const batch2=projectPolyline(layer,layerIndex,selected2.indices,xScale,yScale,transform);const lineRevision=batchRevision(layer,selected2.aggregated?selected2.indices.length:0);if(!batch2.ok)return batch2;const decorated2=decorateExactBatch(model,batch2.value,lineRevision);return chartOK({batch:decorated2,dataBatch:createDataBatch(layer,semantics,decorated2,lineRevision),representedDatums:selected2.indices.length,emittedPrimitives:selected2.indices.length,aggregateRepresentatives:0,visitedIndexNodes:selected2.visitedNodes,revision:lineRevision})}if(semantics.kind==="scatter"&&semantics.projection==="density"){const selected2=selectPackedAggregateFrontier(layer.owner,quota,cartesianBounds);if(selected2.overflow)return exactCeiling(semantics.id,selected2.visibleDatums,quota);const batch2=projectAggregateCells(layerIndex,selected2.entries,xScale,yScale,transform,"density");const aggregateRevision=batchRevision(layer,selected2.entries.length);const decorated2=Object.freeze({...batch2,revision:aggregateRevision});return chartOK({batch:decorated2,dataBatch:createDataBatch(layer,semantics,decorated2,aggregateRevision),representedDatums:selected2.visibleDatums,emittedPrimitives:selected2.entries.length,aggregateRepresentatives:selected2.entries.length,visitedIndexNodes:selected2.visitedNodes,revision:aggregateRevision})}if(semantics.kind==="heatmap"&&semantics.projection==="heatmap-aggregate"){const heatBounds=heatmapSelectionBounds(semantics,cartesianBounds);const selected2=selectPackedAggregateFrontier(layer.owner,quota,heatBounds);if(selected2.overflow)return exactCeiling(semantics.id,selected2.visibleDatums,quota);const reduction=semantics.reduction??"sum";const entries=semantics.heatmap===void 0?selected2.entries:selected2.entries.map(entry=>Object.freeze({...entry,minimumX:semantics.heatmap?.xEdges[Math.max(0,Math.floor(entry.minimumX))],maximumX:semantics.heatmap?.xEdges[Math.min(semantics.heatmap.xEdges.length-1,Math.ceil(entry.maximumX))],minimumY:semantics.heatmap?.yEdges[Math.max(0,Math.floor(entry.minimumY))],maximumY:semantics.heatmap?.yEdges[Math.min(semantics.heatmap.yEdges.length-1,Math.ceil(entry.maximumY))]}));const batch2=projectAggregateCells(layerIndex,entries,xScale,yScale,transform,reduction);const aggregateRevision=batchRevision(layer,selected2.entries.length);const decorated2=Object.freeze({...batch2,revision:aggregateRevision});return chartOK({batch:decorated2,dataBatch:createDataBatch(layer,semantics,decorated2,aggregateRevision),representedDatums:selected2.visibleDatums,emittedPrimitives:selected2.entries.length,aggregateRepresentatives:selected2.entries.length,visitedIndexNodes:selected2.visitedNodes,revision:aggregateRevision})}const selectionBounds=semantics.kind==="heatmap"?heatmapSelectionBounds(semantics,cartesianBounds):cartesianBounds;const visible=selectPackedVisibleIndices(layer.owner,selectionBounds,quota);if(visible.overflow)return exactCeiling(semantics.id,visible.visibleDatums,quota);const selected=visible.indices;let batch;if(semantics.kind==="scatter")batch=projectPoints(layer,layerIndex,selected,xScale,yScale,transform);else if(semantics.kind==="bar")batch=projectRectangles(layer,layerIndex,selected,xScale,yScale,transform);else batch=projectDefinitionCells(layer,semantics,layerIndex,selected,xScale,yScale,transform);if(!batch.ok)return batch;const decorated=decorateExactBatch(model,batch.value,revision);return chartOK({batch:decorated,dataBatch:createDataBatch(layer,semantics,decorated,revision),representedDatums:selected.length,emittedPrimitives:selected.length,aggregateRepresentatives:0,visitedIndexNodes:visible.visitedNodes,revision})}function heatmapSelectionBounds(semantics,bounds){if(semantics.heatmap===void 0)return bounds;const x=edgeSlotRange(semantics.heatmap.xEdges,bounds.minimumX,bounds.maximumX);const y=edgeSlotRange(semantics.heatmap.yEdges,bounds.minimumY,bounds.maximumY);return Object.freeze({minimumX:x.start,maximumX:x.end,minimumY:y.start,maximumY:y.end})}function edgeSlotRange(edges,minimum,maximum){let low=0;let high=edges.length;while(low<high){const middle=low+high>>>1;if(edges[middle]<=minimum)low=middle+1;else high=middle}const start=Math.max(0,Math.min(edges.length-1,low-1));low=0;high=edges.length;while(low<high){const middle=low+high>>>1;if(edges[middle]<maximum)low=middle+1;else high=middle}const end=Math.max(start,Math.min(edges.length-1,low));return{start,end}}function projectDefinitionCells(layer,semantics,layerIndex,selected,xScale,yScale,transform){if(semantics.heatmap===void 0)return projectCells(layer,layerIndex,selected,xScale,yScale,transform);const cells=new Float32Array(selected.length*CHART_CELL_STRIDE);const identities=new Uint32Array(selected.length);let minimumValue=Number.POSITIVE_INFINITY;let maximumValue=Number.NEGATIVE_INFINITY;for(let output=0;output<selected.length;output+=1){const source=selected[output];const column=readPackedLayerValue(layer.owner,source,0);const row=readPackedLayerValue(layer.owner,source,1);const x1=projectedAxis(semantics.heatmap.xEdges[column],xScale,transform.xScale,transform.xOffset);const x2=projectedAxis(semantics.heatmap.xEdges[column+1],xScale,transform.xScale,transform.xOffset);const y1=projectedAxis(semantics.heatmap.yEdges[row],yScale,transform.yScale,transform.yOffset);const y2=projectedAxis(semantics.heatmap.yEdges[row+1],yScale,transform.yScale,transform.yOffset);if(x1===null||x2===null||y1===null||y2===null)return invalidProjection("Heatmap cell cannot be represented by its axes.");const value=readPackedLayerValue(layer.owner,source,2);minimumValue=Math.min(minimumValue,value);maximumValue=Math.max(maximumValue,value);const target=output*CHART_CELL_STRIDE;cells[target]=Math.min(x1,x2);cells[target+1]=Math.min(y1,y2);cells[target+2]=Math.abs(x2-x1);cells[target+3]=Math.abs(y2-y1);cells[target+4]=value;identities[output]=layer.identityOffset+source}const colors=heatmapColors(cells,minimumValue,maximumValue);return chartOK({type:"cell",layerIndex,cells,colors,identityIndices:identities})}function projectAggregateCells(layerIndex,entries,xScale,yScale,transform,reduction){const cells=new Float32Array(entries.length*CHART_CELL_STRIDE);const identityIndices=new Uint32Array(entries.length);identityIndices.fill(4294967295);const representatives=[];let minimumValue=Number.POSITIVE_INFINITY;let maximumValue=Number.NEGATIVE_INFINITY;for(let index=0;index<entries.length;index+=1){const entry=entries[index];const x1=projectedAxis(entry.minimumX,xScale,transform.xScale,transform.xOffset);const x2=projectedAxis(entry.maximumX,xScale,transform.xScale,transform.xOffset);const y1=projectedAxis(entry.minimumY,yScale,transform.yScale,transform.yOffset);const y2=projectedAxis(entry.maximumY,yScale,transform.yScale,transform.yOffset);const value=reduction==="density"?entry.count:reduction==="sum"?entry.sum:reduction==="mean"?entry.sum/entry.count:reduction==="minimum"?entry.minimumValue:entry.maximumValue;minimumValue=Math.min(minimumValue,value);maximumValue=Math.max(maximumValue,value);const target=index*CHART_CELL_STRIDE;cells[target]=Math.min(x1,x2);cells[target+1]=Math.min(y1,y2);cells[target+2]=Math.max(1,Math.abs(x2-x1));cells[target+3]=Math.max(1,Math.abs(y2-y1));cells[target+4]=value;representatives.push(Object.freeze({kind:"aggregate",reduction,count:entry.count,bounds:Object.freeze({minimumX:entry.minimumX,maximumX:entry.maximumX,minimumY:entry.minimumY,maximumY:entry.maximumY})}))}return{type:"cell",layerIndex,cells,identityIndices,representatives:Object.freeze(representatives),reduction,colors:heatmapColors(cells,minimumValue,maximumValue)}}const dataGeometryCache=new WeakMap;const MAX_DATA_GEOMETRIES_PER_OWNER=8;function createDataBatch(layer,semantics,batch,revision){const key=dataGeometryKey(batch,revision);let retained=dataGeometryCache.get(layer.owner.geometryToken);if(retained===void 0){retained=new Map;dataGeometryCache.set(layer.owner.geometryToken,retained)}let geometry=retained.get(key);if(geometry===void 0){geometry=buildDataGeometry(layer,semantics,batch);if(retained.size>=MAX_DATA_GEOMETRIES_PER_OWNER)retained.delete(retained.keys().next().value);retained.set(key,geometry)}const representatives=batch.representatives??Object.freeze([]);const values=batch.type==="cell"?Float64Array.from({length:batch.cells.length/CHART_CELL_STRIDE},(_,index)=>batch.cells[index*CHART_CELL_STRIDE+4]):void 0;return Object.freeze({type:batch.type,layerIndex:batch.layerIndex,...semantics.xAxis===void 0?{}:{xAxisID:semantics.xAxis},...semantics.yAxis===void 0?{}:{yAxisID:semantics.yAxis},geometry,...values===void 0?{}:{values},identityIndices:batch.identityIndices,representatives,revision,...batch.colors===void 0?{}:{colors:batch.colors}})}function buildDataGeometry(layer,semantics,batch){if(batch.type==="point"||batch.type==="polyline"){const positions=new Float64Array(batch.identityIndices.length*2);for(let index=0;index<batch.identityIndices.length;index+=1){const source=batch.identityIndices[index]-layer.identityOffset;positions[index*2]=readPackedLayerValue(layer.owner,source,0);positions[index*2+1]=readPackedLayerValue(layer.owner,source,1)}return Object.freeze({type:batch.type,positions,...batch.type==="polyline"?{offsets:batch.offsets}:{}})}if(batch.type==="rectangle"){const segments=new Float64Array(batch.identityIndices.length*4);for(let index=0;index<batch.identityIndices.length;index+=1){const source=batch.identityIndices[index]-layer.identityOffset;for(let component=0;component<4;component+=1){segments[index*4+component]=readPackedLayerValue(layer.owner,source,component)}}return Object.freeze({type:"rectangle",segments})}if(batch.type==="cell"){const bounds=new Float64Array(batch.identityIndices.length*4);for(let index=0;index<batch.identityIndices.length;index+=1){const representative=batch.representatives?.[index];if(representative?.kind==="aggregate"){bounds[index*4]=representative.bounds.minimumX;bounds[index*4+1]=representative.bounds.minimumY;bounds[index*4+2]=representative.bounds.maximumX;bounds[index*4+3]=representative.bounds.maximumY;continue}const source=batch.identityIndices[index]-layer.identityOffset;const column=readPackedLayerValue(layer.owner,source,0);const row=readPackedLayerValue(layer.owner,source,1);const x1=semantics.heatmap?.xEdges[column]??column;const x2=semantics.heatmap?.xEdges[column+1]??column+1;const y1=semantics.heatmap?.yEdges[row]??row;const y2=semantics.heatmap?.yEdges[row+1]??row+1;bounds[index*4]=Math.min(x1,x2);bounds[index*4+1]=Math.min(y1,y2);bounds[index*4+2]=Math.max(x1,x2);bounds[index*4+3]=Math.max(y1,y2)}return Object.freeze({type:"cell",bounds})}const arcs=new Float64Array(batch.identityIndices.length*4);const total=layer.index.kind==="radial"?layer.index.total:0;let cumulative=0;let output=0;for(let source=0;source<layer.owner.size&&output<batch.identityIndices.length;source+=1){const value=readPackedLayerValue(layer.owner,source,0);const start=total===0?0:cumulative/total*Math.PI*2;cumulative+=value;if(batch.identityIndices[output]!==layer.identityOffset+source)continue;arcs[output*4]=readPackedLayerValue(layer.owner,source,1);arcs[output*4+1]=readPackedLayerValue(layer.owner,source,2);arcs[output*4+2]=start;arcs[output*4+3]=total===0?0:cumulative/total*Math.PI*2;output+=1}return Object.freeze({type:"arc",arcs})}function dataGeometryKey(batch,revision){let hash=2166136261;for(const index of batch.identityIndices){hash^=index;hash=Math.imul(hash,16777619)}for(const representative of batch.representatives??[]){if(representative.kind!=="aggregate")continue;for(const value of[representative.bounds.minimumX,representative.bounds.maximumX,representative.bounds.minimumY,representative.bounds.maximumY]){const text=String(value);for(let index=0;index<text.length;index+=1){hash^=text.charCodeAt(index);hash=Math.imul(hash,16777619)}}}return`${batch.type}:${revision.level}:${batch.identityIndices.length}:${hash>>>0}`}function decorateExactBatch(model,batch,revision){const representatives=Object.freeze([...batch.identityIndices].map(index=>Object.freeze({kind:"datum",id:model.identityAt(index)})));return Object.freeze({...batch,representatives,revision,...batch.colors===void 0?{colors:ordinalBatchColors(model,batch,representatives)}:{}})}function ordinalBatchColors(model,batch,representatives){const scale=createOrdinalColorScale([[.12,.31,.69,1],[.82,.25,.28,1],[.16,.58,.38,1],[.55,.32,.76,1],[.91,.55,.15,1],[.1,.62,.7,1]]);const layerID=model.layerAt(batch.layerIndex)?.id;const colors=new Uint8Array(representatives.length*4);for(let index=0;index<representatives.length;index+=1){const representative=representatives[index];const key=batch.type==="arc"&&representative.kind==="datum"?representative.id:layerID;const color=scale.color(key);for(let channel=0;channel<4;channel+=1)colors[index*4+channel]=Math.round(color[channel]*255)}return colors}function geometryScale(axis){return axis.geometryScale}function geometryDomain(axis){return axis.descriptor.geometryDomain}function heatmapColors(cells,minimumInput,maximumInput){let minimum=minimumInput;let maximum=maximumInput;if(!Number.isFinite(minimum)||!Number.isFinite(maximum)){minimum=0;maximum=1}else if(minimum===maximum){minimum-=.5;maximum+=.5}const scale=createContinuousColorScale({minimum,maximum},[{offset:0,color:[.12,.31,.69,1]},{offset:.5,color:[.22,.72,.68,1]},{offset:1,color:[.96,.76,.19,1]}]);const colors=new Uint8Array(cells.length/CHART_CELL_STRIDE*4);for(let index=0;index<cells.length/CHART_CELL_STRIDE;index+=1){const color=scale.color(cells[index*CHART_CELL_STRIDE+4]);for(let channel=0;channel<4;channel+=1)colors[index*4+channel]=Math.round(color[channel]*255)}return colors}function batchRevision(layer,level){return Object.freeze({...layer.owner.revisions,level})}function projectionDelta(batches,dataBatches,revisions,previous){const current=representativeLayers(batches,dataBatches,revisions);if(previous===void 0)return Object.freeze({enter:Object.freeze([...current.keys()]),update:Object.freeze([]),exit:Object.freeze([])});const before=representativeLayers(previous.batches,previous.dataBatches??[],previous.layerRevisions??[]);const enter=[];const update=[];const exit=[];for(const[id,state]of current){const previousState=before.get(id);if(previousState===void 0)enter.push(id);else if(state.fingerprint!==previousState.fingerprint||state.revision.style!==previousState.revision.style)update.push(id)}for(const id of before.keys())if(!current.has(id))exit.push(id);return Object.freeze({enter:Object.freeze(enter),update:Object.freeze(update),exit:Object.freeze(exit)})}function representativeLayers(batches,dataBatches,revisions){const output=new Map;const dataByLayer=new Map(dataBatches.map(batch=>[batch.layerIndex,batch]));for(const batch of batches){const revision=revisions[batch.layerIndex];if(revision===void 0)continue;const dataBatch=dataByLayer.get(batch.layerIndex);for(let index=0;index<(batch.representatives?.length??0);index+=1){const representative=batch.representatives?.[index];if(representative?.kind!=="datum")continue;output.set(representative.id,{revision,fingerprint:dataFingerprint(dataBatch,batch,index)})}}return output}function dataFingerprint(dataBatch,batch,index){if(dataBatch===void 0)return`${batch.type}:${index}:${batch.identityIndices[index]}`;const color=batch.colors===void 0?"":`:${[...batch.colors.subarray(index*4,index*4+4)].join(",")}`;const geometry=dataBatch.geometry;if(geometry.type==="point"||geometry.type==="polyline"){return`${geometry.type}:${geometry.positions[index*2]},${geometry.positions[index*2+1]}${color}`}if(geometry.type==="rectangle"){const offset2=index*4;return`rectangle:${geometry.segments[offset2]},${geometry.segments[offset2+1]},${geometry.segments[offset2+2]},${geometry.segments[offset2+3]}${color}`}if(geometry.type==="cell"){const offset2=index*4;return`cell:${geometry.bounds[offset2]},${geometry.bounds[offset2+1]},${geometry.bounds[offset2+2]},${geometry.bounds[offset2+3]}:${dataBatch.values?.[index]??""}${color}`}const offset=index*4;const arcs=geometry.arcs;return`arc:${arcs[offset]},${arcs[offset+1]},${arcs[offset+2]},${arcs[offset+3]}${color}`}function exactCeiling(layerID,actual,ceiling){return chartFail("resource-rejection","chart-projection-ceiling-exceeded","Exact chart projection exceeds its representative ceiling.",{layerID,actual,ceiling})}function projectionBounds(bounds){if(!bounds.hasValues)return{x:{minimum:0,maximum:1},y:{minimum:0,maximum:1}};let minimumX=bounds.minimumX;let maximumX=bounds.maximumX;let minimumY=bounds.minimumY;let maximumY=bounds.maximumY;if(minimumX===maximumX){minimumX-=.5;maximumX+=.5}if(minimumY===maximumY){minimumY-=.5;maximumY+=.5}return{x:{minimum:minimumX,maximum:maximumX},y:{minimum:minimumY,maximum:maximumY}}}function representativeQuotas(layers,total,maximum){const quotas=new Uint32Array(layers.length);if(total===0||maximum===0)return quotas;if(maximum>=total){for(let index=0;index<layers.length;index+=1)quotas[index]=layers[index]?.identityIndices.length??0;return quotas}let assigned=0;for(let index=0;index<layers.length;index+=1){const size=layers[index]?.identityIndices.length??0;const quota=Math.min(size,Math.floor(maximum*size/total));quotas[index]=quota;assigned+=quota}for(let index=0;assigned<maximum&&index<layers.length;index+=1){const size=layers[index]?.identityIndices.length??0;if(quotas[index]<size){quotas[index]=quotas[index]+1;assigned+=1}}return quotas}function selectRepresentativeIndices(size,maximum){if(maximum<=0||size===0)return new Uint32Array(0);if(maximum>=size)return Uint32Array.from({length:size},(_,index)=>index);if(maximum===1)return Uint32Array.of(0);const selected=new Uint32Array(maximum);const denominator=maximum-1;for(let index=0;index<maximum;index+=1){selected[index]=Math.floor(index*(size-1)/denominator)}return selected}function projectLayer(layer,layerIndex,selected,xScale,yScale,transform,viewport){if(layer.profile==="point")return projectPoints(layer,layerIndex,selected,xScale,yScale,transform);if(layer.profile==="ordered-series")return projectPolyline(layer,layerIndex,selected,xScale,yScale,transform);if(layer.profile==="cartesian-segment")return projectRectangles(layer,layerIndex,selected,xScale,yScale,transform);if(layer.profile==="grid-cell")return projectCells(layer,layerIndex,selected,xScale,yScale,transform);return projectArcs(layer,layerIndex,selected,viewport,transform)}function projectPoints(layer,layerIndex,selected,xScale,yScale,transform){const positions=new Float32Array(selected.length*CHART_POINT_STRIDE);const identities=new Uint32Array(selected.length);for(let output=0;output<selected.length;output+=1){const source=selected[output];const x=projectedAxis(readPackedLayerValue(layer.owner,source,0),xScale,transform.xScale,transform.xOffset);const y=projectedAxis(readPackedLayerValue(layer.owner,source,1),yScale,transform.yScale,transform.yOffset);if(x===null||y===null)return invalidProjection("Point cannot be represented by the selected scales.");positions[output*2]=x;positions[output*2+1]=y;identities[output]=layer.identityOffset+layer.identityIndices[source]}return chartOK({type:"point",layerIndex,positions,identityIndices:identities})}function projectPolyline(layer,layerIndex,selected,xScale,yScale,transform){const point=projectPoints(layer,layerIndex,selected,xScale,yScale,transform);return point.ok?chartOK({type:"polyline",layerIndex,positions:point.value.positions,offsets:Uint32Array.of(0,selected.length),identityIndices:point.value.identityIndices}):point}function projectRectangles(layer,layerIndex,selected,xScale,yScale,transform){const rectangles=new Float32Array(selected.length*CHART_RECTANGLE_STRIDE);const identities=new Uint32Array(selected.length);for(let output=0;output<selected.length;output+=1){const source=selected[output];const x1=projectedAxis(readPackedLayerValue(layer.owner,source,0),xScale,transform.xScale,transform.xOffset);const y1=projectedAxis(readPackedLayerValue(layer.owner,source,1),yScale,transform.yScale,transform.yOffset);const x2=projectedAxis(readPackedLayerValue(layer.owner,source,2),xScale,transform.xScale,transform.xOffset);const y2=projectedAxis(readPackedLayerValue(layer.owner,source,3),yScale,transform.yScale,transform.yOffset);if(x1===null||y1===null||x2===null||y2===null)return invalidProjection("Rectangle cannot be represented by the selected scales.");const target=output*4;rectangles[target]=Math.min(x1,x2);rectangles[target+1]=Math.min(y1,y2);rectangles[target+2]=Math.abs(x2-x1);rectangles[target+3]=Math.abs(y2-y1);identities[output]=layer.identityOffset+layer.identityIndices[source]}return chartOK({type:"rectangle",layerIndex,rectangles,identityIndices:identities})}function projectCells(layer,layerIndex,selected,xScale,yScale,transform){const cells=new Float32Array(selected.length*CHART_CELL_STRIDE);const identities=new Uint32Array(selected.length);for(let output=0;output<selected.length;output+=1){const source=selected[output];const column=readPackedLayerValue(layer.owner,source,0);const row=readPackedLayerValue(layer.owner,source,1);const x1=projectedAxis(column,xScale,transform.xScale,transform.xOffset);const y1=projectedAxis(row,yScale,transform.yScale,transform.yOffset);const x2=projectedAxis(column+1,xScale,transform.xScale,transform.xOffset);const y2=projectedAxis(row+1,yScale,transform.yScale,transform.yOffset);if(x1===null||y1===null||x2===null||y2===null)return invalidProjection("Cell cannot be represented by the selected scales.");const target=output*5;cells[target]=Math.min(x1,x2);cells[target+1]=Math.min(y1,y2);cells[target+2]=Math.abs(x2-x1);cells[target+3]=Math.abs(y2-y1);cells[target+4]=readPackedLayerValue(layer.owner,source,2);identities[output]=layer.identityOffset+layer.identityIndices[source]}return chartOK({type:"cell",layerIndex,cells,identityIndices:identities})}function projectArcs(layer,layerIndex,selected,viewport,transform){const arcs=new Float32Array(selected.length*CHART_ARC_STRIDE);const identities=new Uint32Array(selected.length);const total=layer.index.kind==="radial"?layer.index.total:0;const radius=Math.min(viewport.width,viewport.height)/2;let cumulative=0;let selectedCursor=0;for(let source=0;source<layer.identityIndices.length&&selectedCursor<selected.length;source+=1){const value=readPackedLayerValue(layer.owner,source,0);const start=total===0?0:cumulative/total*Math.PI*2;cumulative+=value;if(source!==selected[selectedCursor])continue;const target=selectedCursor*6;arcs[target]=viewport.width/2*transform.xScale+transform.xOffset;arcs[target+1]=viewport.height/2*transform.yScale+transform.yOffset;arcs[target+2]=readPackedLayerValue(layer.owner,source,1)*radius*Math.min(transform.xScale,transform.yScale);arcs[target+3]=readPackedLayerValue(layer.owner,source,2)*radius*Math.min(transform.xScale,transform.yScale);arcs[target+4]=start;arcs[target+5]=total===0?0:cumulative/total*Math.PI*2;identities[selectedCursor]=layer.identityOffset+layer.identityIndices[source];selectedCursor+=1}return chartOK({type:"arc",layerIndex,arcs,identityIndices:identities})}function projectedAxis(value,scale,factor,offset){const projected=scale.normalize(value);if(projected===null)return null;const transformed=projected*factor+offset;return Number.isFinite(transformed)?transformed:null}function validViewport(value){return value!==null&&typeof value==="object"&&finitePositive(value.width)&&finitePositive(value.height)&&(value.devicePixelRatio===void 0||finitePositive(value.devicePixelRatio))}function finitePositive(value){return typeof value==="number"&&Number.isFinite(value)&&value>0}function invalidProjection(message){return chartFail("construction","chart-projection-invalid",message)}export{CHART_ARC_STRIDE,CHART_CELL_STRIDE,CHART_POINT_STRIDE,CHART_RECTANGLE_STRIDE,DEFAULT_MAXIMUM_CHART_REPRESENTATIVES,MAXIMUM_CHART_REPRESENTATIVES,createChartProjection,tryCreateChartProjection};
2
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/projection.ts"],"mappings":"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","names":["selected","batch","decorated","offset"],"file":"projection.js"}
@@ -0,0 +1,47 @@
1
+ import type { StableID } from '@sectile/core';
2
+ import type { ChartAggregateRepresentative } from './contract.js';
3
+ import type { ChartProjection } from './projection.js';
4
+ import type { ChartResult } from './result.js';
5
+ export interface ChartHitTestInput {
6
+ readonly x: number;
7
+ readonly y: number;
8
+ readonly radius?: number;
9
+ readonly maximumHits?: number;
10
+ }
11
+ interface ChartHitBase {
12
+ readonly kind: 'datum' | 'aggregate';
13
+ readonly layerIndex: number;
14
+ readonly batchIndex: number;
15
+ readonly primitiveIndex: number;
16
+ readonly distanceSquared: number;
17
+ }
18
+ export interface ChartDatumHit<ID extends StableID = StableID> extends ChartHitBase {
19
+ readonly kind: 'datum';
20
+ readonly id: ID;
21
+ readonly identityIndex: number;
22
+ }
23
+ export interface ChartAggregateHit extends ChartHitBase {
24
+ readonly kind: 'aggregate';
25
+ readonly id?: never;
26
+ readonly identityIndex?: never;
27
+ readonly representative: ChartAggregateRepresentative;
28
+ }
29
+ export type ChartHit<ID extends StableID = StableID> = ChartDatumHit<ID> | ChartAggregateHit;
30
+ export declare const DEFAULT_CHART_NEAREST_RADIUS = 40;
31
+ export declare const MAXIMUM_CHART_HITS = 256;
32
+ export interface ChartHitTestDiagnostics {
33
+ readonly visitedIndexNodes: number;
34
+ readonly testedPrimitives: number;
35
+ readonly searchedPartitions: number;
36
+ }
37
+ export interface ChartHitTestInspection<ID extends StableID = StableID> {
38
+ readonly hits: readonly ChartHit<ID>[];
39
+ readonly diagnostics: ChartHitTestDiagnostics;
40
+ }
41
+ /** Eagerly pays the O(k log k) immutable query-index construction cost. */
42
+ export declare function prepareChartProjectionQueries(projection: ChartProjection): void;
43
+ export declare function hitTestChartProjection<ID extends StableID>(projection: ChartProjection<ID>, input: ChartHitTestInput): readonly ChartHit<ID>[];
44
+ /** Runs the production query kernel and reports deterministic work counters. */
45
+ export declare function inspectChartProjectionHitTest<ID extends StableID>(projection: ChartProjection<ID>, input: ChartHitTestInput): ChartHitTestInspection<ID>;
46
+ export declare function tryHitTestChartProjection<ID extends StableID>(projection: ChartProjection<ID>, input: ChartHitTestInput): ChartResult<readonly ChartHit<ID>[]>;
47
+ export {};
package/dist/query.js ADDED
@@ -0,0 +1,2 @@
1
+ import{unwrap}from"@sectile/core/result";import{projectionQueryIndex}from"./internal/query-index.js";import{chartFail,chartOK}from"./internal/result.js";const DEFAULT_CHART_NEAREST_RADIUS=40;const MAXIMUM_CHART_HITS=256;function prepareChartProjectionQueries(projection){projectionQueryIndex(projection)}function hitTestChartProjection(projection,input){return unwrap(tryHitTestChartProjection(projection,input))}function inspectChartProjectionHitTest(projection,input){const diagnostics={visitedIndexNodes:0,testedPrimitives:0,searchedPartitions:0};const hits=unwrap(tryHitTestChartProjectionWithDiagnostics(projection,input,diagnostics));return Object.freeze({hits,diagnostics:Object.freeze({...diagnostics})})}function tryHitTestChartProjection(projection,input){return tryHitTestChartProjectionWithDiagnostics(projection,input,null)}function tryHitTestChartProjectionWithDiagnostics(projection,input,diagnostics){if(input===null||typeof input!=="object"||!finite(input.x)||!finite(input.y))return invalidQuery("Chart hit coordinates must be finite.");const radius=input.radius??DEFAULT_CHART_NEAREST_RADIUS;const maximumHits=input.maximumHits??1;if(!finite(radius)||radius<0||!Number.isSafeInteger(maximumHits)||maximumHits<0||maximumHits>MAXIMUM_CHART_HITS){return invalidQuery("Chart hit radius or maximum hit count is invalid.")}if(maximumHits===0)return chartOK(Object.freeze([]));const index=projectionQueryIndex(projection);return chartOK(automaticHits(projection,index,input.x,input.y,radius,maximumHits,diagnostics))}const POINT_KIND_MASK=1<<0;const AREA_KIND_MASK=1<<2|1<<3|1<<4;function queryNode(projection,index,nodeIndex,x,y,radius,acceptedKinds,hits,diagnostics){const node=index.nodes[nodeIndex];if(diagnostics!==null)diagnostics.visitedIndexNodes+=1;if((node.kindMask&acceptedKinds)===0||!intersects(node,x,y,radius))return;if(node.left>=0){queryNode(projection,index,node.left,x,y,radius,acceptedKinds,hits,diagnostics);queryNode(projection,index,node.right,x,y,radius,acceptedKinds,hits,diagnostics);return}for(let position=node.start;position<node.start+node.count;position+=1){const record=index.order[position];if((acceptedKinds&1<<index.kinds[record])===0)continue;const boundsOffset=record*4;if(!intersectsBounds(index.bounds,boundsOffset,x,y,radius))continue;if(diagnostics!==null)diagnostics.testedPrimitives+=1;const batchIndex=index.batchIndices[record];const primitiveIndex=index.primitiveIndices[record];const batch=projection.batches[batchIndex];const exact=exactHit(batch,primitiveIndex,x,y,radius);if(exact===null)continue;const hit=hitFor(projection,batchIndex,primitiveIndex,exact.endpoint,exact.distanceSquared);if(hit!==null)hits.push(hit)}}function automaticHits(projection,index,x,y,nearestRadius,maximumHits,diagnostics){if(!insidePlot(projection,x,y))return Object.freeze([]);const areas=[];if(index.root>=0)queryNode(projection,index,index.root,x,y,0,AREA_KIND_MASK,areas,diagnostics);if(areas.length>0)return finalizeHits(areas,maximumHits,compareHits);const lines=nearestPolylineHits(projection,x,y,diagnostics);if(lines.length>0)return finalizeRankedHits(lines,maximumHits);const bars=nearestBarHits(projection,index,x,y,diagnostics);if(bars.length>0)return finalizeRankedHits(bars,maximumHits);const points=[];if(index.root>=0)queryNode(projection,index,index.root,x,y,nearestRadius,POINT_KIND_MASK,points,diagnostics);return finalizeHits(points,maximumHits,compareHits)}function nearestPolylineHits(projection,x,y,diagnostics){const hits=[];for(let batchIndex=0;batchIndex<projection.batches.length;batchIndex+=1){const batch=projection.batches[batchIndex];if(batch.type!=="polyline"||batch.identityIndices.length===0)continue;if(diagnostics!==null)diagnostics.searchedPartitions+=1;const count=batch.identityIndices.length;const insertion=lowerBoundPosition(batch.positions,count,x);const left=insertion>0?insertion-1:-1;const right=insertion<count?insertion:-1;const leftDistance=left<0?Number.POSITIVE_INFINITY:Math.abs(x-batch.positions[left*2]);const rightDistance=right<0?Number.POSITIVE_INFINITY:Math.abs(x-batch.positions[right*2]);const nearestDistance=Math.min(leftDistance,rightDistance);if(left>=0&&leftDistance===nearestDistance){appendPolylineCoordinateHits(projection,batch,batchIndex,batch.positions[left*2],x,y,hits,diagnostics)}if(right>=0&&rightDistance===nearestDistance&&(left<0||batch.positions[right*2]!==batch.positions[left*2])){appendPolylineCoordinateHits(projection,batch,batchIndex,batch.positions[right*2],x,y,hits,diagnostics)}}return hits}function appendPolylineCoordinateHits(projection,batch,batchIndex,coordinate,x,y,hits,diagnostics){const count=batch.identityIndices.length;const start=lowerBoundPosition(batch.positions,count,coordinate);const end=upperBoundPosition(batch.positions,count,coordinate);for(let vertex=start;vertex<end;vertex+=1){if(diagnostics!==null)diagnostics.testedPrimitives+=1;const px=batch.positions[vertex*2];const py=batch.positions[vertex*2+1];const primitive=Math.min(vertex,Math.max(0,count-2));const endpoint=vertex>primitive?1:0;const distanceSquared=squared(x-px)+squared(y-py);const hit=hitFor(projection,batchIndex,primitive,endpoint,distanceSquared);if(hit!==null)hits.push({hit,primaryDistance:Math.abs(x-px),secondaryDistance:Math.abs(y-py)})}}function nearestBarHits(projection,index,x,y,diagnostics){const hits=[];appendNearestBarAxisHits(projection,index,index.verticalBarOrder,0,x,y,hits,diagnostics);appendNearestBarAxisHits(projection,index,index.horizontalBarOrder,1,y,x,hits,diagnostics);return hits}function appendNearestBarAxisHits(projection,index,order,axisOffset,coordinate,secondaryCoordinate,hits,diagnostics){if(order.length===0)return;if(diagnostics!==null)diagnostics.searchedPartitions+=1;const insertion=lowerBoundRecords(index.bounds,order,axisOffset,coordinate);const left=insertion>0?insertion-1:-1;const right=insertion<order.length?insertion:-1;const leftCenter=left<0?Number.NaN:recordCenter(index.bounds,order[left],axisOffset);const rightCenter=right<0?Number.NaN:recordCenter(index.bounds,order[right],axisOffset);const leftDistance=left<0?Number.POSITIVE_INFINITY:Math.abs(coordinate-leftCenter);const rightDistance=right<0?Number.POSITIVE_INFINITY:Math.abs(coordinate-rightCenter);const nearestDistance=Math.min(leftDistance,rightDistance);if(left>=0&&leftDistance===nearestDistance){appendBarCenterHits(projection,index,order,axisOffset,leftCenter,coordinate,secondaryCoordinate,hits,diagnostics)}if(right>=0&&rightDistance===nearestDistance&&(left<0||rightCenter!==leftCenter)){appendBarCenterHits(projection,index,order,axisOffset,rightCenter,coordinate,secondaryCoordinate,hits,diagnostics)}}function appendBarCenterHits(projection,index,order,axisOffset,center,coordinate,secondaryCoordinate,hits,diagnostics){const start=lowerBoundRecords(index.bounds,order,axisOffset,center);const end=upperBoundRecords(index.bounds,order,axisOffset,center);const secondaryOffset=axisOffset===0?1:0;for(let position=start;position<end;position+=1){if(diagnostics!==null)diagnostics.testedPrimitives+=1;const record=order[position];const boundsOffset=record*4;const secondaryDistance=distanceToInterval(secondaryCoordinate,index.bounds[boundsOffset+secondaryOffset],index.bounds[boundsOffset+secondaryOffset+2]);const primaryDistance=Math.abs(coordinate-center);const batchIndex=index.batchIndices[record];const primitiveIndex=index.primitiveIndices[record];const hit=hitFor(projection,batchIndex,primitiveIndex,0,squared(primaryDistance)+squared(secondaryDistance));if(hit!==null)hits.push({hit,primaryDistance,secondaryDistance})}}function hitFor(projection,batchIndex,primitiveIndex,endpoint,distanceSquared){const batch=projection.batches[batchIndex];const representativeIndex=batch.type==="polyline"?Math.min(batch.identityIndices.length-1,primitiveIndex+endpoint):primitiveIndex;const representative=batch.representatives?.[representativeIndex];if(representative?.kind==="aggregate"){return{kind:"aggregate",representative,layerIndex:batch.layerIndex,batchIndex,primitiveIndex,distanceSquared}}const identityIndex=identityFor(batch,primitiveIndex,endpoint);const id=representative?.kind==="datum"?representative.id:projection.identities[identityIndex];return id===void 0?null:{kind:"datum",id,identityIndex,layerIndex:batch.layerIndex,batchIndex,primitiveIndex,distanceSquared}}function finalizeHits(hits,maximumHits,compare){hits.sort(compare);if(hits.length>maximumHits)hits.length=maximumHits;return Object.freeze(hits.map(hit=>Object.freeze(hit)))}function finalizeRankedHits(hits,maximumHits){hits.sort(compareRankedHits);if(hits.length>maximumHits)hits.length=maximumHits;return Object.freeze(hits.map(({hit})=>Object.freeze(hit)))}function compareRankedHits(left,right){return left.primaryDistance-right.primaryDistance||left.secondaryDistance-right.secondaryDistance||right.hit.layerIndex-left.hit.layerIndex||left.hit.primitiveIndex-right.hit.primitiveIndex}function insidePlot(projection,x,y){const plot=projection.layout?.plot??{x:0,y:0,width:projection.viewport.width,height:projection.viewport.height};return x>=plot.x&&x<=plot.x+plot.width&&y>=plot.y&&y<=plot.y+plot.height}function lowerBoundPosition(positions,count,coordinate){let low=0;let high=count;while(low<high){const middle=low+high>>>1;if(positions[middle*2]<coordinate)low=middle+1;else high=middle}return low}function upperBoundPosition(positions,count,coordinate){let low=0;let high=count;while(low<high){const middle=low+high>>>1;if(positions[middle*2]<=coordinate)low=middle+1;else high=middle}return low}function lowerBoundRecords(bounds,order,axisOffset,coordinate){let low=0;let high=order.length;while(low<high){const middle=low+high>>>1;if(recordCenter(bounds,order[middle],axisOffset)<coordinate)low=middle+1;else high=middle}return low}function upperBoundRecords(bounds,order,axisOffset,coordinate){let low=0;let high=order.length;while(low<high){const middle=low+high>>>1;if(recordCenter(bounds,order[middle],axisOffset)<=coordinate)low=middle+1;else high=middle}return low}function recordCenter(bounds,record,axisOffset){const offset=record*4+axisOffset;return(bounds[offset]+bounds[offset+2])*.5}function distanceToInterval(value,minimum,maximum){return value<minimum?minimum-value:value>maximum?value-maximum:0}function exactHit(batch,primitive,x,y,radius){const maximumDistance=radius*radius;if(batch.type==="point"){const offset2=primitive*2;const distanceSquared=squared(x-batch.positions[offset2])+squared(y-batch.positions[offset2+1]);return distanceSquared<=maximumDistance?{distanceSquared,endpoint:0}:null}if(batch.type==="polyline"){const offset2=primitive*2;const next=Math.min(offset2+2,batch.positions.length-2);return segmentDistance(x,y,batch.positions[offset2],batch.positions[offset2+1],batch.positions[next],batch.positions[next+1],maximumDistance)}if(batch.type==="rectangle")return rectangleDistance(batch.rectangles,primitive*4,x,y,maximumDistance);if(batch.type==="cell")return rectangleDistance(batch.cells,primitive*5,x,y,maximumDistance);const offset=primitive*6;const dx=x-batch.arcs[offset];const dy=y-batch.arcs[offset+1];const distance=Math.hypot(dx,dy);const inner=batch.arcs[offset+2];const outer=batch.arcs[offset+3];const angle=normalizedAngle(Math.atan2(dy,dx));const rawStart=batch.arcs[offset+4];const rawEnd=batch.arcs[offset+5];const start=normalizedAngle(rawStart);const end=normalizedAngle(rawEnd);const inAngle=rawEnd-rawStart>=Math.PI*2-1e-6||(start<=end?angle>=start&&angle<=end:angle>=start||angle<=end);if(!inAngle||distance<inner-radius||distance>outer+radius)return null;const radialDistance=distance<inner?inner-distance:distance>outer?distance-outer:0;return{distanceSquared:radialDistance*radialDistance,endpoint:0}}function segmentDistance(x,y,x1,y1,x2,y2,maximumDistance){const dx=x2-x1;const dy=y2-y1;const lengthSquared=dx*dx+dy*dy;const ratio=lengthSquared===0?0:Math.max(0,Math.min(1,((x-x1)*dx+(y-y1)*dy)/lengthSquared));const distanceSquared=squared(x-(x1+ratio*dx))+squared(y-(y1+ratio*dy));return distanceSquared<=maximumDistance?{distanceSquared,endpoint:ratio<=.5?0:1}:null}function rectangleDistance(values,offset,x,y,maximumDistance){const left=values[offset];const top=values[offset+1];const right=left+values[offset+2];const bottom=top+values[offset+3];const dx=x<left?left-x:x>right?x-right:0;const dy=y<top?top-y:y>bottom?y-bottom:0;const distanceSquared=dx*dx+dy*dy;return distanceSquared<=maximumDistance?{distanceSquared,endpoint:0}:null}function identityFor(batch,primitive,endpoint){return batch.type==="polyline"?batch.identityIndices[Math.min(batch.identityIndices.length-1,primitive+endpoint)]:batch.identityIndices[primitive]}function intersects(node,x,y,radius){return node.minimumX<=x+radius&&node.maximumX>=x-radius&&node.minimumY<=y+radius&&node.maximumY>=y-radius}function intersectsBounds(bounds,offset,x,y,radius){return bounds[offset]<=x+radius&&bounds[offset+2]>=x-radius&&bounds[offset+1]<=y+radius&&bounds[offset+3]>=y-radius}function compareHits(left,right){return left.distanceSquared-right.distanceSquared||right.layerIndex-left.layerIndex||left.primitiveIndex-right.primitiveIndex}function normalizedAngle(angle){const full=Math.PI*2;const normalized=angle%full;return normalized<0?normalized+full:normalized}function invalidQuery(message){return chartFail("construction","chart-query-invalid",message)}function squared(value){return value*value}function finite(value){return typeof value==="number"&&Number.isFinite(value)}export{DEFAULT_CHART_NEAREST_RADIUS,MAXIMUM_CHART_HITS,hitTestChartProjection,inspectChartProjectionHitTest,prepareChartProjectionQueries,tryHitTestChartProjection};
2
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/query.ts"],"mappings":"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","names":["offset"],"file":"query.js"}
@@ -0,0 +1,5 @@
1
+ import type { CoreErrorCode, Result, SectileError } from '@sectile/core';
2
+ export type ChartOwnErrorCode = 'chart-accessor-invalid' | 'chart-aggregate-invalid' | 'chart-axis-ceiling-exceeded' | 'chart-axis-duplicate' | 'chart-axis-invalid' | 'chart-axis-missing' | 'chart-controller-disposed' | 'chart-controller-invalid' | 'chart-datum-ceiling-exceeded' | 'chart-datum-duplicate' | 'chart-datum-invalid' | 'chart-datum-missing' | 'chart-definition-invalid' | 'chart-domain-invalid' | 'chart-generation-exhausted' | 'chart-interaction-invalid' | 'chart-identity-missing' | 'chart-layer-ceiling-exceeded' | 'chart-layer-duplicate' | 'chart-layer-missing' | 'chart-layout-invalid' | 'chart-model-invalid' | 'chart-patch-ceiling-exceeded' | 'chart-patch-invalid' | 'chart-profile-invalid' | 'chart-coordinate-invalid' | 'chart-coordinate-mismatch' | 'chart-projection-ceiling-exceeded' | 'chart-projection-invalid' | 'chart-query-invalid' | 'chart-scale-invalid' | 'chart-stale-generation' | 'chart-temporal-invalid' | 'chart-tick-ceiling-exceeded' | 'chart-view-invalid' | 'chart-view-transform-invalid';
3
+ export type ChartErrorCode = CoreErrorCode | ChartOwnErrorCode;
4
+ export type ChartError<Code extends ChartErrorCode = ChartErrorCode> = SectileError<Code>;
5
+ export type ChartResult<T, Code extends ChartErrorCode = ChartErrorCode> = Result<T, Code>;
package/dist/result.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=result.js.map