@@ -77,17 +77,18 @@ export function plot(options = {}) {
77
77
for ( const mark of marks ) {
78
78
if ( mark . time ) {
79
79
const time = valueof ( mark . data , mark . time ) ;
80
+ const domain = sort ( new Set ( time ) ) ;
80
81
const tkey = new Map ( ) ;
81
82
const key = mark . key
82
83
? valueof ( mark . data , mark . key )
83
84
: time . map ( ( t ) => ( tkey . set ( t , tkey . has ( t ) ? 1 + tkey . get ( t ) : 0 ) , tkey . get ( t ) ) ) ;
84
- markTimes . set ( mark , { time, key} ) ;
85
+ markTimes . set ( mark , { time, domain , key} ) ;
85
86
}
86
87
}
87
88
const timeChannels = Array . from ( markTimes , ( [ , { time} ] ) => ( { value : time } ) ) ;
88
89
const timeDomain = inferDomain ( timeChannels ) ;
89
90
const times = aggregateTimes ( timeChannels ) ;
90
- const timesIndex = new Map ( times . map ( ( d , i ) => [ d , i ] ) ) ;
91
+ const timesIndex = new Map ( times . map ( ( d , i ) => [ d , i ] ) ) ;
91
92
92
93
// Initialize the marks’ state.
93
94
for ( const mark of marks ) {
@@ -170,7 +171,7 @@ export function plot(options = {}) {
170
171
const newFacets = [ ] ;
171
172
const newTimes = [ ] ;
172
173
const newKeys = [ ] ;
173
- const { key} = markTimes . get ( mark ) ;
174
+ const { key, domain } = markTimes . get ( mark ) ;
174
175
for ( let k = 0 ; k < facets . length ; ++ k ) {
175
176
const j = Math . floor ( k / times . length ) ;
176
177
newFacets [ j ] = newFacets [ j ] ? newFacets [ j ] . concat ( facets [ k ] ) : facets [ k ] ;
@@ -182,7 +183,8 @@ export function plot(options = {}) {
182
183
state . facets = newFacets ;
183
184
markTimes . set ( mark , {
184
185
key : newKeys ,
185
- time : newTimes
186
+ time : newTimes ,
187
+ domain
186
188
} ) ;
187
189
}
188
190
}
@@ -315,13 +317,13 @@ export function plot(options = {}) {
315
317
requestAnimationFrame ( function tick ( ) {
316
318
const t = Math . max ( 0 , Math . min ( 1 , ( performance . now ( ) - startTime ) / duration ) ) ;
317
319
const currentTime = interpolateTime ( t ) ;
318
- const i0 = bisectLeft ( times , currentTime ) ;
319
- const time0 = times [ i0 - 1 ] ;
320
- const time1 = times [ i0 ] ;
321
- const timet = ( currentTime - time0 ) / ( time1 - time0 ) ;
322
320
for ( const timeMark of animateMarks ) {
323
321
const { mark, facet, interp, dimensions} = timeMark ;
324
- const { time : T , key : K } = markTimes . get ( mark ) ;
322
+ const { time : T , domain, key : K } = markTimes . get ( mark ) ;
323
+ const i0 = bisectLeft ( domain , currentTime ) ;
324
+ const time0 = domain [ i0 - 1 ] ;
325
+ const time1 = domain [ i0 ] ;
326
+ const timet = ( currentTime - time0 ) / ( time1 - time0 ) ;
325
327
interp . time = T . slice ( ) ;
326
328
const { values} = stateByMark . get ( mark ) ;
327
329
let timeNode ;
0 commit comments