-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
880 lines (813 loc) · 474 KB
/
Copy pathindex.js
File metadata and controls
880 lines (813 loc) · 474 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
import"./chunk-JXGETEPW.js";import"./chunk-4C666HHU.js";var Oe=0,ue=0,ai=performance.now();function Ln(){let e=performance.now(),t=e-ai,i=Oe,r=ue*1e3/t,n=1e3/i,o=ue;return Oe=0,ue=0,ai=e,{avg:i,real_fps:r,virtual_fps:n,num_frames:o,elapsed:t}}function Dn(e){Oe=(Oe*ue+e)/(ue+1),ue+=1}var $=new Map;async function Pn(e){return await new Promise(requestAnimationFrame),await $.get(e)?.promise}async function dt(e,t){if($.has(e)&&(await $.get(e)?.promise,$.has(e))){await $.get(e)?.promise;return}$.set(e,Promise.withResolvers());try{return await t()}finally{let i=$.get(e);$.delete(e),i?.resolve(void 0)}}var In=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Fn=In?5e6:1e7,Bn=":host{position:absolute;top:0px;left:0px;right:0px;bottom:0px;overflow:scroll;overflow-anchor:none;overscroll-behavior:none;-webkit-overflow-scrolling:touch;}div.rt-virtual-panel{position:absolute;top:0;left:0;right:0;pointer-events:none;}div.rt-scroll-table-clip{position:sticky;contain:strict;overflow-anchor:none;width:100%;height:100%;}slot{position:absolute;overflow:hidden;overflow-anchor:none;}",Nn=":host ::slotted(table){--regular-table--transform-x:0px;--regular-table--transform-y:0px;--regular-table--clip-x:0px;--regular-table--clip-y:0px;}",On="--regular-table--clip-x",Yn="--regular-table--clip-y",Hn="--regular-table--transform-x",zn="--regular-table--transform-y",Un='<div class="rt-virtual-panel"></div><div class="rt-scroll-table-clip"><slot></slot></div>',Wn=1,$n=class extends HTMLElement{f;a;i;r;G;q;_;b;p;U;s;e;t;it;st;table_model;n;T;Y;h;o;async draw(e={}){return typeof e.throttle<"u"&&!e.throttle?await li.call(this,e):await dt(this,()=>li.call(this,e))}async flush(){do await Pn(this);while(this.T)}async predraw(e,t,i={}){let{invalid_viewport:r=!0,preserve_width:n=!1,cache:o=!1,scroll_left:s=this.scrollLeft,scroll_top:a=this.scrollTop,container_height:l=t,throttle:u}=i,c=()=>Object.assign(()=>!0,{inline:!0}),d=async()=>(await this.draw({invalid_viewport:r,preserve_width:n,cache:o,throttle:u}),c());if(!this.t)return console.warn("data listener not configured"),c();let{num_columns:h,num_rows:p}=await this.j(o);if(!this.e.row_height)return await d();let f=p||0,_=h||0,g=this.K(()=>e,()=>t,()=>l);this.r=g;let m=Math.round(this.P(f)),v=Number.isFinite(g.containerHeight)?Math.min(a,Math.max(0,m-g.containerHeight)):a,b,y,A=!1,T=!1;for(let M=0;M<2;M++){let D=this.t.row_headers_length,S=this.Z(f,_,v,s),P=this.Ce(S,_);if(P===void 0)return await d();if(S.end_col=Math.min(_,P+Wn),M===0){let{invalid_row:E,invalid_column:k}=this.J(S);T=!!(this.p||k),A=T||E||r}else if(Math.floor(S.start_col)===Math.floor(b.start_col)&&Math.ceil(S.end_col)<=Math.ceil(b.end_col)){S.end_col=b.end_col,b=S;break}if(b=S,!A)break;y=await this.t.view(Math.floor(b.start_col),Math.floor(b.start_row),Math.ceil(b.end_col),Math.ceil(b.end_row));let C=y.num_row_headers??y.row_headers?.[0]?.length??0;if(C===D)break;this.t.row_headers_length=C}let x=this.t;return Object.assign(()=>{if(this.r=g,this.Q(b),this.ee(r,f,_,n),!A||y===void 0)return this.w(b),!0;let M=!0,D=()=>{M&&(this.w(b),M=!1);for(let P of this.n)P({detail:this})},S=this.table_model.draw_sync(g,x,this.U,n,b,_,y,D);return this.te(b,f,_,n,T),x===this.t&&(this.p=!1),S||this.draw({invalid_viewport:!0}),S},{inline:!1})}async j(e){e||this.table_model.Te();let t=await this.table_model.Se(this.t);return this.Y=t.num_columns||0,this.e.row_height=t.row_height||this.e.row_height,t.num_row_headers!==void 0&&(this.t.row_headers_length=t.num_row_headers),t.num_column_headers!==void 0&&(this.t.column_headers_length=t.num_column_headers),t}K(e,t,i){let r=this.i==="none"||this.i==="horizontal";return{width:this.i==="none"||this.i==="vertical"?1/0:e(),height:r?1/0:t(),containerHeight:r?1/0:i()}}ee(e,t,i,r){this.ie(t),r||this.se(e,i)}te(e,t,i,r,n){this.w(e);let o=this.e.row_height;this.table_model.header.reset_header_cache(),o!==this.e.row_height&&this.ie(t),r||this.se(n,i)}Ce(e,t){if(this.i==="none"||this.i==="vertical")return e.end_col;let{indices:i,override:r}=this.e,n=c=>r[c]??i[c],o=this.t.row_headers_length,s=0;for(let c=0;c<o;c++){let d=n(c);if(d===void 0)return;s+=d}let a=Math.floor(e.start_col),l=i[o+a]??0,u=a;for(;u<t&&s-l<=this.r.width;){let c=n(o+u);if(c===void 0)return;s+=c,u++}return u}Ee(){if(this._===void 0||this.b===void 0||!this.t||this.i==="none"||this.i==="vertical"||this.b>=(this.Y??0))return;let{indices:e,override:t}=this.e,i=this.t.row_headers_length,r=0;for(let o=0;o<i;o++)r+=e[o]||0;for(let o=this._;o<this.b;o++){let s=i+o,a=t[s]??e[s];if(a===void 0)return;r+=a}let n=e[i+this._];r-(n??0)<=this.r.width&&this.draw({invalid_viewport:!0})}xe(){if(!this.o){this.o=[document.createElement("table"),document.createElement("td")],this.o[0].style.visibility="hidden",this.o[0].style.position="absolute";let e=document.createElement("tbody"),t=document.createElement("tr");this.o[1].textContent="X",t.appendChild(this.o[1]),e.appendChild(t),this.o[0].appendChild(e)}this.appendChild(this.o[0]),this.e.row_height=this.o[1].offsetHeight,this.o[0].remove()}Le(){if(this.attachShadow({mode:"open"}),!this.shadowRoot)return;let e=new CSSStyleSheet;e.replaceSync(Bn);let t=new CSSStyleSheet;t.replaceSync(Nn),this.f=t.cssRules[0],this.shadowRoot.adoptedStyleSheets=[e,t],this.shadowRoot.innerHTML=Un;let[i,r]=this.shadowRoot.children;this.s=r,this.a=i,this.ne()}ne(){this.s&&(this.i==="both"||this.i==="vertical"?this.s.style.top="0px":this.s.style.removeProperty("top"),this.i==="both"||this.i==="horizontal"?this.s.style.left="0px":this.s.style.removeProperty("left"),this.i!=="both"?this.s.style.contain="none":this.s.style.removeProperty("contain"))}Z(e,t,i,r){let{start_row:n,end_row:o}=this.He(e,i),{start_col:s,end_col:a}=this.V(t,r);return{start_col:s,end_col:a,start_row:n,end_row:o}}J({start_col:e,end_col:t,start_row:i,end_row:r}){i=Math.floor(i),r=Math.ceil(r),e=Math.floor(e),t=Math.ceil(t);let n=this._!==e,o=this.G!==i||this.q!==r||this.b!==t;return{invalid_column:n,invalid_row:o}}Q({start_col:e,end_col:t,start_row:i,end_row:r}){this._=Math.floor(e),this.b=Math.ceil(t),this.G=Math.floor(i),this.q=Math.ceil(r)}se(e,t){if(e)if(this.i==="vertical"||this.i==="none"){let i=0;for(let r of this.e.indices)i+=r||0;this.a.style.width=i.toPrecision(10)+"px"}else{let i=this.Re(t);if(i!==0){let r=this.r.width+i+2;this.a.style.width=r.toPrecision(10)+"px"}else this.a.style.width="1px"}}ie(e){let t=this.P(e);this.a.style.height=`${t.toPrecision(10)}px`}P(e){let{row_height:t=0}=this.e,i=this.t.column_headers_length*t;return Math.min(Fn,e*t+i)}w(e){let t=(this.e.row_height||0)*(e.start_row%1)||0,i=(this.table_model.c||0)+Math.floor(e.start_col),r=(this.e.indices[i]??this.table_model.Ae())*(e.start_col%1)||0;this.f.style.setProperty(On,`${r}px`),this.f.style.setProperty(Yn,`${t}px`),this.f.style.setProperty(Hn,`${-r}px`),this.f.style.setProperty(zn,`${-t}px`)}V(e,t){if(this.i==="none"||this.i==="vertical")return{start_col:0,end_col:1/0};{let i=this.Pe(t),r=this.table_model.num_columns()||Math.min(e,Math.ceil(this.r.width/60)),n=i+r+1;return{start_col:i,end_col:n}}}He(e,t){let{height:i,containerHeight:r}=this.r,n=this.e.row_height||0,o=this.t.column_headers_length,s=Math.round(this.P(e)),a=Math.max(1,s-r),l=Math.max(Math.ceil(t),0)/a,u=i/n-o,c=Math.max(0,(e||0)-u)*l,d=Math.max(0,Math.min(c+u,e));return{start_row:c,end_row:d}}Pe(e){let t=this.t.row_headers_length,i=0,r=0,n=0;for(;r<e;){let o=this.e.indices[i+t];n=e-r,i+=1,r+=o!==void 0?o:60}return i+=n/(this.e.indices[i+t-1]||60),Math.max(0,i-1)}Ve(e){let t=0;if(this.t.row_headers_length>0)for(let n of this.e.indices.slice(0,this.t.row_headers_length))t+=n||0;let i=this.t.row_headers_length,r=e;for(;t<this.r.width&&r>=0;)r--,t+=this.e.indices[r+i]||60;return Math.min(e-1,r+1)}Re(e){let t=this.t.row_headers_length,i=this.Ve(e),r=t,n=0;for(;r<i+t;)n+=this.e.indices[r]||60,r++;if(r<this.e.indices.length){let o=0,s=this.t.row_headers_length;for(let a=0;a<s&&a<this.e.indices.length;a++)o+=this.e.indices[a]||0;n+=Math.max(0,(this.e.indices[r]||0)-(this.r.width-(o||0))||0)}return n}};async function li(e){let t=performance.now(),{invalid_viewport:i=!0,preserve_width:r=!1}=e,{num_columns:n,num_rows:o}=await this.j(e.cache);this.e.row_height||this.xe();let s=o||0,a=n||0;this.r=this.K(()=>this.s.clientWidth,()=>this.s.clientHeight,()=>this.clientHeight),this.ee(i,s,a,r);let l=this.Z(s,a,this.scrollTop,this.scrollLeft),{invalid_row:u,invalid_column:c}=this.J(l);this.Q(l);let d=this.p||c;if(d||u||i){let h=!0;await this.table_model.draw(this.r,this.t,this.U,r,l,a,async()=>{h&&(this.w(l),h=!1);for(let p of this.n)await p({detail:this})}),this.te(l,s,a,r,d),this.p=!1}else this.w(l);Dn(performance.now()-t)}var G=new WeakMap,we=new WeakMap,ui=class{e;De;table;cells;rows;constructor(e,t,i){this.e=e,this.De=t,this.table=i,this.cells=[],this.rows=[]}num_columns(){return this.S(Math.max(0,this.rows.length-1)).row_container.length}num_rows(){return this.cells.length}nt(e,t){G.set(e,t)}D(e,t){let i=we.get(e);i!==t&&(i!==void 0&&e.classList.remove(`rt-col-${i}`),e.classList.add(`rt-col-${t}`),we.set(e,t))}g(e){let t=we.get(e);t!==void 0&&(e.classList.remove(`rt-col-${t}`),we.delete(e))}M(e){if(!e)return{value:void 0};let t=G.get(e);return t||(t={value:void 0},G.set(e,t)),t}re(e,t){let{tr:i,row_container:r}=this.S(e),n=r[t];return n&&(i.removeChild(n),r.splice(t,1,void 0)),n}v(e,t){if(!(e<0||t<0))return this.cells[e]?.[t]}S(e){let t=this.rows[e];t||(t=this.rows[e]=document.createElement("tr"),this.table.appendChild(t));let i=this.cells[e];return i||(i=this.cells[e]=[]),{tr:t,row_container:i}}z(e="TD",t,i){let{tr:r,row_container:n}=this.S(t),o=n[i];if(!o)if(i<n.length){o=n[i]=document.createElement(e);let s=n.slice(i+1).find(a=>a);r.insertBefore(o,s||null)}else o=n[i]=document.createElement(e),r.appendChild(o);if(o.tagName!==e){let s=document.createElement(e);r.replaceChild(s,o),this.cells[t].splice(i,1,s),o=s}return o}oe(e){for(let t=0;t<this.rows.length;t++){let i=this.rows[t],r=this.cells[t];r.length=(Array.isArray(e)?e[t]:e)||0;let n=this.cells[t].filter(s=>s!==void 0).length,o=[];for(let s=n;s<i.children.length;s++)o.push(i.children[s]);for(let s of o)s.remove()}}E(e){e=Math.min(e,this.rows.length);let t=[];for(let i=e;i<this.table.children.length;i++)t.push(this.table.children[i]);for(let i of t)i.remove();this.rows.length=e,this.cells.length=e}},Gn=!1,Vn=class extends $n{le;ae;he;de;L;O;ce;ue;register_listeners(){this.addEventListener("mousedown",this.ze.bind(this)),this.addEventListener("scroll",this.W.bind(this),{passive:!0}),this.Oe()}async W(e){if(e.stopPropagation(),this.ce=this.scrollLeft,this.ue=this.scrollTop,this.T){this.O=!0;return}this.T=!0;let t=this.s.clientWidth,i=this.s.clientHeight,r=this.clientHeight;try{await dt(this,async()=>{do{this.O=!1;let n=await this.predraw(t,i,{invalid_viewport:!1,cache:!0,throttle:!1,container_height:r,scroll_left:this.ce,scroll_top:this.ue});n.inline||(await new Promise(requestAnimationFrame),n())}while(this.O)})}finally{this.T=!1}this.dispatchEvent(new CustomEvent("regular-table-scroll"))}Oe(){this.addEventListener("mousewheel",this.We.bind(this),{passive:!0}),Gn&&(this.addEventListener("touchmove",this.ke.bind(this)),this.addEventListener("touchstart",this.Be.bind(this),{passive:!0}))}We(e){if(!window.hasOwnProperty("safari"))return;let t=e,{clientWidth:i,clientHeight:r,scrollTop:n,scrollLeft:o}=this;t.preventDefault(),t.returnValue=!1;let s=Math.max(1,this.a.offsetHeight-r),a=Math.max(1,this.a.offsetWidth-i);this.scrollTop=Math.max(0,Math.min(s,n+t.deltaY)),this.scrollLeft=Math.max(0,Math.min(a,o+t.deltaX)),this.W(t)}ke(e){e.stopPropagation(),e.preventDefault(),e.returnValue=!1;let{clientWidth:t,clientHeight:i}=this,r=Math.max(1,this.a.offsetHeight-i),n=Math.max(1,this.a.offsetWidth-t);this.scrollTop=Math.min(r,(this.le||0)+((this.he||0)-e.touches[0].pageY)),this.scrollLeft=Math.min(n,(this.ae||0)+((this.de||0)-e.touches[0].pageX)),this.W(e)}Be(e){this.he=e.touches[0].pageY,this.de=e.touches[0].pageX,this.le=this.scrollTop,this.ae=this.scrollLeft}async Fe(e){let t=e.target,i=t.classList.contains("rt-column-resize");for(;t.tagName!=="TD"&&t.tagName!=="TH";)if(t=t.parentElement,!this.contains(t))return;let r=G.get(t);if(i&&r){e.stopImmediatePropagation(),e.shiftKey?(this.e.override={},this.e.auto=[],this.e.indices=[]):(delete this.e.override[r.size_key],this.e.auto[r.size_key]=void 0,this.e.indices[r.size_key]=void 0),this.table_model.updateColumnWidthStyles({start_row:0,end_row:0,...this.V(0,this.scrollLeft)},this.t.row_headers_length);for(let n of e.shiftKey?[this.table_model.header.cells[this.table_model.header.cells.length-1],...this.table_model.body.cells]:this.table_model.body.cells)for(let o of e.shiftKey?n:[n[r.virtual_x]])o&&(o.classList.remove("rt-cell-clip"),this.h||this.table_model.body.g(o));await this.draw({cache:!0})}}async $e(e){if(e.button!==0)return;let t=e.target,i=t.classList.contains("rt-column-resize");for(;t.tagName!=="TD"&&t.tagName!=="TH";)if(t=t.parentElement,!this.contains(t))return;let r=G.get(t);i&&r&&(this.Ne(e,t,r),e.stopImmediatePropagation())}async ze(e){let t=performance.now();this.L&&t-this.L<500?(this.L=t,await this.Fe(e)):(this.L=t,await this.$e(e))}Ne(e,t,i){let{virtual_x:r,size_key:n}=i,o=e.pageX,s=(r||0)+t.colSpan-1,a=this.table_model.header.get_column_header(s),l=this.e.indices[n||0]||0,u=d=>dt(this,async()=>await this.Ie(d,a,o,l,n||0,s)),c=()=>{document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",c);let d=this.e.override[n||0],h=this.e.indices[n||0]!==d;this.e.indices[n||0]=d,h&&this.draw({cache:!0})};document.addEventListener("mousemove",u),document.addEventListener("mouseup",c)}async Ie(e,t,i,r,n,o){await new Promise(requestAnimationFrame);let s=e.pageX-i,a=Math.max(1,r+s);if(this.e.override[n]=a,s<0)await this.draw({preserve_width:!0,throttle:!1,cache:!0});else{this.table_model.updateColumnWidthStyles({start_row:0,end_row:0,...this.V(0,this.scrollLeft)},this.t.row_headers_length);let l=(this.e.auto[n]||0)>a;t.classList.toggle("rt-cell-clip",l);for(let u of this.table_model.body.cells){let c=u[o];c&&(c.classList.toggle("rt-cell-clip",l),this.h||(l?this.table_model.body.D(c,n):this.table_model.body.g(c)))}}}},ci=new WeakMap,Xn=class extends ui{l;d;H;constructor(e,t,i,r){super(e,t,i),this.l=[],this.d=[],this.H=r}me(e,t,i){let r=this.z("TH",t,e[t]||0);e[t]+=1;let n=ci.get(r);if(n!==void 0&&n.value===i&&r.lastChild===n.resize&&r.firstChild===(i instanceof HTMLElement?i:n.span))return r;if(r.removeAttribute("colspan"),r.textContent="",n===void 0){let o=document.createElement("span");o.className="rt-column-resize",n={value:void 0,span:document.createElement("span"),resize:o},ci.set(r,n)}return i instanceof HTMLElement?r.appendChild(i):(n.span.textContent=String(i??""),r.appendChild(n.span)),r.appendChild(n.resize),n.value=i,r}Xe(e,t,i){let r=this.M(i);return this.g(i),r.column_header=e,r.value=t,r}Ge(e,t,i,r){let n=this.M(i);if(n.column_header=e,n.value=t,n.size_key=Array.isArray(r)?r[0]:r,!Array.isArray(r)||r.length<=1){this.D(i,n.size_key||0),this.H?.(i);let o=this.e.override[n.size_key||0],s=this.e.auto[n.size_key||0]||0;i.classList.toggle("rt-cell-clip",!!o&&s>o)}else this.g(i);return n}get_column_header(e){return this.z("TH",this.num_rows()-1,e)}draw(e,t,i,r,n,o,s,a,l){let u=t?.length;if(u===0)return;let c,d,h,p;a=typeof a>"u"?u-1:a;for(let f=0;f<u;f++){if(h=t[f]?t[f]:"",this.d[f]=this.d[f]||0,f<a)l&&this.l?.[f]?.[0]?.value===h?(c=this.l[f][1],this.l[f][2]+=1,i===1&&(this.l[f][0].row_header_x=Array.isArray(n)?n[0]:n)):(this.fe(f),c=this.me(this.d,f,h),d=this.Xe(t,h,c),this.l[f]=[d,c,1]);else{c=this.me(this.d,f,h),d=this.Ge(e.length>0?e:t,h,c,n),typeof p>"u"&&(p={th:c,metadata:d});for(let[_]of this.l)_.size_key=d.size_key;c.removeAttribute("colspan")}this.S(f).tr.classList.toggle("rt-autosize",f===a),c.classList.toggle("rt-group-corner",r===void 0),d&&(d.x=typeof r>"u"?r:Math.floor(r),d.column_header_y=f,d.x0=Math.floor(o),d.virtual_x=s,i===1?(d.type="corner",d.row_header_x=Array.isArray(n)?n[0]:n):(d.type="column_header",delete d.row_header_x))}return this.E(this.d.length),p=p||{th:c,metadata:d},p}fe(e){let t=this.l[e];if(!t)return;let[,i,r]=t;if(r>1){let n=String(r);i.getAttribute("colspan")!==n&&i.setAttribute("colspan",n)}else i.hasAttribute("colspan")&&i.removeAttribute("colspan")}flush_colspans(){for(let e=0;e<this.l.length;e++)this.fe(e)}clean(){this.flush_colspans(),this.oe(this.d)}reset_header_cache(){this.d=[],this.l=[]}},jn=class extends ui{h;_e(e,t,i,r,{column_name:n},{ridx_offset:o},s){let a=this.z(e,t,r),l=this.M(a);l.y=t+Math.floor(o);let u=l.size_key=s||0;e==="TD"&&(l.column_header=n);let c=this.e.override[u],d=!!c&&(this.e.auto[u]||0)>c;return a.classList.toggle("rt-cell-clip",d),this.h||d?this.D(a,u):this.g(a),l.value!==i&&(i instanceof HTMLElement?(a.textContent="",a.appendChild(i)):a.textContent=String(i??"")),l.value=i,{td:a,metadata:l}}draw(e,t,i,r=!1,n,o,s,a){let{cidx:l,column_data:u,row_headers:c,column_data_listener_metadata:d}=t,{row_height:h}=i,p,f=[],_=[],g=0,m=[],v=r?i.row_headers_length??1:1,b=(i.ridx_offset??0)%1!==0?1:0,y=!1,A=Math.floor(i.ridx_offset),T=Math.ceil(i.y1),x=Math.ceil(i.x1),M=n===void 0?n:Math.floor(n),D=o===void 0?void 0:Math.floor(o),S=Math.floor((n??0)-(o??0));for(let C=0;C<v;C++){g=0,y=!1;let E=l+C;for(let k of u){let I;if(r){let F=k,Fe=F[C],oi=f[C]||1,Be=this.v(g-oi,E),kn=this.M(Be),si=m[g]||1,Ne=this.v(g,E-si),Mn=this.M(Ne);if(a&&Ne&&(Mn.value===Fe||Fe===void 0)&&!Ne.hasAttribute("rowspan")){let K=m[g]=si+1;Ne.setAttribute("colspan",String(K)),this.re(g,E)}else if(a&&Be&&kn.value===Fe&&!Be.hasAttribute("colspan")){let K=f[C]=oi+1;Be.setAttribute("rowspan",String(K)),this.re(g,E)}else{I=this._e("TH",g,Fe,E,t,i,C);let K=I.td,Z=I.metadata;K.style.display="",K.removeAttribute("rowspan"),K.removeAttribute("colspan"),Z.type="row_header",Z.row_header=F,Z.row_header_x=C,Z.y0=A,Z.y1=T,Z.virtual_x=C,D!==void 0&&(Z.x0=D),f[C]=1,m[g]=1,_[C]=I}}else{I=this._e("TD",g,k,l,t,i,s??0);let F=I.metadata;d&&(F.user=d[g]),F.type="body",F.x=M||0,F.x1=x,F.row_header=c?.[g]||[],F.y0=A,F.y1=T,F.dx=S,F.dy=(F.y??0)-A,F.virtual_x=l,D!==void 0&&(F.x0=D),_[0]=I}if(g++,p=I?I.metadata:p,h=h||I?.td.offsetHeight,(g-b)*(h??0)>e){y=!0;break}}}let P=y?g:g+b;if(P>g){let C=this.rows[g],E=this.rows[g-1];(a&&(i.row_headers_length??0)>0||!C||!E||C.children.length!==E.children.length||C.querySelector("[colspan],[rowspan]")!==null||E.querySelector("[colspan],[rowspan]")!==null)&&(P=g)}return this.E(P),{tds:_,ridx:P,drawn_ridx:g,row_height:h}}clean({ridx:e,cidx:t,drawn_ridx:i=e}){if(this.E(e),this.oe(t),i<this.rows.length){let r=this.rows[i],n=this.rows[i-1],o=c=>c?.children[c.children.length-1],s=o(r),a=o(n),l=s&&G.get(s),u=a&&G.get(a);(!l||!u||l.x!==u.x||r.children.length!==n.children.length)&&this.E(i)}}},qn=class{e;c=0;header;body;qe(e,t){let{start_row:i=0,start_col:r=0,end_col:n=0,end_row:o=0}=e,s=this.e.indices[(this.c||0)+Math.floor(e.start_col)]??0;return{viewport_width:0,selected_id:t,ridx_offset:i,sub_cell_offset:s,x0:r,x1:n,y1:o,row_height:this.e.row_height,row_headers_length:this.c}}Ae(){let e=0,t=0;for(let i of this.e.indices)i&&(e+=i,t++);return t?e/t:60}Ue(e,t,i,r,n,o,s,a,l,u){let c=[`${t}`],d=[],h={column_name:c,cidx:0,column_data:e,row_headers:e,first_col:!0},p=Math.floor(s),f=this.body.draw(r,h,{...n,x0:0},!0,void 0,void 0,p,u),_=[];for(let m=0;m<t;m++){let v=this.header.draw(c,Array(i).fill(""),1,void 0,m,s,m,a,l);v&&_.push(v)}for(let m=0;m<_.length;m++){let{th:v}=_[m];n.viewport_width+=this.e.indices[m]||v.offsetWidth}n.row_height=n.row_height||f.row_height;let g=e[0].length;if(!o)for(let m=0;m<t;m++){let{td:v,metadata:b}=f.tds[m]||{},{th:y,metadata:A}=_[m]||{};(v||y)&&d.push([y||v,A||b])}return{cont_body:f,first_col:!1,Ye:g,last_cells:d}}je(e,t,i,r,n,o){let s=0,a=0;for(;this.e.indices.length>n+o+s+1&&a+t.viewport_width<i;)s++,a+=this.e.indices[n+o+s]||0;if(a+t.viewport_width<i){let l=Math.min(r,e.start_col+5);e.end_col=Math.max(1,Math.min(r,l))}else e.end_col=Math.max(1,Math.min(r,e.start_col+s))}Ke(e,t,i,r,n,o,s,a,l,u){let c=t.column_headers?.[e]||[],d=t.data[e],h=t.metadata?.[e],p={column_name:c,cidx:i,column_data:d,column_data_listener_metadata:h,row_headers:t.row_headers,first_col:s},f=e+r,_=i+Math.floor(r),g=this.header.draw(c,c,void 0,f,_,r,i,a,l),m=this.body.draw(n,p,o,!1,f,r,_,u);return{cont_head:g,cont_body:m}}async Ze(e,t,i,r,n,o,s,a,l){let u=Math.max(r+Math.floor(l),0),c=structuredClone(e);c.start_col=u,this.je(c,n,o,s,a,l);let d=await t(Math.floor(c.start_col),Math.floor(c.start_row),Math.ceil(c.end_col),Math.ceil(c.end_row)),h,p;if(typeof d.column_header_merge_depth<"u"&&(h=d.column_header_merge_depth),typeof d.merge_headers<"u"&&(p=d.merge_headers),d.data.length===0)return{column_header_merge_depth:h,merge_headers:p};e.end_col=c.start_col+d.data.length;for(let f=0;f<d.data.length;f++)i.data[r+f]=d.data[f],d.metadata&&i.metadata&&(i.metadata[r+f]=d.metadata[f]),i.column_headers&&d.column_headers?.[f]&&(i.column_headers[r+f]=d.column_headers[f]);return{column_header_merge_depth:h,merge_headers:p}}R(e,t){this.body.clean({ridx:e?.ridx||0,cidx:t,drawn_ridx:e?.drawn_ridx??e?.ridx??0}),this.header.clean()}},Kn=0,Zn=class extends qn{table;u;k=new Map;A=new Map;B;C;Je;m;be=new WeakSet;pe={};F=!1;we;constructor(e,t,i){super(),this.e=t,this.clear(i);let[r]=i.children,[n,o]=r.children;this.table=r,this.B=`rt-scope-${Kn++}`,this.table.classList.add(this.B),this.m=new ResizeObserver(this.Qe.bind(this)),this.header=new Xn(t,e,n,s=>this.H(s)),this.body=new jn(t,e,o)}dispose(){this.m?.disconnect()}H(e){!this.m||this.be.has(e)||(this.be.add(e),this.m.observe(e))}Qe(e){if(this.F){for(let r of e)this.m.unobserve(r.target),this.m.observe(r.target);return}let t=this.table.currentCSSZoom??1,i=[];for(let r of e){let n=we.get(r.target);if(n===void 0||this.e.override[n]!==void 0)continue;let o=r.target.getBoundingClientRect().width/t;o&&this.e.indices[n]!==o&&i.push([n,o])}if(i.length>0){this.ge();for(let[r,n]of i)this.e.indices[r]=n,this.e.auto[r]=n,this.$(r);this.we?.()}}num_columns(){return this.header.num_columns()}clear(e){e.innerHTML='<table cellspacing="0"><thead></thead><tbody></tbody></table>'}N(e){for(let[,t]of e){let i=t?.size_key;if(i===void 0)return!0;let r=this.e.override[i];if(r!==void 0){if(this.pe[i]!==r)return!0}else if(!this.e.indices[i])return!0}return!1}autosize_cells(e,t){let i=this.table.currentCSSZoom??1,r=[];for(let[n,o]of e){let s=n.getBoundingClientRect();r.push({cell:n,metadata:o,box:s})}for(let{metadata:n,box:o}of r)if(this.e.row_height=t??Math.max(10,Math.min(this.e.row_height??o.height/i,o.height/i)),n?.size_key!==void 0){this.e.indices[n.size_key]=o.width/i;let s=this.e.override[n.size_key];o.width/i&&s===void 0&&(this.e.auto[n.size_key]=o.width/i),s!==void 0&&(this.pe[n.size_key]=s)}}updateColumnWidthStyles(e,t){if(!this.ge())return;let i;for(i=0;i<t;i++)this.$(i);let r=Math.floor(e.start_col);for(let n=i;n<i+(Math.floor(e.end_col)-r);n++)this.$(n+r)}$(e){let t=this.e.override[e],i=this.e.auto[e];t!==void 0?this.Me(e,t,t):i!==void 0?this.Me(e,i,void 0):this.et(e)}ge(){let e=this.table.getRootNode();if(!(!e||!e.adoptedStyleSheets))return this.u||(this.u=new CSSStyleSheet),e.adoptedStyleSheets.includes(this.u)||(e.adoptedStyleSheets=[...e.adoptedStyleSheets,this.u]),this.u}tt(e){let t=this.k.get(e);if(t)return t;let i=this.u;if(!i)return;let r=i.cssRules.length;return i.insertRule(`.${this.B} .rt-col-${e}{}`,r),t=i.cssRules[r],this.k.set(e,t),t}Me(e,t,i){let r=i===void 0?`${t}`:`${t}|${i}`;if(this.A.get(e)===r)return;let n=this.tt(e);n&&(n.style.minWidth=`${t}px`,i===void 0?n.style.removeProperty("max-width"):n.style.maxWidth=`${i}px`,this.A.set(e,r))}et(e){if(this.A.get(e)==="")return;let t=this.k.get(e);t&&(t.style.removeProperty("min-width"),t.style.removeProperty("max-width")),this.A.set(e,"")}async Se(e){return this.C?this.C:await e.view(0,0,0,0)}Te(){this.C=void 0,this.Je=void 0}async draw(e,t,i,r,n,o,s){let a=this.C=await t.view(Math.floor(n.start_col),Math.floor(n.start_row),Math.ceil(n.end_col),Math.ceil(n.end_row)),l=this.ve(e,t,i,r,n,o,a);this.F=!0;try{let u=l.next();for(;!u.done;)await s(),u=l.next(u.value==="style"?void 0:await u.value.fetch())}finally{this.F=!1,l.return(!1)}}draw_sync(e,t,i,r,n,o,s,a){this.C=s;let l=this.ve(e,t,i,r,n,o,s),u=l.next();for(;!u.done;)u.value==="style"&&a(),u=l.next();return u.value}*ve(e,t,i,r,n,o,s){let{width:a,height:l}=e,{column_header_merge_depth:u,merge_headers:c="both"}=s,d=c==="both"||c==="row",h=c==="both"||c==="column",p=n.start_col??0;if(s.row_headers){let T=0;for(let x of s.row_headers)x.length>T&&(T=x.length);this.c=T;for(let x=0;x<s.row_headers.length;x++)s.row_headers[x].length=this.c||0}t.row_headers_length=s.num_row_headers??s.row_headers?.[0]?.length??0,t.column_headers_length=s.num_column_headers??s.column_headers?.[0]?.length??0;let{view:f,row_headers_length:_,column_headers_length:g}=t,m=this.qe(n,i),v,b=0,y=[],A=!0;if(s.row_headers?.length){let T=this.Ue(s.row_headers,_,g,l,m,r,p,u,h,d);v=T.cont_body,A=T.first_col,b=T.Ye,y=T.last_cells}try{let T=0,x=0,M=o-n.start_col,D=this.e.indices.some(Boolean);for(;T<M;){if(!s.data[T]){this.header.flush_colspans(),this.updateColumnWidthStyles(n,t.row_headers_length);let E=yield{fetch:()=>this.Ze(n,f,s,T,m,a,o,b,p)};if(E?.column_header_merge_depth!==void 0&&(u=E.column_header_merge_depth),E?.merge_headers!==void 0&&(c=E.merge_headers),!s.data[T])return this.R(v,b),this.updateColumnWidthStyles(n,t.row_headers_length),yield"style",this.N(y)&&this.autosize_cells(y,this.e.row_height),this.I(m,a)}let{cont_head:S,cont_body:P}=this.Ke(T,s,b,p,l,m,A,u,h,d);if(v=P,A=!1,!r)for(let{td:E,metadata:k}of v.tds)y.push([S?.th||E,S?.metadata||k]);let C=this.e.indices[b+Math.floor(p)]||(D?x:0);if(!C){if(C=S?.th?.offsetWidth||0,!C)for(let{td:E}of v.tds)C+=E?.offsetWidth||0;x=C}if(m.viewport_width+=C,m.row_height=m.row_height||v.row_height,b++,T++,this.I(m,a)){if(this.R(v,b),this.updateColumnWidthStyles(n,t.row_headers_length),yield"style",r)return!0;m.viewport_width=0,this.N(y)&&this.autosize_cells(y,this.e.row_height),x=0;let E=m.row_headers_length||0;for(let k=0;k<y.length;k++){let I=k<E?k:Math.floor(p)+k;m.viewport_width+=this.e.indices[I]||0}if(this.I(m,a))return!0}}return this.R(v,b),this.updateColumnWidthStyles(n,t.row_headers_length),yield"style",this.N(y)&&this.autosize_cells(y,this.e.row_height),!0}finally{this.R(v,b)}}I(e,t){return e.viewport_width-e.sub_cell_offset>t}},Qn=["both","horizontal","vertical","none"],Jn=class extends Vn{X;constructor(){super(),this.e={auto:[],override:{},indices:[]},this.n=[],this.X=!1}connectedCallback(){this.X||(this.Le(),this.register_listeners(),this.setAttribute("tabindex","0"),this.X=!0,this.ye())}ye(){this.table_model?.dispose(),this.table_model=new Zn(this.s,this.e,this),this.table_model.we=()=>this.Ee(),this.table_model.body.h=this.h}resetAutoSize(e){(!e||e.auto)&&(this.e.auto=[]),(!e||e.override)&&(this.e.override={}),(!e||e.indices)&&(this.e.indices=[]),(!e||e.row_height)&&(this.e.row_height=void 0)}saveColumnSizes(){return structuredClone(this.e.override)}restoreColumnSizes(e){this.e.override=structuredClone(e)}clear(){this.ye()}addStyleListener(e){this.n.push(e);let t=!0;return()=>{if(!t)return;t=!1,this.n=this.n.slice();let i=this.n.indexOf(e);this.n.splice(i,1)}}removeStyleListener(e){let t=this.n.length;this.n=this.n.filter(i=>i!==e),console.assert(this.n.length===t-1,"No listener found")}getMeta(e){if(e!==void 0){if(e instanceof HTMLElement)return G.get(e);if("row_header_x"in e&&e.row_header_x&&e.row_header_x>=0){if(e.row_header_x<this.t.row_headers_length){let t=this.table_model.body.v(e.y,e.row_header_x);return this.getMeta(t)}}else if("column_header_y"in e&&e.column_header_y>=0){if(e.column_header_y<this.t.column_headers_length){let t=this.table_model.header.v(e.column_header_y,e.x);return this.getMeta(t)}}else if("dx"in e)return this.getMeta(this.table_model.body.v(e.dy,e.dx+(this.table_model.c||0)))}}getDrawFPS(){return Ln()}async scrollToCell(e,t){if(!this.t){console.warn("data listener not configured");return}let i=this.e.row_height||0;this.scrollTop=Math.ceil(i*t);let r=0;for(;e>0;)e--,r+=this.e.indices[e+this.t.row_headers_length]||60;this.scrollLeft=Math.ceil(r),await new Promise(requestAnimationFrame),await this.flush()}setDataListener(e,{virtual_mode:t="both",preserve_state:i=!1,column_classes:r=!1}={}){console.assert(Qn.indexOf(t)>-1,`Unknown virtual_mode ${t}; valid options are "both" (default), "horizontal", "vertical" or "none"`);let n=this.i!==t;i?(console.assert(!n,"preserve_state called with modified virtual_mode"),this.t.view=e):(this.i=t,this.h=r,this.table_model&&(this.table_model.body.h=r),this.p=!0,this.t={view:e,row_headers_length:0,column_headers_length:0},n&&this.ne())}};document.createElement("regular-table").constructor===HTMLElement&&window.customElements.define("regular-table",Jn);var Q=class{selected;row;column_names;removeConfigs;insertConfigs;panel;constructor(t,i,r,n,o,s){this.selected=t,this.row=i,this.column_names=r,this.removeConfigs=n,this.insertConfigs=o,this.panel=s}get removeFilters(){return this.removeConfigs.flatMap(t=>t.filter??[])}get insertFilters(){return this.insertConfigs.flatMap(t=>t.filter??[])}};function hi(e){return e&&!("format"in e)?e:void 0}var eo={float:{style:"decimal",minimumFractionDigits:2,maximumFractionDigits:2}},di={dateStyle:"short",timeStyle:"medium"},to={dateStyle:"short"};function pi(e,t){let i=t??eo[e]??{};return new Intl.NumberFormat(navigator.languages,i)}function fi(e){if(!e||!("format"in e)){let i=hi(e),r={timeZone:i?.timeZone??void 0,dateStyle:i?.dateStyle==="disabled"?void 0:i?.dateStyle??di.dateStyle,timeStyle:i?.timeStyle==="disabled"?void 0:i?.timeStyle??di.timeStyle};return new Intl.DateTimeFormat(navigator.languages,r)}let t={timeZone:e.timeZone??void 0,hour12:e.hour12??!0,fractionalSecondDigits:e.fractionalSecondDigits};return e.year!=="disabled"&&(t.year=e.year??"2-digit"),e.month!=="disabled"&&(t.month=e.month??"numeric"),e.day!=="disabled"&&(t.day=e.day??"numeric"),e.weekday&&e.weekday!=="disabled"&&(t.weekday=e.weekday),e.hour!=="disabled"&&(t.hour=e.hour??"numeric"),e.minute!=="disabled"&&(t.minute=e.minute??"numeric"),e.second!=="disabled"&&(t.second=e.second??"numeric"),new Intl.DateTimeFormat(navigator.languages,t)}function mi(e){let t=hi(e),i={timeZone:"utc",dateStyle:t?.dateStyle==="disabled"?void 0:t?.dateStyle??to.dateStyle};return new Intl.DateTimeFormat(navigator.languages,i)}function gi(e){return e.split("|").at(-1)??e}function Ue(e,t){return t.type==="body"||t.type==="column_header"||t.type==="corner"?e._column_types[t.x]:e._row_header_types[(t.row_header_x??0)-1]}var U=Symbol("Perspective Column Config");function fe(e,t,i=!1){let r=e._config.group_by.length===0&&e._config.split_by.length===0,n=i||e._edit_mode==="EDIT";return r&&n}var io=/^__(?:ROW_PATH(?:_\d+)?|ID|GROUPING_ID)__$/;function mt(e){return io.test(e)}var ro=class{format(e){return e?"true":"false"}},no=class{_formatters;constructor(){this._formatters=new Map}create_datetime_formatter(e,t){return fi(t.date_format)}create_date_formatter(e,t){return mi(t.date_format)}create_number_formatter(e,t){return pi(e,t.number_format)}create_boolean_formatter(e,t){return new ro}get(e,t){let i=[e,...Object.values(t.date_format??{}),...Object.values(t.number_format??{})].join("-");return this._formatters.has(i)||(e==="date"?this._formatters.set(i,this.create_date_formatter(e,t)):e==="datetime"?this._formatters.set(i,this.create_datetime_formatter(e,t)):e==="integer"||e==="float"?this._formatters.set(i,this.create_number_formatter(e,t)):e==="boolean"?this._formatters.set(i,this.create_boolean_formatter(e,t)):this._formatters.set(i,!1)),this._formatters.get(i)}},Mi=new no;function Li(e,t){return Mi.get(e,t)}function We(e,t,i={},r=!1){if(t===null)return null;let n=r&&this._table_schema[e]||this._schema[e]||this._window_schema?.[e]||"string",o=i[e]||{};if((n==="integer"||n==="float")&&!r&&(o?.number_fg_mode==="bar"||o?.number_fg_mode==="label-bar"))return"";if(o?.format==="link"&&n==="string"){let s=document.createElement("a");return s.setAttribute("href",t),s.setAttribute("target","_blank"),s.textContent=t,s}else if(o?.format==="bold"&&n==="string"){let s=document.createElement("b");return s.textContent=t,s}else if(o?.format==="italics"&&n==="string"){let s=document.createElement("i");return s.textContent=t,s}else{let s=Mi.get(n,o);return s?s.format(t):String(t)}}function*oo(e=[],t,i){let r=i[U]||{};for(let n of e){let o=["TOTAL",...n],s=o[o.length-1],a=o.slice(0,o.length-1).fill(""),l=We.call(this,t[a.length-1],s,r,!0);l instanceof HTMLElement?a=a.concat(l):a=a.concat({toString:()=>String(l??"")}),a.length=t.length+1,yield a}}function*so(e=[],t,i){let r=i[U]||{};for(let n of e)yield n.map((o,s)=>We.call(this,t[s],o,r,!0))}function*ao(e=[],t,i){let r=i[U]||{};for(let n of e){let o=[""];for(let s in n)o.push(We.call(this,t[s],n[s],r,!0));yield n}}function lo(e){let t,i,r,n,o;return async function(s,a,l,u,c){let d={},h={start_row:l,start_col:a,end_row:c,end_col:u,id:!0},p=null;if(u-a>0&&c-l>0){this._is_old_viewport=this._last_window?.start_row===l&&this._last_window?.end_row===c&&this._last_window?.start_col===a&&this._last_window?.end_col===u;let[M,D]=await Promise.all([this._view.to_columns_string(h),this._view.num_columns()]);p=D,d=JSON.parse(M);let S=Object.keys(d).filter(C=>!mt(C)),P=!1;for(let C=0;C<S.length;C++)this._column_paths[h.start_col+C]!==S[C]&&(P=!0,this._column_paths[h.start_col+C]=S[C]);if(P){let[C,E]=await Promise.all([this._view.schema(),this._view.expression_schema()]);this._schema={...C,...E};for(let k=0;k<S.length;k++){let I=S[k].split("|"),F=I[Math.min(this._config.split_by.length,I.length-1)];this._is_editable[k+h.start_col]=!!this._table_schema[F],this._column_types[k+h.start_col]=this._schema[F]}}this._last_window=h,this._ids=d.__ID__||Array(c-l).fill(null).map((C,E)=>[E+l]),this._reverse_columns=this._column_paths.slice(a,u).reduce((C,E,k)=>(C.set(E,k),C),new Map),this._reverse_ids=this._ids?.reduce((C,E,k)=>(C.set(E?.join("|"),k),C),new Map)}else p=await this._view.num_columns();let f=[],_=[],g=[],m=[],v=e.hasAttribute("settings")&&(this._panel===void 0||e.getActivePanel()===this._panel);for(let M=a;M<Math.min(u,this._column_paths.length);++M){let D=this._column_paths[M],S=D.split("|");if(S.length<this._config.split_by.length+1){let E=S.pop(),k="\u200B".repeat(S.length+1);for(;S.length<this._config.split_by.length;)S.push(k);S.push(E)}let P=d[D]||new Array(c-l).fill(null),C=Math.min(s[U]?.[S[this._config.split_by.length]]?.aggregate_depth||0,this._config.group_by.length);f.push(P.map((E,k)=>(d?.__ROW_PATH__?.[k]?.length??0)<C?"":We.call(this,S[this._config.split_by.length],E,s[U]||{}))),_.push(P),v&&S.push(""),g.push(S),m.push(D)}let b=u-a>0&&c-l>0;b&&(this.last_column_paths=i,this.last_meta=t,this.last_ids=r,this.last_reverse_ids=n,this.last_reverse_columns=o,i=m,t=_,r=this._ids,n=this._reverse_ids,o=this._reverse_columns);let y=d.__ROW_PATH__!==void 0,A=this._config.group_rollup_mode==="flat",T=Array.from((y?A?so:oo:ao).call(this,d.__ROW_PATH__,this._config.group_by,s)),x=b?T[0]?.length:co(this._config);return{num_column_headers:this._config.split_by.length+(v?2:1),num_row_headers:x,num_rows:this._num_rows,num_columns:p,row_headers:T,column_headers:g,data:f,metadata:_,column_header_merge_depth:Math.max(0,this._config.split_by.length)}}}function co(e){return e.group_rollup_mode==="flat"?e.group_by.length:e.group_rollup_mode==="total"||e.group_by.length===0?0:e.group_by.length+1}var _i=new Map,de=null;function yt(e){let t=e.startsWith("#")?e.slice(1):e;if(t.length===3||t.length===4){let i=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),n=parseInt(t[2]+t[2],16);if(!isNaN(i)&&!isNaN(r)&&!isNaN(n))return[i,r,n]}else if(t.length===6||t.length===8){let i=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),n=parseInt(t.slice(4,6),16);if(!isNaN(i)&&!isNaN(r)&&!isNaN(n))return[i,r,n]}return null}function Di(e){let t=e.match(/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)/i);return t?[Math.round(parseFloat(t[1])),Math.round(parseFloat(t[2])),Math.round(parseFloat(t[3]))]:null}function uo(e){if(!de){let i=document.createElement("canvas");i.width=i.height=1,de=i.getContext("2d")}if(!de)return[0,0,0];de.fillStyle="#000",de.fillStyle=e;let t=de.fillStyle;return yt(t)??Di(t)??[0,0,0]}function me(e){let t=e.trim(),i=_i.get(t);if(i)return i;let r=yt(t)??Di(t)??uo(t);return _i.set(t,r),r}function ht(e){return Math.max(0,Math.min(255,Math.round(e))).toString(16).padStart(2,"0")}function te([e,t,i]){return`#${ht(e)}${ht(t)}${ht(i)}`}function ho(e,t){if(e.length===0)return[0,0,0];if(t<=e[0].offset)return e[0].rgb;let i=e[e.length-1];if(t>=i.offset)return i.rgb;for(let r=0;r+1<e.length;r++){let n=e[r],o=e[r+1];if(t>o.offset)continue;let s=o.offset-n.offset,a=s>0?(t-n.offset)/s:0;return[n.rgb[0]+(o.rgb[0]-n.rgb[0])*a,n.rgb[1]+(o.rgb[1]-n.rgb[1])*a,n.rgb[2]+(o.rgb[2]-n.rgb[2])*a]}return i.rgb}function po([e,t,i]){let r=e/255,n=t/255,o=i/255,s=Math.max(r,n,o),a=Math.min(r,n,o),l=(s+a)/2,u=s-a,c=0,d=0;return u!==0&&(d=l>.5?u/(2-s-a):u/(s+a),s===r?c=((n-o)/u+(n<o?6:0))*60:s===n?c=((o-r)/u+2)*60:c=((r-n)/u+4)*60),[c,d,l]}function bi([e,t,i]){let r=(e%360+360)%360/360;if(t===0){let a=Math.round(i*255);return[a,a,a]}let n=i<.5?i*(1+t):i+t-i*t,o=2*i-n,s=a=>(a<0&&(a+=1),a>1&&(a-=1),a<1/6?o+(n-o)*6*a:a<1/2?n:a<2/3?o+(n-o)*(2/3-a)*6:o);return[Math.round(s(r+1/3)*255),Math.round(s(r)*255),Math.round(s(r-1/3)*255)]}function fo(e,t,i=.5){return[Math.round(Math.sqrt(e[0]*e[0]*(1-i)+t[0]*t[0]*i)),Math.round(Math.sqrt(e[1]*e[1]*(1-i)+t[1]*t[1]*i)),Math.round(Math.sqrt(e[2]*e[2]*(1-i)+t[2]*t[2]*i))]}function yi(e,t){return te(fo(me(e),[t[0],t[1],t[2]],.5))}function He([e,t,i,r],n=[255,255,255]){function o(s,a){return((1-r)*(n[s]/255)+r*(a/255))*255}return[o(0,e),o(1,t),o(2,i)]}function Ce([e,t,i]){return Math.sqrt(e*e*.299+t*t*.587+i*i*.114)>130?"#161616":"#ffffff"}function mo(e){let t=e.trim();if(t.startsWith("#"))return/^#[0-9a-f]+$/i.test(t)?yt(t):null;let i=t.match(/^rgba?\(([^)]*)\)$/i);if(!i)return null;let r=i[1].split("/")[0].split(/[\s,]+/).filter(l=>l.length>0);if(r.length<3||r.length>4)return null;let n=l=>{let u=l.endsWith("%"),c=parseFloat(u?l.slice(0,-1):l);return isFinite(c)?Math.max(0,Math.min(255,Math.round(u?c/100*255:c))):null},o=n(r[0]),s=n(r[1]),a=n(r[2]);return o===null||s===null||a===null?null:[o,s,a]}function Pi(e){let t=e.trim().match(/^linear-gradient\s*\((.*)\)$/is);if(!t)return null;let i=t[1],r=[],n=0,o=0;for(let a=0;a<i.length;a++){let l=i[a];l==="("?n++:l===")"?n--:l===","&&n===0&&(r.push(i.substring(o,a)),o=a+1)}r.push(i.substring(o));let s=[];for(let a=0;a<r.length;a++){let l=r[a].trim();if(!l)return null;let u=l.toLowerCase();if(a===0&&(u.startsWith("to ")||/^[-\d.]+(deg|rad|grad|turn)$/.test(u)))continue;let c=l.match(/\s([^\s)]+)$/),d=l,h=null;if(c){let f=c[1];if(f.endsWith("%")){let _=parseFloat(f.slice(0,-1));if(!isFinite(_))return null;d=l.substring(0,c.index).trim(),h=_/100}else if(/^[-\d.]/.test(f))return null}let p=mo(d);if(!p)return null;s.push([p,h])}return s}function go(e){let t=Pi(e);if(!t||t.length<2)return null;let i=t.map(([,o])=>o),r=i.length-1;i[0]===null&&(i[0]=0),i[r]===null&&(i[r]=1);for(let o=1;o<r;o++){if(i[o]!==null)continue;let s=o+1;for(;i[s]===null;)s++;let a=i[o-1],l=i[s],u=s-(o-1);for(let c=o;c<s;c++)i[c]=a+(c-(o-1))/u*(l-a);o=s-1}let n=t.map(([o],s)=>({rgb:o,offset:Math.max(0,Math.min(1,i[s]))}));return n.sort((o,s)=>o.offset-s.offset),n}function _o(e){let t=Pi(e);if(!t||t.length===0)return null;let i=[];for(let[r,n]of t){if(n!==null)return null;i.push(r)}return i}function pt(e){return`linear-gradient(to right, ${[...e].sort((t,i)=>t.offset-i.offset).map(t=>{let i=Math.round(Math.max(0,Math.min(1,t.offset))*1e3)/10;return`${t.color} ${i}%`}).join(", ")})`}function bo(e){return`linear-gradient(to right, ${e.join(", ")})`}function yo(e){let[t,i,r]=po(e),[n,o,s]=e,[a,l,u]=bi([t-15,i,r]),[c,d,h]=bi([t+15,i,r]);return`linear-gradient(to right top,rgb(${a},${l},${u}),rgb(${n},${o},${s}) 50%,rgb(${c},${d},${h}))`}function J(e){let t=me(e),i=yo(t);return[e,t[0],t[1],t[2],i,`rgba(${t[0]},${t[1]},${t[2]},1)`,`rgba(${t[0]},${t[1]},${t[2]},0)`]}var vo=new Set(["sum","avg","stddev","var","diff","rate","ema"]);function xo(e,t,i){return e==="count"?"integer":vo.has(e)?"float":i[t]??"string"}function ft(e,t){if(e.length!==t.length)return!0;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!0;return!1}function vi(e,t){if(e.length!==t.length)return!0;for(let i=0;i<e.length;i++){if(e[i].length!==t[i].length)return!0;for(let r=0;r<e[i].length;r++)if(e[i][r]!==t[i][r])return!0}return!1}function pe(e,t,i){let r=window.getComputedStyle(e).getPropertyValue(t).trim();return r.length>0?r:i}function wo(e,t){let i=o=>{let s=[];for(let a=1;;a++){let l=pe(e,`${o}${a}--color`,"");if(!l)break;s.push(te(me(l)))}return s},r=i("--psp-datagrid--series-");if(r.length>0)return r;let n=i("--psp-charts--series-");return n.length>0?n:[te(me(t))]}function Ii(e){let t=pe(e,"--psp-theme-name",""),i=me(pe(e,"--psp--background-color","#FFFFFF")),r=J(pe(e,"--psp-datagrid--pos-cell--color","#338DCD")),n=J(pe(e,"--psp-datagrid--neg-cell--color","#FF5942")),o=J(yi(r[0],i)),s=J(yi(n[0],i)),a=J(pe(e,"--psp-active--color","#ff0000")),l=wo(e,a[0]),u=[{rgb:[s[1],s[2],s[3]],offset:0},{rgb:i,offset:.5},{rgb:[o[1],o[2],o[3]],offset:1}];return{_theme:t,_plugin_background:i,_color:a,_pos_fg_color:r,_neg_fg_color:n,_pos_bg_color:o,_neg_bg_color:s,_default_bg_color_stops:u,_series_palette:l}}async function xi(e,t,i,r={}){let n=await i.get_config(),o=Ii(e);if(this?.model?._config){let y=this.model._config,A=ft(y.group_by,n.group_by),T=(y.group_by.length===0||n.group_by.length===0)&&A,x=ft(y.split_by,n.split_by),M=ft(y.columns,n.columns),D=vi(y.filter,n.filter),S=vi(y.sort,n.sort),P=y.group_rollup_mode!==n.group_rollup_mode,C=y.split_rollup_mode!==n.split_rollup_mode,E=this.model._theme!==o._theme;this._reset_scroll_top=A,this._reset_scroll_left=x,this._reset_select=A||x||D||S||M,this._reset_column_size=P||C||x||A||M||E||T}let s=this.getAttribute("slot")??void 0,[a,l,u,c,d]=await Promise.all([t.schema(),i.num_rows(),i.schema(),i.expression_schema(),this.parentElement.getEditPort({panel:s})]),h={...u,...c},p={...a,...c},f=Object.fromEntries(Object.entries(n.windows??{}).map(([y,A])=>[y,xo(A.aggregate,A.column,p)])),_=[],g=[],m=[],v=this._edit_mode||"READ_ONLY";v==="SELECT_ROW_TREE"&&n.group_by.length===0?(v="READ_ONLY",this._edit_mode=v):v==="SELECT_ROW_TREE"&&n.group_rollup_mode==="flat"&&(v="SELECT_ROW",this._edit_mode=v),this._edit_button!==void 0&&(this._edit_button.dataset.editMode=v);let b=Object.assign(r,{_panel:s,_edit_port:d,_view:i,_table:t,_table_schema:p,_config:n,_num_rows:l,_schema:h,_window_schema:f,_ids:[],...o,_column_paths:_,_column_types:m,_is_editable:g,_edit_mode:v,_selection_state:{selected_areas:[],dirty:!1},_row_header_types:n.group_by.map(y=>p[y]??f[y]),_series_color_map:new Map,_series_color_seed:new Map});return e.setDataListener(lo(this.parentElement).bind(b,e),{virtual_mode:window.getComputedStyle(e).getPropertyValue("--datagrid-virtual-mode")?.trim()||"both",column_classes:!0}),b}var Ee=["READ_ONLY","EDIT","SELECT_ROW","SELECT_COLUMN","SELECT_REGION","SELECT_ROW_TREE"];function Eo(e){return e?e._config.group_by.length>0&&e._config.group_rollup_mode!=="flat":!1}function gt(e,t=!0){if(typeof e>"u"){let r=Ee.indexOf(this._edit_mode);do r=(r+1)%Ee.length;while(Ee[r]==="SELECT_ROW_TREE"&&!Eo(this.model));e=Ee[r]}let i=this.getAttribute("slot")??void 0;this.parentElement?.setSelection?.(void 0,{panel:i}),this._edit_mode=e,this.model&&(this.model._edit_mode=e,this.model._tree_selection_id=void 0,this.model._selection_state={selected_areas:[],dirty:!0}),t&&this.parentElement?.restore?.({plugin_config:{edit_mode:e}},{panel:i}),this._edit_button!==void 0&&(this._edit_button.dataset.editMode=e)}function wi(e){typeof e>"u"&&(e=!this._is_scroll_lock),this._is_scroll_lock=e,this.classList.toggle("sub-cell-scroll-disabled",e),this._scroll_lock!==void 0&&this._scroll_lock.classList.toggle("lock-scroll",e)}function _t(e,t=!1){if(t&&(this._cached_column_sizes=e),!this._initialized)return;let i=this.regular_table,r={...i.saveColumnSizes()},{group_by:n}=this.model._config,o=n?.length>0?n.length+1:0;for(let s of Object.keys(e))if(s==="__ROW_PATH__")r[o-1]=e[s];else{let a=this.model._column_paths.indexOf(s);if(a===-1)continue;r[a+o]=e[s]}i.restoreColumnSizes(r)}function Fi(){if(!this._initialized)return{};if(this._cached_column_sizes){let n=this._cached_column_sizes;return this._cached_column_sizes=void 0,n}let e=this.regular_table.saveColumnSizes(),{group_by:t}=this.model._config,i=t?.length>0?t.length+1:0,r={};for(let n of Object.keys(e)){let o=Number(n);if(e[o]!==void 0){let s=o-i;s>-1?r[this.model._column_paths[s]]=e[o]:s===-1&&(r.__ROW_PATH__=e[o])}}return r}var Ye={top:"none",right:"none",bottom:"none",left:"none"};function bt(e,t){let i=e.split("|");return i.slice(0,Math.min(t,i.length-1))}function Co(e,t,i){let r=e[i];if(r===void 0)return null;if(i+1>=e.length)return 0;let n=e[i+1];if(n===void 0)return null;let o=bt(r,t),s=bt(n,t),a=0;for(;a<o.length&&a<s.length&&o[a]===s[a];)a++;return a===o.length&&a===s.length?t:a}function So(e,t,i,r){let n=e[i];return n===void 0?!1:r<bt(n,t).length}function Bi(e){if(e.single_header_row||e.split_by_len===0)return Ye;if(e.is_corner)return e.corner_needs_border?{...Ye,right:e.y===0&&e.row_kind==="group"?"miter-start":e.is_last_header_row?"miter-end":"full"}:Ye;if(e.x===void 0)return Ye;let t=e.x+e.colspan-1,i=Co(e.paths,e.split_by_len,t),r=t>=e.paths.length-1,n="none";i!==null&&(e.row_kind==="group"?i<=e.y&&(n=i===e.y?"miter-start":"full"):(i<e.split_by_len||r)&&(n=e.is_last_header_row?"miter-end":"full"));let o=e.row_kind==="group"&&So(e.paths,e.split_by_len,e.x,e.y)?"miter-both":"none";return{top:"none",right:n,bottom:o,left:"none"}}var Ni={top:{full:"psp-b-t","miter-start":"psp-b-t-ml","miter-end":"psp-b-t-mr","miter-both":"psp-b-t-mlr"},right:{full:"psp-b-r","miter-start":"psp-b-r-mt","miter-end":"psp-b-r-mb","miter-both":"psp-b-r-mtb"},bottom:{full:"psp-b-b","miter-start":"psp-b-b-ml","miter-end":"psp-b-b-mr","miter-both":"psp-b-b-mlr"},left:{full:"psp-b-l","miter-start":"psp-b-l-mt","miter-end":"psp-b-l-mb","miter-both":"psp-b-l-mtb"}},Kl=Object.values(Ni).map(e=>Object.values(e)).flat();function Oi(e,t){for(let i of["top","right","bottom","left"]){let r=t[i];for(let[n,o]of Object.entries(Ni[i]))e.classList.toggle(o,n===r)}}function Yi(e){return e._config.group_by.length-(e._config.group_rollup_mode==="flat"?1:0)}function Ao(e,t,i){let r=e._config.split_by.length,n=t.length<=1,o=Yi(e);for(let s=0;s<t.length;s++){let{cells:a}=t[s],l=s<r;for(let u=0;u<a.length;u++){let{element:c,metadata:d}=a[u];if(!d||(c.style.backgroundColor="",c.classList.toggle("psp-header-group",!0),c.classList.toggle("psp-header-leaf",!1),c.classList.toggle("psp-header-group-corner",d.type==="corner"),c.classList.toggle("psp-color-mode-bar",!1),c.classList.toggle("psp-color-mode-label-bar",!1),c.classList.toggle("psp-header-sort-asc",!1),c.classList.toggle("psp-header-sort-desc",!1),c.classList.toggle("psp-header-sort-col-asc",!1),c.classList.toggle("psp-header-sort-col-desc",!1),c.classList.toggle("psp-header-sort-abs-asc",!1),c.classList.toggle("psp-header-sort-abs-desc",!1),c.classList.toggle("psp-header-sort-abs-col-asc",!1),c.classList.toggle("psp-header-sort-abs-col-desc",!1),c.classList.toggle("psp-sort-enabled",!1),c.classList.toggle("psp-menu-enabled",!1),c.classList.toggle("psp-menu-open",!1),!l))continue;let h=d.type==="corner",p=d.type==="column_header"&&d.x>=0,f=Bi({paths:e._column_paths,split_by_len:r,x:p?d.x:void 0,colspan:c.colSpan||1,y:s,row_kind:"group",is_corner:h,corner_needs_border:h&&e._config.group_by.length>0&&d.row_header_x===o,is_last_header_row:!1,single_header_row:n});Oi(c,f),c.classList.toggle("psp-header-border",f.right!=="none"),c.classList.toggle("psp-is-top",f.right==="miter-start")}}}function To(e,t,i,r){let n=Array.from(t.children[0].children[0].children),o=n.length,s=i.hasAttribute("settings");if(o<=1?n[0]?.removeAttribute("id"):n.forEach((a,l)=>{let u=s?1:0,c=l===o-(u+1)?"psp-column-titles":l===o-u?"psp-column-edit-buttons":null;c?a.setAttribute("id",c):a.removeAttribute("id")}),i.classList.toggle("psp-menu-open",!!r),s&&o>=2){let a=Array.from(n[o-2].children),l=Array.from(n[o-1].children);if(a&&l){n.slice(0,o-2).forEach(u=>{Array.from(u.children).forEach(c=>{c.classList.toggle("psp-menu-open",!1)})});for(let u=0;u<a.length;u++){let c=a[u],d=l[u],h=c.textContent===r;if(c.classList.toggle("psp-menu-open",h),d.classList.toggle("psp-menu-open",h),e._config.columns.length>1)for(let p of t.querySelectorAll("td")){let f=t.getMeta(p);if(!f?.column_header)continue;let _=f.column_header[f.column_header.length-2]===r;p.classList.toggle("psp-menu-open",_)}}}}}function Ei(e,t,i,r,n,o){let s=Yi(e),a=e._config.split_by.length,l=e._column_settings_selected_column;for(let{element:u,metadata:c}of t.cells){if(!c||c.type==="body"||c.type==="row_header")continue;let d=c.column_header?.[e._config.split_by.length],h=e._config.sort.find(T=>T[0]===d),p=typeof c.x>"u",f=Bi({paths:e._column_paths,split_by_len:a,x:p?void 0:c.x,colspan:u.colSpan||1,y:a+(r?1:0),row_kind:r?"menu":"name",is_corner:c.type==="corner",corner_needs_border:c.type==="corner"&&e._config.group_by.length>0&&c.row_header_x===s,is_last_header_row:n,single_header_row:o});Oi(u,f),u.classList.toggle("psp-header-border",f.right!=="none"),u.classList.toggle("psp-header-group",!1),u.classList.toggle("psp-header-leaf",!0);let _=p?void 0:e._column_paths[c.x]?.split("|").length-1,g=e._config.split_by.length>0&&_!==void 0&&_<e._config.split_by.length;u.classList.toggle("psp-split-total",g&&_===0),u.classList.toggle("psp-split-subtotal",g&&_>0),u.classList.toggle("psp-is-top",!1),u.classList.toggle("psp-header-corner",p),u.classList.toggle("psp-header-sort-asc",!r&&!!h&&h[1]==="asc"),u.classList.toggle("psp-header-sort-desc",!r&&!!h&&h[1]==="desc"),u.classList.toggle("psp-header-sort-col-asc",!r&&!!h&&h[1]==="col asc"),u.classList.toggle("psp-header-sort-col-desc",!r&&!!h&&h[1]==="col desc"),u.classList.toggle("psp-header-sort-abs-asc",!r&&!!h&&h[1]==="asc abs"),u.classList.toggle("psp-header-sort-abs-desc",!r&&!!h&&h[1]==="desc abs"),u.classList.toggle("psp-header-sort-abs-col-asc",!r&&!!h&&h[1]==="col asc abs"),u.classList.toggle("psp-header-sort-abs-col-desc",!r&&!!h&&h[1]==="col desc abs");let m=Ue(e,c),v=m==="integer"||m==="float",b=m==="string",y=m==="date",A=m==="datetime";if(u.classList.toggle("psp-menu-enabled",(b||v||y||A)&&!p&&c.column_header_y===e._config.split_by.length+1),u.classList.toggle("psp-sort-enabled",(b||v||y||A)&&!p&&c.column_header_y===e._config.split_by.length),u.classList.toggle("psp-is-width-override",i.saveColumnSizes()[c.size_key]!==void 0),e._config.columns.length>1&&l){let T=c.column_header?.[c.column_header.length-2]===l;u.classList.toggle("psp-menu-open",T)}}}var Ro={desc:"asc",asc:void 0,"desc abs":"asc abs","asc abs":void 0},ko={desc:"asc",asc:void 0,"desc abs":"asc abs","asc abs":void 0};async function Mo(e,t,i,r,n){let o=t.getMeta(n);if(!o?.column_header)return;let s=o.column_header[e._config.split_by.length],a=r.ctrlKey||r.metaKey||r.altKey?Lo:Do,l=r.shiftKey,u=a(e,`${s}`,l);await i.restore({sort:u},{panel:e._panel})}function Lo(e,t,i){let r=[],n=!1;for(let o of e._config.sort){let[s,a]=o;if(s===t){n=!0;let l=Hi(e,t,a,i);l&&r.push(l)}else r.push(o)}return n||r.push([t,i?"desc abs":"desc"]),r}function Do(e,t,i){for(let[r,n]of e._config.sort)if(r===t){let o=Hi(e,t,n,i);return o?[o]:[]}return[[t,i?"desc abs":"desc"]]}function Hi(e,t,i,r){let n=e._config.split_by.length>0?ko:Ro,o=i?n[i]:"desc";if(o)return[t,o]}async function zi(e,t,i){let r=t.getMeta(i.target);if(!r||r.type!=="row_header")return;let n=i.target.classList.contains("psp-tree-label-collapse");i.shiftKey&&n?e._view.set_depth(r.row_header.filter(o=>o!==void 0).length-2):i.shiftKey?e._view.set_depth(r.row_header.filter(o=>o!==void 0).length-1):n?e._view.collapse(r.y):e._view.expand(r.y),e._num_rows=await e._view.num_rows(),e._num_columns=await e._view.num_columns(),t.draw()}function Po(e,t,i){return async r=>{let n=r;if(n.which!==1)return;let o=n.target;if(o?.tagName!=="A"){for(;o&&o.tagName!=="TD"&&o.tagName!=="TH";)if(o=o.parentElement,!o||!t.contains(o))return;if(o){if(o.classList.contains("psp-tree-label")){e._edit_mode!=="SELECT_ROW_TREE"&&zi(e,t,n);return}if(o.classList.contains("psp-menu-enabled")){let s=t.getMeta(o)?.column_header?.[e._config.split_by.length];await i.toggleColumnSettings(`${s}`,{panel:e._panel})}else o.classList.contains("psp-sort-enabled")&&Mo(e,t,i,n,o)}}}}function Io(e,t,i){return async r=>{let n=r;if(n.which!==1)return;let o=n.target;if(o?.tagName!=="A"){for(;o&&o.tagName!=="TD"&&o.tagName!=="TH";)if(o=o.parentElement,!o||!t.contains(o))return;o&&o.classList.contains("psp-tree-label")&&e._edit_mode==="SELECT_ROW_TREE"&&zi(e,t,n)}}}function Fo(e){return t=>{let i=t;if(i.which!==1)return;let r=i.target;for(;r&&r.tagName!=="TD"&&r.tagName!=="TH";)if(r=r.parentElement,!r||!e.contains(r))return;r&&(r.classList.contains("psp-tree-label")&&i.offsetX<26||r.classList.contains("psp-header-leaf")&&!r.classList.contains("psp-header-corner"))&&i.stopImmediatePropagation()}}function Ui(e,t,i){let r=e.getMeta(i);if(!r)return!1;let n=t._schema[t._column_paths[r.x]],o=i.textContent||"",s=t._ids[r.y-r.y0][0];if(n==="float"||n==="integer"){let l=parseFloat(o.replace(/,/g,""));if(isNaN(l))return!1;o=l}else if(n==="date"||n==="datetime"){let l=Date.parse(o);if(isNaN(l))return!1;o=l}else n==="boolean"&&(o=o==="true"?!1:o==="false"?!0:null);let a={__INDEX__:s,[t._column_paths[r.x]]:o};return t._table.update([a],{port_id:t._edit_port,format:null}),!0}function Bo(e,t,i,r){let n=t.getMeta(r.target);if(n?.type==="body"||n?.type==="column_header"){let o=e._is_editable[n.x],s=Ue(e,n)==="boolean",a=r.target.classList.contains("psp-null");o&&s&&!a&&Ui(t,e,r.target)}}var ze=new WeakMap;function Wi(e,t){return e!=="boolean"&&!(e==="string"&&t==="link")}function $i(e,t,i){let r=t.getMeta(i);if(r?.type!=="body"||!fe(e,void 0)||!e._is_editable[r.x])return!1;let n=Ue(e,r),o=t[U]||{},s=r.column_header?.[e._config.split_by.length],a=s?o[s.toString()]?.format:void 0;return Wi(n,a)}function Gi(e,t){let i=ze.get(e);i!==t&&(i?.removeAttribute("contenteditable"),t.setAttribute("contenteditable","true"),ze.set(e,t))}function No(e,t){t.removeAttribute("contenteditable"),ze.get(e)===t&&ze.delete(e)}function Oo(e,t,i){return r=>{let n=r.target;n?.tagName==="TD"&&$i(e,t,n)&&Gi(t,n)}}function vt(e,t,i){$i(e,t,i)&&Gi(t,i)}function Yo(e,t,i,r){return n=>{let o=n.target,s=!1;if(fe(e,i)&&r.has(t)){o.classList.remove("psp-error");let a=r.get(t);r.delete(t),a.content!==o.textContent&&(Ui(t,e,o)||(o.textContent=a.content||"",o.classList.add("psp-error"),o.focus(),s=!0))}!s&&o?.hasAttribute?.("contenteditable")&&No(t,o)}}function Ho(e,t,i,r){return n=>{let o=n.target;vt(e,t,o);let s=t.getMeta(o);if(s?.type==="body"){let a={x:s.x,y:s.y,content:o.textContent||void 0};r.set(t,a)}}}function zo(e,t,i,r){let n=r.get(i),o=i.getRootNode();if(n){for(let{element:s,metadata:a}of t)if(a.type==="body"&&a.x===n.x&&a.y===n.y){o.activeElement!==s&&(vt(e,i,s),s.focus({preventScroll:!0}));return}document.activeElement!==document.body&&i.contains(o.activeElement)&&o.activeElement.blur()}}function Uo(e,t,i){let r=t.get(e);if(!r)return!1;let n=e.getRootNode(),o=e.children[0]?.children[1];if(o)for(let s of o.children)for(let a of s.children){let l=e.getMeta(a);if(l?.type==="body"&&l.x===r.x&&l.y===r.y)return n.activeElement!==a&&(i&&vt(i,e,a),a.focus({preventScroll:!0})),!0}return document.activeElement!==document.body&&e.contains(n.activeElement)&&n.activeElement.blur(),!1}function Wo(e){let t;return async function(i,r,n,o,s,a){if(t){await t;return}let l;t=new Promise(c=>l=c);let u=await e(i,r,n,o,s,a);return t=void 0,l(),u}}function Ci(e){if(e.isContentEditable){let t=e.getRootNode().getSelection()?.getRangeAt(0);if(!t)return 0;let i=t.cloneRange();return i.selectNodeContents(e),i.setEnd(t.endContainer,t.endOffset),i.toString().length}else return e.selectionStart||0}var he=Wo(async function(e,t,i,r,n,o){let s=t.getMeta(r);if(!s||s.type!=="body")return;let a=e._column_paths.length,l=e._num_rows,u=i.get(t);if(!u)return;s.x+n<a&&0<=s.x+n&&(u.x=s.x+n),s.y+o<l&&0<=s.y+o&&(u.y=s.y+o);let c=Math.max(s.x0-10,0),d=Math.min(s.x0+10,a),h=Math.max(s.y0-5,0),p=Math.min(s.y0+10,l),f=s.x0+n,_=s.y0+o;for(;!Uo(t,i,e)&&f>=c&&f<d&&_>=h&&_<p;)await t.scrollToCell(f,_),i.set(t,u),f+=n,_+=o});function $o(e,t,i){let r=t.getMeta(i);return r?.type==="body"&&r.y===e._num_rows-1}function Go(e,t,i,r,n){let o=t.getRootNode().activeElement;switch(n.target.classList.remove("psp-error"),n.key){case"Enter":n.preventDefault(),$o(e,t,o)?(o.blur(),r.delete(t)):n.shiftKey?he(e,t,r,o,0,-1):he(e,t,r,o,0,1);break;case"ArrowLeft":Ci(o)===0&&(n.preventDefault(),he(e,t,r,o,-1,0));break;case"ArrowUp":n.preventDefault(),he(e,t,r,o,0,-1);break;case"ArrowRight":Ci(o)===(o.textContent?.length||0)&&(n.preventDefault(),he(e,t,r,o,1,0));break;case"ArrowDown":n.preventDefault(),he(e,t,r,o,0,1);break;default:}}function Vo(e,t,i,r){return n=>{let o=n;if(e._edit_mode==="EDIT"){if(!fe(e,i))return;Go(e,t,i,r,o)}else console.debug(`Mode ${e._edit_mode} for "keydown" event not yet implemented`)}}function Xo(e,t,i){return r=>{let n=r;if(e._edit_mode==="EDIT"){if(!fe(e,i))return;Bo(e,t,i,n)}}}async function Vi({_view:e,_config:t},i,r){let n=t.group_by,o=t.split_by,s=i>=0?i:0,a=s+1,l=await e.to_json({start_row:s,end_row:a}),u=l.map(_=>_.__ROW_PATH__)[0]||[],c=n.map((_,g)=>{let m=u[g];return m?[_,"==",m]:void 0}).filter(_=>_!==void 0),d=Object.keys(l[0]).filter(_=>!mt(_))[r],h={row:l[0],column_names:[],config:{filter:[]}},p=[];if(d){let _=d.split("|");h.column_names=[_[o.length]],p=o.map((g,m)=>{let v=_[m];return v?[g,"==",v]:void 0}).filter(g=>g!==void 0).filter(([,,g])=>!mt(g))}let f=t.filter.concat(c).concat(p);return h.config={filter:f},h}function jo(e,t,i,r){return async n=>{let o=n,s=t.getMeta(o.target);if(!s||s.type!=="body"||e._edit_mode==="SELECT_ROW_TREE")return;let{x:a,y:l}=s,{row:u,column_names:c,config:d}=await Vi(e,l,a),h=r.getAttribute("slot")??void 0;i.dispatchEvent(new CustomEvent("perspective-click",{bubbles:!0,composed:!0,detail:{row:u,column_names:c,config:d,panel:h}}))}}var qo="mouse-selected-area",Ko=(e,t,{className:i=qo,selected:r=[],onSelect:n}={})=>(e.model._selection_state={selected_areas:r,dirty:!0},t.addEventListener("mousedown",Zo(e,t,i)),t.addEventListener("mouseover",Qo(e,t,i)),t.addEventListener("mouseup",Jo(e,t,i,n)),t.addStyleListener(()=>ee(e,t,i)),t);function $e(e){return e==="SELECT_ROW_TREE"}var Zo=(e,t,i)=>r=>{let n=r;if(n.button===0&&Ge(e.model._edit_mode)){if($e(e.model._edit_mode))return;e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES={};let o=t.getMeta(n.target);if(o?.type==="body"&&o.x!==void 0&&o.y!==void 0){e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES={x:o.x,y:o.y},e.model._selection_state.old_selected_areas=e.model._selection_state.selected_areas,e.model._selection_state.selected_areas=[];let s={x0:o.x,x1:o.x,y0:o.y,y1:o.y};e.model._selection_state.potential_selection=s,ee(e,t,i,e.model._selection_state.selected_areas.concat([s]));return}}e.model._selection_state.selected_areas=[]},Qo=(e,t,i)=>r=>{let n=r,o=e.model._edit_mode;if(Ge(o)&&!$e(o)&&e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES&&e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x!==void 0){let s=t.getMeta(n.target);if(s?.type==="body"&&s.x!==void 0&&s.y!==void 0){let a={x0:Math.min(s.x,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x),x1:Math.max(s.x,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x),y0:Math.min(s.y,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.y),y1:Math.max(s.y,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.y)};e.model._selection_state.potential_selection=a,ee(e,t,i,e.model._selection_state.selected_areas.concat([a]))}}},Jo=(e,t,i,r)=>n=>{let o=n,s=e.model._edit_mode;if(Ge(s)){let a=t.getMeta(o.target);if(!a)return;if($e(s)){if((a.type==="body"||a.type==="row_header")&&a.y!==void 0&&a.y>=0){let l=e.model._selection_state.selected_areas;if(l.length>0&&l[0].y0===a.y)e.model._selection_state.selected_areas=[],e.model._selection_state.dirty=!0,ee(e,t,i,[]),r?.(l[0],!0);else{let u={x0:0,x1:0,y0:a.y,y1:a.y};e.model._selection_state.selected_areas=[u],e.model._selection_state.dirty=!0,ee(e,t,i),r?.(u,!1)}}e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES={},e.model._selection_state.potential_selection=void 0;return}if((e.model._selection_state.old_selected_areas?.length??0)>0){let l=e.model._selection_state.old_selected_areas[0];if(l.x0===l.x1&&l.y0===l.y1&&a?.type==="body"&&l.x0===a.x&&l.y0===a.y){e.model._selection_state.selected_areas=[],e.model._selection_state.old_selected_areas=[],e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES={},e.model._selection_state.potential_selection=void 0,ee(e,t,i,[]);return}}if(e.model._selection_state.old_selected_areas=[],e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES&&e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x!==void 0&&a?.type==="body"&&a.x!==void 0&&a.y!==void 0){let l={x0:Math.min(a.x,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x),x1:Math.max(a.x,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.x),y0:Math.min(a.y,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.y),y1:Math.max(a.y,e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES.y)};e.model._selection_state.selected_areas.push(l),ee(e,t,i)}e.model._selection_state.CURRENT_MOUSEDOWN_COORDINATES={},e.model._selection_state.potential_selection=void 0}};function Si(e){return e==="SELECT_COLUMN"||e==="SELECT_REGION"}function Ai(e){return e==="SELECT_ROW"||e==="SELECT_REGION"||e==="SELECT_ROW_TREE"}function es(e,t,{x0:i,x1:r,y0:n,y1:o}){let s={},a=t.model._edit_mode;i!==void 0&&Si(a)&&(s.start_col=i),r!==void 0&&Si(a)&&(s.end_col=r+1),n!==void 0&&Ai(a)&&(s.start_row=n),o!==void 0&&Ai(a)&&(s.end_row=o+1),e.setSelection(s,{panel:t.model._panel})}var ts={SELECT_REGION:(e,t)=>t.x0<=e.x&&e.x<=t.x1&&t.y0<=e.y&&e.y<=t.y1,SELECT_ROW:(e,t)=>t.y0<=e.y&&e.y<=t.y1,SELECT_ROW_TREE:(e,t)=>t.y0<=e.y&&e.y<=t.y1,SELECT_COLUMN:(e,t)=>t.x0<=e.x&&e.x<=t.x1};function Ge(e){return e==="SELECT_REGION"||e==="SELECT_ROW"||e==="SELECT_COLUMN"||e==="SELECT_ROW_TREE"}var ee=(e,t,i,r)=>{let n=e.model._edit_mode;if(Ge(n))if(r=e.model._selection_state.selected_areas.slice(0),e.model._selection_state.potential_selection&&r.push(e.model._selection_state.potential_selection),r.length>0)es(e.parentElement,e,r[0]),$e(n)||is(e,t,r,i);else{e.parentElement.setSelection(void 0,{panel:e.model._panel});let o=t.querySelectorAll("tbody td");for(let s of o)s.classList.remove(i)}else if(e.model._selection_state.dirty){e.model._selection_state.dirty=!1;let o=t.querySelectorAll("tbody td, tbody th");for(let s of o)s.classList.remove(i)}},is=(e,t,i,r)=>{let n=ts[e.model._edit_mode];if(!n||i.length===0)return;let o=t.querySelectorAll("tbody td");for(let s of o){let a=t.getMeta(s);if(!a||a.type!=="body")continue;let l=!1;for(let u of i)u.x0!==void 0&&u.y0!==void 0&&u.x1!==void 0&&u.y1!==void 0&&n(a,u)&&(l=!0,e.model._selection_state.dirty=!0,s.classList.add(r));l||s.classList.remove(r)}};function rs(e,t,i,r){if(t.length===0)return;let n=e._column_settings_selected_column,o=t.length,s=r.hasAttribute("settings")&&r.getActivePanel()===e._panel;if(o<=1?t[0]?.row.removeAttribute("id"):t.forEach(({row:c},d)=>{let h=s?1:0,p=d===o-(h+1)?"psp-column-titles":d===o-h?"psp-column-edit-buttons":null;p?c.setAttribute("id",p):c.removeAttribute("id")}),r.classList.toggle("psp-menu-open",!!n),s&&o>=2){let c=t[o-2],d=t[o-1];if(c&&d){t.slice(0,o-2).forEach(({cells:h})=>{h.forEach(({element:p})=>{p.classList.toggle("psp-menu-open",!1)})});for(let h=0;h<c.cells.length;h++){let p=c.cells[h]?.element,f=d.cells[h]?.element;if(!p||!f)continue;let _=p.textContent===n;p.classList.toggle("psp-menu-open",_),f.classList.toggle("psp-menu-open",_)}}}let a=o<=1,l=e._config.split_by.length,u=e._config.split_by.length+1;if(l<t.length){let c=t[l];c&&Ei(e,c,i,!1,u>=t.length,a)}if(u<t.length){let c=t[u];c&&Ei(e,c,i,!0,!0,a)}}function ns(e,t,i,[,,,,,r,n],[,,,,,o,s],a){let l=e._ids?.[t.dy??0]?.join("|"),u=(a?(t.column_header??[]).slice(0,-1):t.column_header??[]).join("|");if(e.last_reverse_columns?.has(u)&&e.last_reverse_ids?.has(l)){let c=e.last_reverse_ids?.get(l),d=e.last_reverse_columns.get(u);e._is_old_viewport?d!==void 0&&c!==void 0&&e.last_meta?.[d]?.[c]!==void 0&&e.last_meta[d][c]>(t.user??0)?(i.style.setProperty("--pulse--background-color-start",o),i.style.setProperty("--pulse--background-color-end",s),i.style.animationName==="pulse_neg"?i.style.animation="pulse_neg2 0.5s linear":i.style.animation="pulse_neg 0.5s linear"):d!==void 0&&c!==void 0&&e.last_meta?.[d]?.[c]!==void 0&&e.last_meta[d][c]<(t.user??0)?(i.style.setProperty("--pulse--background-color-start",r),i.style.setProperty("--pulse--background-color-end",n),i.style.animationName==="pulse_pos"?i.style.animation="pulse_pos2 0.5s linear":i.style.animation="pulse_pos 0.5s linear"):c!==t.dy&&(i.style.animation=""):i.style.animation=""}else i.style.animation=""}var Ti=1;function os(e,t,i,r){if(r==null){e.style.removeProperty("--psp-bar-size"),e.removeAttribute("data-psp-label");return}let n=Math.max(0,Math.min(Ti,Math.abs(r/t.fg_gradient)*Ti)),o=Number.isFinite(n)?(n*100).toFixed(2):"100";if(e.style.setProperty("--psp-bar-size",`${o}%`),e.style.setProperty("--psp-bar-anchor",r<0?"100%":"0%"),t.number_fg_mode==="label-bar"){let s=Li(i??"float",t);e.setAttribute("data-psp-label",s?s.format(r):String(r))}else e.removeAttribute("data-psp-label")}function ss(e,t,i,r,n,o){let s=(n.user??0)>0,a=(n.user??0)<0,l;t?.pos_bg_color!==void 0?l=t.pos_bg_color:l=e._pos_bg_color;let u;t?.neg_bg_color!==void 0?u=t.neg_bg_color:u=e._neg_bg_color;let c=s?l:a?u:["",e._plugin_background[0],e._plugin_background[1],e._plugin_background[2],"","",""];{let[g,m,v,b]=c;if(r.style.position="",n._is_hidden_by_aggregate_depth)r.style.animation="",r.style.backgroundColor="";else if(t?.number_bg_mode==="color")r.style.animation="",r.style.backgroundColor=g;else if(t?.number_bg_mode==="gradient"){let y=t.bg_color_stops??e._default_bg_color_stops,A=.5+.5*Math.max(-1,Math.min(1,(n.user??0)/(t.bg_gradient??1))),T=ho(y,A),x=Ce(T);r.style.animation="",r.style.color=x,r.style.backgroundColor=te(T)}else t?.number_bg_mode==="pulse"?(ns(e,n,r,l,u,o),r.style.backgroundColor=""):(t?.number_bg_mode==="disabled"||t?.number_bg_mode,r.style.animation="",r.style.backgroundColor="")}let d;t?.pos_fg_color!==void 0?d=t.pos_fg_color:d=e._pos_fg_color;let h;t?.neg_fg_color!==void 0?h=t.neg_fg_color:h=e._neg_fg_color;let p=s?d:a?h:["",e._plugin_background[0],e._plugin_background[1],e._plugin_background[2],"","",""],[f,,,,_]=p;if(n._is_hidden_by_aggregate_depth)r.style.backgroundColor="",r.style.color="",r.style.removeProperty("--psp-bar-size"),r.removeAttribute("data-psp-label");else if(t?.number_fg_mode==="disabled")if(t?.number_bg_mode==="color"){let g=e._plugin_background,m=Ce(He([c[1],c[2],c[3],1],g));r.style.color=m}else t?.number_bg_mode==="gradient"||(r.style.color="");else t?.number_fg_mode==="bar"||t?.number_fg_mode==="label-bar"?(r.style.color="",r.style.setProperty("--psp-label-bar-color",_),r.style.setProperty("--psp-label-bar-bg",f),os(r,t,i,n.user)):(t?.number_fg_mode==="color"||!t?.number_fg_mode)&&(r.style.color=f)}function as(e,t,i,r){let n=r.column_header?.[e._config.split_by.length],o=t?.color!==void 0?t.color:e._color,[s,a,l,u]=o;if(r._is_hidden_by_aggregate_depth)i.style.backgroundColor="",i.style.color="";else if(t?.string_color_mode==="foreground"&&r.user!==null)i.style.color=s,i.style.backgroundColor="",t?.format==="link"&&i.children[0]&&(i.children[0].style.color=s);else if(t?.string_color_mode==="background"&&r.user!==null){let c=e._plugin_background,d=Ce(He([a,l,u,1],c));i.style.color=d,i.style.backgroundColor=s}else if(t?.string_color_mode==="series"&&r.user!==null&&n){e._series_color_map.has(n)||(e._series_color_map.set(n,new Map),e._series_color_seed.set(n,0));let c=e._series_color_map.get(n);if(r.user&&!c.has(r.user)){let y=e._series_color_seed.get(n)??0;c.set(r.user,y),e._series_color_seed.set(n,y+1)}let d=c.get(r.user)??0,h=t?.palette_colors,p=h&&h.length>0?h:e._series_palette,f=p[d%p.length],[_,g,m]=me(f),v=e._plugin_background,b=Ce(He([_,g,m,1],v));i.style.color=b,i.style.backgroundColor=f}else i.style.backgroundColor="",i.style.color=""}function ls(e,t,i,r){let n=t?.color!==void 0?t.color:e._color,[o,s,a,l]=n;if(r._is_hidden_by_aggregate_depth)i.style.backgroundColor="",i.style.color="";else if(t?.datetime_color_mode==="foreground"&&r.user!==null)i.style.color=o,i.style.backgroundColor="";else if(t?.datetime_color_mode==="background"&&r.user!==null){let u=e._plugin_background,c=Ce(He([s,a,l,1],u));i.style.color=c,i.style.backgroundColor=o}else i.style.backgroundColor="",i.style.color=""}function cs(e,t,i,r){if(r._is_hidden_by_aggregate_depth)i.style.backgroundColor="",i.style.color="";else{let[n]=r.user===!0?e._pos_fg_color:r.user===!1?e._neg_fg_color:["",0,0,0,""];i.style.backgroundColor="",i.style.color=n}}function us(e,t,i,r){let n=r.value!==void 0&&r.value!==null&&r.value?.toString()?.trim().length>0,o=(r.row_header_x??0)>=e._config.group_by.length,s=t.getMeta({dx:0,dy:(r.y??0)-(r.y0??0)+1}),a=s&&s.row_header&&typeof s.row_header[(r.row_header_x??0)+1]<"u";i.classList.toggle("psp-tree-label",n&&!o),i.classList.toggle("psp-tree-label-expand",n&&!o&&!a),i.classList.toggle("psp-tree-label-collapse",n&&!o&&a),i.classList.toggle("psp-tree-leaf",n&&o)}var Ri=new WeakMap;function ds(e,t){let i=e.getRootNode();if(!i||!i.adoptedStyleSheets)return;let r=Ri.get(e);r||(r={table:void 0,scope:void 0,sheet:new CSSStyleSheet,rules:new Map},Ri.set(e,r));let n=e.children[0];if(n&&(r.table!==n&&(r.table=n,r.scope=Array.from(n.classList).find(o=>o.startsWith("rt-scope-")),r.sheet.replaceSync(""),r.rules.clear()),!!r.scope)){i.adoptedStyleSheets.includes(r.sheet)||(i.adoptedStyleSheets=[...i.adoptedStyleSheets,r.sheet]);for(let[o,s]of t){let a=r.rules.get(o);if(a===void 0){let l=r.sheet.cssRules.length;r.sheet.insertRule(`.${r.scope} td.rt-col-${o}, .${r.scope} th.rt-col-${o}{text-align:${s}}`,l),a={rule:r.sheet.cssRules[l],last:s},r.rules.set(o,a)}else a.last!==s&&(a.rule.style.textAlign=s,a.last=s)}}}var hs=1,ps=2,fs=4,ms=8,gs=16,_s=32,bs=64;function ys(e){if(!e)return 0;let t=0;for(let i=0;i<e.length;i++)e[i]!==void 0&&t++;return t}function vs(e,t,i,r,n,o,s){let a=n?e._tree_selection_id:void 0;s.classList.toggle("flat-group-rollup-mode",e._config.group_rollup_mode==="flat");let l=e._config.group_rollup_mode==="rollup",u=e._config.split_by.length,c=e._config.group_by.length,d=e._pos_bg_color,h=e._config.columns.length>1?e._column_settings_selected_column:void 0,p=new Map,f=(g,m,v,b)=>{let y=p.get(g);if(y)return y;let A=v?i[v.toString()]:void 0,T=m===void 0?void 0:e._column_paths[m]?.split("|").length-1,x=u>0&&T!==void 0&&T<u,M=b==="integer"||b==="float",D=M&&(A?.number_bg_mode==="gradient"||A?.number_bg_mode==="pulse"||A?.number_fg_mode==="bar"||A?.number_fg_mode==="label-bar")||b==="string"&&(A?.string_color_mode==="series"||A?.format==="link"),S=o&&!!e._is_editable[m??-1];return y={plugin:A,type:b,is_numeric:M,is_rollup_col:x,n_split_levels:T,column_name:v?.toString(),mods:(r?1:0)|(n?2:0)|(S?4:0)|(x?8:0)|(T===0?16:0)|(v===h?32:0)|(h?64:0)|(l?128:0)|(A?.number_fg_mode==="bar"?256:0)|(A?.number_fg_mode==="label-bar"?512:0),value_styled:D,text_editable:S&&Wi(b,A?.format),boolean_editable:S&&b==="boolean"},p.set(g,y),y},_=new Map;for(let{element:g,metadata:m,isHeader:v}of t){let b=m.column_header?.[u]?.toString?.()??m.column_header?.[u],y=m.x,A=Ue(e,m),T=y??-1-(m.row_header_x??0),x=f(T,y,b,A),M=m.size_key;M!==void 0&&!_.has(M)&&_.set(M,!v&&x.is_numeric?"right":"left");let D=l&&(E=>E===0?!1:E-1<Math.min(c,x.plugin?.aggregate_depth||0))(ys(m.row_header));m._is_hidden_by_aggregate_depth=D;let S=(m.value===null?hs:0)|(m.user===null?ps:0)|(D?fs:0);if(x.is_numeric||x.type==="boolean"){let E=m.user;S|=(E===!0||E>0?ms:0)|(E===!1||E<0?gs:0)}let P=!1,C=!1;if(n&&a){let E=e._ids[(m.y??0)-(m.y0??0)],k=!0;for(let I=0;I<a.length;I++)if(a[I]!==E[I]){k=!1;break}P=E.length===a.length&&k,C=E.length!==a.length&&k,S|=(P?_s:0)|(C?bs:0)}if(!v){let E=m.__psp_style_memo;if(E!==void 0&&E.plugin===x.plugin&&E.type===x.type&&E.mods===x.mods&&E.theme===d&&E.bits===S&&(!x.value_styled||E.value===m.user))continue;E!==void 0?(E.plugin=x.plugin,E.type=x.type,E.mods=x.mods,E.theme=d,E.bits=S,E.value=x.value_styled?m.user:void 0):m.__psp_style_memo={plugin:x.plugin,type:x.type,mods:x.mods,theme:d,bits:S,value:x.value_styled?m.user:void 0}}g.classList.toggle("psp-split-total",x.is_rollup_col&&x.n_split_levels===0),g.classList.toggle("psp-split-subtotal",x.is_rollup_col&&x.n_split_levels>0),x.is_numeric?ss(e,x.plugin,x.type,g,m,r):x.type==="boolean"?cs(e,x.plugin,g,m):x.type==="string"?as(e,x.plugin,g,m):x.type==="date"||x.type==="datetime"?ls(e,x.plugin,g,m):(g.style.backgroundColor="",g.style.color=""),g.classList.toggle("psp-bool-type",x.type==="boolean"&&m.user!==null),g.classList.toggle("psp-null",m.value===null),g.classList.toggle("psp-menu-open",!!h&&b===h),g.classList.toggle("psp-color-mode-bar",x.plugin?.number_fg_mode==="bar"&&x.is_numeric),g.classList.toggle("psp-color-mode-label-bar",x.plugin?.number_fg_mode==="label-bar"&&x.is_numeric),v&&us(e,s,g,m),g.classList.toggle("psp-select-region-inactive",!1),n&&(a?v&&m.type==="row_header"&&m.row_header_x!==void 0&&m.row_header_x<e._ids[(m.y??0)-(m.y0??0)].length?g.classList.toggle("psp-select-region",!1):(g.classList.toggle("psp-select-region",P),g.classList.toggle("psp-select-region-inactive",C)):g.classList.toggle("psp-select-region",!1)),!v&&m.type==="body"&&(g.classList.toggle("psp-editable",x.text_editable),x.text_editable?g.setAttribute("tabindex","-1"):g.hasAttribute("tabindex")&&g.removeAttribute("tabindex"),g.classList.toggle("boolean-editable",x.boolean_editable&&m.user!==null))}ds(s,_)}function xs(e,t,i,r,n){return function(){let o=i[U]||{},s=r.hasAttribute("settings"),a=t._edit_mode==="SELECT_ROW_TREE",l=fe(t,r),u=fe(t,r,!0);e.classList.toggle("edit-mode-allowed",u);let c=[],d=[],h=i.children[0]?.children[1];if(h)for(let f of h.children)for(let _ of f.children){let g=i.getMeta(_);if(g&&(g.type==="body"||g.type==="row_header")){let m=_.tagName==="TH";c.push({element:_,metadata:g,isHeader:m})}}let p=i.children[0]?.children[0];if(p)for(let f of p.children){let _={row:f,cells:[]};for(let g of f.children){let m=i.getMeta(g);_.cells.push({element:g,metadata:m})}d.push(_)}vs(t,c,o,s,a,l,i),Ao(t,d,i),rs(t,d,i,r),zo(t,c,i,n)}}async function ws(e){let t=this.parentElement,i=this.getAttribute("slot")??void 0,r=await t.getTable({panel:i});if(this._initialized)await xi.call(this,this.regular_table,r,e,this.model);else{if(this.innerHTML="",this.shadowRoot?this.shadowRoot.appendChild(this.regular_table):this.appendChild(this.regular_table),this.model=await xi.call(this,this.regular_table,r,e),!this.model)return;let n=this.model,o=this.regular_table,s=async(l,u)=>{if(n._edit_mode!=="SELECT_ROW_TREE")return;if(u)n._tree_selection_id=void 0;else{let f=l.y0-(n._last_window?.start_row??0);f>=0&&f<n._ids.length&&(n._tree_selection_id=n._ids[f])}let{row:c,column_names:d,config:h}=await Vi(n,l.y0,0),p;if(u){if((n._last_insert_configs?.length||0)>0)p=new Q(!1,c,[],n._last_insert_configs??[],[]);else throw new Error("Suprious deselect");n._last_insert_configs=void 0}else p=new Q(!0,c,d,n._last_insert_configs??[],[h]),n._last_insert_configs=[h];p.panel=this.getAttribute("slot")??void 0,await o.draw({preserve_width:!0}),t.dispatchEvent(new CustomEvent("perspective-global-filter",{bubbles:!0,composed:!0,detail:p}))};Ko(this,this.regular_table,{className:"psp-select-region",onSelect:s});let a=new WeakMap;this.regular_table.addStyleListener(xs(this,this.model,this.regular_table,t,a)),this.regular_table.addEventListener("click",Fo(this.regular_table)),this.regular_table.addEventListener("click",jo(this.model,this.regular_table,t,this)),this.regular_table.addEventListener("mousedown",Po(this.model,this.regular_table,t)),this.regular_table.addEventListener("dblclick",Io(this.model,this.regular_table,t)),this.regular_table.addEventListener("click",Xo(this.model,this.regular_table,t)),this.regular_table.addEventListener("pointerdown",Oo(this.model,this.regular_table,t)),this.regular_table.addEventListener("focusin",Ho(this.model,this.regular_table,t,a)),this.regular_table.addEventListener("focusout",Yo(this.model,this.regular_table,t,a)),this.regular_table.addEventListener("keydown",Vo(this.model,this.regular_table,t,a)),t.addEventListener("perspective-toggle-column-settings",l=>{let u=l;if(!this.isConnected)return;let c=u.detail.open&&l.target===this?u.detail.column_name??void 0:void 0;To(this.model,this.regular_table,t,c),this.model._column_settings_selected_column=c}),this._initialized=!0}}function ki(e){if(typeof e=="string")return go(e)??void 0}function Es(e){if(typeof e=="string")return _o(e)?.map(te)??void 0}function Cs(e,t){e=JSON.parse(JSON.stringify(e)),t=JSON.parse(JSON.stringify(t));let i={};for(let[o,s]of Object.entries(t))s.column_size_override!==void 0&&(this.model?._config.split_by?.length||(i[o]=s.column_size_override),delete s.column_size_override);this._columns_config=structuredClone(t);let r={};if(t)for(let[o,s]of Object.entries(t)){let a=ki(s.fg_colors),l=ki(s.bg_colors),u=(c,d)=>J(te(c[d].rgb));r[o]={...s,pos_fg_color:a?u(a,a.length-1):void 0,neg_fg_color:a?u(a,0):void 0,pos_bg_color:l?u(l,l.length-1):void 0,neg_bg_color:l?u(l,0):void 0,color:s.color?J(s.color):void 0,bg_color_stops:l,palette_colors:Es(s.palette)}}"edit_mode"in e?Ee.indexOf(e.edit_mode)!==-1?gt.call(this,e.edit_mode,!1):console.error("Unknown edit mode "+e.edit_mode):gt.call(this,"READ_ONLY",!1),"scroll_lock"in e?wi.call(this,e.scroll_lock):wi.call(this,!1);let n=this.regular_table;_t.call(this,i,!0),n[U]=r}function Ss(){if(this.regular_table){let e={scroll_lock:!!this._is_scroll_lock,edit_mode:this._edit_mode};return JSON.parse(JSON.stringify(e))}return{}}async function As(e){if(this.parentElement&&await this.activate(e),!this.isConnected||this.offsetParent==null||!this.model)return;let t=Fi.call(this),i=this.regular_table.draw({invalid_columns:!0});this._reset_scroll_top&&(this.regular_table.scrollTop=0,this._reset_scroll_top=!1),this._reset_scroll_left&&(this.regular_table.scrollLeft=0,this._reset_scroll_left=!1),this._reset_select&&(this.regular_table.dispatchEvent(new CustomEvent("psp-deselect-all",{bubbles:!1})),this._reset_select=!1),this._reset_column_size&&(this.regular_table.resetAutoSize(),this._reset_column_size=!1),_t.call(this,t),await i,Object.keys(t).length>0&&_t.call(this,t),this._toolbar?.classList.toggle("aggregated",this.model._config.group_by.length>0||this.model._config.split_by.length>0)}function Ts(e,t,i,r,n,o){let s=[];if((n?.split_by?.length??0)===0&&s.push({kind:"Number",key:"column_size_override",default:0,min:1}),e==="integer"||e==="float"){let u=this.model._pos_fg_color[0],c=this.model._neg_fg_color[0],d=this.model._pos_bg_color[0],h=this.model._neg_bg_color[0];s.push({kind:"Enum",key:"number_fg_mode",default:"color",variants:[{value:"disabled",label:"Disabled"},{value:"color",label:"Color"},{value:"bar",label:"Bar"},{value:"label-bar",label:"Gradient"}]});let p=r?.number_fg_mode??"color";p!=="disabled"&&s.push({kind:"GradientStops",key:"fg_colors",default:pt([{color:c,offset:0},{color:u,offset:1}]),discrete:!0}),(p==="bar"||p==="label-bar")&&s.push({kind:"Number",key:"fg_gradient",default:o?.abs_max??0,include:!0}),s.push({kind:"Enum",key:"number_bg_mode",default:"disabled",variants:[{value:"disabled",label:"Disabled"},{value:"color",label:"Color"},{value:"gradient",label:"Gradient"},{value:"pulse",label:"Pulse"}]});let f=r?.number_bg_mode??"disabled";f!=="disabled"&&(f==="color"?s.push({kind:"GradientStops",key:"bg_colors",default:pt([{color:h,offset:0},{color:d,offset:1}]),discrete:!0}):s.push({kind:"GradientStops",key:"bg_colors",default:pt([{color:h,offset:0},{color:te(this.model._plugin_background),offset:.5},{color:d,offset:1}])})),f==="gradient"&&s.push({kind:"Number",key:"bg_gradient",include:!0,default:o?.abs_max??0}),s.push({kind:"NumberFormat"})}else if(e==="date"||e==="datetime")s.push({kind:"DatetimeFormat"}),s.push({kind:"Enum",key:"datetime_color_mode",default:"none",variants:[{value:"none",label:"None"},{value:"foreground",label:"Foreground"},{value:"background",label:"Background"}]}),(r?.datetime_color_mode??"none")!=="none"&&s.push({kind:"Color",key:"color",default:this.model._color[0]});else if(e==="string"){s.push({kind:"StringFormat"}),s.push({kind:"Enum",key:"string_color_mode",default:"none",variants:[{value:"none",label:"None"},{value:"foreground",label:"Foreground"},{value:"background",label:"Background"},{value:"series",label:"Series"}]});let u=r?.string_color_mode??"none";u==="series"?s.push({kind:"Palette",key:"palette",default:bo(this.model._series_palette)}):u!=="none"&&s.push({kind:"Color",key:"color",default:this.model._color[0]})}let a=n?.group_by??[],l=(n?.group_rollup_mode??"rollup")==="rollup";return a.length>0&&l&&s.push({kind:"AggregateDepth"}),{fields:s}}var Rs='regular-table{--psp-datagrid--hover--border-color:var(--psp-inactive--color,#c5c9d080);margin:12px 0 0 12px;padding:0;font-family:inherit;& div[tabindex]{outline:none}&>div{position:absolute;inset:0;overflow:hidden}& th{text-align:center}& thead tr:not(.rt-autosize) th{max-width:0;overflow:hidden}& thead tr:last-child .rt-float,& tbody .rt-float,& thead .rt-integer,& tbody .rt-integer{text-align:right}& tbody th{text-align:left}& span.rt-tree-container{align-items:center;height:100%;display:flex}& thead .rt-string,& tbody .rt-string,& thead .rt-date,& tbody .rt-date,& thead .rt-datetime,& tbody .rt-datetime{text-align:left}& thead tr:last-child th{border-bottom:1px solid #8b868045}& tbody tr:first-child td,& tbody tr:first-child th{border-top:1px solid #0000!important}& th{position:relative}& tr th span.rt-tree-group{border-left:1px solid #eee;height:100%;margin-left:5px;margin-right:15px}& td,& th{white-space:nowrap;height:var(--psp-datagrid--row--height,19px);padding:0 5px}& table *{box-sizing:border-box}& table{color:#666;outline:none;position:absolute}& span.rt-row-header-icon{color:#aaa;font-family:var(--psp-button--font-family);padding-right:4px}& span.rt-column-header-icon{width:10px;font-size:10px;font-family:var(--psp-button--font-family);padding-left:3px;display:inline-block}& span.rt-row-header-icon:hover{color:#1a7da1;text-shadow:0 0 3px #1a7da1}& .rt-selected td{background-color:#eee}& .rt-cell-clip{text-overflow:ellipsis;overflow:hidden}& td span.rt-group-name,& th span.rt-group-name{flex:1;height:100%;margin-right:-5px;padding-left:8px;padding-right:5px}& th span.rt-group-name{text-align:left}& td th span.rt-group-leaf,& th span.rt-group-leaf{height:100%;margin-left:16px}& .rt-column-resize{cursor:col-resize;width:10px;height:100%;position:absolute;top:0;right:0}& a{color:var(--psp-datagrid--pos-cell--color)}& a:visited{color:var(--psp-active--color)}& td.psp-null:after,& th.psp-null:after{content:var(--psp-label--null--content,"-");color:var(--psp-label--null--color,inherit);font-size:var(--psp-label--null--font-size,inherit);vertical-align:middle}}regular-table{--psp-mh-color:var(--psp-inactive--border-color,#8b868045);--psp-mh-gap:8px}regular-table thead th{box-shadow:var(--psp-miter-top,0 0 0 0 transparent), var(--psp-miter-right,0 0 0 0 transparent), var(--psp-miter-bottom,0 0 0 0 transparent), var(--psp-miter-left,0 0 0 0 transparent)}.psp-b-r{--psp-miter-right:1px 0px 0px 0px var(--psp-mh-color)}.psp-b-r-mt{--psp-miter-right:calc(var(--psp-mh-gap) / 2 + 1px) calc(var(--psp-mh-gap) / 2) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-r-mb{--psp-miter-right:calc(var(--psp-mh-gap) / 2 + 1px) calc(var(--psp-mh-gap) / -2) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-r-mtb{--psp-miter-right:calc(var(--psp-mh-gap) + 1px) 0px 0px calc(-1 * var(--psp-mh-gap)) var(--psp-mh-color)}.psp-b-l{--psp-miter-left:-1px 0px 0px 0px var(--psp-mh-color)}.psp-b-l-mt{--psp-miter-left:calc(var(--psp-mh-gap) / -2 - 1px) calc(var(--psp-mh-gap) / 2) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-l-mb{--psp-miter-left:calc(var(--psp-mh-gap) / -2 - 1px) calc(var(--psp-mh-gap) / -2) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-l-mtb{--psp-miter-left:calc(-1 * var(--psp-mh-gap) - 1px) 0px 0px calc(-1 * var(--psp-mh-gap)) var(--psp-mh-color)}.psp-b-b{--psp-miter-bottom:0px 1px 0px 0px var(--psp-mh-color)}.psp-b-b-ml{--psp-miter-bottom:calc(var(--psp-mh-gap) / 2) calc(var(--psp-mh-gap) / 2 + 1px) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-b-mr{--psp-miter-bottom:calc(var(--psp-mh-gap) / -2) calc(var(--psp-mh-gap) / 2 + 1px) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-b-mlr{--psp-miter-bottom:0px calc(var(--psp-mh-gap) + 1px) 0px calc(-1 * var(--psp-mh-gap)) var(--psp-mh-color)}.psp-b-t{--psp-miter-top:0px -1px 0px 0px var(--psp-mh-color)}.psp-b-t-ml{--psp-miter-top:calc(var(--psp-mh-gap) / 2) calc(var(--psp-mh-gap) / -2 - 1px) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-t-mr{--psp-miter-top:calc(var(--psp-mh-gap) / -2) calc(var(--psp-mh-gap) / -2 - 1px) 0px calc(var(--psp-mh-gap) / -2) var(--psp-mh-color)}.psp-b-t-mlr{--psp-miter-top:0px calc(-1 * var(--psp-mh-gap) - 1px) 0px calc(-1 * var(--psp-mh-gap)) var(--psp-mh-color)}regular-table{& tbody{& tr:hover th.psp-tree-leaf:not(.psp-select-region):not(.psp-select-region-inactive),& tr:hover th.psp-tree-label:not(.psp-select-region):not(.psp-select-region-inactive),& tr:hover td:not(.psp-select-region):not(.psp-select-region-inactive),& tr:hover:after{box-shadow:0px 1px 0px var(--psp-datagrid--hover--border-color,#c5c9d080);border-color:var(--psp-datagrid--hover--border-color,#c5c9d080)!important;&.psp-menu-open{box-shadow:inset -2px 0px 0px var(--psp--color), inset 2px 0px 0px var(--psp--color), 0px 1px 0px var(--psp-datagrid--hover--border-color,#c5c9d080)}}& tr:last-child:hover td:not(.psp-select-region):not(.psp-select-region-inactive).psp-menu-open{box-shadow:inset -2px 0px 0px var(--psp--color), inset 2px 0px 0px var(--psp--color), inset 0px -2px 0px var(--psp--color), 0px 1px 0px var(--psp-datagrid--hover--border-color,#c5c9d080)}& tr:hover+tr th.psp-tree-leaf:not(.psp-select-region):not(.psp-select-region-inactive),& tr:hover+tr th.psp-tree-label:not(.psp-select-region):not(.psp-select-region-inactive),& tr:hover+tr td:not(.psp-select-region):not(.psp-select-region-inactive){border-top-color:#0000}& tr{& th:first-child:not(:empty),& th:first-child:empty+th:not(:empty),& th:first-child:empty~th:empty+th:not(:empty),& td:first-child{border-left-width:1px;border-left-color:#0000}& th:last-child,& td:last-child{border-right-width:0;border-right-color:#0000}}& tr:hover{color:inherit;& th:first-child:not(:empty),& th:first-child:empty+th:not(:empty),& th:first-child:empty~th:empty+th:not(:empty),& td:first-child{border-left-color:var(--psp-datagrid--hover--border-color,#c5c9d080)!important}& th:last-child,& td:last-child{border-right-color:var(--psp-datagrid--hover--border-color,#c5c9d080)!important}}}}perspective-viewer-datagrid:not(.sub-cell-scroll-disabled) regular-table table,:host(:not(.sub-cell-scroll-disabled)) regular-table table{& tbody td,& thead th:not(.rt-group-corner){transform:translate(var(--regular-table--transform-x,0px))}& tbody{transform:translate(0, var(--regular-table--transform-y,0px))}& tbody tr:first-child{& td,& th,&:after{clip-path:polygon(0 var(--regular-table--clip-y,0), 0 200%, 200% 200%, 200% var(--regular-table--clip-y,0))}}& tbody tr td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) 0, var(--regular-table--clip-x,0) 200%, 200% 200%, 200% 0)}& tbody tr:first-child td:first-of-type{clip-path:polygon(var(--regular-table--clip-x,0) var(--regular-table--clip-y,0), var(--regular-table--clip-x,0) 200%, 200% 200%, 200% var(--regular-table--clip-y,0))}& thead tr:last-child:after,& tbody tr:not(:first-child):after{transform:translate(var(--regular-table--transform-x,0px))}& tbody tr:hover:first-child:after{clip-path:polygon(0 var(--regular-table--clip-y,0), 0 200%, 200% 200%, 200% var(--regular-table--clip-y,0))}& thead tr th.rt-group-corner+th:not(.rt-group-corner){clip-path:polygon(var(--regular-table--clip-x,0) 0, var(--regular-table--clip-x,0) 200%, 200% 200%, 200% 0)}}regular-table{outline:none;&::-webkit-scrollbar,&::-webkit-scrollbar-corner{background-color:#0000;width:12px;height:12px}&::-webkit-scrollbar-thumb{background-clip:content-box;background:var(--psp--color);border:5.5px solid var(--psp--background-color);min-width:10%;max-width:50%;min-height:10%;max-height:50%}}perspective-viewer,:host{& .psp-menu-enabled{border-radius:3px 3px 0 0;padding:0 6px;font-size:8px}& .psp-menu-enabled:hover,& tr:not(.rt-autosize) th.psp-menu-open{color:var(--psp--background-color);background-color:var(--psp--color);border-bottom-color:var(--psp--color);cursor:pointer}& tr:not(.rt-autosize) th.psp-menu-open{&:before{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:10px;height:8px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--column-settings--mask-image);mask-image:var(--psp-icon--column-settings--mask-image);background-color:var(--psp--background-color);margin-right:4px;display:inline-block}}& td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--psp--color), inset 2px 0px 0px var(--psp--color)}& tr:first-child td.psp-menu-open{border-top-color:var(--psp--color)!important}& tr:last-child td.psp-menu-open{box-shadow:inset -2px 0px 0px var(--psp--color), inset 2px 0px 0px var(--psp--color), inset 0px -2px 0px var(--psp--color)}}perspective-viewer,:host-context(perspective-viewer){& regular-table table thead tr:last-child th{border-bottom-width:1px;border-bottom-color:var(--psp-inactive--border-color,#8b868045)}}.psp-sort-enabled:hover{cursor:pointer}regular-table.flat-group-rollup-mode.vertical-row-headers th.psp-tree-label:not(:last-of-type){writing-mode:vertical-lr}.psp-select-region-inactive,:hover .psp-select-region-inactive,:hover th.psp-tree-leaf.psp-select-region-inactive,:hover th.psp-tree-label.psp-select-region-inactive{background-color:var(--psp-inactive--color)!important;color:var(--psp--background-color)!important;border-color:var(--psp--background-color)!important}.psp-error{color:red}td:focus{outline:1px dotted #666}perspective-viewer.dragging,:host-context(perspective-viewer.dragging){& regular-table{pointer-events:none}}.psp-header-border:last-child{border-right-width:0}.psp-header-sort-desc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-desc--mask-image);mask-image:var(--psp-icon--sort-desc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-asc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-asc--mask-image);mask-image:var(--psp-icon--sort-asc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-col-desc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-col-desc--mask-image);mask-image:var(--psp-icon--sort-col-desc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-col-asc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-col-asc--mask-image);mask-image:var(--psp-icon--sort-col-asc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-abs-desc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-abs-desc--mask-image);mask-image:var(--psp-icon--sort-abs-desc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-abs-asc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-abs-asc--mask-image);mask-image:var(--psp-icon--sort-abs-asc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-abs-col-desc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-abs-col-desc--mask-image);mask-image:var(--psp-icon--sort-abs-col-desc--mask-image);margin-left:4px;display:inline-block}.psp-header-sort-abs-col-asc:after{background-repeat:no-repeat;background-color:var(--psp--color);content:"";width:14px;height:11px;-webkit-mask-size:cover;mask-size:cover;-webkit-mask-image:var(--psp-icon--sort-abs-col-asc--mask-image);mask-image:var(--psp-icon--sort-abs-col-asc--mask-image);margin-left:4px;display:inline-block}:host-context(perspective-viewer.shift-active) :is(.psp-header-sort-asc,.psp-header-sort-desc,.psp-header-sort-col-asc,.psp-header-sort-col-desc):after,perspective-viewer.shift-active :is(.psp-header-sort-asc,.psp-header-sort-desc,.psp-header-sort-col-asc,.psp-header-sort-col-desc):after{background-color:var(--shift-active--color,var(--psp-datagrid--pos-cell--color,#1078d1))}:host-context(perspective-viewer.shift-active) :is(.psp-tree-label-expand,.psp-tree-label-collapse):before,perspective-viewer.shift-active :is(.psp-tree-label-expand,.psp-tree-label-collapse):before{color:var(--shift-active--color,var(--psp-datagrid--pos-cell--color,#1078d1))}tbody th:last-of-type{border-right:1px solid var(--psp-inactive--border-color,#8b868045);text-overflow:ellipsis;overflow:hidden}tbody th:empty{background-image:linear-gradient(to right, transparent 9px, var(--psp-inactive--border-color,#eee) 10px, transparent 11px);pointer-events:none;background-repeat:no-repeat;min-width:20px;max-width:20px}regular-table:not(.flat-group-rollup-mode){& .psp-tree-label{min-width:0;max-width:0}& .psp-tree-label:before{color:var(--psp--color);font-family:var(--psp-button--font-family,inherit);padding-right:11px}& .psp-tree-label-expand:before{content:var(--psp-label--tree-expand--content,"+")}& .psp-tree-label-collapse:before{content:var(--psp-label--tree-collapse--content,"-")}& .psp-tree-label-expand,& .psp-tree-label-collapse{cursor:pointer}& .psp-tree-label:hover:before{color:var(--psp-active--color);text-shadow:0px 0px 5px var(--psp-active--color)}}.psp-tree-leaf{padding-left:24px}.psp-align-right{text-align:right}.psp-color-mode-bar,.psp-color-mode-label-bar{background-image:var(--psp-label-bar-color);background-repeat:no-repeat;background-origin:content-box;background-size:var(--psp-bar-size,0%) 80%;background-position-x:var(--psp-bar-anchor,0%);background-position-y:50%;padding:0 2px}.psp-color-mode-label-bar{isolation:isolate;position:relative}.psp-color-mode-label-bar:before{color:#0000;content:attr(data-psp-label);white-space:nowrap;height:0;padding:0 3px;display:block}.psp-color-mode-label-bar:after{color:var(--psp-label-bar-bg);content:attr(data-psp-label);mix-blend-mode:difference;justify-content:flex-end;align-items:center;padding:0 5px;display:inline-flex;position:absolute;inset:0}.psp-align-left{text-align:left}.psp-positive:not(:focus){color:var(--psp-datagrid--pos-cell--color)}.psp-negative:not(:focus){color:var(--psp-datagrid--neg-cell--color)}regular-table table tbody td{min-width:52px!important}.psp-is-width-override .rt-column-resize,.rt-column-resize:hover{border:1px dashed #999;border-width:1px 1px 0 0}.boolean-editable{cursor:pointer}regular-table table tbody td.psp-editable{user-select:text}regular-table table{user-select:none;color:inherit;border-collapse:separate;font-size:1em;& th{font-weight:400}& td,& th{border-color:var(--psp-inactive--border-color,#8b868045);height:var(--psp-datagrid--row--height,23px)}& .psp-header-group{text-overflow:ellipsis}& th.psp-header-leaf{border-bottom-width:0;& span{height:var(--psp-datagrid--row--height,23px);min-height:var(--psp-datagrid--row--height,23px)}}& td,& th.psp-tree-label,& th.psp-tree-label,& th.psp-tree-leaf,& tbody tr:first-child th{border-style:solid;border-width:1px 0 0}& tbody th:empty{background-position:0 -10px}& td.psp-select-region,& th.psp-select-region{background-color:var(--psp--color)!important;color:var(--psp--background-color)!important;border-color:var(--psp--background-color)!important}}regular-table tbody tr:hover td.psp-select-region:not(.psp-select-region-inactive),regular-table tbody tr:hover+tr td.psp-select-region:not(.psp-select-region-inactive){border-color:var(--psp--background-color)!important}regular-table tbody tr:hover{& td.psp-select-region.psp-menu-open{&:not(.psp-select-region-inactive){box-shadow:inset -2px 0px 0px var(--psp--background-color), inset 2px 0px 0px var(--psp--background-color)}}}:host-context(perspective-viewer[settings]) td.psp-select-region.psp-menu-open{box-shadow:inset -2px 0px 0px var(--psp--background-color), inset 2px 0px 0px var(--psp--background-color)}:host(.active) regular-table #psp-column-edit-buttons th:not(.rt-group-corner) span:not(.rt-column-resize):before{content:var(--psp-datagrid--column-edit-button--content,"Edit")}perspective-viewer:not([settings]),:host-context(perspective-viewer:not([settings])){& regular-table #psp-column-edit-buttons:after{content:none}}regular-table table thead tr:last-child:after{box-sizing:border-box;width:10000px;height:var(--psp-datagrid--row--height,23px);content:" ";border-bottom:1px solid var(--psp-inactive--border-color);display:block}regular-table table tbody tr:after{box-sizing:border-box;width:10000px;height:var(--psp-datagrid--row--height,23px);content:" ";border-top:1px solid #0000;display:block}regular-table table tbody tr:not(:first-child):after{border-top:1px solid var(--psp-inactive--border-color)}regular-table table tbody tr:hover:not(:first-child):after,regular-table table tbody tr:hover+tr:after{border-top:1px solid var(--psp-datagrid--hover--border-color)}@keyframes pulse_pos{0%{background-color:var(--pulse--background-color-start,#0080ff80)}to{background-color:var(--pulse--background-color-end,#0080ff00)}}@keyframes pulse_pos2{0%{background-color:var(--pulse--background-color-start,#0080ff80)}to{background-color:var(--pulse--background-color-end,#0080ff00)}}@keyframes pulse_neg{0%{background-color:var(--pulse--background-color-start,#ff190080)}to{background-color:var(--pulse--background-color-end,#ff190000)}}@keyframes pulse_neg2{0%{background-color:var(--pulse--background-color-start,#ff190080)}to{background-color:var(--pulse--background-color-end,#ff190000)}}',ks=class Xi extends HTMLElement{static _global_stylesheet_installed=!1;static _sheet;static renderTarget=window.CSS?.supports&&window.CSS?.supports("selector(:host-context(foo))")?"shadow":"light";regular_table;model;_toolbar;_edit_button;_scroll_lock;_is_scroll_lock;_edit_mode;_initialized;_reset_scroll_top;_reset_scroll_left;_reset_select;_reset_column_size;_columns_config={};_persist_column_sizes=()=>{if(!this.model||this.model._config.split_by?.length>0)return;let t=structuredClone(this._columns_config);for(let r of[...this.model._column_paths,"__ROW_PATH__"])t[r]&&delete t[r].column_size_override;let i=Fi.call(this);for(let[r,n]of Object.entries(i))n!==void 0&&(t[r]??={},t[r].column_size_override=n);this._columns_config=t,this.parentElement?.restore?.({columns_config:JSON.parse(JSON.stringify(t))},{panel:this.model._panel})};_on_column_resize=t=>{t.composedPath().some(i=>i instanceof HTMLElement&&i.classList.contains("rt-column-resize"))&&document.addEventListener("mouseup",this._persist_column_sizes,{once:!0})};constructor(){super(),this.regular_table=document.createElement("regular-table"),this.regular_table.part="regular-table",this._is_scroll_lock=!1,this._edit_mode="READ_ONLY";let t=Xi;t._sheet||(t._sheet=new CSSStyleSheet,t._sheet.replaceSync(Rs)),t.renderTarget==="shadow"?this.attachShadow({mode:"open"}).adoptedStyleSheets.push(t._sheet):t.renderTarget==="light"&&!t._global_stylesheet_installed&&(t._global_stylesheet_installed=!0,document.adoptedStyleSheets.push(t._sheet))}connectedCallback(){this.regular_table.addEventListener("mousedown",this._on_column_resize),this._toolbar||(this._toolbar=document.createElement("perspective-viewer-datagrid-toolbar")),this.parentElement&&this.insertAdjacentElement("afterend",this._toolbar)}disconnectedCallback(){this.regular_table.removeEventListener("mousedown",this._on_column_resize),document.removeEventListener("mouseup",this._persist_column_sizes),this._toolbar?.parentElement?.removeChild?.(this._toolbar)}async activate(t){return await ws.call(this,t)}get_static_config(){return{name:"Datagrid",category:"Basic",select_mode:"toggle",config_column_names:["Columns"],group_rollup_modes:["rollup","flat","total"],split_rollup_modes:["flat","rollup"],priority:1,can_render_column_styles:!0}}plugin_config_schema(){let t=[];return t.push({kind:"Enum",key:"edit_mode",default:"READ_ONLY",variants:[{value:"EDIT",label:"Edit"},{value:"READ_ONLY",label:"Read-only"},{value:"SELECT_ROW",label:"Row Select"},{value:"SELECT_COLUMN",label:"Column Select"},{value:"SELECT_REGION",label:"Region Select"},{value:"SELECT_ROW_TREE",label:"Tree Select"}]}),t.push({kind:"Bool",key:"scroll_lock",default:!1}),{fields:t}}column_config_schema(t,i,r,n,o,s){return Ts.call(this,t,i,r,n,o,s)}async draw(t){return await As.call(this,t)}async update(t){if(this.model===void 0)await this.draw(t);else if(this.model._config.split_by?.length>0){let i=await t.dimensions();this.model._num_rows=i.num_view_rows,await this.regular_table.draw()}else this.model._num_rows=await t.num_rows(),await this.regular_table.draw()}async render(t,i){let r=await t.to_columns(i),n=await t.column_paths(i),o=i?.end_row!==void 0&&i?.end_row!==null&&i?.start_row!==void 0&&i?.start_row!==null?i.end_row-i.start_row:await t.num_rows(),s="";for(let a=0;a<o;a++){for(let l of n){let u=r[l],c=this.model._schema[l],d=this.regular_table[U],h=gi(l),p=Li(c,d?.[h]||{});p?s+=p.format(u[a])+" ":s+=u[a]+" "}s+=`
`}return s.trim()}async resize(t){!this.isConnected||this.offsetParent==null||this._initialized&&await this.regular_table.draw()}async presize(t,i){if(!this.isConnected||this.offsetParent==null||!this._initialized)return;let r=this.getBoundingClientRect();return await this.regular_table.predraw(Math.max(0,this.regular_table.clientWidth+(t-r.width)),Math.max(0,this.regular_table.clientHeight+(i-r.height)))}async clear(){this.regular_table.resetAutoSize(),this.regular_table.clear()}save(){return Ss.call(this)}restore(t,i){return Cs.call(this,t,i??{})}async deselect(){let t=this.model;t?._selection_state&&(t._selection_state.selected_areas=[],t._selection_state.old_selected_areas=[],t._selection_state.potential_selection=void 0,t._selection_state.CURRENT_MOUSEDOWN_COORDINATES={},t._selection_state.dirty=!0,t._tree_selection_id=void 0,this._initialized&&await this.regular_table.draw({preserve_width:!0}))}restyle(){!this.model||!this.isConnected||Object.assign(this.model,Ii(this.regular_table))}delete(){this.disconnectedCallback(),this._toolbar=void 0,this.regular_table.table_model&&this.regular_table.resetAutoSize(),this.regular_table.clear()}},Ms=':host{height:100%;display:block;position:relative}:host #container{flex-direction:column;justify-content:stretch;align-items:stretch;display:flex;position:absolute;inset:0}:host #toolbar{align-items:stretch;height:100%;display:flex}:host #toolbar .hover-target{cursor:pointer;align-items:center;margin:0;display:inline-flex;&:hover{box-shadow:-4px 0 0 var(--psp--color), 4px 0 0 var(--psp--color);background-color:var(--psp--color)}}:host #slot-container{flex:1;position:relative}#scroll_lock.lock-scroll:before{-webkit-mask-image:var(--psp-toolbar-scroll-lock-active--content)}#scroll_lock:before{-webkit-mask-image:var(--psp-toolbar-scroll-lock--content)}#select_mode:before{content:"highlight_alt"}#edit_mode:before{-webkit-mask-image:""}#edit_mode[data-edit-mode=READ_ONLY]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-read-only--content)}#edit_mode[data-edit-mode=EDIT]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-edit--content)}:host(.aggregated) #toolbar #edit_mode[data-edit-mode=EDIT]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-read-only--content)}#edit_mode[data-edit-mode=SELECT_ROW]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-select-row--content)}#edit_mode[data-edit-mode=SELECT_COLUMN]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-select-column--content)}#edit_mode[data-edit-mode=SELECT_REGION]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-select-region--content)}#edit_mode[data-edit-mode=SELECT_ROW_TREE]:before{-webkit-mask-image:var(--psp-toolbar-edit-mode-select-row-tree--content)}#edit_mode[data-edit-mode=READ_ONLY] span:before{content:var(--psp-label--edit-mode-read-only--content,"Read Only")}#edit_mode[data-edit-mode=EDIT] span:before{content:var(--psp-label--edit-mode-edit--content,"Editable")}#edit_mode[data-edit-mode=SELECT_ROW] span:before{content:var(--psp-label--edit-mode-select-row--content,"Row Select")}#edit_mode[data-edit-mode=SELECT_COLUMN] span:before{content:var(--psp-label--edit-mode-select-column--content,"Column Select")}#edit_mode[data-edit-mode=SELECT_REGION] span:before{content:var(--psp-label--edit-mode-select-region--content,"Region Select")}#edit_mode[data-edit-mode=SELECT_ROW_TREE] span:before{content:var(--psp-label--edit-mode-select-row-tree--content,"Tree Select")}#scroll_lock span:before{content:var(--psp-label--scroll-lock-toggle--content,"Free Scroll")}#scroll_lock.lock-scroll span:before{content:var(--psp-label--scroll-lock-alt-toggle--content,"Align Scroll")}.button:before{content:"";background-color:var(--psp--color);width:21px;height:21px;-webkit-mask-size:cover;mask-size:cover}.button.editable:before,.button.lock-scroll:before{color:inherit}.button{user-select:none;box-sizing:border-box;font-size:var(--label--font-size,.75em);white-space:nowrap;border:1px solid #0000;border-radius:3px;justify-content:center;align-items:center;width:37px;height:22px;padding:0 5px;display:inline-flex}.button>span{margin:0;padding:0;display:none}.hover-target:focus-within .button,.hover-target:hover .button{background-color:var(--psp--color);color:var(--psp--background-color);opacity:1;cursor:pointer;align-items:center;display:flex;position:relative}.hover-target:focus-within .button:before,.hover-target:hover .button:before{background-color:var(--psp--background-color)}.hover-target:focus-within .button>span,.hover-target:hover .button>span{white-space:pre-wrap;background-color:var(--psp--color);text-align:center;border-radius:0 0 3px 3px;width:35px;height:auto;margin:0;padding:5px;font-size:9px;line-height:1;display:block;position:absolute;top:calc(100% + 3px);left:50%;translate:-50%}',ji=new CSSStyleSheet;ji.replaceSync(Ms);var Ls=class extends HTMLElement{_initialized=!1;connectedCallback(){if(this._initialized)return;this._initialized=!0;let e=this.previousElementSibling?.getAttribute("slot");this.setAttribute("slot",e?`statusbar-extra-${e}`:"statusbar-extra"),this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets.push(ji),this.shadowRoot.innerHTML=`
<div id="toolbar">
<span class="hover-target">
<span id="edit_mode" class="button" data-edit-mode="READ_ONLY">
<span></span>
</span>
</span>
</div>
`;let t=this.parentElement,i=this.previousElementSibling,r=i?.tagName==="PERSPECTIVE-VIEWER-DATAGRID"?i:t.getPlugin("Datagrid");r._edit_button=this.shadowRoot.querySelector("#edit_mode"),r._edit_button.dataset.editMode=r._edit_mode??"READ_ONLY",r._edit_button.addEventListener("click",()=>{gt.call(r),r.regular_table.draw()})}};async function Ds(){if(customElements.get("perspective-viewer-datagrid")){console.warn('Custom element "perspective-viewer-datagrid" is already registered; skipping duplicate registration (Perspective was loaded more than once on this page).');return}customElements.define("perspective-viewer-datagrid-toolbar",Ls),customElements.define("perspective-viewer-datagrid",ks),await customElements.whenDefined("perspective-viewer"),customElements.get("perspective-viewer").registerPlugin("perspective-viewer-datagrid")}Ds();var Se="Series Charts",xt="Cartesian Charts",wt="Hierarchical Charts",qi="Financial Charts",Et="Map Charts",Ps=["X Axis"],Ve=["Y Axis"],V="select",X="toggle",Ae=["auto_alt_y_axis","facet_mode","series_zoom_mode","include_zero","domain_mode","line_width_px","point_size_px","band_inner_frac","bar_inner_pad"],Re={facet_mode:"overlay"},Ct={...Re,include_zero:!0},Ki=["facet_mode","facet_zoom_mode","domain_mode","line_width_px","point_size_px"],Zi=["facet_mode","series_zoom_mode","domain_mode","band_inner_frac","bar_inner_pad","wick_width_px","ohlc_line_width_px"],Qi=[],Is=["facet_zoom_mode"],Mt=["facet_mode","facet_zoom_mode","domain_mode","map_tile_provider","map_tile_alpha"],Fs=[...Mt,"point_size_px"],Bs=[...Mt,"line_width_px"],Ns=[...Mt,"gradient_color_mode","gradient_radius_px","gradient_intensity","gradient_heat_max"],Os=["facet_mode","facet_zoom_mode","domain_mode","gradient_color_mode","gradient_radius_px","gradient_intensity","gradient_heat_max"];function B(e,t,i,r,n,o,s,a){return{name:e,tag:t,category:i,selectMode:r,initial:{count:n,names:o},max_cells:a?.max_cells??2e6,max_columns:a?.max_columns??1e4,applicable_plugin_fields:s,...a?.default_chart_type?{default_chart_type:a.default_chart_type}:{},...a?.plugin_field_defaults?{plugin_field_defaults:a.plugin_field_defaults}:{},...a?.group_by_role?{group_by_role:a.group_by_role}:{},...a?.split_by_role?{split_by_role:a.split_by_role}:{},...a?.connects_row_order?{connects_row_order:a.connects_row_order}:{}}}var Ji=["Open","Close","High","Low","Tooltip"],er=["Size","Color","Tooltip"],Xe={group_by_role:"X Axis",split_by_role:"Series"},Ys={group_by_role:"Y Axis",split_by_role:"Series"},St={},tr={group_by_role:"Hierarchy",split_by_role:"Facets"},Hs={group_by_role:"X Axis",split_by_role:"Y Axis"},ir={group_by_role:"X Axis",split_by_role:"Series"},At={},zs=[B("X Bar","x-bar",Se,V,1,Ps,Ae,{...Ys,default_chart_type:"bar",plugin_field_defaults:Ct}),B("Y Bar","y-bar",Se,V,1,Ve,Ae,{...Xe,default_chart_type:"bar",plugin_field_defaults:Ct}),B("Y Line","y-line",Se,V,1,Ve,Ae,{...Xe,default_chart_type:"line",plugin_field_defaults:Re}),B("Y Scatter","y-scatter",Se,V,1,Ve,Ae,{...Xe,default_chart_type:"scatter",plugin_field_defaults:Re}),B("Y Area","y-area",Se,V,1,Ve,Ae,{...Xe,default_chart_type:"area",plugin_field_defaults:Ct}),B("X/Y Scatter","scatter",xt,X,2,["X Axis","Y Axis","Color","Size","Label","Tooltip"],Ki,{...St}),B("X/Y Line","line",xt,V,2,["X Axis","Y Axis","Tooltip"],Ki,{...St,connects_row_order:!0}),B("Density","density",xt,X,2,["X Axis","Y Axis","Color","Tooltip"],Os,{...St}),B("Treemap","treemap",wt,X,1,er,Qi,{...tr}),B("Sunburst","sunburst",wt,X,1,er,Qi,{...tr}),B("Heatmap","heatmap",wt,V,1,["Color"],Is,{...Hs}),B("Candlestick","candlestick",qi,X,1,Ji,Zi,{...ir,default_chart_type:"candlestick",plugin_field_defaults:Re}),B("OHLC","ohlc",qi,X,1,Ji,Zi,{...ir,default_chart_type:"ohlc",plugin_field_defaults:Re}),B("Map Scatter","map-scatter",Et,X,2,["Longitude","Latitude","Color","Size","Label","Tooltip"],Fs,{...At}),B("Map Line","map-line",Et,V,2,["Longitude","Latitude","Tooltip"],Bs,{...At,connects_row_order:!0}),B("Map Density","map-density",Et,X,2,["Longitude","Latitude","Color","Tooltip"],Ns,{...At})],rr=zs;function ar(e){let t=e.trim();if(t.startsWith("#")){let r=t.slice(1);return r.length===3&&(r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]),[parseInt(r.slice(0,2),16)/255,parseInt(r.slice(2,4),16)/255,parseInt(r.slice(4,6),16)/255]}let i=t.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return i?[+i[1]/255,+i[2]/255,+i[3]/255]:[.5,.5,.5]}function Lt(e){let t=i=>Math.round(Math.max(0,Math.min(1,i))*255).toString(16).padStart(2,"0");return`#${t(e[0])}${t(e[1])}${t(e[2])}`}var Te=[{offset:0,color:[3/255,102/255,214/255,1]},{offset:1,color:[255/255,127/255,14/255,1]}];function Us(e){if(!e)return Te.slice();let t=e.trim();if(!t)return Te.slice();let i=t.indexOf("(");if(i<0||!/^linear-gradient\s*\(/i.test(t))return Te.slice();let r=t.lastIndexOf(")");if(r<=i)return Te.slice();let n=t.substring(i+1,r),o=[],s=0,a=0;for(let d=0;d<n.length;d++){let h=n[d];h==="("?s++:h===")"?s--:h===","&&s===0&&(o.push(n.substring(a,d)),a=d+1)}o.push(n.substring(a));let l=[],u=0;if(o.length>0){let d=o[0].trim().toLowerCase();(d.startsWith("to ")||/^[-\d.]+(deg|rad|grad|turn)/.test(d))&&(u=1)}for(let d=u;d<o.length;d++){let h=o[d].trim();if(!h)continue;let p=h.match(/\s([\-\d.]+)%\s*$/),f=p?h.substring(0,p.index).trim():h,_=p?parseFloat(p[1])/100:null;try{let g=ar(f);l.push({color:g,offset:_})}catch{}}if(l.length===0)return Te.slice();if(l.length===1){let[d,h,p]=l[0].color;return[{offset:0,color:[d,h,p,1]},{offset:1,color:[d,h,p,1]}]}l[0].offset===null&&(l[0].offset=0),l[l.length-1].offset===null&&(l[l.length-1].offset=1);for(let d=1;d<l.length-1;d++){if(l[d].offset!==null)continue;let h=d+1;for(;h<l.length&&l[h].offset===null;)h++;let p=l[d-1].offset,f=l[h].offset,_=h-(d-1);for(let g=d;g<h;g++)l[g].offset=p+(g-(d-1))/_*(f-p);d=h-1}let c=0;return l.map(d=>{let h=Math.max(c,Math.min(1,d.offset));return c=h,{offset:h,color:[d.color[0],d.color[1],d.color[2],1]}})}function Ws(e){return`${Math.round(Math.max(0,Math.min(1,e))*1e3)/10}%`}function $s(e){return`linear-gradient(to right, ${[...e].sort((t,i)=>t.offset-i.offset).map(t=>`${Lt([t.color[0],t.color[1],t.color[2]])} ${Ws(t.offset)}`).join(", ")})`}function Gs(e){return`linear-gradient(to right, ${e.map(Lt).join(", ")})`}function Vs(e,t){if(e.length===0)return[0,0,0,1];if(t<=e[0].offset)return e[0].color.slice();let i=e[e.length-1];if(t>=i.offset)return i.color.slice();let r=0,n=e.length-1;for(;n-r>1;){let u=r+n>>1;e[u].offset<=t?r=u:n=u}let o=e[r],s=e[n],a=s.offset-o.offset,l=a>0?(t-o.offset)/a:0;return[o.color[0]+(s.color[0]-o.color[0])*l,o.color[1]+(s.color[1]-o.color[1])*l,o.color[2]+(s.color[2]-o.color[2])*l,o.color[3]+(s.color[3]-o.color[3])*l]}var Xs=":host{--psp-charts--tooltip--color:var(--psp--color);--psp-charts--tooltip--background:var(--psp--background-color);--psp-charts--tooltip--border-color:var(--psp-inactive--border-color);width:100%;height:100%;font-family:inherit;display:block;position:relative;overflow:hidden}.webgl-container{position:absolute;inset:6px}.webgl-canvas{width:100%;height:100%;position:absolute;top:0;left:0}.webgl-gridlines,.webgl-chrome{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.zoom-controls{z-index:2;pointer-events:auto;display:none;position:absolute;top:8px;left:50%;transform:translate(-50%)}.zoom-controls.visible{gap:6px;display:flex}.zoom-reset{background:var(--psp-charts--tooltip--background);color:var(--psp-charts--tooltip--color);border:1px solid var(--psp-charts--tooltip--border-color);font:11px var(--psp-charts--font-family);cursor:pointer;opacity:.7;border-radius:4px;padding:4px 12px;transition:opacity .15s}.zoom-reset:hover{opacity:1}.webgl-tooltip{pointer-events:auto;font:11px var(--psp-charts--font-family);background:var(--psp-charts--tooltip--background);color:var(--psp-charts--tooltip--color);border:1px solid var(--psp-charts--tooltip--border-color);white-space:pre;z-index:10;border-radius:3px;padding:3px;line-height:16px;position:absolute;overflow-y:auto}",js={facet_mode:"grid",shared_x_axis:!0,shared_y_axis:!0,coordinated_tooltip:!1,zoom_mode:"shared",facet_padding:6},qs={auto_alt_y_axis:!1,facet_mode:"grid",facet_zoom_mode:"shared",series_zoom_mode:"dynamic",include_zero:!1,domain_mode:"expand",line_width_px:2,point_size_px:8,band_inner_frac:.5,bar_inner_pad:.1,wick_width_px:1,ohlc_line_width_px:1,gradient_radius_px:32,gradient_intensity:.6,gradient_heat_max:4,gradient_color_mode:"mean",map_tile_provider:"carto-positron",map_tile_alpha:1},Ks=class{_element=null;_emit=null;_pointerId=null;_onWheel=null;_onPointerDown=null;_onPointerMove=null;_onPointerUp=null;_onPointerLeave=null;_onClick=null;_onDblClick=null;attach(e,t){this.detach(),this._element=e,this._emit=t,this._onWheel=i=>{let r=e.getBoundingClientRect(),n=i.clientX-r.left,o=i.clientY-r.top;i.preventDefault(),t({type:"wheel",mx:n,my:o,deltaY:i.deltaY})},this._onPointerDown=i=>{if(i.button!==0)return;let r=e.getBoundingClientRect(),n=i.clientX-r.left,o=i.clientY-r.top;e.setPointerCapture(i.pointerId),this._pointerId=i.pointerId,t({type:"pointerdown",mx:n,my:o,pointerId:i.pointerId})},this._onPointerMove=i=>{let r=e.getBoundingClientRect(),n=i.clientX-r.left,o=i.clientY-r.top;t({type:"pointermove",mx:n,my:o})},this._onPointerUp=i=>{if(this._pointerId!==null){try{e.releasePointerCapture(this._pointerId)}catch{}this._pointerId=null}t({type:"pointerup"})},this._onPointerLeave=()=>{t({type:"pointerleave"})},this._onClick=i=>{let r=e.getBoundingClientRect();t({type:"click",mx:i.clientX-r.left,my:i.clientY-r.top})},this._onDblClick=i=>{let r=e.getBoundingClientRect();t({type:"dblclick",mx:i.clientX-r.left,my:i.clientY-r.top})},e.addEventListener("wheel",this._onWheel,{passive:!1}),e.addEventListener("pointerdown",this._onPointerDown),e.addEventListener("pointermove",this._onPointerMove),e.addEventListener("pointerup",this._onPointerUp),e.addEventListener("pointerleave",this._onPointerLeave),e.addEventListener("click",this._onClick),e.addEventListener("dblclick",this._onDblClick)}detach(){this._element&&(this._onWheel&&this._element.removeEventListener("wheel",this._onWheel),this._onPointerDown&&this._element.removeEventListener("pointerdown",this._onPointerDown),this._onPointerMove&&this._element.removeEventListener("pointermove",this._onPointerMove),this._onPointerUp&&this._element.removeEventListener("pointerup",this._onPointerUp),this._onPointerLeave&&this._element.removeEventListener("pointerleave",this._onPointerLeave),this._onClick&&this._element.removeEventListener("click",this._onClick),this._onDblClick&&this._element.removeEventListener("dblclick",this._onDblClick)),this._element=null,this._emit=null,this._pointerId=null,this._onPointerLeave=null,this._onClick=null,this._onDblClick=null}},Zs=["--psp-charts--font-family","font-family","--psp--background-color","--psp-charts--axis-ticks--color","--psp--color","--psp-charts--axis-lines--color","--psp-charts--gridline--color","--psp-charts--gradient--background","--psp-charts--full-gradient--background","--psp-charts--legend--color","--psp-charts--legend-border--color","--psp-charts--tooltip--background","--psp-charts--tooltip--color","--psp-charts--tooltip--border-color","--psp-charts--area--opacity","--psp-charts--heatmap-gap--px","--psp-charts--sunburst-gap--px"];function Rt(e){let t=getComputedStyle(e),i={};for(let r of Zs){let n=t.getPropertyValue(r).trim();n&&(i[r]=n)}for(let r=1;;r++){let n=`--psp-charts--series-${r}--color`,o=t.getPropertyValue(n).trim();if(!o)break;i[n]=o}return i}function Qs(){let e=[];for(let t of Array.from(document.styleSheets)){let i;try{i=t.cssRules}catch{continue}let r=t.href??document.baseURI;for(let n of Array.from(i)){if(!(n instanceof CSSFontFaceRule))continue;let o=n.style,s=o.getPropertyValue("font-family").trim(),a=o.getPropertyValue("src").trim();!s||!a||e.push({family:Js(s),src:ea(a,r),style:ie(o,"font-style"),weight:ie(o,"font-weight"),stretch:ie(o,"font-stretch"),unicodeRange:ie(o,"unicode-range"),variant:ie(o,"font-variant"),featureSettings:ie(o,"font-feature-settings"),display:ie(o,"font-display")})}}return e}function ie(e,t){return e.getPropertyValue(t).trim()||void 0}function Js(e){if(e.length>=2){let t=e.charCodeAt(0),i=e.charCodeAt(e.length-1);if(t===i&&(t===34||t===39))return e.slice(1,-1)}return e}function ea(e,t){return e.replace(/url\(\s*(['"]?)([^'")]+)\1\s*\)/g,(i,r,n)=>{try{return`url(${new URL(n,t).href})`}catch{return i}})}var ta=class{_glCanvas;_parent;_div=null;constructor(e,t){this._glCanvas=e,this._parent=t}pin(e,t,i){this.dismiss();let r=document.createElement("div");r.className="webgl-tooltip",r.style.maxHeight=`${Math.round(i.cssHeight*.6)}px`,r.textContent=e.join(`
`),getComputedStyle(this._parent).position==="static"&&(this._parent.style.position="relative"),r.style.left="-9999px",r.style.top="0px",this._parent.appendChild(r),this._div=r;let n=r.getBoundingClientRect().width,o=r.getBoundingClientRect().height,s=t.px+12,a=t.py-o-8;s+n>i.cssWidth&&(s=t.px-n-12),s<0&&(s=4),a<0&&(a=t.py+12),a+o>i.cssHeight&&(a=i.cssHeight-o-4),r.style.left=`${s}px`,r.style.top=`${a}px`}dismiss(){this._div&&(this._div.remove(),this._div=null)}setCursor(e){this._glCanvas.style.cursor=e}},re="worker",ia="blit",ra='var Jr=Object.defineProperty;var Jl=(e,t,n)=>t in e?Jr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var G=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ql=(e,t)=>{for(var n in t)Jr(e,n,{get:t[n],enumerable:!0})};var d=(e,t,n)=>Jl(e,typeof t!="symbol"?t+"":t,n);var Dn,Ro=G(()=>{Dn="attribute vec2 a_start;attribute vec2 a_end;attribute float a_color_start;attribute float a_color_end;attribute float a_corner;uniform mat4 u_projection;uniform vec2 u_resolution;uniform float u_line_width;uniform vec2 u_color_range;uniform sampler2D u_gradient_lut;varying float v_edge_dist;varying vec3 v_color;float A(float B,float C,float D){if(D<=C){return 0.5;}else if(C<0.&&D>0.){float E=max(-C,D);return clamp(0.5+0.5*(B/E),0.,1.);}return clamp((B-C)/(D-C),0.,1.);}void main(){float C=u_color_range.x;float D=u_color_range.y;float F=0.5*(a_color_start+a_color_end);float G=A(F,C,D);v_color=texture2D(u_gradient_lut,vec2(G,0.5)).rgb;vec4 H=u_projection*vec4(a_start,0.,1.);vec4 I=u_projection*vec4(a_end,0.,1.);vec2 J=H.xy*u_resolution*0.5;vec2 K=I.xy*u_resolution*0.5;vec2 L=K-J;float M=length(L);L=M>0.001?L/M:vec2(1.,0.);vec2 N=vec2(-L.y,L.x);float O=step(1.5,a_corner);float P=1.-mod(a_corner,2.)*2.;vec4 Q=mix(H,I,O);float R=(u_line_width+1.5)*0.5;vec2 S=(N*P*R)/(u_resolution*0.5);gl_Position=Q+vec4(S,0.,0.);v_edge_dist=P;}"});var Bn,Mo=G(()=>{Bn="precision highp float;uniform float u_line_width;varying float v_edge_dist;varying vec3 v_color;void main(){float A=abs(v_edge_dist);float B=u_line_width/(u_line_width+1.5);float C=1.-smoothstep(B,1.,A);gl_FragColor=vec4(v_color,C);}"});var Pn,Fo=G(()=>{Pn="attribute vec2 a_position;attribute float a_color_value;attribute float a_size_value;uniform mat4 u_projection;uniform float u_point_size;uniform vec2 u_color_range;uniform vec2 u_size_range;uniform vec2 u_point_size_range;varying float v_color_t;varying float v_point_size;void main(){gl_Position=u_projection*vec4(a_position,0.,1.);float A=u_size_range.y-u_size_range.x;if(A>0.){float B=clamp((a_size_value-u_size_range.x)/A,0.,1.);gl_PointSize=mix(u_point_size_range.x,u_point_size_range.y,B);}else{gl_PointSize=u_point_size;}v_point_size=gl_PointSize;float C=u_color_range.x;float D=u_color_range.y;if(D<=C){v_color_t=0.5;}else if(C<0.&&D>0.){float E=max(-C,D);v_color_t=clamp(0.5+0.5*(a_color_value/E),0.,1.);}else{v_color_t=clamp((a_color_value-C)/(D-C),0.,1.);}}"});var En,So=G(()=>{En="precision highp float;varying float v_color_t;varying float v_point_size;uniform sampler2D u_gradient_lut;void main(){vec2 A=gl_PointCoord-vec2(0.5);float B=length(A);if(B>0.5){discard;}float C=1.5/max(v_point_size,1.);float D=1.-smoothstep(0.5-C,0.5,B);vec4 E=texture2D(u_gradient_lut,vec2(clamp(v_color_t,0.,1.),0.5));gl_FragColor=vec4(E.rgb,E.a*D);}"});var yt,Io=G(()=>{yt="attribute vec2 a_corner;attribute vec2 a_position;attribute float a_color_value;uniform vec2 u_radius_ndc;uniform mat4 u_projection;uniform vec2 u_color_range;varying vec2 v_uv;varying float v_color_t;void main(){vec4 A=u_projection*vec4(a_position,0.,1.);gl_Position=A+vec4(a_corner*u_radius_ndc*A.w,0.,0.);v_uv=a_corner;float B=u_color_range.x;float C=u_color_range.y;if(C<=B){v_color_t=0.5;}else if(B<0.&&C>0.){float D=max(-B,C);v_color_t=clamp(0.5+0.5*(a_color_value/D),0.,1.);}else{v_color_t=clamp((a_color_value-B)/(C-B),0.,1.);}}"});var jn,Do=G(()=>{jn="precision highp float;uniform float u_intensity;varying vec2 v_uv;varying float v_color_t;void main(){float A=length(v_uv);float B=max(0.,1.-A);B=B*B*u_intensity;if(B<=0.){discard;}gl_FragColor=vec4(B,B*v_color_t,0.,0.);}"});var Zn,Bo=G(()=>{Zn="precision highp float;varying vec2 v_uv;varying float v_color_t;void main(){float A=length(v_uv);if(A>=1.){discard;}float B=(v_color_t-0.5)*2.;gl_FragColor=vec4(max(0.,B),max(0.,-B),0.,0.);}"});var es,Qr=G(()=>{es=`#version 300 es\nin vec2 a_corner;in vec2 a_position;in float a_color_value;uniform mat4 u_projection;uniform vec2 u_radius_ndc;uniform vec2 u_color_range;out vec2 v_uv;out float v_color_t;void main(){vec4 A=u_projection*vec4(a_position,0.,1.);gl_Position=A+vec4(a_corner*u_radius_ndc*A.w,0.,0.);v_uv=a_corner;float B=u_color_range.x;float C=u_color_range.y;if(C<=B){v_color_t=0.5;}else if(B<0.&&C>0.){float D=max(-B,C);v_color_t=clamp(0.5+0.5*(a_color_value/D),0.,1.);}else{v_color_t=clamp((a_color_value-B)/(C-B),0.,1.);}}`});var ns,ts=G(()=>{ns=`#version 300 es\nprecision highp float;uniform float u_intensity;in vec2 v_uv;in float v_color_t;layout(location=0)out vec4 A;layout(location=1)out vec4 B;void main(){float C=length(v_uv);float D=max(0.0f,1.0f-C);D=D*D*u_intensity;if(D<=0.0f){discard;}A=vec4(D,D*v_color_t,0.0f,0.0f);float E=(v_color_t-0.5f)*2.0f;B=vec4(max(0.0f,E),max(0.0f,-E),0.0f,0.0f);}`});var qn,Po=G(()=>{qn="attribute vec2 a_corner;varying vec2 v_uv;void main(){v_uv=a_corner*0.5+0.5;gl_Position=vec4(a_corner,0.,1.);}"});var Kn,Eo=G(()=>{Kn="precision highp float;uniform sampler2D u_heat;uniform sampler2D u_extreme;uniform sampler2D u_gradient_lut;uniform float u_heat_max;uniform int u_color_mode;varying vec2 v_uv;void main(){vec4 A=texture2D(u_heat,v_uv);float B=A.r;float C=A.g;if(B<=0.){discard;}float D;float E;float F=clamp(B/max(u_heat_max,1e-4),0.,1.);if(u_color_mode==0){D=pow(F,0.6);E=clamp(B,0.,1.);}else if(u_color_mode==2){vec4 G=texture2D(u_extreme,v_uv);float H=G.r;float I=G.g;float J=max(H,I);if(J<=0.){D=0.5;}else if(H>=I){D=clamp(0.5+H*0.5,0.5,1.);}else{D=clamp(0.5-I*0.5,0.,0.5);}E=F;}else if(u_color_mode==3){float K=C-0.5*B;float L=clamp(abs(K)/max(u_heat_max,1e-4),0.,1.);float M=K>=0.?1.:-1.;D=clamp(0.5+0.5*M*L,0.,1.);E=L;}else{D=clamp(C/B,0.,1.);E=F;}vec4 N=texture2D(u_gradient_lut,vec2(D,0.5));gl_FragColor=vec4(N.rgb,N.a*E);}"});var Jn,Go=G(()=>{Jn="attribute vec2 a_corner;uniform mat4 u_projection;uniform vec2 u_extent_min;uniform vec2 u_extent_max;uniform vec2 u_uv_min;uniform vec2 u_uv_max;varying vec2 v_uv;void main(){vec2 A=mix(u_extent_min,u_extent_max,a_corner);vec2 B=mix(u_uv_min,u_uv_max,vec2(a_corner.x,1.-a_corner.y));v_uv=B;gl_Position=u_projection*vec4(A,0.,1.);}"});var Qn,Wo=G(()=>{Qn="precision highp float;varying vec2 v_uv;uniform sampler2D u_tile;uniform float u_alpha;void main(){vec4 A=texture2D(u_tile,v_uv);gl_FragColor=vec4(A.rgb,A.a*u_alpha);}"});function Iu(e,t){if(t.width<=0||t.height<=0)return e;let n=e.xMax-e.xMin,i=e.yMax-e.yMin;if(n<=0||i<=0)return e;let o=t.width/t.height;if(n/i<o){let s=(e.xMin+e.xMax)/2,a=i*o/2;return{xMin:s-a,xMax:s+a,yMin:e.yMin,yMax:e.yMax}}else{let s=(e.yMin+e.yMax)/2,a=n/o/2;return{xMin:e.xMin,xMax:e.xMax,yMin:s-a,yMax:s+a}}}var xt,ti=G(()=>{"use strict";xt=class{constructor(){d(this,"ce",1);d(this,"de",1);d(this,"Ie",0);d(this,"De",0);d(this,"wt",0);d(this,"Rt",1);d(this,"Mt",0);d(this,"Ft",1);d(this,"je",null);d(this,"Mo",!1);d(this,"ki",!1);d(this,"Ni",!1);d(this,"St",null);d(this,"It",null);d(this,"jn",null);d(this,"Oi",!1);d(this,"Ui",0);d(this,"Vi",0);d(this,"Zn",null);d(this,"qn",null);d(this,"Kn",null);d(this,"Jn",null)}get lockedAxis(){return this.je}get scaleX(){return this.ce}get scaleY(){return this.de}set scaleX(t){this.ce=t}set scaleY(t){this.de=t}get normTranslateX(){return this.Ie}get normTranslateY(){return this.De}set normTranslateX(t){this.Ie=t}set normTranslateY(t){this.De=t}get baseXRange(){return this.Rt-this.wt}get baseYRange(){return this.Ft-this.Mt}setBaseDomain(t,n,i,o){let r=n-t;if(this.isXDefault()||!this.ki)this.wt=t,this.Rt=n;else{let a=this.Rt-this.wt,l=(this.wt+this.Rt)/2+this.Ie*a;this.wt=t,this.Rt=n,this.Ie=r>0?(l-(t+n)/2)/r:0}let s=o-i;if(this.isYDefault()||!this.Ni)this.Mt=i,this.Ft=o;else{let a=this.Ft-this.Mt,l=(this.Mt+this.Ft)/2+this.De*a;this.Mt=i,this.Ft=o,this.De=s>0?(l-(i+o)/2)/s:0}}pinAxis(t){t==="x"?this.ki=!0:this.Ni=!0}unpinAxis(t){t==="x"?this.ki=!1:this.Ni=!1}configure(t){this.je=t.lockAxis??null,this.Mo=t.lockAspect??!1,this.je==="x"?(this.ce=1,this.Ie=0):this.je==="y"&&(this.de=1,this.De=0)}isXDefault(){return this.ce===1&&this.Ie===0}isYDefault(){return this.de===1&&this.De===0}isDefault(){return this.isXDefault()&&this.isYDefault()}getVisibleDomain(){let t=this.Rt-this.wt,n=this.Ft-this.Mt,i=t/this.ce,o=n/this.de,r=(this.wt+this.Rt)/2+this.Ie*t,s=(this.Mt+this.Ft)/2+this.De*n,a={xMin:r-i/2,xMax:r+i/2,yMin:s-o/2,yMax:s+o/2};return this.Mo&&this.It?Iu(a,this.It.e):a}attach(t,n,i){this.detach(),this.St=t,this.It=n,this.jn=i,this.Zn=o=>{o.preventDefault();let r=t.getBoundingClientRect(),s=o.clientX-r.left,a=o.clientY-r.top,l=this.It.e;if(s<l.x||s>l.x+l.width||a<l.y||a>l.y+l.height)return;let u=(s-l.x)/l.width,m=(a-l.y)/l.height,f=this.ce,p=this.de,c=Math.pow(1.1,-o.deltaY/100);this.je!=="x"&&(this.ce=Math.max(1,Math.min(1e5,this.ce*c))),this.je!=="y"&&(this.de=Math.max(1,Math.min(1e5,this.de*c))),this.je!=="x"&&f!==this.ce&&(this.Ie+=(u-.5)*(1/f-1/this.ce)),this.je!=="y"&&p!==this.de&&(this.De+=(.5-m)*(1/p-1/this.de)),this.jn()},this.qn=o=>{if(o.button!==0)return;let r=t.getBoundingClientRect(),s=o.clientX-r.left,a=o.clientY-r.top,l=this.It.e;s>=l.x&&s<=l.x+l.width&&a>=l.y&&a<=l.y+l.height&&(this.Oi=!0,this.Ui=o.clientX,this.Vi=o.clientY,t.setPointerCapture(o.pointerId))},this.Kn=o=>{if(!this.Oi)return;let r=o.clientX-this.Ui,s=o.clientY-this.Vi;this.Ui=o.clientX,this.Vi=o.clientY;let a=this.It.e;this.je!=="x"&&a.width>0&&(this.Ie-=r/(a.width*this.ce)),this.je!=="y"&&a.height>0&&(this.De+=s/(a.height*this.de)),this.jn()},this.Jn=()=>{this.Oi=!1},t.addEventListener("wheel",this.Zn,{passive:!1}),t.addEventListener("pointerdown",this.qn),t.addEventListener("pointermove",this.Kn),t.addEventListener("pointerup",this.Jn)}updateLayout(t){this.It=t}detach(){this.St&&(this.Zn&&this.St.removeEventListener("wheel",this.Zn),this.qn&&this.St.removeEventListener("pointerdown",this.qn),this.Kn&&this.St.removeEventListener("pointermove",this.Kn),this.Jn&&this.St.removeEventListener("pointerup",this.Jn)),this.St=null,this.jn=null}reset(){this.ce=1,this.de=1,this.Ie=0,this.De=0}serialize(){return{scaleX:this.ce,scaleY:this.de,normTranslateX:this.Ie,normTranslateY:this.De}}restore(t){this.ce=t.scaleX,this.de=t.scaleY,this.Ie=t.normTranslateX,this.De=t.normTranslateY}}});function ls(e){return e&&!("format"in e)?e:void 0}function No(e,t){let n=t??Du[e]??{};return new Intl.NumberFormat(navigator.languages,n)}function Oo(e){if(!e||!("format"in e)){let n=ls(e),i={timeZone:n?.timeZone??void 0,dateStyle:n?.dateStyle==="disabled"?void 0:n?.dateStyle??as.dateStyle,timeStyle:n?.timeStyle==="disabled"?void 0:n?.timeStyle??as.timeStyle};return new Intl.DateTimeFormat(navigator.languages,i)}let t={timeZone:e.timeZone??void 0,hour12:e.hour12??!0,fractionalSecondDigits:e.fractionalSecondDigits};return e.year!=="disabled"&&(t.year=e.year??"2-digit"),e.month!=="disabled"&&(t.month=e.month??"numeric"),e.day!=="disabled"&&(t.day=e.day??"numeric"),e.weekday&&e.weekday!=="disabled"&&(t.weekday=e.weekday),e.hour!=="disabled"&&(t.hour=e.hour??"numeric"),e.minute!=="disabled"&&(t.minute=e.minute??"numeric"),e.second!=="disabled"&&(t.second=e.second??"numeric"),new Intl.DateTimeFormat(navigator.languages,t)}function us(e){let t=ls(e),n={timeZone:"utc",dateStyle:t?.dateStyle==="disabled"?void 0:t?.dateStyle??Bu.dateStyle};return new Intl.DateTimeFormat(navigator.languages,n)}function Uo(e){return e.split("|").at(-1)??e}var Du,as,Bu,ms=G(()=>{"use strict";Du={float:{style:"decimal",minimumFractionDigits:2,maximumFractionDigits:2}},as={dateStyle:"short",timeStyle:"medium"},Bu={dateStyle:"short"}});var ii,fs=G(()=>{"use strict";ii=class{constructor(t,n=128){d(this,"qt");d(this,"d",new Map);d(this,"Le",new Map);d(this,"Fo");this.qt=t,this.Fo=n}async fetchRow(t){if(!this.qt)throw new Error("LazyRowFetcher disposed");let n=this.d.get(t);if(n)return this.d.delete(t),this.d.set(t,n),n;let i=this.Le.get(t);if(i)return i;let o=this.ur(t);this.Le.set(t,o);try{let r=await o;if(!this.qt)return r;if(this.d.set(t,r),this.d.size>this.Fo){let s=this.d.keys().next().value;s!==void 0&&this.d.delete(s)}return r}finally{this.Le.delete(t)}}async ur(t){let n=this.qt;if(!n)throw new Error("LazyRowFetcher disposed");let i=new Map;return await n.with_typed_arrays({start_row:t,end_row:t+1,float32:!0},(o,r,s,a)=>{for(let l=0;l<o.length;l++){let u=o[l];if(u.startsWith("__"))continue;let m=r[l],f=s[l],p=a[l];(f?!(f[0]>>0&1):!1)?i.set(u,null):p?i.set(u,p[m[0]]):i.set(u,m[0])}}),i}dispose(){this.qt=null,this.d.clear(),this.Le.clear()}get isDisposed(){return this.qt===null}}});function cs(e,t){let n=Math.floor(Math.log10(e)),i=e/Math.pow(10,n),o;return t?i<1.5?o=1:i<3?o=2:i<7?o=5:o=10:i<=1?o=1:i<=2?o=2:i<=5?o=5:o=10,o*Math.pow(10,n)}function oe(e,t,n){n<1&&(n=1);let i=cs(t-e,!1),o=cs(i/n,!0),r=Math.ceil(e/o)*o,s=Math.floor(t/o)*o,a=[];for(let l=r;l<=s+o*.001;l+=o)a.push(l);return a}function me(e){if(!Number.isFinite(e))return"-";let t=Math.abs(e);return t===0?"0":t>=1e9?(e/1e9).toFixed(1)+"B":t>=1e6?(e/1e6).toFixed(1)+"M":t>=1e3?(e/1e3).toFixed(1)+"K":Number.isInteger(e)?e.toString():t>=1?e.toFixed(1):e.toFixed(2)}function Ct(e,t){let n=ds.get(e);return n||(n=new Intl.DateTimeFormat(void 0,t),ds.set(e,n)),n}function xe(e,t){let n=new Date(e);return isNaN(n.getTime())?me(e):t!==void 0&&t>0?t>=864e5*28?Ct("ym",{year:"numeric",month:"short"}).format(n):t>=864e5?Ct("md",{month:"short",day:"numeric"}).format(n):t>=36e5?Ct("mdh",{month:"short",day:"numeric",hour:"numeric"}).format(n):t>=6e4?Ct("hm",{hour:"numeric",minute:"2-digit"}).format(n):Ct("hms",{hour:"numeric",minute:"2-digit",second:"2-digit"}).format(n):Ct("ymd",{year:"numeric",month:"short",day:"numeric"}).format(n)}var ds,Le=G(()=>{"use strict";ds=new Map});var ps,bs,hs=G(()=>{"use strict";ps={facet_mode:"grid",shared_x_axis:!0,shared_y_axis:!0,coordinated_tooltip:!1,zoom_mode:"shared",facet_padding:6},bs={auto_alt_y_axis:!1,facet_mode:"grid",facet_zoom_mode:"shared",series_zoom_mode:"dynamic",include_zero:!1,domain_mode:"expand",line_width_px:2,point_size_px:8,band_inner_frac:.5,bar_inner_pad:.1,wick_width_px:1,ohlc_line_width_px:1,gradient_radius_px:32,gradient_intensity:.6,gradient_heat_max:4,gradient_color_mode:"mean",map_tile_provider:"carto-positron",map_tile_alpha:1}});function Ee(e,t,n,i,o,r,s={}){if(!e)return;let a=e.getContext("2d");if(!a)return;a.save(),a.setTransform(1,0,0,1,0,0),a.scale(r,r),a.font=`11px ${o.fontFamily}`;let l=16,u=8,m=0;for(let y of n){let g=a.measureText(y).width;g>m&&(m=g)}let f=m+u*2,p=n.length*l+u*2-4,c=t.px+12,b=t.py-p-8;c+f>i.cssWidth&&(c=t.px-f-12),b<0&&(b=t.py+12),b+p>i.cssHeight&&(b=i.cssHeight-p-4);let h=n.length>0;if(s.crosshair&&(a.strokeStyle=o.Dt,a.globalAlpha=.3,a.lineWidth=1,a.setLineDash([4,4]),a.beginPath(),a.moveTo(t.px,i.e.y),a.lineTo(t.px,i.e.y+i.e.height),a.moveTo(i.e.x,t.py),a.lineTo(i.e.x+i.e.width,t.py),a.stroke(),a.setLineDash([]),a.globalAlpha=1),s.highlightRadius&&s.highlightRadius>0&&(a.strokeStyle=o.Dt,a.globalAlpha=.8,a.lineWidth=2,a.beginPath(),a.arc(t.px,t.py,s.highlightRadius,0,Math.PI*2),a.stroke(),a.globalAlpha=1),h){a.fillStyle=o.Qn,a.strokeStyle=o.So,a.lineWidth=1,a.beginPath(),a.roundRect(c,b,f,p,4),a.fill(),a.stroke(),a.fillStyle=o.Io,a.textAlign="left",a.textBaseline="top";for(let y=0;y<n.length;y++)a.fillText(n[y],c+u,b+u+y*l)}a.restore()}var oi,_t=G(()=>{"use strict";oi=class{constructor(){d(this,"Oe",null);d(this,"Kt",0);d(this,"Jt",null);d(this,"cn",null);d(this,"ht",!1)}get isPinned(){return this.ht}setHost(t){this.ht&&(this.cn?.dismiss(),this.ht=!1),this.cn=t}setCursor(t){this.cn?.setCursor(t)}attach(t){this.detach(),this.Oe=t}detach(){this.Kt&&(cancelAnimationFrame(this.Kt),this.Kt=0),this.Jt!==null&&(clearTimeout(this.Jt),this.Jt=null),this.Oe=null}dispatchHover(t,n){if(this.ht||!this.Oe||this.Kt||this.Jt!==null)return;let i=()=>{this.Kt=0,this.Jt=null,this.Oe?.onHover(t,n)};typeof requestAnimationFrame=="function"?this.Kt=requestAnimationFrame(i):this.Jt=setTimeout(i,16)}dispatchLeave(){this.ht||!this.Oe||this.Oe.onLeave()}dispatchClick(t,n){if(this.Oe&&!this.Oe.onClickPre?.(t,n)){if(this.ht){let i=this.Oe;this.dismiss(),i.onUnpin?.();return}this.Oe.onPin?.(t,n)}}dispatchDblClick(t,n){this.Oe?.onDblClick?.(t,n)}pin(t,n,i){t.length!==0&&(this.cn?.pin(t,n,i),this.ht=!0)}dismiss(){this.cn?.dismiss(),this.ht=!1}}});function ri(e){let t=e.trim();if(t.startsWith("#")){let i=t.slice(1);return i.length===3&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),[parseInt(i.slice(0,2),16)/255,parseInt(i.slice(2,4),16)/255,parseInt(i.slice(4,6),16)/255]}let n=t.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/);return n?[+n[1]/255,+n[2]/255,+n[3]/255]:[.5,.5,.5]}var Vo=G(()=>{"use strict"});function gs(e){if(!e)return ot.slice();let t=e.trim();if(!t)return ot.slice();let n=t.indexOf("(");if(n<0||!/^linear-gradient\\s*\\(/i.test(t))return ot.slice();let i=t.lastIndexOf(")");if(i<=n)return ot.slice();let o=t.substring(n+1,i),r=[],s=0,a=0;for(let p=0;p<o.length;p++){let c=o[p];c==="("?s++:c===")"?s--:c===","&&s===0&&(r.push(o.substring(a,p)),a=p+1)}r.push(o.substring(a));let l=[],u=0;if(r.length>0){let p=r[0].trim().toLowerCase();(p.startsWith("to ")||/^[-\\d.]+(deg|rad|grad|turn)/.test(p))&&(u=1)}for(let p=u;p<r.length;p++){let c=r[p].trim();if(!c)continue;let b=c.match(/\\s([\\-\\d.]+)%\\s*$/),h=b?c.substring(0,b.index).trim():c,y=b?parseFloat(b[1])/100:null;try{let g=ri(h);l.push({color:g,offset:y})}catch{}}if(l.length===0)return ot.slice();if(l.length===1){let[p,c,b]=l[0].color;return[{offset:0,color:[p,c,b,1]},{offset:1,color:[p,c,b,1]}]}l[0].offset===null&&(l[0].offset=0),l[l.length-1].offset===null&&(l[l.length-1].offset=1);for(let p=1;p<l.length-1;p++){if(l[p].offset!==null)continue;let c=p+1;for(;c<l.length&&l[c].offset===null;)c++;let b=l[p-1].offset,h=l[c].offset,y=c-(p-1);for(let g=p;g<c;g++)l[g].offset=b+(g-(p-1))/y*(h-b);p=c-1}let m=0;return l.map(p=>{let c=Math.max(m,Math.min(1,p.offset));return m=c,{offset:c,color:[p.color[0],p.color[1],p.color[2],1]}})}function Ho(e){let t=e.trim();if(t.startsWith("#")){let l=t.slice(1);return/^[0-9a-f]+$/i.test(l)?l.length===3||l.length===4?[parseInt(l[0]+l[0],16)/255,parseInt(l[1]+l[1],16)/255,parseInt(l[2]+l[2],16)/255]:l.length===6||l.length===8?[parseInt(l.slice(0,2),16)/255,parseInt(l.slice(2,4),16)/255,parseInt(l.slice(4,6),16)/255]:null:null}let n=t.match(/^rgba?\\(([^)]*)\\)$/i);if(!n)return null;let i=n[1].split("/")[0].split(/[\\s,]+/).filter(l=>l.length>0);if(i.length<3||i.length>4)return null;let o=l=>{let u=l.endsWith("%"),m=parseFloat(u?l.slice(0,-1):l);if(!isFinite(m))return null;let f=u?m/100*255:m;return Math.max(0,Math.min(255,Math.round(f)))/255},r=o(i[0]),s=o(i[1]),a=o(i[2]);return r===null||s===null||a===null?null:[r,s,a]}function ys(e){let t=e.trim().match(/^linear-gradient\\s*\\((.*)\\)$/is);if(!t)return null;let n=t[1],i=[],o=0,r=0;for(let a=0;a<n.length;a++){let l=n[a];l==="("?o++:l===")"?o--:l===","&&o===0&&(i.push(n.substring(r,a)),r=a+1)}i.push(n.substring(r));let s=[];for(let a=0;a<i.length;a++){let l=i[a].trim();if(!l)return null;let u=l.toLowerCase();if(a===0&&(u.startsWith("to ")||/^[-\\d.]+(deg|rad|grad|turn)$/.test(u)))continue;let m=l.match(/\\s([^\\s)]+)$/),f=l,p=null;if(m){let b=m[1];if(b.endsWith("%")){let h=parseFloat(b.slice(0,-1));if(!isFinite(h))return null;f=l.substring(0,m.index).trim(),p=h/100}else if(/^[-\\d.]/.test(b))return null}let c=Ho(f);if(!c)return null;s.push([c,p])}return s}function xs(e){let t=ys(e);if(!t||t.length<2)return null;let n=t.map(([,r])=>r),i=n.length-1;n[0]===null&&(n[0]=0),n[i]===null&&(n[i]=1);for(let r=1;r<i;r++){if(n[r]!==null)continue;let s=r+1;for(;n[s]===null;)s++;let a=n[r-1],l=n[s],u=s-(r-1);for(let m=r;m<s;m++)n[m]=a+(m-(r-1))/u*(l-a);r=s-1}let o=t.map(([r],s)=>({offset:Math.max(0,Math.min(1,n[s])),color:[r[0],r[1],r[2],1]}));return o.sort((r,s)=>r.offset-s.offset),o}function si(e){let t=ys(e);if(!t||t.length===0)return null;let n=[];for(let[i,o]of t){if(o!==null)return null;n.push(i)}return n}function Te(e,t){if(e.length===0)return[0,0,0,1];if(t<=e[0].offset)return e[0].color.slice();let n=e[e.length-1];if(t>=n.offset)return n.color.slice();let i=0,o=e.length-1;for(;o-i>1;){let u=i+o>>1;e[u].offset<=t?i=u:o=u}let r=e[i],s=e[o],a=s.offset-r.offset,l=a>0?(t-r.offset)/a:0;return[r.color[0]+(s.color[0]-r.color[0])*l,r.color[1]+(s.color[1]-r.color[1])*l,r.color[2]+(s.color[2]-r.color[2])*l,r.color[3]+(s.color[3]-r.color[3])*l]}function rt(e,t,n){if(!isFinite(e)||t===n)return .5;let i;if(t>=0?i=n:n<=0?i=-t:i=Math.max(-t,n),i<=0)return .5;let o=.5+.5*(e/i);return o<0?0:o>1?1:o}function Cs(e){if(e.length===0)return ot.slice();if(e.length===1){let[n,i,o]=e[0];return[{offset:0,color:[n,i,o,1]},{offset:1,color:[n,i,o,1]}]}let t=e.length-1;return e.map(([n,i,o],r)=>({offset:r/t,color:[n,i,o,1]}))}function _s(e,t=256){let n=new Uint8Array(t*4);for(let i=0;i<t;i++){let o=t===1?0:i/(t-1),r=Te(e,o);n[i*4]=Math.round(r[0]*255),n[i*4+1]=Math.round(r[1]*255),n[i*4+2]=Math.round(r[2]*255),n[i*4+3]=Math.round(r[3]*255)}return n}var ot,Ce=G(()=>{"use strict";Vo();ot=[{offset:0,color:[3/255,102/255,214/255,1]},{offset:1,color:[255/255,127/255,14/255,1]}]});function Pu(e){return isFinite(e)?e<0?0:e>1?1:e:.5}function vs(e){return!isFinite(e)||e<0?1:e}function As(e){let t=(r,s)=>e[r]||s,n=e["--psp-charts--gradient--background"]||e["--psp-charts--full-gradient--background"]||"linear-gradient(#0366d6 0%, #ff7f0e 100%)",i=gs(n),o=[];for(let r=1;;r++){let s=e[`--psp-charts--series-${r}--color`];if(!s)break;o.push(ri(s))}return{fontFamily:t("--psp-charts--font-family",t("font-family","monospace")),backgroundColor:t("--psp--background-color","rgba(255, 255, 255, 1)"),Dt:t("--psp-charts--axis-ticks--color","rgba(160, 0, 0, 0.8)"),Te:t("--psp--color","rgba(180, 0, 0, 0.9)"),ei:t("--psp-charts--axis-lines--color","rgba(160, 0, 0, 0.4)"),dn:t("--psp-charts--gridline--color","rgba(255, 0, 0, 1)"),O:i,pn:t("--psp-charts--legend--color","rgba(180, 180, 180, 0.9)"),mr:t("--psp-charts--legend-border--color","rgba(128,128,128,0.3)"),Qn:t("--psp-charts--tooltip--background","rgba(155,155,155,0.8)"),Io:t("--psp-charts--tooltip--color","#161616"),So:t("--psp-charts--tooltip--border-color","#fff"),ti:Pu(parseFloat(t("--psp-charts--area--opacity","0.85"))),Do:vs(parseFloat(t("--psp-charts--heatmap-gap--px","0"))),Bo:vs(parseFloat(t("--psp-charts--sunburst-gap--px","1"))),Be:o}}var Ls=G(()=>{"use strict";Vo();Ce()});function Ts(e,t,n){if(!n)return e;let i=t?.[n];if(!i)return e;let o=e,r=Gu(i.gradient);r&&(o={...o,O:r});let s=Eu(i.palette);return s&&(o={...o,Be:s}),o}function Eu(e){return typeof e!="string"?null:si(e)}function Gu(e){return typeof e!="string"?null:xs(e)}var ws=G(()=>{"use strict";Ce()});function Ms(e,t,n){let i=st.get(e);i?(i.fullRender=t,i.render2D=n):(i={glManager:e,fullRender:t,render2D:n,waiters:[]},st.set(e,i));let o=Promise.withResolvers();return i.waiters.push(o),ai||(ai=Ds(Is)),o.promise}function Fs(e,t){if(!li.has(e)){t();return}let n=Jt.get(e);n||(n=[],Jt.set(e,n)),n.push(t)}function Ss(e){let t=st.get(e);if(t){st.delete(e);for(let n of t.waiters)n.resolve()}Jt.delete(e),li.delete(e)}async function Is(){let e=Array.from(st.values());st.clear();let t=new Map;for(let n of e){if(n.glManager.isContextLost()){for(let r of n.waiters)r.resolve();continue}let i=n.glManager.backendId,o=t.get(i);o?o.push(n):t.set(i,[n])}await Promise.all(Array.from(t.values()).map(Wu)),ai=0,st.size>0&&(ai=Ds(Is))}async function Wu(e){for(let t of e)await ku(t)}async function ku(e){li.add(e.glManager);try{e.glManager.beginFrame(),e.fullRender()}catch(t){console.error("scheduler: fullRender threw",t);for(let n of e.waiters)n.reject(t);Rs(e.glManager);return}try{await e.glManager.awaitGpuFence(),e.render2D(),e.glManager.endFrame();for(let t of e.waiters)t.resolve()}catch(t){console.error("scheduler: present failed",t);try{e.glManager.endFrame()}catch{}for(let n of e.waiters)n.reject(t)}finally{Rs(e.glManager)}}function Rs(e){li.delete(e);let t=Jt.get(e);if(t){Jt.delete(e);for(let n of t)try{n()}catch(i){console.error("scheduler: deferred op threw",i)}}}function Ds(e){return typeof requestAnimationFrame=="function"?requestAnimationFrame(e):setTimeout(e,16)}var st,ai,li,Jt,Yo=G(()=>{"use strict";st=new Map,ai=0,li=new Set,Jt=new Map});var Bs,Nu,Ou,we,Qt=G(()=>{"use strict";ms();fs();Le();ti();hs();_t();Ls();ws();Yo();Bs=!0,Nu=(()=>{if(Bs)return me;{let e=No("float");return t=>e.format(t)}})(),Ou=(()=>{if(Bs)return xe;{let e=Oo();return t=>e.format(t)}})(),we=class{constructor(){d(this,"t",null);d(this,"j",null);d(this,"c",null);d(this,"Po",null);d(this,"bn",[]);d(this,"Eo",{});d(this,"h",null);d(this,"hn",[]);d(this,"R",[]);d(this,"g",[]);d(this,"D",[]);d(this,"Ue",{});d(this,"ni",!1);d(this,"ii",!1);d(this,"gt",{});d(this,"gn",{});d(this,"Hi",new Map);d(this,"oi");d(this,"G",{...ps});d(this,"C",{...bs});d(this,"T",new oi);d(this,"Yi",null);d(this,"ri",Promise.resolve());d(this,"Qt",null);d(this,"Go",null);d(this,"Pe",null)}setGridlineCanvas(t){this.j=t}setChromeCanvas(t){this.c=t}setOverlayPresenter(t){this.Po=t}presentOverlay(){this.Po?.()}setTheme(t){this.Eo=t,this.Qt=null}setZoomController(t){this.h=t,t.configure(this.getZoomConfig())}getZoomControllerForFacet(t){if(this.G.zoom_mode==="shared")return this.h;if(!this.h)return null;let n=this.hn[t];return n||(n=new xt,n.configure(this.getZoomConfig()),this.hn[t]=n),n}computeEffectiveFacetFlags(){let t=this.G.zoom_mode==="independent",n=!t&&this.G.shared_x_axis,i=!t&&this.G.shared_y_axis;return this.ni=n,this.ii=i,{independentZoom:t,effectiveSharedX:n,effectiveSharedY:i}}syncFacetZoomLayouts(t){let n=this.G.zoom_mode==="independent";for(let i=0;i<t.length;i++)if(this.getZoomControllerForFacet(i)?.updateLayout(t[i].layout),!n)return}setZoomBaseDomain(t,n,i,o){this.h&&this.h.setBaseDomain(t,n,i,o);for(let r of this.hn)r&&r.setBaseDomain(t,n,i,o)}getZoomConfig(){return{}}setColumnSlots(t){this.R=t}setViewPivots(t,n){this.g=t,this.D=n}setColumnTypes(t){this.Ue=t,this.Wo()}resetExpandedDomain(){}setGroupByTypes(t){this.gt=t}setColumnsConfig(t){this.gn=t??{},this.Wo(),this.Qt=null}Wo(){this.Hi=new Map;for(let[t,n]of Object.entries(this.gn)){let i=this.Ue[t]??this.gt[t],o=this.fr(i,n);o&&this.Hi.set(t,o)}}fr(t,n){if(!(!t||!n)){if(t==="integer"||t==="float"){let i=n.number_format;if(!i)return;let o=No(t,i);return r=>o.format(r)}if(t==="datetime"){let i=n.date_format;if(!i)return;let o=Oo(i);return r=>o.format(r)}if(t==="date"){let i=n.date_format;if(!i)return;let o=us(i);return r=>o.format(r)}}}getColumnFormatter(t,n="value"){if(t){let r=this.Hi.get(Uo(t));if(r)return r}if(n==="tick")return;let i=t?Uo(t):void 0,o=i?this.Ue[i]??this.gt[i]:void 0;return o==="date"||o==="datetime"?Ou:Nu}setDefaultChartType(t){this.oi=t}setFacetConfig(t){this.G={...t}}setPluginConfig(t){this.C={...t},this.G={...this.G,facet_mode:t.facet_mode,zoom_mode:t.facet_zoom_mode},this.si=t.series_zoom_mode==="dynamic"}colorScaleColumn(){return null}A(){let t=this.colorScaleColumn();return(!this.Qt||this.Go!==t)&&(this.Go=t,this.Qt=Ts(As(this.Eo),this.gn,t)),this.Qt}invalidateTheme(){this.Qt=null}setView(t){this.Pe&&this.Pe.dispose(),this.Pe=new ii(t);let n=this.T.isPinned;this.T.dismiss(),n&&this.emitUnselect()}deselect(){this.T.dismiss()}tooltipCallbacks(){return{onHover:()=>{},onLeave:()=>{}}}attachTooltip(t){this.T.attach(this.tooltipCallbacks()),this.T.setHost(t),this.Yi=t}async buildClickDetail(t){let n={};if(t.rowIdx!=null&&t.rowIdx>=0&&this.Pe)try{let o=await this.Pe.fetchRow(t.rowIdx);n=Object.fromEntries(o)}catch{n={}}let i=[];for(let o=0;o<this.g.length;o++){let r=t.groupByValues[o];r!=null&&r!==""&&i.push([this.g[o],"==",r])}for(let o=0;o<this.D.length;o++){let r=t.splitByValues[o];r!=null&&r!==""&&i.push([this.D[o],"==",r])}return{row:n,column_names:[t.columnName],config:{filter:i}}}emitUserClick(t){let n={row:t.row,column_names:t.column_names,config:t.config};this.Yi?.emitUserClick?.(n)}emitUserSelect(t){let n={selected:t.selected,row:t.row,column_names:t.column_names,insertConfig:t.insertConfig};this.Yi?.emitUserSelect?.(n)}emitClickAndSelect(t){let n=this.ri.then(async()=>{let i=await this.buildClickDetail(t);this.emitUserClick(i),this.emitUserSelect({selected:!0,row:i.row,column_names:i.column_names,insertConfig:i.config})});return this.ri=n.catch(i=>{console.error("emitClickAndSelect failed",i)}),n}emitUnselect(t={}){let n=this.ri.then(()=>{this.emitUserSelect({selected:!1,row:t.row??{},column_names:t.column_names??[],insertConfig:{filter:[]}})});this.ri=n.catch(i=>{console.error("emitUnselect failed",i)})}requestRender(t){return Ms(t,()=>{this.bn=[],this.Bt(t)},()=>this.ko())}pe(t){this.bn.push(t)}ko(){let t=this.bn;this.bn=[];for(let n of t)n()}renderFrameSync(t){this.bn=[],this.Bt(t),this.ko()}destroy(){this.T.detach(),this.T.dismiss(),this.Pe&&(this.Pe.dispose(),this.Pe=null),this.destroyInternal()}}});var ui,Ps=G(()=>{"use strict";ui=class{constructor(t,n,i,o,r){d(this,"Qe",new Map);d(this,"be");d(this,"we");d(this,"Pt");d(this,"No");this.be=t,this.we=i,this.Pt=r,this.No=Math.max(1,Math.ceil((n-t)/r))}Oo(t,n){return n*this.No+t}insert(t,n,i){let o=Math.floor((n-this.be)/this.Pt),r=Math.floor((i-this.we)/this.Pt),s=this.Oo(o,r),a=this.Qe.get(s);a||(a=[],this.Qe.set(s,a)),a.push(t)}query(t,n,i,o,r,s,a){let l=Math.ceil(i/o/this.Pt),u=Math.ceil(i/r/this.Pt),m=Math.floor((t-this.be)/this.Pt),f=Math.floor((n-this.we)/this.Pt),p=-1,c=i*i;for(let b=f-u;b<=f+u;b++)for(let h=m-l;h<=m+l;h++){let y=this.Qe.get(this.Oo(h,b));if(y)for(let g of y){let x=(s[g]-t)*o,_=(a[g]-n)*r,C=x*x+_*_;C<c&&(c=C,p=g)}}return p}}});var mi,Es=G(()=>{"use strict";Ps();mi=class{constructor(){d(this,"yn",null);d(this,"xn",!0)}markDirty(){this.xn=!0}get isDirty(){return this.xn}rebuild(t,n,i){if(n===0){this.yn=null,this.xn=!1;return}let o=t.xMax-t.xMin||1,r=t.yMax-t.yMin||1,a=(o+r)/2/Math.max(1,Math.sqrt(n)),l=new ui(t.xMin,t.xMax,t.yMin,t.yMax,a);i((u,m,f)=>l.insert(u,m,f)),this.yn=l,this.xn=!1}query(t,n,i,o,r,s,a){return!this.yn||!s||!a?-1:this.yn.query(t,n,i,o,r,s,a)}clear(){this.yn=null,this.xn=!0}}});function He(e,t,n=[]){let i=new Map;for(let r of e.keys()){if(r.startsWith("__"))continue;let s=r.lastIndexOf("|");if(s===-1)continue;let a=r.substring(0,s);i.has(a)||i.set(a,new Set),i.get(a).add(r)}let o=[];for(let[r,s]of i){let a=new Map,l=!0;for(let u of t){if(!u)continue;let m=`${r}|${u}`,f=e.get(m);if(!s.has(m)||!f?.values){l=!1;break}a.set(u,m)}if(l){for(let u of n){if(!u)continue;let m=`${r}|${u}`;s.has(m)&&e.get(m)?.values&&a.set(u,m)}o.push({prefix:r,colNames:a})}}return o}var en=G(()=>{"use strict"});var fi,Gs=G(()=>{"use strict";fi=class{constructor(t){d(this,"data");d(this,"dictionary",[]);d(this,"dictMap",new Map);this.data=new Int32Array(t),this.data.fill(-1)}set(t,n){let i=this.dictMap.get(n);return i===void 0&&(i=this.dictionary.length,this.dictionary.push(n),this.dictMap.set(n,i)),this.data[t]=i,i}get(t){let n=this.data[t];return n<0?null:this.dictionary[n]}}});function Ws(e,t,n,i){let o;if(!e)o="(null)";else{let s=e.valid;if(!(s?!!(s[t>>3]>>(t&7)&1):!0))o="(null)";else if(e.indices&&e.dictionary)o=e.dictionary[e.indices[t]]??"(null)";else if(e.values){let l=e.values[t];o=l==null?"(null)":String(l)}else o="(null)"}let r=i.get(o);return r===void 0&&(r=n.length,n.push(o),i.set(o,r)),r}function Uu(e,t,n,i,o,r){let s=t?[t,n]:[n],a=[];return i&&a.push(i),o&&a.push(o),r&&a.push(r),He(e,s,a).map(l=>({prefix:l.prefix,xColName:t?l.colNames.get(t):"",yColName:l.colNames.get(n),colorColName:i?`${l.prefix}|${i}`:"",sizeColName:o?`${l.prefix}|${o}`:"",labelColName:r?`${l.prefix}|${r}`:""}))}function ks(e,t,n,i){e.glyph.ensureProgram(e,t);let o=e.s,r=e.Z;e.C.domain_mode==="expand"?(e.be=e.Cn,e.et=e._n,e.we=e.vn,e.tt=e.An,e.b=e.ai,e.p=e.li,e.nt=e.ui,e.it=e.mi):(e.be=1/0,e.et=-1/0,e.we=1/0,e.tt=-1/0,e.b=1/0,e.p=-1/0,e.nt=1/0,e.it=-1/0,e.Cn=1/0,e._n=-1/0,e.vn=1/0,e.An=-1/0,e.ai=1/0,e.li=-1/0,e.ui=1/0,e.mi=-1/0),e.M=NaN,e.F=NaN,e.yt=0,e.en.clear(),e.zi=0;let a=e.R,l=a[0]||"",u=a[1]||"",m=a[2]||"",f=a[3]||"",p=a[4]||"";e.Ve=l,e.Ee=u,e.Uo=!l,e.Ge=!!l&&e.Ue[l]==="string",e.he=!!u&&e.Ue[u]==="string",e.tn=[],e.nn=[],e.Vo=new Map,e.Ho=new Map,e.ot=null,e.rt=null,e.Ge&&(e.M=0,e.be=0,e.et=0,e.Cn=1/0,e._n=-1/0),e.he&&(e.F=0,e.we=0,e.tt=0,e.vn=1/0,e.An=-1/0);let c=t.v.totalCapacity||i;if(e.D.length>0){if(e.L=Uu(n,l,u,m,f,p),e.L.length===0){e.w=0,e.U=[];return}if(e.Ze=e.L[0].xColName,e.He=e.L[0].yColName,e.s=m,e.ne=f,e.fi=p,e.Z=!1,m){let y=n.get(e.L[0].colorColName);e.Z=y?.type==="string"}t.ensureBufferCapacity(c*e.L.length)}else if(e.L=[],e.Ze=l,e.He=u,e.s=m,e.ne=f,e.fi=p,e.Z=!1,e.s){let y=n.get(e.s);e.Z=y?.type==="string"}(e.s!==o||e.Z!==r)&&(e.f=new Map);let b=Math.max(1,e.L.length);e.w=c,e.U=new Array(b).fill(0);let h=b*c;e.V=new Float32Array(h),e.H=new Float32Array(h),e.xt=new Float32Array(h),e.Et=new Int32Array(h),e.Gt=p?new fi(h):null}function Ns(e,t,n,i,o,r){if(!e.He)return;let s=o;if(s===0||e.w===0)return;let a=e.L.length>0,l=[];if(a)for(let b of e.L){let h=b.xColName?n.get(b.xColName):null,y=n.get(b.yColName);if(!y||!e.he&&!y.values)continue;let g=b.sizeColName?n.get(b.sizeColName):null,x=b.colorColName?n.get(b.colorColName)??null:null,_=b.labelColName?n.get(b.labelColName)??null:null;l.push({xCol:h?.values??null,yCol:y.values??null,xColData:h??null,yColData:y,xValid:h?.valid,yValid:y.valid,colorCol:x,sizeCol:g?.values??null,labelCol:_})}else{let b=e.Ze?n.get(e.Ze):null,h=e.He?n.get(e.He):null;if(!h||!e.he&&!h.values)return;let y=e.s?n.get(e.s)??null:null,g=e.fi?n.get(e.fi)??null:null;l.push({xCol:b?.values??null,yCol:h.values??null,xColData:b??null,yColData:h,xValid:b?.valid,yValid:h?.valid,colorCol:y,sizeCol:null,labelCol:g})}if(l.length===0)return;e.Yo<s&&(e.Xi=new Float32Array(s*2),e.$i=new Float32Array(s),e.ji=new Float32Array(s),e.Yo=s);let u=e.Xi,m=e.$i,f=e.ji,p=!a&&e.ne?n.get(e.ne)?.values??null:null;if(e.Z&&e.s){for(let b of l){let h=b.colorCol?.dictionary;if(h)for(let y=0;y<h.length;y++){let g=h[y];e.f.has(g)||e.f.set(g,e.f.size)}}e.f.size>0&&(e.b=0,e.p=e.f.size-1)}!e.s&&e.L.length>1&&(e.b=0,e.p=e.L.length-1);for(let b=0;b<l.length;b++){let h=l[b],y=e.U[b]??0,g=b*e.w,x=e.w-y;if(x<=0)continue;let _=h.colorCol?.valid,C=0;for(let T=0;T<s&&C<x;T++){let L=T;if(!e.he&&h.yValid&&!(h.yValid[L>>3]>>(L&7)&1)||!e.Ge&&h.xCol&&h.xValid&&!(h.xValid[L>>3]>>(L&7)&1))continue;let w=_!==void 0&&!(_[L>>3]>>(L&7)&1),F;if(e.he)F=Ws(h.yColData,L,e.nn,e.Ho);else if(h.yCol){if(F=h.yCol[L],isNaN(F))continue}else continue;let I;if(e.Ge)I=Ws(h.xColData,L,e.tn,e.Vo);else if(h.xCol){if(I=h.xCol[L],isNaN(I))continue}else I=i+L;let[S,D]=e.projectPoint(I,F);if(isNaN(S)||isNaN(D))continue;S<e.be&&(e.be=S),S>e.et&&(e.et=S),D<e.we&&(e.we=D),D>e.tt&&(e.tt=D),isNaN(e.M)&&(e.M=S),isNaN(e.F)&&(e.F=D);let B=S-e.M,N=D-e.F,k=g+y+C;e.V[k]=B,e.H[k]=N,e.Et[k]=i+L,u[C*2]=B,u[C*2+1]=N;let Y=h.colorCol;if(w)m[C]=.5,e.xt[k]=.5;else if(Y&&!e.Z&&Y.values){let W=Y.values[L];m[C]=W,e.xt[k]=W,W<e.b&&(e.b=W),W>e.p&&(e.p=W)}else if(Y&&e.Z&&Y.indices&&Y.dictionary){let W=Y.dictionary[Y.indices[L]];e.f.has(W)||(e.f.set(W,e.f.size),e.p=e.f.size-1);let V=e.f.get(W);m[C]=V,e.xt[k]=V}else m[C]=b,e.xt[k]=b;if(e.Gt&&h.labelCol){let W=h.labelCol,V=W.valid;!(V!==void 0&&!(V[L>>3]>>(L&7)&1))&&W.indices&&W.dictionary&&e.Gt.set(k,W.dictionary[W.indices[L]])}if(h.sizeCol){let W=h.sizeCol[L];f[C]=W,W<e.nt&&(e.nt=W),W>e.it&&(e.it=W)}else if(p){let W=p[L];f[C]=W,W<e.nt&&(e.nt=W),W>e.it&&(e.it=W)}else f[C]=0;C++}if(C===0)continue;let v=(g+y)*2*Float32Array.BYTES_PER_ELEMENT;t.v.upload("a_position",u.subarray(0,C*2),v,2);let A=(g+y)*Float32Array.BYTES_PER_ELEMENT;t.v.upload("a_color_value",m.subarray(0,C),A),t.v.upload("a_size_value",f.subarray(0,C),A),e.U[b]=y+C,e.U[b]>e.zi&&(e.zi=e.U[b])}let c=0;for(let b of e.U)c+=b;e.yt=c,t.uploadedCount=c,e.en.markDirty(),isFinite(e.be)&&e.setZoomBaseDomain(e.be,e.et,e.we,e.tt)}var Os=G(()=>{"use strict";en();Gs()});function vt(e,t,n,i,o){let r=e.getContext("2d");r&&(r.save(),r.setTransform(1,0,0,1,0,0),r.scale(o,o),r.font=`11px ${i.fontFamily}`,r.fillStyle=i.Te,r.textAlign="center",r.textBaseline="middle",r.fillText(t,n.x+n.width/2,n.y+n.height/2),r.restore())}var ci=G(()=>{"use strict"});var ne,Ye=G(()=>{"use strict";ne=class{constructor(t,n,i){d(this,"margins");d(this,"e");d(this,"cssWidth");d(this,"cssHeight");d(this,"Y",0);d(this,"J",1);d(this,"q",0);d(this,"Q",1);this.cssWidth=t,this.cssHeight=n;let r=(i.leftExtra??55)+(i.hasYLabel?16:0),a=(i.bottomExtra??24)+(i.hasXLabel?18:0),l=0,u=i.rightExtra??(i.hasLegend?80:16),m=i.originX??0,f=i.originY??0,p=i.cellWidth??t,c=i.cellHeight??n,b=m+r,h=f+l,y=Math.max(1,p-r-u),g=Math.max(1,c-l-a),x=t-(b+y),_=n-(h+g);this.margins={top:h,right:x,bottom:_,left:b},this.e={x:b,y:h,width:y,height:g}}buildProjectionMatrix(t,n,i,o,r,s,a=.02,l=0,u=0){let m=n-t,f=o-i;m===0&&(m=1),f===0&&(f=1);let p=m*a,c=f*a,b=s&&r==="y"&&i>=0,h=s&&r==="y"&&o<=0,y=s&&r==="x"&&t>=0,g=s&&r==="x"&&n<=0;t-=p,n+=p,i-=c,o+=c,b?(i=0,o+=c):h&&(o=0,i-=c),y?(t=0,n+=p):g&&(n=0,t-=p),this.Y=t,this.J=n,this.q=i,this.Q=o;let x=2*this.margins.left/this.cssWidth-1,_=1-2*this.margins.right/this.cssWidth,C=2*this.margins.bottom/this.cssHeight-1,v=1-2*this.margins.top/this.cssHeight,A=(_-x)/(n-t),T=(v-C)/(o-i),L=x-A*(t-l),w=C-T*(i-u);return new Float32Array([A,0,0,0,0,T,0,0,0,0,-1,0,L,w,0,1])}B(t,n){let{x:i,y:o,width:r,height:s}=this.e,a=(t-this.Y)/(this.J-this.Y),l=(n-this.q)/(this.Q-this.q);return{px:i+a*r,py:o+(1-l)*s}}}});function tn(e){return e.cells.filter(t=>t.isBottomEdge).map(t=>t.layout)}function nn(e){return e.cells.filter(t=>t.isLeftEdge).map(t=>t.layout)}function ju(e,t,n,i){if(e<=1)return{cols:1,rows:1};let o=1,r=e,s=1/0,a=e;for(let l=1;l<=e;l++){let u=Math.ceil(e/l),m=Math.max(1,(t-(l-1)*i)/l),f=Math.max(1,(n-(u-1)*i)/u),p=m/f,c=Math.max(p,1/p),b=l*u;(c<s||c===s&&b<a)&&(o=l,r=u,s=c,a=b)}return{cols:o,rows:r}}function Re(e,t){let n=e.length,{cssWidth:i,cssHeight:o}=t;if(n<=0||i<=0||o<=0)return{cells:[]};let r=t.titleBand??Xu,s=t.hasLegend?$u:0,a=t.xAxis??"cell",l=t.yAxis??"cell",u=a==="none"&&l==="none",m=l==="outer"?Vu+(t.hasYLabel?Yu:0):0,f=a==="outer"?Hu+(t.hasXLabel?zu:0):0,p=0,c=s,b=m,h=p,y=Math.max(1,i-m-c),g=Math.max(1,o-p-f),x=Math.max(0,t.gap??0),{cols:_,rows:C}=ju(n,y,g,x),v=Math.max(0,_-1)*x,A=Math.max(0,C-1)*x,T=Math.max(1,(y-v)/_),L=Math.max(1,(g-A)/C),w=[];for(let D=0;D<n;D++){let B=Math.floor(D/_),N=D-B*_,k=B===C-1||D+_>=n,Y=N===0,W=b+N*(T+x),V=h+B*(L+x),U=V+r,X=W,q=T,le=Math.max(1,L-r),Se=new ne(i,o,{hasXLabel:a==="cell"&&t.hasXLabel===!0,hasYLabel:l==="cell"&&t.hasYLabel===!0,hasLegend:!1,leftExtra:l==="cell"?void 0:0,bottomExtra:a==="cell"?void 0:0,rightExtra:u?0:void 0,originX:X,originY:U,cellWidth:q,cellHeight:le}),ve=r>0?{x:X,y:V,width:q,height:r}:void 0;w.push({index:D,label:e[D],layout:Se,titleRect:ve,isLeftEdge:Y,isBottomEdge:k})}let F=t.hasLegend?{x:b+y,y:p,width:s,height:g}:void 0,I=a==="outer"?{x:b,y:h+g,width:y,height:f}:void 0;return{cells:w,legendRect:F,outerXAxisRect:I,outerYAxisRect:l==="outer"?{x:0,y:h,width:m,height:g}:void 0}}var Vu,Hu,Yu,zu,Xu,$u,At=G(()=>{"use strict";Ye();Vu=55,Hu=24,Yu=16,zu=18,Xu=18,$u=96});function Zu(e,t){if(t<=0)return[];let n=new Array(t);for(let i=0;i<t;i++){let o=t===1?.5:i/(t-1),r=Te(e,o);n[i]=[r[0],r[1],r[2]]}return n}function de(e,t,n){if(e.length>0){if(e.length>=n)return e.slice(0,n);let i=new Array(n);for(let o=0;o<n;o++)i[o]=e[o%e.length];return i}return Zu(t,n)}var on=G(()=>{"use strict";Ce()});function at(e){e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)}function lt(e,t,n,i){e.enable(e.SCISSOR_TEST),e.scissor(Math.round(t.margins.left*n),Math.round(t.margins.bottom*n),Math.round(t.e.width*n),Math.round(t.e.height*n));try{i()}finally{e.disable(e.SCISSOR_TEST)}}function ze(e,t,n,i){at(e),lt(e,t,n,i)}var rn=G(()=>{"use strict"});function sn(e,t,n){let i=e.gl,o;if(t?.texture){if(o=t.texture,t.lastStops===n)return t}else o=i.createTexture();let r=_s(n,Us);return i.bindTexture(i.TEXTURE_2D,o),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,Us,1,0,i.RGBA,i.UNSIGNED_BYTE,r),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),{texture:o,lastStops:n}}function Ge(e,t,n,i=0){let o=e.gl;o.activeTexture(o.TEXTURE0+i),o.bindTexture(o.TEXTURE_2D,t),o.uniform1i(n,i)}var Us,Lt=G(()=>{"use strict";Ce();Us=256});function ue(e,t,n){e.width=Math.round(t.cssWidth*n),e.height=Math.round(t.cssHeight*n);let i=e.getContext("2d");return i?(i.scale(n,n),i.clearRect(0,0,t.cssWidth,t.cssHeight),i):null}function re(e,t){let n=e.getContext("2d");return n?(n.setTransform(t,0,0,t,0,0),n):null}var ut=G(()=>{"use strict"});function di(e,t,n,i,o,r,s){let a=o==="bottom"?1:-1;e.textAlign="center",e.textBaseline=o==="bottom"?"top":"bottom";let l=a*8;for(let u of n){let m=r(u);m<t.x-1||m>t.x+t.width+1||(e.beginPath(),e.moveTo(m,i),e.lineTo(m,i+a*5),e.stroke(),e.fillText(s(u),m,i+l))}}function pi(e,t,n,i,o,r,s){let a=o==="left"?-1:1;e.textAlign=o==="left"?"right":"left",e.textBaseline="middle";let l=a*8;for(let u of n){let m=r(u);m<t.y-1||m>t.y+t.height+1||(e.beginPath(),e.moveTo(i,m),e.lineTo(i+a*5,m),e.stroke(),e.fillText(s(u),i+l,m))}}function Tt(e,t,n,i){for(let o of n){let r=Math.round(i(o))+.5;r<t.x||r>t.x+t.width||(e.beginPath(),e.moveTo(r,t.y),e.lineTo(r,t.y+t.height),e.stroke())}}function wt(e,t,n,i){for(let o of n){let r=Math.round(i(o))+.5;r<t.y||r>t.y+t.height||(e.beginPath(),e.moveTo(t.x,r),e.lineTo(t.x+t.width,r),e.stroke())}}var bi=G(()=>{"use strict"});function Rt(e,t,n){let{e:i}=n,o=Math.max(2,Math.floor(i.width/90)),r=Math.max(2,Math.floor(i.height/60));return{xTicks:oe(e.min,e.max,o),yTicks:oe(t.min,t.max,r)}}function zo(e,t,n,i,o,r){let s=re(e,r);if(!s)return;let{e:a}=t;s.strokeStyle=o.dn,s.lineWidth=1,Tt(s,a,n,l=>t.B(l,0).px),wt(s,a,i,l=>t.B(0,l).py)}function Vs(e,t,n){if(n)return n;let i=t.length>1?t[1]-t[0]:0;return e.isDate?o=>xe(o,i):me}function Hs(e,t,n,i,o,r,s,a,l){let{Dt:u,Te:m,ei:f,fontFamily:p}=s,c=Vs(t,n,l);e.strokeStyle=f,e.lineWidth=1,e.beginPath(),e.moveTo(r.x,o),e.lineTo(r.x+r.width,o),e.stroke(),e.fillStyle=u,e.strokeStyle=u,e.font=`11px ${p}`;for(let b of i)di(e,b.e,n,o,"bottom",h=>b.B(h,0).px,c);a&&t.label&&(e.fillStyle=m,e.font=`13px ${p}`,e.textAlign="center",e.textBaseline="bottom",e.fillText(t.label,a.cx,a.baselineY))}function Ys(e,t,n,i,o,r,s,a,l){let{Dt:u,Te:m,ei:f,fontFamily:p}=s,c=Vs(t,n,l);e.strokeStyle=f,e.lineWidth=1,e.beginPath(),e.moveTo(o,r.y),e.lineTo(o,r.y+r.height),e.stroke(),e.fillStyle=u,e.strokeStyle=u,e.font=`11px ${p}`;for(let b of i)pi(e,b.e,n,o,"left",h=>b.B(0,h).py,c);a&&t.label&&(e.fillStyle=m,e.font=`13px ${p}`,e.save(),e.translate(14,a.pivotY),e.rotate(-Math.PI/2),e.textAlign="center",e.textBaseline="bottom",e.fillText(t.label,0,0),e.restore())}function Xo(e,t,n,i,o,r,s,a){let l=re(e,s);if(!l)return;let{e:u}=n;Hs(l,t,i,[n],u.y+u.height,u,o,r?{cx:u.x+u.width/2,baselineY:n.cssHeight-2}:null,a)}function $o(e,t,n,i,o,r,s,a){let l=re(e,s);if(!l)return;let{e:u}=n;Ys(l,t,i,[n],u.x,u,o,r?{pivotY:u.y+u.height/2}:null,a)}function an(e,t,n,i,o,r,s,a,l){let u=re(e,a);u&&Hs(u,n,i,o,t.y,t,r,s?{cx:t.x+t.width/2,baselineY:t.y+t.height-2}:null,l)}function ln(e,t,n,i,o,r,s,a,l){let u=re(e,a);u&&Ys(u,n,i,o,t.x+t.width,t,r,s?{pivotY:t.y+t.height/2}:null,l)}var jo=G(()=>{"use strict";Le();ut();bi()});function Zo(e,t,n,i,o){if(o===0)return{x:e-n/2,y:t,width:n,height:i};if(o===90)return{x:e-i/2,y:t,width:i,height:n};let r=(n+i)/Math.SQRT2;return{x:e-r,y:t,width:r,height:r}}function qo(e,t){return e.x<=t.x+t.width&&t.x<=e.x+e.width&&e.y<=t.y+t.height&&t.y<=e.y+e.height}function zs(e,t){return e.x+e.width+14>t.x+t.width}function Ko(e,t){return e.x>=t.x&&e.x+e.width<=t.x+t.width&&e.y>=t.y&&e.y+e.height<=t.y+t.height}function mt(e,t,n){if(n<=0)return"";if(e.measureText(t).width<=n)return t;let i=0,o=t.length;for(;i<o;){let r=i+o+1>>1,s=t.slice(0,r)+"\\u2026";e.measureText(s).width<=n?i=r:o=r-1}return i===0?"":t.slice(0,i)+"\\u2026"}function Xs(e,t,n,i){if(i<=0||n<=0)return[];if(e.measureText(t).width<=n)return[t];let o=[],r=t;for(;r.length>0&&o.length<i;){let s=o.length===i-1,a=r.length;for(;a>0&&e.measureText(r.slice(0,a)).width>n;)a--;if(a===0&&(a=1),a===r.length){o.push(r);break}let l=a,u=r.lastIndexOf(" ",a);if(u>0&&(l=u),s){o.push(mt(e,r,n));break}o.push(r.slice(0,l)),r=r.slice(l).trimStart()}return o.length===1&&o[0].length<=2?[]:o}var hi=G(()=>{"use strict"});function gi(e,t,n,i){let o=[];if(i<=n)return o;let r=n,s=e[n];for(let a=n+1;a<i;a++){let l=e[a];l!==s&&(o.push({startIdx:r,endIdx:a-1,label:t[s]??""}),r=a,s=l)}return o.push({startIdx:r,endIdx:i-1,label:t[s]??""}),o}function un(e,t,n){if(n<t)return[];let i=[];for(let o of e){if(o.endIdx<t||o.startIdx>n)continue;let r=o.startIdx<t?t:o.startIdx,s=o.endIdx>n?n:o.endIdx;r===o.startIdx&&s===o.endIdx?i.push(o):i.push({startIdx:r,endIdx:s,label:o.label})}return i}var mn=G(()=>{"use strict"});function Jo(e,t){return e.B(t,0).px}function Qo(e,t){return e.B(0,t).py}function tm(e,t,n){let i=Math.max(0,n-100);return e*16>i?{size:t*6.62+10,rotation:90}:e*(t*6+10)>i?{size:t*4+20,rotation:45}:{size:qu,rotation:0}}function $s(e,t){let n=e.levels.length,i=[];for(let o=0;o<n;o++){let r=e.levels[o];o===n-1?i.push(tm(e.numRows,r.maxLabelChars,t)):i.push({size:Ku,rotation:0})}return i}function js(e){let t=e.levels.length,n=[],i=6.2;for(let o=0;o<t;o++)if(o===t-1){let r=e.levels[o].maxLabelChars;n.push(Math.max(Ju,r*i+em))}else n.push(Qu);return n}function Zs(e){let t=0;for(let n of e)t+=n;return t}function We(e,t){return e.numRows===0||e.levels.length===0?24:Zs($s(e,t).map(n=>n.size))}function Ft(e){return e.numRows===0||e.levels.length===0?55:Zs(js(e))}function nm(e,t,n,i){let o=t-e+1;if(o<=0)return[];let r=Math.max(1,Math.floor(n/i));if(o<=r){let l=[];for(let u=e;u<=t;u++)l.push(u);return l}let s=Math.ceil(o/r),a=[];for(let l=e;l<=t;l+=s)a.push(l);return a}function qs(e,t){return e.labels[t]??""}function Ks(e,t,n,i){let o=i?Math.min(t,n):t,r=i?Math.max(t,n):n,s=Math.max(0,Math.ceil(o)),a=Math.min(e-1,Math.floor(r));return a<s?null:[s,a]}function Js(e,t,n,i){let o=[];for(let r of e){let s=t(r.startIdx-.5),a=t(r.endIdx+.5),l=Math.max(n,Math.min(s,a)),u=Math.min(i,Math.max(s,a));u>l&&o.push({run:r,nearEdge:s,farEdge:a,nearClip:l,farClip:u})}return o}function pe(e,t,n,i){if(n.numRows===0||n.levels.length===0)return;let{Dt:o,Te:r,fontFamily:s}=i,{e:a}=t,l=a.y+a.height;e.strokeStyle=o,e.fillStyle=o,e.lineWidth=1,e.font=`${Mt}px ${s}`;let u=$s(n,a.width),m=Ks(n.numRows,t.Y,t.J,!1);if(!m)return;let[f,p]=m,c=n.levels.length,b=l;for(let y=c-1;y>=0;y--){let g=n.levels[y],x=u[y],_=b;b+=x.size,y===c-1?im(e,t,g,f,p,_,x,s,o):om(e,t,g,f,p,_,s,o)}let h=n.levelLabels.filter(y=>!!y).join(" / ");h&&(e.fillStyle=r,e.font=`13px ${s}`,e.textAlign="center",e.textBaseline="bottom",e.fillText(h,a.x+a.width/2,t.cssHeight-2))}function im(e,t,n,i,o,r,s,a,l){let{e:u}=t,f=Math.max(40,Math.min(n.maxLabelChars*6.2+8,u.width/2)),p=s.rotation===0?nm(i,o,u.width,f):rm(i,o);e.strokeStyle=l,e.fillStyle=l,e.beginPath();for(let y of p){let g=Jo(t,y);g<u.x-1||g>u.x+u.width+1||(e.moveTo(g,r),e.lineTo(g,r+yi))}e.stroke(),e.font=`${Mt}px ${a}`;let c=r+yi+3,b={x:u.x,width:u.width,y:r,height:9999},h=[];for(let y of p){let g=Jo(t,y);if(g<u.x-1||g>u.x+u.width+1)continue;let x=qs(n,y);if(!x)continue;let _=e.measureText(x).width,C=Zo(g,c,_,er,s.rotation);if(Ko(C,b)){if(s.rotation===0){if(h.some(v=>qo(v,C)))continue}else if(h.some(v=>zs(v,C)))continue;h.push(C),Qs(e,x,g,c,s.rotation,"center")}}}function om(e,t,n,i,o,r,s,a){let{e:l}=t,u=un(n.runs,i,o);if(u.length===0)return;let m=Js(u,b=>Jo(t,b),l.x,l.x+l.width);if(m.length===0)return;e.strokeStyle=a,e.fillStyle=a,e.beginPath();for(let b of m)e.moveTo(b.nearClip,r+3),e.lineTo(b.farClip,r+3),e.moveTo(b.nearEdge,r),e.lineTo(b.nearEdge,r+3),e.moveTo(b.farEdge,r),e.lineTo(b.farEdge,r+3);e.stroke(),e.font=`${Mt}px ${s}`;let f=r+3+4,p=[],c={x:l.x,width:l.width,y:r,height:9999};for(let b of m){let h=(b.nearClip+b.farClip)/2,y=b.run.label;if(!y)continue;let g=b.farClip-b.nearClip-4,x=mt(e,y,g);if(!x)continue;let _=e.measureText(x).width,C=Zo(h,f,_,er,0);Ko(C,c)&&(p.some(v=>qo(v,C))||(p.push(C),Qs(e,x,h,f,0,"center")))}}function rm(e,t){let n=[];for(let i=e;i<=t;i++)n.push(i);return n}function Me(e,t,n,i){if(n.numRows===0||n.levels.length===0)return;let{Dt:o,Te:r,fontFamily:s}=i,{e:a}=t,l=a.x;e.strokeStyle=o,e.fillStyle=o,e.lineWidth=1,e.font=`${Mt}px ${s}`;let u=js(n),m=Ks(n.numRows,t.q,t.Q,!0);if(!m)return;let[f,p]=m,c=n.levels.length,b=l;for(let y=c-1;y>=0;y--){let g=n.levels[y],x=u[y],_=b;b-=x,y===c-1?sm(e,t,g,f,p,_,s,o):am(e,t,g,f,p,_,x,s,o)}let h=n.levelLabels.filter(y=>!!y).join(" / ");h&&(e.fillStyle=r,e.font=`13px ${s}`,e.save(),e.translate(14,a.y+a.height/2),e.rotate(-Math.PI/2),e.textAlign="center",e.textBaseline="bottom",e.fillText(h,0,0),e.restore())}function sm(e,t,n,i,o,r,s,a){let{e:l}=t,u=er+4,m=o-i+1,f=Math.max(1,Math.floor(l.height/u)),p=m<=f?1:Math.ceil(m/f);e.strokeStyle=a,e.fillStyle=a,e.beginPath();for(let c=i;c<=o;c+=p){let b=Qo(t,c);b<l.y-1||b>l.y+l.height+1||(e.moveTo(r-yi,b),e.lineTo(r,b))}e.stroke(),e.font=`${Mt}px ${s}`,e.textAlign="right",e.textBaseline="middle";for(let c=i;c<=o;c+=p){let b=Qo(t,c);if(b<l.y-1||b>l.y+l.height+1)continue;let h=qs(n,c);h&&e.fillText(h,r-yi-3,b)}}function am(e,t,n,i,o,r,s,a,l){let{e:u}=t,m=un(n.runs,i,o);if(m.length===0)return;let f=Js(m,c=>Qo(t,c),u.y,u.y+u.height);if(f.length===0)return;e.strokeStyle=l,e.fillStyle=l;let p=r-3;e.beginPath();for(let c of f)e.moveTo(p,c.nearClip),e.lineTo(p,c.farClip),e.moveTo(p,c.nearEdge),e.lineTo(r,c.nearEdge),e.moveTo(p,c.farEdge),e.lineTo(r,c.farEdge);e.stroke(),e.font=`${Mt}px ${a}`,e.textAlign="right",e.textBaseline="middle";for(let c of f){let b=(c.nearClip+c.farClip)/2,h=c.run.label;if(!h)continue;let y=s-6,g=mt(e,h,y);g&&e.fillText(g,p-3,b)}}function Qs(e,t,n,i,o,r){if(o===0){e.textAlign=r==="end"?"right":"center",e.textBaseline="top",e.fillText(t,n,i);return}e.save(),e.translate(n,i),e.rotate(-o*Math.PI/180),e.textAlign="right",e.textBaseline="middle",e.fillText(t,-2,0),e.restore()}var qu,Ku,yi,Mt,er,Ju,Qu,em,St=G(()=>{"use strict";hi();mn();qu=25,Ku=22,yi=5,Mt=11,er=14,Ju=55,Qu=60,em=10});function lm(e){return`rgb(${Math.round(e[0]*255)},${Math.round(e[1]*255)},${Math.round(e[2]*255)})`}function It(e,t,n,i,o,r){let s={x:t.e.x+t.e.width+12,y:t.margins.top+20,width:Math.max(1,t.cssWidth-t.e.x-t.e.width-12),height:Math.max(1,t.e.height)};fn(e,s,n,i,o,r)}function fn(e,t,n,i,o,r=me){let s=e.getContext("2d");if(!s)return;let a=o.pn,l=o.mr,u=o.fontFamily,m=16,f=Math.min(120,t.height*.4),p=t.x,c=t.y;s.fillStyle=a,s.font=`9px ${u}`,s.textAlign="left",s.textBaseline="bottom",s.fillText(n.label,p,c-4);let b=n.max,h=n.min,y=s.createLinearGradient(0,c,0,c+f),g=16;for(let _=0;_<=g;_++){let C=_/g,v=b+C*(h-b),A=rt(v,n.min,n.max),T=Te(i,A);y.addColorStop(C,lm(T))}s.fillStyle=y,s.fillRect(p,c,m,f),s.strokeStyle=l,s.lineWidth=1,s.strokeRect(p,c,m,f),s.fillStyle=a,s.font=`10px ${u}`,s.textAlign="left",s.textBaseline="middle";let x=p+m+5;if(s.fillText(r(n.max),x,c+2),s.fillText(r((n.min+n.max)/2),x,c+f/2),s.fillText(r(n.min),x,c+f-2),n.min<0&&n.max>0){let _=(n.max-0)/(n.max-n.min),C=c+_*f;s.strokeStyle=a,s.lineWidth=1,s.beginPath(),s.moveTo(p+m,C),s.lineTo(p+m+4,C),s.stroke(),s.fillStyle=a,s.fillText("0",x,C)}}function xi(e,t,n,i,o){let r={x:t.e.x+t.e.width+12,y:t.margins.top+10,width:Math.max(1,t.cssWidth-t.e.x-t.e.width-12),height:Math.max(1,t.e.height)};cn(e,r,n,i,o)}function cn(e,t,n,i,o){let r=e.getContext("2d");if(!r||n.size===0)return;let s=o.pn,a=o.fontFamily,l=10,u=18,m=t.x,f=t.y+u/2;r.font=`11px ${a}`,r.textAlign="left",r.textBaseline="middle";for(let[p,c]of n){if(f+l/2>t.y+t.height)break;let b=i[c]??i[c%i.length]??[0,0,0];r.fillStyle=`rgb(${Math.round(b[0]*255)},${Math.round(b[1]*255)},${Math.round(b[2]*255)})`,r.fillRect(m,f-l/2,l,l),r.fillStyle=s,r.fillText(p,m+l+6,f),f+=u}}var Ci=G(()=>{"use strict";Le();Ce()});function Xe(e){return isNaN(e)?0:e}function ea(e,t){let n=t.gl,i=t.dpr,o=n.canvas.width/i,r=n.canvas.height/i;if(o<=0||r<=0)return;let s=e.L.length>0,a=e.G.facet_mode,l=s&&a==="grid";e.computeEffectiveFacetFlags();let u=e.s!==""&&e.b<e.p,m=l&&e.G.zoom_mode==="independent",f;if(e.h&&!m?f=e.h.getVisibleDomain():f={xMin:e.be,xMax:e.et,yMin:e.we,yMax:e.tt},!isFinite(f.xMin)||!isFinite(f.yMin))return;let p=e.A(),c=p.Be,b=e.Ue[e.Ve]||"",h=e.Ue[e.Ee]||"",y=b==="date"||b==="datetime",g=h==="date"||h==="datetime",x=e.Z,_=!x&&!e.s,C=p.O;if(x||_){let v=_?Math.max(1,e.L.length):Math.max(1,e.f.size);if(e.ci&&e.Zi===c&&e.qi===v)C=e.ci;else{let A=de(c,p.O,v);C=Cs(A),e.ci=C,e.Zi=c,e.qi=v}}else e.ci=null,e.Zi=null,e.qi=-1;e.ie=sn(t,e.ie,C),l?fm(e,t,f,p,{xIsDate:y,yIsDate:g,cssWidth:o,cssHeight:r}):(e.m=null,mm(e,t,f,p,{xIsDate:y,yIsDate:g,cssWidth:o,cssHeight:r,hasColorCol:u})),e.pe(()=>$e(e))}function _i(e,t,n,i){return{min:t,max:n,label:e.Ve||(e.Uo?"Row":e.Ze||""),isDate:i}}function vi(e,t,n,i){return{min:t,max:n,label:e.Ee||e.He,isDate:i}}function Ai(e,t){let n=0;for(let o of e)o.length>n&&(n=o.length);return{levels:[{labels:e.slice(),runs:[],maxLabelChars:n}],numRows:e.length,levelLabels:[t]}}function um(e,t,n,i,o,r,s,a,l){if(e.Ge&&e.ot){let u=re(t,l);u&&pe(u,n,e.ot,a)}else Xo(t,i,n,r,a,!0,l,e.getColumnFormatter(e.Ze,"tick"));if(e.he&&e.rt){let u=re(t,l);u&&Me(u,n,e.rt,a)}else $o(t,o,n,s,a,!0,l,e.getColumnFormatter(e.He,"tick"))}function mm(e,t,n,i,o){let r=t.gl,{cssWidth:s,cssHeight:a,xIsDate:l,yIsDate:u,hasColorCol:m}=o;e.ot=e.Ge&&e.tn.length>0?Ai(e.tn,e.Ve||e.Ze||""):null,e.rt=e.he&&e.nn.length>0?Ai(e.nn,e.Ee||e.He||""):null;let f=m?80:16,p=55+(e.Ee?16:0),c=Math.max(1,s-p-f),b=e.rt?Ft(e.rt):void 0,h=e.ot?We(e.ot,c):void 0,y=new ne(s,a,{hasXLabel:!!e.Ve,hasYLabel:!!e.Ee,hasLegend:m,leftExtra:b,bottomExtra:h});e.l=y,e.h&&e.h.updateLayout(y);let g=y.buildProjectionMatrix(n.xMin,n.xMax,n.yMin,n.yMax,void 0,void 0,void 0,Xe(e.M),Xe(e.F)),x=_i(e,n.xMin,n.xMax,l),_=vi(e,n.yMin,n.yMax,u),C=Rt(x,_,y),v=e.Ge?[]:C.xTicks,A=e.he?[]:C.yTicks,T=e.Ln==="map",L=t.dpr,w=e.j;w&&!T?e.pe(()=>{ue(w,y,L),zo(w,y,v,A,i,L)}):w&&T&&e.pe(()=>ue(w,y,L)),ze(r,y,t.dpr,()=>{T&&e.renderBackground(t,y,g,n,Xe(e.M),Xe(e.F)),e.glyph.draw(e,t,g)}),e.ge=x,e.ye=_,e.di=v,e.Re=A,e.pi=i.O,e.bi=m}function fm(e,t,n,i,o){let r=t.gl,{cssWidth:s,cssHeight:a,xIsDate:l,yIsDate:u}=o;e.ot=e.Ge&&e.tn.length>0?Ai(e.tn,e.Ve||e.Ze||""):null,e.rt=e.he&&e.nn.length>0?Ai(e.nn,e.Ee||e.He||""):null;let m=e.L.map(L=>L.prefix),f=e.Z&&e.f.size>1,p=!!e.s&&!e.Z&&e.b<e.p,c=f||p,b=Re(m,{cssWidth:s,cssHeight:a,xAxis:e.ni?"outer":"cell",yAxis:e.ii?"outer":"cell",hasLegend:c,hasXLabel:!!e.Ve,hasYLabel:!!e.Ee,gap:e.G.facet_padding});if(e.m=b,b.cells.length>1){let L=b.cells[0].layout.e;for(let w=1;w<b.cells.length;w++){let F=b.cells[w].layout.e;if(F.width!==L.width||F.height!==L.height){console.warn(`facet-grid: cell ${w} size (${F.width}\\xD7${F.height}) differs from cell 0 (${L.width}\\xD7${L.height})`);break}}}e.l=b.cells[0]?.layout??null,e.syncFacetZoomLayouts(b.cells);let h=e.G.zoom_mode==="independent",y=_i(e,n.xMin,n.xMax,l),g=vi(e,n.yMin,n.yMax,u),x=b.cells[0]?.layout,_=x?Rt(y,g,x):{xTicks:[],yTicks:[]},C=e.Ge?[]:_.xTicks,v=e.he?[]:_.yTicks,A=t.dpr,T=e.j;T&&x&&e.pe(()=>ue(T,x,A)),at(r);for(let L=0;L<b.cells.length;L++){let w=b.cells[L],F=e.getZoomControllerForFacet(L),I=h&&F?F.getVisibleDomain():n,S=w.layout.buildProjectionMatrix(I.xMin,I.xMax,I.yMin,I.yMax,void 0,void 0,void 0,Xe(e.M),Xe(e.F)),D=e.Ln==="map";T&&!D&&e.pe(()=>{let B=h?Rt(_i(e,I.xMin,I.xMax,l),vi(e,I.yMin,I.yMax,u),w.layout).xTicks:C,N=h?Rt(_i(e,I.xMin,I.xMax,l),vi(e,I.yMin,I.yMax,u),w.layout).yTicks:v;zo(T,w.layout,B,N,i,A)}),lt(r,w.layout,t.dpr,()=>{D&&e.renderBackground(t,w.layout,S,I,Xe(e.M),Xe(e.F)),e.glyph.drawSeries(e,t,S,L)})}e.ge=y,e.ye=g,e.di=C,e.Re=v,e.pi=i.O,e.bi=c}function $e(e){cm(e),e.presentOverlay()}function cm(e){!e.c||!e.l||!e.ge||!e.ye||!e.t||(ue(e.c,e.l,e.t.dpr),e.m?pm(e):dm(e))}function dm(e){let t=e.l,n=e.A(),i=e.t?.dpr??1;if(e.Ln==="map"?e.renderMapChrome(e.c,t,n,i):um(e,e.c,t,e.ge,e.ye,e.di,e.Re,n,i),e.bi){let r=e.pi??n.O;if(e.Z&&e.f.size>0){let s=de(n.Be,r,e.f.size);xi(e.c,t,e.f,s,n)}else e.s&&It(e.c,t,{min:e.b,max:e.p,label:e.s},r,n,e.getColumnFormatter(e.s,"value"))}ta(e,e.c,t,0,1),e.le>=0&&e.V&&e.H&&gm(e,e.c,t)}function pm(e){let t=e.m,n=e.c,i=e.A(),o=e.t?.dpr??1,r=e.di,s=e.Re,a=e.ge,l=e.ye,u=e.Ln==="map",m=e.ni&&!e.Ge,f=e.ii&&!e.he,p=e.G.zoom_mode==="independent";u&&e.renderMapChrome(n,e.l,i,o),!u&&m&&t.outerXAxisRect&&an(n,t.outerXAxisRect,a,r,tn(t),i,!!e.Ve,o,e.getColumnFormatter(e.Ze,"tick")),!u&&f&&t.outerYAxisRect&&ln(n,t.outerYAxisRect,l,s,nn(t),i,!!e.Ee,o,e.getColumnFormatter(e.He,"tick"));for(let c=0;c<t.cells.length;c++){let b=t.cells[c],h=p?e.getZoomControllerForFacet(c):null,y=h?h.getVisibleDomain():null,g=y?{...a,min:y.xMin,max:y.xMax}:a,x=y?{...l,min:y.yMin,max:y.yMax}:l,_=p?Rt(g,x,b.layout):{xTicks:r,yTicks:s};if(!u&&!m)if(e.Ge&&e.ot){let C=re(n,o);C&&pe(C,b.layout,e.ot,i)}else Xo(n,g,b.layout,_.xTicks,i,!!e.Ve,o,e.getColumnFormatter(e.Ze,"tick"));if(!u&&!f)if(e.he&&e.rt){let C=re(n,o);C&&Me(C,b.layout,e.rt,i)}else $o(n,x,b.layout,_.yTicks,i,!!e.Ee,o,e.getColumnFormatter(e.He,"tick"));b.titleRect&&vt(n,b.label,b.titleRect,i,o),ta(e,n,b.layout,c,c+1)}if(e.bi&&t.legendRect){let c=e.pi??i.O;if(e.Z&&e.f.size>0){let b=de(i.Be,c,Math.max(1,e.f.size));cn(n,t.legendRect,e.f,b,i)}else e.s&&fn(n,{x:t.legendRect.x,y:t.legendRect.y+20,width:t.legendRect.width,height:t.legendRect.height-20},{min:e.b,max:e.p,label:e.s},c,i,e.getColumnFormatter(e.s,"value"))}if(e.le>=0&&e.V&&e.H){let c=isNaN(e.M)?0:e.M,b=isNaN(e.F)?0:e.F,h=e.V[e.le]+c,y=e.H[e.le]+b,g=bm(e,e.le),x=e.glyph.tooltipOptions(),_=e.W.lines??[];for(let C=0;C<t.cells.length;C++){let v=t.cells[C],A=C===g,T=v.layout.B(h,y),L=v.layout.e;if(T.px<L.x||T.px>L.x+L.width||T.py<L.y||T.py>L.y+L.height)continue;let w=e.G.coordinated_tooltip;Ee(n,T,A||w?_:[],v.layout,i,o,{crosshair:x.crosshair,highlightRadius:A?x.highlightRadius:0})}}}function bm(e,t){return e.w<=0?0:Math.floor(t/e.w)}function ta(e,t,n,i,o){if(!e.Gt||!e.V||!e.H)return;let r=e.Gt.dictionary,s=e.Gt.data,a=e.V,l=e.H,u=isNaN(e.M)?0:e.M,m=isNaN(e.F)?0:e.F,f=e.w;if(f<=0)return;let p=0;for(let x=i;x<o;x++)p+=e.U[x]??0;if(p===0)return;let c=e.t?.dpr??1,b=re(t,c);if(!b)return;let h=e.A(),y=n.e,g=Math.max(1,Math.ceil(p/hm));b.save(),b.font=`11px ${h.fontFamily}`,b.fillStyle=h.Te,b.textAlign="left",b.textBaseline="middle";for(let x=i;x<o;x++){let _=e.U[x]??0,C=x*f;for(let v=0;v<_;v+=g){let A=C+v,T=s[A];if(T<0)continue;let{px:L,py:w}=n.B(a[A]+u,l[A]+m);L<y.x||L>y.x+y.width||w<y.y||w>y.y+y.height||b.fillText(r[T],L+8,w-4)}}b.restore()}function gm(e,t,n){let i=e.le;if(i<0||!e.V||!e.H)return;let o=isNaN(e.M)?0:e.M,r=isNaN(e.F)?0:e.F,s=n.B(e.V[i]+o,e.H[i]+r),a=e.W.lines??[],l=e.A();Ee(t,s,a,n,l,e.t?.dpr??1,e.glyph.tooltipOptions())}var hm,tr=G(()=>{"use strict";ci();Ye();At();on();Ce();rn();Lt();_t();jo();ut();St();Ci();hm=5e3});function ym(e){if(!e.en.isDirty||!e.V||!e.H)return;let t=e.V,n=e.H,i=Math.max(1,e.L.length),o=e.w,r=isNaN(e.M)?0:e.M,s=isNaN(e.F)?0:e.F;e.en.rebuild({xMin:e.be-r,xMax:e.et-r,yMin:e.we-s,yMax:e.tt-s},e.yt,a=>{for(let l=0;l<i;l++){let u=e.U[l]??0,m=l*o;for(let f=0;f<u;f++)a(m+f,t[m+f],n[m+f])}})}function nr(e,t,n){if(!e.V||!e.H)return;let{layout:i,facetIdx:o}=xm(e,t,n);if(!i){na(e);return}let r=i.e;if(t<r.x||t>r.x+r.width||n<r.y||n>r.y+r.height){na(e);return}let s=i.Y,a=i.J,l=i.q,u=i.Q,m=s+(t-r.x)/r.width*(a-s),f=u-(n-r.y)/r.height*(u-l),p=r.width/(a-s),c=r.height/(u-l),b=isNaN(e.M)?0:e.M,h=isNaN(e.F)?0:e.F,y=m-b,g=f-h,x=o<0?Cm(e,y,g,p,c):_m(e,o,y,g,p,c);if(x!==e.le||o!==e.Tn){if(e.le=x,e.Tn=o,x>=0){let _=e.W.beginHover(x);e.glyph.buildTooltipLines(e,x).then(C=>{e.W.commitHover(_,C)&&$e(e)})}else e.W.clearHover();$e(e)}}function na(e){(e.le!==-1||e.Tn!==-1)&&(e.le=-1,e.Tn=-1,$e(e))}function xm(e,t,n){if(e.m){let i=e.m.cells;for(let o=0;o<i.length;o++){let r=i[o].layout.e;if(t>=r.x&&t<=r.x+r.width&&n>=r.y&&n<=r.y+r.height)return{layout:i[o].layout,facetIdx:o}}return{layout:null,facetIdx:-1}}return{layout:e.l,facetIdx:-1}}function Cm(e,t,n,i,o){ym(e);let r=e.en.query(t,n,dn,i,o,e.V,e.H);if(r>=0)return r;let s=dn*dn,a=Math.max(1,e.L.length),l=e.w,u=e.V,m=e.H;for(let f=0;f<a;f++){let p=e.U[f]??0,c=f*l;for(let b=0;b<p;b++){let h=c+b,y=(u[h]-t)*i,g=(m[h]-n)*o,x=y*y+g*g;x<s&&(s=x,r=h)}}return r}function _m(e,t,n,i,o,r){let s=e.U[t]??0;if(s===0)return-1;let a=e.w,l=t*a,u=e.V,m=e.H,f=dn*dn,p=-1;for(let c=0;c<s;c++){let b=l+c,h=(u[b]-n)*o,y=(m[b]-i)*r,g=h*h+y*y;g<f&&(f=g,p=b)}return p}function ia(e,t){if(e.T.dismiss(),e.Ki=t,t<0||!e.V||!e.H)return;let n=vm(e,t);if(!n)return;let i=isNaN(e.M)?0:e.M,o=isNaN(e.F)?0:e.F,r=n.B(e.V[t]+i,e.H[t]+o),s=e.W.beginPin();e.glyph.buildTooltipLines(e,t).then(a=>{e.W.isPinFresh(s)&&e.Ki===t&&a.length!==0&&e.T.pin(a,r,n)}),e.le=-1,e.Tn=-1,$e(e)}function vm(e,t){if(e.m&&e.w>0){let n=Math.floor(t/e.w),i=e.m.cells[n];if(i)return i.layout}return e.l}function oa(e){e.T.dismiss(),e.Ki=-1}var dn,ra=G(()=>{"use strict";tr();dn=24});var Dt,ir=G(()=>{"use strict";Dt=class{constructor(){d(this,"lines",null);d(this,"hoveredTarget",null);d(this,"Ji",0);d(this,"Qi",0)}beginHover(t){return this.lines=null,this.hoveredTarget=t,++this.Ji}commitHover(t,n){return t!==this.Ji?!1:(this.lines=n,!0)}clearHover(){this.lines=null,this.hoveredTarget=null,this.Ji++}beginPin(){return++this.Qi}isPinFresh(t){return t===this.Qi}invalidatePin(){this.Qi++}}});function j(e,t,n,i,o,r){let s=e.shaders.getOrCreate(t,n,i),a=e.gl,l={program:s};for(let u of o)l[u]=a.getUniformLocation(s,u);for(let u of r)l[u]=a.getAttribLocation(s,u);return l}var fe=G(()=>{"use strict"});async function Li(e,t){let n=[];if(!e.Et||!e.Pe)return n;let i=e.Et[t];if(i<0)return n;if(e.L.length>0&&e.w>0){let s=Math.floor(t/e.w),a=e.L[s];a?.prefix&&n.push(a.prefix)}let o=await e.Pe.fetchRow(i),r=e.L.length>0&&e.w>0?e.L[Math.floor(t/e.w)]?.prefix??null:null;for(let[s,a]of o){if(a==null)continue;let l=s;if(r!==null){let u=`${r}|`;if(!s.startsWith(u))continue;l=s.substring(u.length)}else if(s.includes("|"))continue;if(typeof a=="number"){let u=e.getColumnFormatter(s,"value")(a);n.push(`${l}: ${u}`)}else n.push(`${l}: ${a}`)}return n}var or=G(()=>{"use strict"});function Am(e,t,n,i,o){t.uniformMatrix4fv(e.u_projection,!1,n),t.uniform1f(e.u_point_size,i.C.point_size_px*o),i.b<i.p?t.uniform2f(e.u_color_range,i.b,i.p):t.uniform2f(e.u_color_range,0,0),i.nt<i.it?t.uniform2f(e.u_size_range,i.nt,i.it):t.uniform2f(e.u_size_range,0,0);let r=Math.min(i.C.point_size_px,3);t.uniform2f(e.u_point_size_range,Math.max(2*o,i.C.point_size_px/r*o),i.C.point_size_px*r*o)}function sa(e,t,n,i){let o=n.gl;if(!t.ie)return!1;o.useProgram(e.program),Am(e,o,i,t,n.dpr),Ge(n,t.ie.texture,e.u_gradient_lut,0);let r=n.v.peek("a_position"),s=n.v.peek("a_color_value"),a=n.v.peek("a_size_value");return!r||!s||!a?!1:(o.bindBuffer(o.ARRAY_BUFFER,r.buffer),o.enableVertexAttribArray(e.a_position),o.vertexAttribPointer(e.a_position,2,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,s.buffer),o.enableVertexAttribArray(e.a_color_value),o.vertexAttribPointer(e.a_color_value,1,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,a.buffer),o.enableVertexAttribArray(e.a_size_value),o.vertexAttribPointer(e.a_size_value,1,o.FLOAT,!1,0,0),!0)}var Bt,rr=G(()=>{"use strict";Lt();fe();or();Fo();So();Bt=class{constructor(){d(this,"name","point");d(this,"d",null)}ensureProgram(t,n){this.d||(this.d=j(n,"scatter",Pn,En,["u_projection","u_point_size","u_color_range","u_gradient_lut","u_size_range","u_point_size_range"],["a_position","a_color_value","a_size_value"]))}draw(t,n,i){let o=this.d;if(!o||!sa(o,t,n,i))return;let r=n.gl,s=Math.max(1,t.L.length),a=t.w;for(let l=0;l<s;l++){let u=t.U[l]??0;u<=0||r.drawArrays(r.POINTS,l*a,u)}}drawSeries(t,n,i,o){let r=this.d;if(!r||!sa(r,t,n,i))return;let s=t.U[o]??0;if(s<=0)return;let a=n.gl,l=t.w;a.drawArrays(a.POINTS,o*l,s)}buildTooltipLines(t,n){return Li(t,n)}tooltipOptions(){return{crosshair:!0,highlightRadius:6}}destroy(t){this.d=null}}});function J(e){let t=e.gl;if(e.isWebGL2){let i=t;return{setDivisor(o,r){o<0||i.vertexAttribDivisor(o,r)},drawArraysInstanced(o,r,s,a){i.drawArraysInstanced(o,r,s,a)}}}let n=t.getExtension("ANGLE_instanced_arrays");return{setDivisor(i,o){i<0||n?.vertexAttribDivisorANGLE(i,o)},drawArraysInstanced(i,o,r,s){n?.drawArraysInstancedANGLE(i,o,r,s)}}}function je(e){let t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,1,2,3]),e.STATIC_DRAW),t}function Ti(e){let t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,1,1]),e.STATIC_DRAW),t}function Ze(e,t,n,i,o,r=0){if(n<0)return!0;let s=e.v.peek(i);if(!s)return!1;let a=e.gl;return a.bindBuffer(a.ARRAY_BUFFER,s.buffer),a.enableVertexAttribArray(n),a.vertexAttribPointer(n,o,a.FLOAT,!1,0,r*o*Float32Array.BYTES_PER_ELEMENT),t.setDivisor(n,1),!0}var Fe=G(()=>{"use strict"});function aa(e,t,n,i){let o=n.gl;if(!t.ie)return!1;let r=n.dpr;o.useProgram(e.program),o.uniformMatrix4fv(e.u_projection,!1,i),o.uniform2f(e.u_resolution,o.canvas.width,o.canvas.height),o.uniform1f(e.u_line_width,t.C.line_width_px*r),t.b<t.p?o.uniform2f(e.u_color_range,t.b,t.p):o.uniform2f(e.u_color_range,0,0),Ge(n,t.ie.texture,e.u_gradient_lut,0);let s=J(n),{setDivisor:a}=s;return o.bindBuffer(o.ARRAY_BUFFER,e.cornerBuffer),o.enableVertexAttribArray(e.a_corner),o.vertexAttribPointer(e.a_corner,1,o.FLOAT,!1,0,0),a(e.a_corner,0),o.enableVertexAttribArray(e.a_start),a(e.a_start,1),o.enableVertexAttribArray(e.a_end),a(e.a_end,1),o.enableVertexAttribArray(e.a_color_start),a(e.a_color_start,1),o.enableVertexAttribArray(e.a_color_end),a(e.a_color_end,1),!0}function la(e,t,n,i){let o=t.U[i]??0;if(o<2)return;let r=n.gl,s=t.w,a=2*Float32Array.BYTES_PER_ELEMENT,l=Float32Array.BYTES_PER_ELEMENT,u=n.v.peek("a_position"),m=n.v.peek("a_color_value");if(!u||!m)return;let f=i*s*a;r.bindBuffer(r.ARRAY_BUFFER,u.buffer),r.vertexAttribPointer(e.a_start,2,r.FLOAT,!1,a,f),r.vertexAttribPointer(e.a_end,2,r.FLOAT,!1,a,f+a);let p=i*s*l;r.bindBuffer(r.ARRAY_BUFFER,m.buffer),r.vertexAttribPointer(e.a_color_start,1,r.FLOAT,!1,l,p),r.vertexAttribPointer(e.a_color_end,1,r.FLOAT,!1,l,p+l),J(n).drawArraysInstanced(r.TRIANGLE_STRIP,0,4,o-1)}function ua(e,t){let{setDivisor:n}=J(t);n(e.a_start,0),n(e.a_end,0),n(e.a_color_start,0),n(e.a_color_end,0)}var Pt,sr=G(()=>{"use strict";Lt();Fe();fe();Le();Ro();Mo();Pt=class{constructor(){d(this,"name","line");d(this,"d",null)}ensureProgram(t,n){if(this.d)return;let i=j(n,"line",Dn,Bn,["u_projection","u_resolution","u_line_width","u_color_range","u_gradient_lut"],["a_start","a_end","a_color_start","a_color_end","a_corner"]);this.d={...i,cornerBuffer:je(n.gl)}}draw(t,n,i){let o=this.d;if(!o||!aa(o,t,n,i))return;let s=Math.max(1,t.L.length);for(let a=0;a<s;a++)la(o,t,n,a);ua(o,n)}drawSeries(t,n,i,o){let r=this.d;r&&aa(r,t,n,i)&&(la(r,t,n,o),ua(r,n))}async buildTooltipLines(t,n){let i=[];if(!t.V||!t.H)return i;if(t.L.length>0&&t.w>0){let p=Math.floor(n/t.w),c=t.L[p];c&&i.push(c.prefix)}let o=t.V[n],r=t.H[n],s=t.Ue[t.Ve]||"",l=s==="date"||s==="datetime"?xe(o):me(o);i.push(`${t.Ve||"Row"}: ${l}`);let u=t.Ue[t.Ee]||"",f=u==="date"||u==="datetime"?xe(r):me(r);return i.push(`${t.Ee}: ${f}`),i}tooltipOptions(){return{crosshair:!0,highlightRadius:5}}destroy(t){let n=this.d;n?.cornerBuffer&&t.t&&t.t.gl.deleteBuffer(n.cornerBuffer),this.d=null}}});function Mm(e){switch(e){case"density":return Lm;case"extreme":return wm;case"signed":return Rm;case"mean":default:return Tm}}function ma(e){let t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t}function ar(e,t,n,i){return j(e,t,n,i,["u_projection","u_radius_ndc","u_intensity","u_color_range"],["a_corner","a_position","a_color_value"])}function Fm(e){let t=e.gl;if(e.isWebGL2){let n=t;if(n.getExtension("EXT_color_buffer_float"))return{internalFormat:n.RGBA16F,format:n.RGBA,type:n.HALF_FLOAT,isFloat:!0}}return{internalFormat:t.RGBA,format:t.RGBA,type:t.UNSIGNED_BYTE,isFloat:!1}}function fa(e){let t=e.v.peek("a_position"),n=e.v.peek("a_color_value");return!!t&&!!n}function Im(e,t){if(!e.s||e.Z)return t.robustBounds=null,null;let n=t.robustBounds;if(n&&n.dataCount===e.yt&&n.colorName===e.s&&n.colorIsString===e.Z)return{lo:n.lo,hi:n.hi};let i=Dm(e);return i?(t.robustBounds={lo:i.lo,hi:i.hi,dataCount:e.yt,colorName:e.s,colorIsString:e.Z},i):(t.robustBounds=null,null)}function Dm(e){if(!e.xt||e.yt<2)return null;let t=e.w,n=Math.max(1,e.L.length),i=Math.max(1,Math.ceil(e.yt/Sm)),o=[],r=e.xt;for(let m=0;m<n;m++){let f=e.U[m]??0,p=m*t;for(let c=0;c<f;c+=i){let b=r[p+c];Number.isFinite(b)&&o.push(b)}}if(o.length<2)return null;o.sort((m,f)=>m-f);let s=Math.floor(o.length*.05),a=Math.min(o.length-1,Math.ceil(o.length*.95)),l=o[s],u=o[a];return u>l?{lo:l,hi:u}:e.p>e.b?{lo:e.b,hi:e.p}:null}var Lm,Tm,wm,Rm,Et,Sm,lr=G(()=>{"use strict";Lt();Fe();fe();or();Io();Do();Bo();Qr();ts();Po();Eo();Lm=0,Tm=1,wm=2,Rm=3,Et=class{constructor(){d(this,"name","density");d(this,"d",null)}ensureProgram(t,n){if(this.d){this.ensureHeatTarget(t,n);return}let i=n.gl,o=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,o),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,1,1]),i.STATIC_DRAW);let r=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),i.STATIC_DRAW);let{internalFormat:s,format:a,type:l,isFloat:u}=Fm(n),m=ma(i),f=i.createFramebuffer();this.d={splat:ar(n,"density-splat",yt,jn),extremeSplat:null,mrtSplat:null,resolve:j(n,"density-resolve",qn,Kn,["u_heat","u_extreme","u_gradient_lut","u_heat_max","u_color_mode"],["a_corner"]),quadCornerBuffer:o,tripleCornerBuffer:r,heatTexture:m,heatFramebuffer:f,extremeTexture:null,extremeFramebuffer:null,mrtFramebuffer:null,heatWidth:0,heatHeight:0,heatType:l,heatInternalFormat:s,heatFormat:a,floatFbo:u,indexedBlend:null,signedDowngradeWarned:!1,robustBounds:null},this.ensureHeatTarget(t,n)}draw(t,n,i){let o=this.d;if(!o||!fa(n))return;let r=Math.max(1,t.L.length),s=t.w,a=0;for(let l=0;l<r;l++)a+=t.U[l]??0;a!==0&&this.runSplatAndResolve(t,n,o,i,l=>{for(let u=0;u<r;u++){let m=t.U[u]??0;m<=0||l(u*s,m)}})}drawSeries(t,n,i,o){let r=this.d;if(!r||!fa(n))return;let s=t.U[o]??0;if(s<=0)return;let a=t.w;this.runSplatAndResolve(t,n,r,i,l=>l(o*a,s))}buildTooltipLines(t,n){return Li(t,n)}tooltipOptions(){return{crosshair:!0,highlightRadius:0}}destroy(t){let n=this.d;if(!n||!t.t){this.d=null;return}let i=t.t.gl;i.deleteBuffer(n.quadCornerBuffer),i.deleteBuffer(n.tripleCornerBuffer),i.deleteTexture(n.heatTexture),i.deleteFramebuffer(n.heatFramebuffer),n.extremeTexture&&i.deleteTexture(n.extremeTexture),n.extremeFramebuffer&&i.deleteFramebuffer(n.extremeFramebuffer),n.mrtFramebuffer&&i.deleteFramebuffer(n.mrtFramebuffer),this.d=null}ensureHeatTarget(t,n){let i=this.d;if(!i)return;let o=n.gl,r=o.canvas.width,s=o.canvas.height;if(!(r===i.heatWidth&&s===i.heatHeight)&&!(r<=0||s<=0)){if(this.allocAccumTexture(o,i,i.heatTexture,r,s),o.bindFramebuffer(o.FRAMEBUFFER,i.heatFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,i.heatTexture,0),i.extremeTexture&&(this.allocAccumTexture(o,i,i.extremeTexture,r,s),i.extremeFramebuffer&&(o.bindFramebuffer(o.FRAMEBUFFER,i.extremeFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,i.extremeTexture,0)),i.mrtFramebuffer)){let a=o;a.bindFramebuffer(a.FRAMEBUFFER,i.mrtFramebuffer),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,i.heatTexture,0),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT1,a.TEXTURE_2D,i.extremeTexture,0)}o.bindFramebuffer(o.FRAMEBUFFER,null),i.heatWidth=r,i.heatHeight=s}}allocAccumTexture(t,n,i,o,r){t.bindTexture(t.TEXTURE_2D,i),t.texImage2D(t.TEXTURE_2D,0,n.heatInternalFormat,o,r,0,n.heatFormat,n.heatType,null)}ensureExtremeTarget(t,n){let i=t.gl;if(n.extremeTexture)return;let o=ma(i);if(n.extremeTexture=o,n.extremeFramebuffer=i.createFramebuffer(),this.allocAccumTexture(i,n,o,n.heatWidth,n.heatHeight),i.bindFramebuffer(i.FRAMEBUFFER,n.extremeFramebuffer),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,o,0),n.indexedBlend===null){let r=t.isWebGL2?i.getExtension("OES_draw_buffers_indexed"):null;n.indexedBlend=r??!1}if(n.indexedBlend){let r=i;n.mrtFramebuffer=r.createFramebuffer(),r.bindFramebuffer(r.FRAMEBUFFER,n.mrtFramebuffer),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,n.heatTexture,0),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT1,r.TEXTURE_2D,o,0)}i.bindFramebuffer(i.FRAMEBUFFER,null)}ensureExtremeSplatProgram(t,n){return n.extremeSplat||(n.extremeSplat=ar(t,"density-extreme",yt,Zn)),n.extremeSplat}ensureMrtSplatProgram(t,n){return n.mrtSplat||(n.mrtSplat=ar(t,"density-mrt",es,ns)),n.mrtSplat}activeMode(t,n,i){let o=n.C.gradient_color_mode;return o==="signed"&&!i.floatFbo?(this.warnDowngradeOnce(i,"signed mode requires a float framebuffer (EXT_color_buffer_float); falling back to mean."),"mean"):o==="extreme"&&!t.isWebGL2?(this.warnDowngradeOnce(i,"extreme mode requires WebGL2 (for MAX blend and a second color attachment); falling back to mean."),"mean"):o}warnDowngradeOnce(t,n){t.signedDowngradeWarned||(t.signedDowngradeWarned=!0,console.warn(`Density: ${n}`))}runSplatAndResolve(t,n,i,o,r){if(this.ensureHeatTarget(t,n),i.heatWidth===0||i.heatHeight===0||!t.ie)return;let s=this.activeMode(n,t,i),a=t.b<t.p&&(!!t.s||t.L.length>1),l=0,u=0;if(s!=="density"&&a&&(l=t.b,u=t.p,!t.Z&&(s==="mean"||s==="extreme"))){let f=Im(t,i);f&&(l=f.lo,u=f.hi)}s==="extreme"&&this.ensureExtremeTarget(n,i),s==="extreme"&&i.indexedBlend?this.runMrtExtremePass(n,i,o,t.C.gradient_intensity,n.dpr*t.C.gradient_radius_px,l,u,r):(this.runHeatPass(n,i,o,t.C.gradient_intensity,n.dpr*t.C.gradient_radius_px,l,u,r),s==="extreme"&&this.runExtremePass(n,i,o,t.C.gradient_intensity,n.dpr*t.C.gradient_radius_px,l,u,r)),this.runResolvePass(n,i,t,s)}runHeatPass(t,n,i,o,r,s,a,l){let u=t.gl,m=!!u.getParameter(u.SCISSOR_TEST);u.bindFramebuffer(u.FRAMEBUFFER,n.heatFramebuffer),u.viewport(0,0,n.heatWidth,n.heatHeight),this.clearTarget(u,m),u.blendFunc(u.ONE,u.ONE),u.blendEquation(u.FUNC_ADD),this.bindSplatProgram(u,n.splat,i,o,r,n.heatWidth,n.heatHeight,s,a),this.bindAndDispatchInstanced(t,n,n.splat,l),this.unbindSplatInstancing(t,n.splat)}runExtremePass(t,n,i,o,r,s,a,l){let u=t.gl,m=!!u.getParameter(u.SCISSOR_TEST),f=this.ensureExtremeSplatProgram(t,n);u.bindFramebuffer(u.FRAMEBUFFER,n.extremeFramebuffer),u.viewport(0,0,n.heatWidth,n.heatHeight),this.clearTarget(u,m),u.blendFunc(u.ONE,u.ONE);let p=u;p.blendEquation(p.MAX),this.bindSplatProgram(u,f,i,o,r,n.heatWidth,n.heatHeight,s,a),this.bindAndDispatchInstanced(t,n,f,l),this.unbindSplatInstancing(t,f),u.blendEquation(u.FUNC_ADD)}runMrtExtremePass(t,n,i,o,r,s,a,l){let u=t.gl,m=n.indexedBlend,f=!!u.getParameter(u.SCISSOR_TEST),p=this.ensureMrtSplatProgram(t,n);u.bindFramebuffer(u.FRAMEBUFFER,n.mrtFramebuffer),u.viewport(0,0,n.heatWidth,n.heatHeight),u.drawBuffers([u.COLOR_ATTACHMENT0,u.COLOR_ATTACHMENT1]),this.clearTarget(u,f),m.enableiOES(u.BLEND,0),m.enableiOES(u.BLEND,1),m.blendEquationiOES(0,u.FUNC_ADD),m.blendFunciOES(0,u.ONE,u.ONE),m.blendEquationiOES(1,u.MAX),m.blendFunciOES(1,u.ONE,u.ONE),this.bindSplatProgram(u,p,i,o,r,n.heatWidth,n.heatHeight,s,a),this.bindAndDispatchInstanced(t,n,p,l),this.unbindSplatInstancing(t,p),m.blendEquationiOES(0,u.FUNC_ADD),m.blendEquationiOES(1,u.FUNC_ADD),m.blendFunciOES(0,u.SRC_ALPHA,u.ONE_MINUS_SRC_ALPHA),m.blendFunciOES(1,u.SRC_ALPHA,u.ONE_MINUS_SRC_ALPHA),u.drawBuffers([u.COLOR_ATTACHMENT0])}clearTarget(t,n){n&&t.disable(t.SCISSOR_TEST),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),n&&t.enable(t.SCISSOR_TEST)}bindSplatProgram(t,n,i,o,r,s,a,l,u){t.useProgram(n.program),t.uniformMatrix4fv(n.u_projection,!1,i),t.uniform1f(n.u_intensity,o);let m=2*r/Math.max(1,s),f=2*r/Math.max(1,a);t.uniform2f(n.u_radius_ndc,m,f),t.uniform2f(n.u_color_range,l,u)}bindAndDispatchInstanced(t,n,i,o){let r=t.gl;r.bindBuffer(r.ARRAY_BUFFER,n.quadCornerBuffer),r.enableVertexAttribArray(i.a_corner),r.vertexAttribPointer(i.a_corner,2,r.FLOAT,!1,0,0);let s=J(t);s.setDivisor(i.a_corner,0),s.setDivisor(i.a_position,1),s.setDivisor(i.a_color_value,1);let a=t.v.peek("a_position"),l=t.v.peek("a_color_value");o((u,m)=>{let f=2*Float32Array.BYTES_PER_ELEMENT,p=Float32Array.BYTES_PER_ELEMENT;r.bindBuffer(r.ARRAY_BUFFER,a.buffer),r.enableVertexAttribArray(i.a_position),r.vertexAttribPointer(i.a_position,2,r.FLOAT,!1,f,u*f),r.bindBuffer(r.ARRAY_BUFFER,l.buffer),r.enableVertexAttribArray(i.a_color_value),r.vertexAttribPointer(i.a_color_value,1,r.FLOAT,!1,p,u*p),s.drawArraysInstanced(r.TRIANGLE_STRIP,0,4,m)})}unbindSplatInstancing(t,n){let i=J(t);i.setDivisor(n.a_position,0),i.setDivisor(n.a_color_value,0)}runResolvePass(t,n,i,o){let r=t.gl;r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,r.canvas.width,r.canvas.height),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA);let s=n.resolve;r.useProgram(s.program),r.uniform1f(s.u_heat_max,i.C.gradient_heat_max),r.uniform1i(s.u_color_mode,Mm(o)),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,n.heatTexture),r.uniform1i(s.u_heat,0),r.activeTexture(r.TEXTURE1),r.bindTexture(r.TEXTURE_2D,n.extremeTexture??n.heatTexture),r.uniform1i(s.u_extreme,1),Ge(t,i.ie.texture,s.u_gradient_lut,2),r.bindBuffer(r.ARRAY_BUFFER,n.tripleCornerBuffer),r.enableVertexAttribArray(s.a_corner),r.vertexAttribPointer(s.a_corner,2,r.FLOAT,!1,0,0),r.drawArrays(r.TRIANGLES,0,3)}};Sm=5e4});var ft,wi,Ri,Mi,ur=G(()=>{"use strict";Qt();Es();Os();tr();ra();ir();rr();sr();lr();ft=class extends we{constructor(n){super();d(this,"glyph");d(this,"Ln","cartesian");d(this,"ie",null);d(this,"Ze","");d(this,"He","");d(this,"Ve","");d(this,"Ee","");d(this,"Uo",!1);d(this,"s","");d(this,"ne","");d(this,"fi","");d(this,"Z",!1);d(this,"Ge",!1);d(this,"he",!1);d(this,"tn",[]);d(this,"nn",[]);d(this,"Vo",new Map);d(this,"Ho",new Map);d(this,"ot",null);d(this,"rt",null);d(this,"L",[]);d(this,"be",1/0);d(this,"et",-1/0);d(this,"we",1/0);d(this,"tt",-1/0);d(this,"M",NaN);d(this,"F",NaN);d(this,"b",1/0);d(this,"p",-1/0);d(this,"nt",1/0);d(this,"it",-1/0);d(this,"Cn",1/0);d(this,"_n",-1/0);d(this,"vn",1/0);d(this,"An",-1/0);d(this,"ai",1/0);d(this,"li",-1/0);d(this,"ui",1/0);d(this,"mi",-1/0);d(this,"w",0);d(this,"U",[]);d(this,"zi",0);d(this,"V",null);d(this,"H",null);d(this,"xt",null);d(this,"Et",null);d(this,"Gt",null);d(this,"yt",0);d(this,"f",new Map);d(this,"W",new Dt);d(this,"Xi",null);d(this,"$i",null);d(this,"ji",null);d(this,"Yo",0);d(this,"en",new mi);d(this,"l",null);d(this,"le",-1);d(this,"Ki",-1);d(this,"Tn",-1);d(this,"m",null);d(this,"ge",null);d(this,"ye",null);d(this,"di",null);d(this,"Re",null);d(this,"pi",null);d(this,"bi",!1);d(this,"ci",null);d(this,"Zi",null);d(this,"qi",-1);this.glyph=n}colorScaleColumn(){return this.s||null}projectPoint(n,i){return[n,i]}renderBackground(n,i,o,r,s,a){}renderMapChrome(n,i,o,r){}tooltipCallbacks(){return{onHover:(n,i)=>nr(this,n,i),onLeave:()=>{this.le!==-1&&(this.le=-1,$e(this))},onPin:(n,i)=>{if(nr(this,n,i),this.le>=0){let o=this.le;ia(this,o),this.cr(o)}},onUnpin:()=>{this.emitUnselect()}}}async cr(n){if(!this.Et)return;let i=this.Et[n],o=this.R[1]||this.R[0]||"",r=[];if(this.L.length>0&&this.w>0){let s=Math.floor(n/this.w),a=this.L[s];a?.prefix&&this.D.length>0&&(r=a.prefix.split("|"))}await this.emitClickAndSelect({rowIdx:i!=null&&i>=0?i:null,columnName:o,groupByValues:[],splitByValues:r})}async uploadAndRender(n,i,o,r){let s=r-o;this.t=n,o===0&&ks(this,n,i,r),s!==0&&(Ns(this,n,i,o,s,r),this.C.domain_mode==="expand"&&(this.Ge||(this.Cn=this.be,this._n=this.et),this.he||(this.vn=this.we,this.An=this.tt),this.ai=this.b,this.li=this.p,this.ui=this.nt,this.mi=this.it),await this.requestRender(n))}resetExpandedDomain(){this.Cn=1/0,this._n=-1/0,this.vn=1/0,this.An=-1/0,this.ai=1/0,this.li=-1/0,this.ui=1/0,this.mi=-1/0}Bt(n){n.uploadedCount===0&&this.yt===0||(this.t=n,ea(this,n))}destroyInternal(){this.glyph.destroy(this),this.ie=null,this.V=null,this.H=null,this.xt=null,this.Et=null,this.Gt=null,this.W.clearHover(),this.f.clear(),this.en.clear(),this.Xi=null,this.$i=null,this.ji=null,this.L=[],this.U=[],oa(this)}},wi=class extends ft{constructor(){super(new Bt)}},Ri=class extends ft{constructor(){super(new Pt)}},Mi=class extends ft{constructor(){super(new Et)}}});function Fl(e,t){if(t>Ml||t<-Ml)return[NaN,NaN];let n=e*Math.PI*6378137/180,i=t*Math.PI/180,o=6378137*Math.log(Math.tan(Math.PI/4+i/2));return[n,o]}function Sl(e,t,n){let i=1<<e,o=2*Oe/i,r=-Oe+t*o,s=r+o,a=Oe-n*o,l=a-o;return{xMin:r,yMin:l,xMax:s,yMax:a}}function Il(e,t=256,n=19){if(!isFinite(e)||e<=0)return 0;let i=Math.log2(2*Oe/(t*e));return Math.max(0,Math.min(n,Math.floor(i)))}function Dl(e,t){let n=1<<t,i=2*Oe/n,o=Math.floor((e.xMin+Oe)/i),r=Math.floor((e.xMax+Oe)/i),s=Math.floor((Oe-e.yMax)/i),a=Math.floor((Oe-e.yMin)/i),l=[];for(let u=s;u<=a;u++)if(!(u<0||u>=n))for(let m=o;m<=r;m++)m<0||m>=n||l.push({z:t,x:m,y:u});return l}var Oe,Ml,Vr=G(()=>{"use strict";Oe=Math.PI*6378137,Ml=85.0511287798066});var xo,Bl=G(()=>{"use strict";xo=class{constructor(t=256){d(this,"Ae",new Map);d(this,"er");this.er=t}get(t){let n=this.Ae.get(t);return n!==void 0&&(this.Ae.delete(t),this.Ae.set(t,n)),n}set(t,n,i){if(this.Ae.has(n)){let o=this.Ae.get(n);t.deleteTexture(o),this.Ae.delete(n)}for(this.Ae.set(n,i);this.Ae.size>this.er;){let o=this.Ae.keys().next().value;if(o===void 0)break;let r=this.Ae.get(o);t.deleteTexture(r),this.Ae.delete(o)}}has(t){return this.Ae.has(t)}dispose(t){for(let n of this.Ae.values())t.deleteTexture(n);this.Ae.clear()}}});function Ht(e,t,n,i){return`${e}/${t}/${n}/${i}`}var Co,Pl=G(()=>{"use strict";Co=class{constructor(){d(this,"Le",new Map);d(this,"tr",()=>{})}setOnLoad(t){this.tr=t}load(t,n,i,o){let r=Ht(t.id,n,i,o),s=this.Le.get(r);if(s)return s.promise;let a=new AbortController,l=t.urlFor(n,i,o),u=this.br(l,a.signal).then(m=>(this.Le.delete(r),m&&this.tr(),m)).catch(()=>(this.Le.delete(r),null));return this.Le.set(r,{promise:u,abort:a}),u}cancelAll(){for(let t of this.Le.values())t.abort.abort();this.Le.clear()}cancelExcept(t){for(let[n,i]of this.Le)t.has(n)||(i.abort.abort(),this.Le.delete(n))}async br(t,n){let i=await fetch(t,{signal:n});if(!i.ok)return null;let o=await i.blob();return await createImageBitmap(o)}}});var _o,El=G(()=>{"use strict";Vr();Bl();Pl();Go();Wo();fe();_o=class{constructor(){d(this,"i",null);d(this,"k",null);d(this,"d",new xo);d(this,"On",new Co);d(this,"Un",null);d(this,"nr",1);d(this,"ir",()=>{})}setOnTileLoad(t){this.ir=t,this.On.setOnLoad(t)}setSource(t,n){this.Un?.id!==n.id&&(this.d.dispose(t),this.On.cancelAll(),this.Un=n)}setAlpha(t){this.nr=Math.max(0,Math.min(1,t))}get source(){return this.Un}render(t,n,i,o,r,s){let a=this.Un;if(!a)return;this.hr(t);let l=this.i,u=this.k;if(!l||!u)return;let m=t.gl,f=t.dpr,p=Math.max(1,n.e.width*f),c=o.xMax-o.xMin;if(!isFinite(c)||c<=0)return;let b=c/p,h=Il(b,a.tileSize,a.maxZoom),y=Dl(o,h),g=new Set;for(let _ of y)g.add(Ht(a.id,_.z,_.x,_.y));this.On.cancelExcept(g),m.useProgram(l.program),m.uniformMatrix4fv(l.u_projection,!1,i),m.uniform1f(l.u_alpha,this.nr),m.bindBuffer(m.ARRAY_BUFFER,u),m.enableVertexAttribArray(l.a_corner),m.vertexAttribPointer(l.a_corner,2,m.FLOAT,!1,0,0),m.activeTexture(m.TEXTURE0),m.uniform1i(l.u_tile,0);let x=m.isEnabled(m.BLEND);m.enable(m.BLEND),m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);for(let _ of y)this.gr(m,l,a,_,r,s);x||m.disable(m.BLEND)}destroy(t){this.On.cancelAll(),this.d.dispose(t),this.k&&(t.deleteBuffer(this.k),this.k=null),this.i=null}gr(t,n,i,o,r,s){let a=Sl(o.z,o.x,o.y),l={xMin:a.xMin-r,xMax:a.xMax-r,yMin:a.yMin-s,yMax:a.yMax-s},u=Ht(i.id,o.z,o.x,o.y),m=this.d.get(u);if(m){this.or(t,n,m,l,[0,0],[1,1]);return}this.yr(t,i,o);for(let f=1;f<=6;f++){let p=o.z-f;if(p<0)return;let c=o.x>>f,b=o.y>>f,h=Ht(i.id,p,c,b),y=this.d.get(h);if(!y)continue;let g=1<<f,x=o.x-c*g,_=o.y-b*g,C=1/g,v=[x*C,_*C],A=[v[0]+C,v[1]+C];this.or(t,n,y,l,v,A);return}}or(t,n,i,o,r,s){t.bindTexture(t.TEXTURE_2D,i),t.uniform2f(n.u_extent_min,o.xMin,o.yMin),t.uniform2f(n.u_extent_max,o.xMax,o.yMax),t.uniform2f(n.u_uv_min,r[0],r[1]),t.uniform2f(n.u_uv_max,s[0],s[1]),t.drawArrays(t.TRIANGLE_STRIP,0,4)}yr(t,n,i){let o=Ht(n.id,i.z,i.x,i.y);this.d.has(o)||this.On.load(n,i.z,i.x,i.y).then(r=>{if(!r)return;if(this.Un?.id!==n.id){r.close();return}let s=t.createTexture();if(!s){r.close();return}t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,s),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!1),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r),this.d.set(t,o,s),this.ir()})}hr(t){if(this.i&&this.k)return;let n=t.gl;this.i=j(t,"map-tile",Jn,Qn,["u_projection","u_extent_min","u_extent_max","u_uv_min","u_uv_max","u_tile","u_alpha"],["a_corner"]);let i=n.createBuffer();i&&(n.bindBuffer(n.ARRAY_BUFFER,i),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,1,1]),n.STATIC_DRAW),this.k=i)}}});function Qf(){return new Mn("carto-positron","https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png","\\xA9 OpenStreetMap contributors \\xA9 CARTO",256,19,["a","b","c","d"])}function ec(){return new Mn("carto-dark-matter","https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png","\\xA9 OpenStreetMap contributors \\xA9 CARTO",256,19,["a","b","c","d"])}function tc(){return new Mn("carto-voyager","https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png","\\xA9 OpenStreetMap contributors \\xA9 CARTO",256,19,["a","b","c","d"])}function Hr(e){switch(e){case"carto-dark-matter":return ec();case"carto-voyager":return tc();case"carto-positron":default:return Qf()}}var Mn,Gl=G(()=>{"use strict";Mn=class{constructor(t,n,i,o=256,r=19,s=[]){this.id=t;this.template=n;this.attribution=i;this.tileSize=o;this.maxZoom=r;this.subdomains=s}urlFor(t,n,i){let o=this.template.replace("{z}",String(t)).replace("{x}",String(n)).replace("{y}",String(i));if(this.subdomains.length>0){let r=(n+i)%this.subdomains.length;o=o.replace("{s}",this.subdomains[r])}return o}}});var vo={};Ql(vo,{MapChart:()=>Yt,MapDensityChart:()=>Xr,MapLineChart:()=>zr,MapScatterChart:()=>Yr});var Yt,Yr,zr,Xr,Ao=G(()=>{"use strict";ur();rr();sr();lr();El();Gl();Vr();ut();Yt=class extends ft{constructor(n){super(n);d(this,"Ln","map");d(this,"Je");this.Je=new _o,this.Je.setOnTileLoad(()=>{this.t&&this.requestRender(this.t)})}projectPoint(n,i){return Fl(n,i)}getZoomConfig(){return{lockAspect:!0}}setPluginConfig(n){super.setPluginConfig(n),this.t&&this.Je.setSource(this.t.gl,Hr(n.map_tile_provider)),this.Je.setAlpha(n.map_tile_alpha)}renderBackground(n,i,o,r,s,a){this.Je.source||(this.Je.setSource(n.gl,Hr(this.C.map_tile_provider)),this.Je.setAlpha(this.C.map_tile_alpha)),this.Je.render(n,i,o,r,s,a)}renderMapChrome(n,i,o,r){if(!n)return;let s=re(n,r);if(!s)return;let a=this.Je.source?.attribution??"";if(!a)return;let l=i.e;s.save(),s.font=`10px ${o.fontFamily}`,s.textAlign="right",s.textBaseline="bottom";let u=4,f=s.measureText(a).width,p=12,c=l.x+l.width-4,b=l.y+l.height-4;s.fillStyle="rgba(255, 255, 255, 0.75)",s.fillRect(c-f-u*2,b-p-u,f+u*2,p+u),s.fillStyle=o.Te,s.fillText(a,c-u,b-u/2),s.restore()}destroyInternal(){this.t&&this.Je.destroy(this.t.gl),super.destroyInternal()}},Yr=class extends Yt{constructor(){super(new Bt)}},zr=class extends Yt{constructor(){super(new Pt)}},Xr=class extends Yt{constructor(){super(new Et)}}});typeof window>"u"&&(globalThis.window={});var Zt=class{constructor(t){d(this,"dt");d(this,"o",new Map);d(this,"mn",0);d(this,"Vn",0);this.dt=t}get totalCapacity(){return this.mn}get maxCapacity(){return this.Vn}set maxCapacity(t){this.Vn=t}ensureCapacity(t){this.mn=this.Vn>0?Math.min(t,this.Vn):t}peek(t){return this.o.get(t)}getOrCreate(t,n,i){let o=this.mn*n*i,r=this.o.get(t);if(r&&r.byteCapacity>=o)return r;let s=this.dt;r&&s.deleteBuffer(r.buffer);let a=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,a),s.bufferData(s.ARRAY_BUFFER,o,s.DYNAMIC_DRAW),r={buffer:a,byteCapacity:o},this.o.set(t,r),r}upload(t,n,i,o=1){let r=this.dt,s=this.getOrCreate(t,o,n.BYTES_PER_ELEMENT);if(!1){let a=i+n.byteLength;if(a>s.byteCapacity)throw new Error(`BufferPool.upload("${t}"): write ${i}..${a} exceeds capacity ${s.byteCapacity} (_totalCapacity=${this.mn}, components=${o}, bytes=${n.BYTES_PER_ELEMENT}). Did you pass the full scratch buffer instead of a subarray(0, n)?`)}return r.bindBuffer(r.ARRAY_BUFFER,s.buffer),r.bufferSubData(r.ARRAY_BUFFER,i,n),s.buffer}releaseAll(){for(let t of this.o.values())this.dt.deleteBuffer(t.buffer);this.o.clear(),this.mn=0}};var qt=class{constructor(t){d(this,"dt");d(this,"Hn",new Map);this.dt=t}precompile(t){for(let n of t)this.getOrCreate(n.name,n.vert,n.frag)}getOrCreate(t,n,i){let o=this.Hn.get(t);if(o)return o;let r=this.dt,s=r.createShader(r.VERTEX_SHADER);if(r.shaderSource(s,n),r.compileShader(s),!r.getShaderParameter(s,r.COMPILE_STATUS)){let l=r.getShaderInfoLog(s);throw r.deleteShader(s),new Error(`Vertex shader compile error [${t}]: ${l}`)}let a=r.createShader(r.FRAGMENT_SHADER);if(r.shaderSource(a,i),r.compileShader(a),!r.getShaderParameter(a,r.COMPILE_STATUS)){let l=r.getShaderInfoLog(a);throw r.deleteShader(s),r.deleteShader(a),new Error(`Fragment shader compile error [${t}]: ${l}`)}if(o=r.createProgram(),r.attachShader(o,s),r.attachShader(o,a),r.linkProgram(o),!r.getProgramParameter(o,r.LINK_STATUS)){let l=r.getProgramInfoLog(o);throw r.deleteProgram(o),r.deleteShader(s),r.deleteShader(a),new Error(`Shader link error [${t}]: ${l}`)}return r.deleteShader(s),r.deleteShader(a),this.Hn.set(t,o),o}releaseAll(){for(let t of this.Hn.values())this.dt.deleteProgram(t);this.Hn.clear()}};var Sn="attribute vec2 a_corner;attribute float a_x_center;attribute float a_half_width;attribute float a_y0;attribute float a_y1;attribute vec3 a_color;attribute float a_series_id;attribute float a_axis;uniform mat4 u_proj_left;uniform mat4 u_proj_right;uniform float u_hover_series;uniform float u_horizontal;varying vec3 v_color;varying float v_hover;varying vec2 v_local;void main(){vec2 A;if(u_horizontal>0.5){A=vec2(mix(a_y0,a_y1,a_corner.x),a_x_center+(a_corner.y-0.5)*2.*a_half_width);}else{A=vec2(a_x_center+(a_corner.x-0.5)*2.*a_half_width,mix(a_y0,a_y1,a_corner.y));}mat4 B=a_axis<0.5?u_proj_left:u_proj_right;gl_Position=B*vec4(A,0.,1.);v_color=a_color;v_hover=abs(a_series_id-u_hover_series)<0.5?1.:0.;v_local=a_corner;}";var In="precision highp float;varying vec3 v_color;varying float v_hover;varying vec2 v_local;void main(){vec3 A=v_color;if(v_hover>0.5){A=mix(A,vec3(1.),0.25);}gl_FragColor=vec4(A,1.);}";Ro();Mo();Fo();So();var Gn="attribute vec2 a_position;uniform mat4 u_projection;void main(){gl_Position=u_projection*vec4(a_position,0.,1.);}";var Wn="precision highp float;uniform vec3 u_color;uniform float u_opacity;void main(){gl_FragColor=vec4(u_color,u_opacity);}";var Ue="attribute vec2 a_start;attribute vec2 a_end;attribute float a_corner;attribute float a_real_start;attribute float a_real_end;uniform mat4 u_projection;uniform vec2 u_resolution;uniform float u_line_width;uniform float u_interp_alpha;varying float v_edge_dist;varying float v_seg_alpha;void main(){vec4 A=u_projection*vec4(a_start,0.,1.);vec4 B=u_projection*vec4(a_end,0.,1.);vec2 C=A.xy*u_resolution*0.5;vec2 D=B.xy*u_resolution*0.5;vec2 E=D-C;float F=length(E);E=F>0.001?E/F:vec2(1.,0.);vec2 G=vec2(-E.y,E.x);float H=step(1.5,a_corner);float I=1.-mod(a_corner,2.)*2.;vec4 J=mix(A,B,H);float K=(u_line_width+1.5)*0.5;vec2 L=(G*I*K)/(u_resolution*0.5);gl_Position=J+vec4(L,0.,0.);v_edge_dist=I;float M=a_real_start*a_real_end;v_seg_alpha=mix(u_interp_alpha,1.,step(0.5,M));}";var Ve="precision highp float;uniform vec4 u_color;uniform float u_line_width;varying float v_edge_dist;varying float v_seg_alpha;void main(){float A=abs(v_edge_dist);float B=u_line_width/(u_line_width+1.5);float C=1.-smoothstep(B,1.,A);gl_FragColor=vec4(u_color.rgb,u_color.a*C*v_seg_alpha);}";var kn="attribute vec2 a_position;attribute vec3 a_color;uniform mat4 u_projection;uniform float u_point_size;varying vec3 v_color;varying float v_point_size;void main(){gl_Position=u_projection*vec4(a_position,0.,1.);gl_PointSize=u_point_size;v_point_size=u_point_size;v_color=a_color;}";var Nn="precision highp float;varying vec3 v_color;varying float v_point_size;void main(){vec2 A=gl_PointCoord-vec2(0.5);float B=length(A);if(B>0.5)discard;float C=1.5/max(v_point_size,1.);float D=1.-smoothstep(0.5-C,0.5,B);gl_FragColor=vec4(v_color,D);}";var On="attribute vec2 a_corner;attribute float a_x_center;attribute float a_half_width;attribute float a_y0;attribute float a_y1;attribute vec3 a_color;uniform mat4 u_projection;varying vec3 v_color;void main(){float A=a_x_center+(a_corner.x-0.5)*2.*a_half_width;float B=mix(a_y0,a_y1,a_corner.y);gl_Position=u_projection*vec4(A,B,0.,1.);v_color=a_color;}";var Un="precision highp float;varying vec3 v_color;void main(){gl_FragColor=vec4(v_color,1.);}";var Vn="attribute vec2 a_corner;attribute vec2 a_cell;attribute float a_color_t;uniform mat4 u_projection;uniform vec2 u_cell_inset;uniform vec2 u_cell_size;varying float v_color_t;void main(){vec2 A=0.5*u_cell_size;vec2 B=u_cell_size-2.*u_cell_inset;float C=a_cell.x-A.x+u_cell_inset.x+a_corner.x*B.x;float D=a_cell.y-A.y+u_cell_inset.y+a_corner.y*B.y;gl_Position=u_projection*vec4(C,D,0.,1.);v_color_t=a_color_t;}";var Hn="precision highp float;uniform sampler2D u_gradient_lut;varying float v_color_t;void main(){float A=clamp(v_color_t,0.,1.);vec4 B=texture2D(u_gradient_lut,vec2(A,0.5));gl_FragColor=vec4(B.rgb,1.);}";var Yn="attribute float a_strip_t;attribute float a_side;attribute vec2 a_angles;attribute vec2 a_radii;attribute vec4 a_color;uniform vec2 u_center;uniform vec2 u_resolution;uniform float u_border_px;varying vec4 v_color;varying vec2 v_edge;void main(){float A=u_border_px*0.5;float B=a_radii.x+A;float C=a_radii.y-A;if(C<=B){gl_Position=vec4(2.,2.,2.,1.);v_color=vec4(0.);v_edge=vec2(0.);return;}float D=mix(B,C,a_side);float E=A/max(D,1.);float F=a_angles.y-a_angles.x;E=min(E,F*0.5);float G=mix(a_angles.x+E,a_angles.y-E,a_strip_t);vec2 H=u_center+vec2(cos(G),sin(G))*D;vec2 I=(H/u_resolution)*2.-1.;gl_Position=vec4(I.x,-I.y,0.,1.);v_color=a_color;v_edge=vec2(a_strip_t,a_side);}";var zn="precision highp float;varying vec4 v_color;void main(){gl_FragColor=v_color;}";var Xn="attribute vec2 a_position;attribute vec4 a_color;uniform vec2 u_resolution;varying vec4 v_color;void main(){vec2 A=(a_position/u_resolution)*2.-1.;A.y=-A.y;gl_Position=vec4(A,0.,1.);v_color=a_color;}";var $n="precision highp float;varying vec4 v_color;void main(){gl_FragColor=v_color;}";Io();Do();Bo();Po();Eo();Go();Wo();var ko=[{name:"bar",vert:Sn,frag:In},{name:"line",vert:Dn,frag:Bn},{name:"scatter",vert:Pn,frag:En},{name:"bar-area",vert:Gn,frag:Wn},{name:"bar-scatter",vert:kn,frag:Nn},{name:"line-uniform",vert:Ue,frag:Ve},{name:"candlestick-body",vert:On,frag:Un},{name:"heatmap",vert:Vn,frag:Hn},{name:"sunburst-arc",vert:Yn,frag:zn},{name:"treemap",vert:Xn,frag:$n},{name:"density-splat",vert:yt,frag:jn},{name:"density-extreme",vert:yt,frag:Zn},{name:"density-resolve",vert:qn,frag:Kn},{name:"map-tile",vert:Jn,frag:Qn}];var Su=1,it=class{constructor(t,n={}){d(this,"id");d(this,"canvas");d(this,"gl");d(this,"isWebGL2");d(this,"shaders");d(this,"vo");d(this,"Ao",null);d(this,"Xt");d(this,"pt",!1);d(this,"Yn",new Set);this.id=Su++,this.canvas=t,this.Xt=n.precompile??!1;let i=t.getContext("webgl2",{antialias:!0,alpha:!0,premultipliedAlpha:!1});if(i)this.gl=i,this.isWebGL2=!0;else{let o=t.getContext("webgl",{antialias:!0,alpha:!0,premultipliedAlpha:!1});if(!o)throw new Error("WebGL is not supported");this.gl=o,this.isWebGL2=!1}this.shaders=new qt(this.gl),this.Xt&&this.shaders.precompile(ko),this.vo=this.gl.getParameter(this.gl.MAX_VERTEX_ATTRIBS),this.isWebGL2||(this.Ao=this.gl.getExtension("ANGLE_instanced_arrays")),t.addEventListener("webglcontextlost",o=>{this.pt||o.preventDefault()}),t.addEventListener("webglcontextrestored",()=>{this.shaders.releaseAll(),this.shaders=new qt(this.gl),this.Xt&&this.shaders.precompile(ko);for(let o of this.Yn)o()})}resetVertexArrayState(){let t=this.gl;for(let n=0;n<this.vo;n++)t.disableVertexAttribArray(n),this.isWebGL2?t.vertexAttribDivisor(n,0):this.Ao?.vertexAttribDivisorANGLE(n,0)}onRestore(t){return this.Yn.add(t),()=>this.Yn.delete(t)}isContextLost(){return this.pt||this.gl.isContextLost()}get destroyed(){return this.pt}destroy(){this.pt=!0,this.Yn.clear(),this.shaders.releaseAll();let t=this.gl.getExtension("WEBGL_lose_context");t&&t.loseContext()}};var Kt=class{constructor(t,n={}){d(this,"I");d(this,"zn");d(this,"Lo");d(this,"o");d(this,"Xn",0);d(this,"Ei",0);d(this,"Gi",0);d(this,"Wi",1);d(this,"pt",!1);d(this,"$n",null);d(this,"bt",null);d(this,"fn",null);d(this,"$t",null);t instanceof it?(this.I=t,this.zn=!1):(this.I=new it(t,{precompile:n.precompile??!1}),this.zn=!0),this.o=new Zt(this.I.gl),this.Lo=this.I.onRestore(()=>{this.o.releaseAll(),this.o=new Zt(this.I.gl),this.Xn=0})}get gl(){return this.I.gl}get backendId(){return this.I.id}isContextLost(){return this.pt||this.I.isContextLost()}get isWebGL2(){return this.I.isWebGL2}get shaders(){return this.I.shaders}get v(){return this.o}get uploadedCount(){return this.Xn}set uploadedCount(t){this.Xn=t}resize(t,n,i){this.Ei=t,this.Gi=n,this.Wi=i;let o=Math.round(t*i),r=Math.round(n*i),s=this.I.canvas;(s.width!==o||s.height!==r)&&(s.width=o,s.height=r,this.I.gl.viewport(0,0,o,r))}requestResize(t,n,i){this.$t={cssWidth:t,cssHeight:n,dpr:i}}applyPendingResize(){if(!this.$t)return!1;let{cssWidth:t,cssHeight:n,dpr:i}=this.$t;return this.$t=null,this.resize(t,n,i),!0}beginFrame(){if(this.zn){this.applyPendingResize();return}let t=this.$t;this.$t=null,t?this.resize(t.cssWidth,t.cssHeight,t.dpr):this.resize(this.Ei,this.Gi,this.Wi);let n=this.I.gl,i=this.I.canvas;n.bindFramebuffer(n.FRAMEBUFFER,null),n.viewport(0,0,i.width,i.height),n.disable(n.SCISSOR_TEST),n.disable(n.DEPTH_TEST),this.I.resetVertexArrayState()}get cssWidth(){return this.Ei}get cssHeight(){return this.Gi}get dpr(){return this.Wi}clear(){this.I.gl.clearColor(0,0,0,0),this.I.gl.clear(this.I.gl.COLOR_BUFFER_BIT|this.I.gl.DEPTH_BUFFER_BIT),this.Xn=0}setFrameCallback(t){this.$n=t}endFrame(){if(!this.$n||this.isContextLost())return;let t=this.I.canvas;if(typeof t.transferToImageBitmap!="function")return;let n=t.transferToImageBitmap();this.$n(n)}async awaitGpuFence(){if(!this.I.isWebGL2){this.I.gl.finish();return}let t=this.I.gl,n=t.fenceSync(t.SYNC_GPU_COMMANDS_COMPLETE,0);if(!n){t.finish();return}try{let i=t.SYNC_FLUSH_COMMANDS_BIT;for(;;){let o=t.clientWaitSync(n,i,0);if(o===t.ALREADY_SIGNALED||o===t.CONDITION_SATISFIED)return;if(o===t.WAIT_FAILED){t.finish();return}if(i=0,await this.lr(),this.pt)return}}finally{t.deleteSync(n)}}ensureBufferCapacity(t){this.o.ensureCapacity(t)}lr(){return this.bt||(this.bt=new MessageChannel,this.bt.port1.start()),new Promise(t=>{let n=this.bt;this.fn=t,n.port1.addEventListener("message",()=>{this.fn=null,t()},{once:!0}),n.port2.postMessage(null)})}destroy(){if(this.pt=!0,this.$n=null,this.Lo(),this.o.releaseAll(),this.fn){let t=this.fn;this.fn=null,t()}this.bt&&(this.bt.port1.close(),this.bt.port2.close(),this.bt=null),this.zn&&this.I.destroy()}};var ei=class{constructor(t,n={}){d(this,"To");d(this,"Xt");d(this,"jt",[]);d(this,"wo",0);this.To=Math.max(1,t),this.Xt=n.precompile??!1}acquire(){let t;if(this.jt.length<this.To)t=this.Ro(),this.jt.push(t);else{let n=this.wo%this.jt.length;this.wo++,this.jt[n].isContextLost()&&(this.jt[n]=this.Ro()),t=this.jt[n]}return t}Ro(){let t=new OffscreenCanvas(1,1);return new it(t,{precompile:this.Xt})}};ti();ti();function rs(e,t,n,i){let{controller:o,layout:r}=e,s=r.e,a=o.getVisibleDomain(),l=a.xMin+(t-s.x)/s.width*(a.xMax-a.xMin),u=a.yMax-(n-s.y)/s.height*(a.yMax-a.yMin),m=Math.pow(1.1,-i/100),f=o.lockedAxis;f!=="x"&&(o.scaleX=Math.max(1,Math.min(1e5,o.scaleX*m))),f!=="y"&&(o.scaleY=Math.max(1,Math.min(1e5,o.scaleY*m)));let p=o.getVisibleDomain(),c=p.xMin+(t-s.x)/s.width*(p.xMax-p.xMin),b=p.yMax-(n-s.y)/s.height*(p.yMax-p.yMin),h=o.baseXRange,y=o.baseYRange;f!=="x"&&h>0&&(o.normTranslateX+=(l-c)/h),f!=="y"&&y>0&&(o.normTranslateY+=(u-b)/y)}function ss(e,t,n){let{controller:i,layout:o}=e,r=i.getVisibleDomain(),s=o.e,a=(r.xMax-r.xMin)/s.width,l=(r.yMax-r.yMin)/s.height,u=i.lockedAxis,m=i.baseXRange,f=i.baseYRange;u!=="x"&&m>0&&(i.normTranslateX-=t*a/m),u!=="y"&&f>0&&(i.normTranslateY+=n*l/f)}var ni=class{constructor(t){d(this,"Zt");this.Zt=t}pin(t,n,i){this.Zt({kind:"pinTooltip",lines:t,pos:n,bounds:i})}dismiss(){this.Zt({kind:"dismissTooltip"})}setCursor(t){this.Zt({kind:"setCursor",cursor:t})}emitUserClick(t){this.Zt({kind:"userClick",detail:t})}emitUserSelect(t){this.Zt({kind:"userSelect",selected:t.selected,row:t.row,column_names:t.column_names,insertConfig:t.insertConfig})}};ur();Qt();var Fi=class{constructor(t=1024){d(this,"size");d(this,"value");d(this,"colorValue");d(this,"sizeSign");d(this,"x0");d(this,"y0");d(this,"x1");d(this,"y1");d(this,"a0");d(this,"a1");d(this,"r0");d(this,"r1");d(this,"depth");d(this,"parent");d(this,"firstChild");d(this,"nextSibling");d(this,"lastChild");d(this,"childCount");d(this,"leafRowIdx");d(this,"name");d(this,"colorLabel");d(this,"count",0);d(this,"capacity",0);this.zo(t)}reset(){this.count>0&&(this.x0.fill(0,0,this.count),this.y0.fill(0,0,this.count),this.x1.fill(0,0,this.count),this.y1.fill(0,0,this.count),this.a0.fill(0,0,this.count),this.a1.fill(0,0,this.count),this.r0.fill(0,0,this.count),this.r1.fill(0,0,this.count)),this.count=0}allocate(){this.count===this.capacity&&this.zo(this.capacity*2);let t=this.count++;return this.firstChild[t]=-1,this.nextSibling[t]=-1,this.lastChild[t]=-1,this.childCount[t]=0,this.leafRowIdx[t]=-1,this.size[t]=0,this.value[t]=0,this.colorValue[t]=NaN,this.sizeSign[t]=1,this.name[t]="",this.colorLabel[t]="",t}appendChild(t,n){this.parent[n]=t,this.depth[n]=this.depth[t]+1,this.nextSibling[n]=-1;let i=this.lastChild[t];i===-1?this.firstChild[t]=n:this.nextSibling[i]=n,this.lastChild[t]=n,this.childCount[t]++}isLeaf(t){return this.firstChild[t]===-1}zo(t){let n=Math.max(t,1024),i=(o,r)=>{let s=new r(n);return o&&o.length>0&&s.set(o),s};this.size=i(this.size,Float32Array),this.value=i(this.value,Float32Array),this.colorValue=i(this.colorValue,Float32Array),this.sizeSign=i(this.sizeSign,Int8Array),this.x0=i(this.x0,Float32Array),this.y0=i(this.y0,Float32Array),this.x1=i(this.x1,Float32Array),this.y1=i(this.y1,Float32Array),this.a0=i(this.a0,Float32Array),this.a1=i(this.a1,Float32Array),this.r0=i(this.r0,Float32Array),this.r1=i(this.r1,Float32Array),this.depth=i(this.depth,Int32Array),this.parent=i(this.parent,Int32Array),this.firstChild=i(this.firstChild,Int32Array),this.nextSibling=i(this.nextSibling,Int32Array),this.lastChild=i(this.lastChild,Int32Array),this.childCount=i(this.childCount,Int32Array),this.leafRowIdx=i(this.leafRowIdx,Int32Array),this.name?this.name.length=n:this.name=new Array(n),this.colorLabel?this.colorLabel.length=n:this.colorLabel=new Array(n),this.capacity=n}};function ca(e,t){let n=[],i=t;for(;e.parent[i]!==-1;)n.push(e.name[i]),i=e.parent[i];return n.reverse()}ir();function Si(e){for(let t of e.keys())if(!t.startsWith("__"))return t;return""}var Gt=class extends we{constructor(){super(...arguments);d(this,"ne","");d(this,"s","");d(this,"xe","empty");d(this,"r",new Fi);d(this,"X",-1);d(this,"_",-1);d(this,"ue",[]);d(this,"Wt",new Map);d(this,"gi",0);d(this,"b",1/0);d(this,"p",-1/0);d(this,"f",new Map);d(this,"$",null);d(this,"oe",0);d(this,"W",new Dt)}colorScaleColumn(){return this.R[1]||null}};en();mn();Le();function ct(e,t,n,i,o){if(!e||t<=0)return null;let r=new Float64Array(t),s=1/0,a=-1/0;for(let u=0;u<t;u++){let m=e[u+n];r[u]=m,m<s&&(s=m),m>a&&(a=m)}let l=1/0;for(let u=1;u<t;u++){let m=Math.abs(r[u]-r[u-1]);m>0&&m<l&&(l=m)}return(!isFinite(l)||l===0)&&(l=Math.max(1,a-s)),{categoryPositions:r,numericCategoryDomain:{min:s-l/2,max:a+l/2,isDate:o,label:i,bandWidth:l}}}function Wt(e,t){if(e.length!==1)return{mode:"category"};let n=t[e[0]];return n==="date"||n==="datetime"||n==="integer"||n==="float"?{mode:"numeric",numericType:n}:{mode:"category"}}function Bm(e,t,n){return!t||e==null||Number.isNaN(e)?"":n==="boolean"?e?"true":"false":n==="date"||n==="datetime"?xe(e):n==="integer"?String(e|0):n==="float"?me(e):String(e)}function mr(e,t,n){let i=e.values,o=e.valid,r=new Int32Array(t),s=[""],a=new Map;a.set("",0);let l=new Map;for(let u=0;u<t;u++){if(!(o?!!(o[u>>3]>>(u&7)&1):!0)){r[u]=0;continue}let f=i[u],p=l.get(f);if(p===void 0){let c=Bm(f,!0,n);p=a.get(c),p===void 0&&(p=s.length,s.push(c),a.set(c,p)),l.set(f,p)}r[u]=p}return{indices:r,dictionary:s}}function kt(e,t,n,i=[],o){if(o?.mode==="numeric"){let m=e.get("__ROW_PATH_0__");if(m&&m.type!=="string"&&m.values){let f=0,p=m.values,c=m.valid;for(;f<t;){let b=c?!!(c[f>>3]>>(f&7)&1):!0,h=p[f];if(b&&h!=null&&!Number.isNaN(h))break;f++}return{rowPaths:[],numCategories:Math.max(0,t-f),rowOffset:f}}}let r=[];for(let m=0;;m++){let f=e.get(`__ROW_PATH_${m}__`);if(!f)break;if(f.type==="string"&&f.indices&&f.dictionary)r.push({indices:f.indices,dictionary:f.dictionary});else if(f.values){let p=i[m]??"string";r.push(mr(f,t,p))}else break}let s=0;if(n>0&&r.length>0)for(;s<t;){let m=!1;for(let f of r){let p=f.dictionary[f.indices[s]];if(p!=null&&p!==""){m=!0;break}}if(m)break;s++}let a=Math.max(0,t-s),l=r.length;return{rowPaths:n>0&&l>0?r.map((m,f)=>{let p=new Array(a),c=0;for(let h=0;h<a;h++){let y=m.dictionary[m.indices[h+s]]??"";p[h]=y,y.length>c&&(c=y.length)}let b=f===l-1?[]:gi(m.indices,m.dictionary,s,s+a).map(h=>({startIdx:h.startIdx-s,endIdx:h.endIdx-s,label:h.label}));return{labels:p,runs:b,maxLabelChars:c}}):[],numCategories:a,rowOffset:s}}function fr(e,t,n,i){if(e.length===0)return null;for(let p of e)if(p.type!=="string")return null;let o=Math.max(0,t-n),r=[],s=new Map,a=e.map(()=>new Int32Array(o)),l=p=>{let c=s.get(p);return c===void 0&&(c=r.length,r.push(p),s.set(p,c)),c};for(let p=0;p<e.length;p++){let c=e[p].data,b=a[p];for(let h=0;h<o;h++){let y=h+n,g;if(!c)g="(null)";else{let x=c.valid;if(!(x?!!(x[y>>3]>>(y&7)&1):!0))g="(null)";else if(c.indices&&c.dictionary)g=c.dictionary[c.indices[y]]??"(null)";else if(c.values){let C=c.values[y];g=C==null?"(null)":String(C)}else g="(null)"}b[h]=l(g)}}let u=0;for(let p of r)p.length>u&&(u=p.length);return{domain:{levels:[{labels:r.slice(),runs:[],maxLabelChars:u}],numRows:r.length,levelLabels:[i]},perColumnSlots:a}}function pn(e){e.r.reset(),e.Wt.clear();let t=e.r.allocate();e.r.name[t]="Total",e.r.depth[t]=0,e.r.parent[t]=-1,e.Wt.set(t,new Map),e.X=t,e._=t,e.ue=[t],e.gi=0,e.b=1/0,e.p=-1/0,e.f.clear(),e.$=null,e.oe=0}function Pm(e,t,n){let i=e.Wt.get(t);i||(i=new Map,e.Wt.set(t,i));let o=i.get(n);if(o!==void 0)return o;let r=e.r.allocate();return e.r.name[r]=n,e.r.appendChild(t,r),i.set(n,r),r}function Ii(e,t,n,i,o,r,s){let a=e.X,l=t.length;for(let u=0;u<l;u++){let m=Pm(e,a,t[u]);u===l-1&&((s===0||l===s)&&(e.r.size[m]=Math.abs(n),e.r.sizeSign[m]=n<0?-1:1,e.r.leafRowIdx[m]=r),isNaN(i)||(e.r.colorValue[m]=i,i<e.b&&(e.b=i),i>e.p&&(e.p=i)),o&&(e.r.colorLabel[m]=o,e.f.has(o)||e.f.set(o,e.f.size))),a=m}}function pa(e,t){let n=e.valid;return!n||!!(n[t>>3]>>(t&7)&1)}function Di(e,t){return e?.values?pa(e,t)?e.values[t]:0:1}function Bi(e,t,n){let i=NaN,o="";return!t||!pa(t,n)?{colorValue:i,colorLabel:o}:(e.xe==="numeric"&&t.values?i=t.values[n]:e.xe==="series"&&t.indices&&t.dictionary&&(o=t.dictionary[t.indices[n]]),{colorValue:i,colorLabel:o})}function da(e,t){if(e.xe!=="series"||!t?.dictionary)return;let n=t.dictionary;for(let i=0;i<n.length;i++){let o=n[i];e.f.has(o)||e.f.set(o,e.f.size)}}function Em(e,t){if(e.D.length===0)return null;let n=e.ne?[e.ne]:[],i=e.s?[e.s]:[],o=He(t,n,i);return o.length===0?null:o.map(r=>({prefix:r.prefix,sizeCol:e.ne?t.get(`${r.prefix}|${e.ne}`)??null:null,colorCol:e.s?t.get(`${r.prefix}|${e.s}`)??null:null}))}function bn(e,t){let n=[];for(let h=0;;h++){let y=t.get(`__ROW_PATH_${h}__`);if(!y)break;if(y.type==="string"&&y.indices&&y.dictionary)n.push({indices:y.indices,dictionary:y.dictionary,valid:y.valid});else if(y.values){let g=e.g[h],x=e.gt[g]??"string";n.push(mr(y,y.values.length,x))}else break}let i=n.length>0,o=e.g.length,r=Em(e,t),s=r!==null,a=e.ne?t.get(e.ne):null,l=e.s?t.get(e.s):null,u=s?r[0].sizeCol:a,m=i?n[0].indices.length:u?.values?.length??0;if(m===0)return;if(s)for(let h of r)da(e,h.colorCol);else da(e,l);let f=e.gi,p=s&&i?o+1:o;if(!i){let h;for(let[g,x]of t){if(g.startsWith("__")||s&&g.includes("|"))continue;let _=g.lastIndexOf("|"),C=_===-1?g:g.substring(_+1);if(!(C===e.ne||C===e.s)&&x.type==="string"&&x.indices&&x.dictionary){h=x;break}}let y=s?r:null;for(let g=0;g<m;g++){let x=h?.indices&&h?.dictionary?h.dictionary[h.indices[g]]:`Row ${f+g}`;if(y)for(let _ of y){let C=Di(_.sizeCol,g),{colorValue:v,colorLabel:A}=Bi(e,_.colorCol,g);Ii(e,[_.prefix,x],C,v,A,f+g,p)}else{let _=Di(a,g),{colorValue:C,colorLabel:v}=Bi(e,l,g);Ii(e,[x],_,C,v,f+g,p)}}e.gi=f+m;return}let c=s?1:0,b=new Array(n.length+c);for(let h=0;h<m;h++){let y=0;for(let g=0;g<n.length;g++){let x=n[g];if(x.valid&&!(x.valid[h>>3]>>(h&7)&1))break;let _=x.dictionary[x.indices[h]];if(!_&&_!=="0")break;b[c+y++]=_}if(y!==0)if(s)for(let g of r){b[0]=g.prefix;let x=b.slice(0,y+1),_=Di(g.sizeCol,h),{colorValue:C,colorLabel:v}=Bi(e,g.colorCol,h);Ii(e,x,_,C,v,f+h,p)}else{let g=b.slice(0,y),x=Di(a,h),{colorValue:_,colorLabel:C}=Bi(e,l,h);Ii(e,g,x,_,C,f+h,p)}}e.gi=f+m}function hn(e){let t=e.r,n=t.value,i=t.size,o=t.firstChild,r=t.nextSibling,s=new Int32Array(128);s[0]=e.X,s[1]=0;let a=1;for(let l=0;l<t.count;l++)n[l]=0;for(;a>0;){a--;let l=s[a*2];if(s[a*2+1]===0){s[a*2+1]=1,a++;for(let m=o[l];m!==-1;m=r[m]){if((a+1)*2>s.length){let f=new Int32Array(s.length*2);f.set(s),s=f}s[a*2]=m,s[a*2+1]=0,a++}}else if(o[l]===-1){let m=i[l];n[l]=m>0?m:0}else{let m=0;for(let f=o[l];f!==-1;f=r[f])m+=n[f];n[l]=m}}if(e.ue.length>1){let l=[];for(let f=1;f<e.ue.length;f++)l.push(t.name[e.ue[f]]);let u=e.X,m=!0;for(let f of l){let c=e.Wt.get(u)?.get(f);if(c===void 0){m=!1;break}u=c}if(m&&t.firstChild[u]!==-1){e._=u,Pi(e,u);return}}e._=e.X,e.ue=[e.X]}function Pi(e,t){let n=[],i=t;for(;i!==-1;)n.unshift(i),i=e.r.parent[i];e.ue=n}var Gm=1,cr=14,ba=1,ha=4;function Ei(e,t,n,i,o,r,s,a,l){if(e.x0[t]=Math.round(n),e.y0[t]=Math.round(i),e.x1[t]=Math.round(o),e.y1[t]=Math.round(r),e.firstChild[t]===-1||(o-n)*(r-i)<ha)return;let m=e.depth[t]-s,f=l&&m===1&&e.firstChild[t]!==-1,p=f?cr:ba,c=f?Gm:ba,b=e.x0[t]+c,h=e.y0[t]+p,y=e.x1[t]-c,g=e.y1[t]-c;if(y<=b||g<=h)return;let x=0;for(let _=e.firstChild[t];_!==-1;_=e.nextSibling[_])e.value[_]>0&&(a[x++]=_);x!==0&&gn(e,a,0,x,b,h,y,g,s,a.subarray(x),l)}function gn(e,t,n,i,o,r,s,a,l,u,m){let f=i-n;if(f===0)return;if(f===1){Ei(e,t[n],o,r,s,a,l,u,m);return}let p=0;for(let v=n;v<i;v++)p+=e.value[t[v]];let c=p/2,b=0,h=n+1,y=1/0;for(let v=n;v<i-1;v++){b+=e.value[t[v]];let A=Math.abs(b-c);A<y&&(y=A,h=v+1)}let g=0;for(let v=n;v<h;v++)g+=e.value[t[v]];let x=g/p,_=s-o,C=a-r;if(_>=C){let v=Math.round(o+_*x);gn(e,t,n,h,o,r,v,a,l,u,m),gn(e,t,h,i,v,r,s,a,l,u,m)}else{let v=Math.round(r+C*x);gn(e,t,n,h,o,r,s,v,l,u,m),gn(e,t,h,i,o,v,s,a,l,u,m)}}function ga(e,t,n,i){e.oe=dr(e,t,n,i,0)}function dr(e,t,n,i,o){let r=e.r,s=r.x0,a=r.y0,l=r.x1,u=r.y1,m=r.depth,f=r.firstChild,p=r.nextSibling,c=r.value;(!e.$||e.$.length<r.count)&&(e.$=new Int32Array(r.count));let b=e.$,h=o,y=new Int32Array(128);y[0]=t;let g=1;for(;g>0;){g--;let x=y[g];if(c[x]<=0||(m[x]>=i&&(b[h++]=x),m[x]-i>=n))continue;let _=l[x]-s[x],C=u[x]-a[x];if(!(_*C<ha))for(let v=f[x];v!==-1;v=p[v]){if(g>=y.length){let A=new Int32Array(y.length*2);A.set(y),y=A}y[g++]=v}}return h}on();At();Ce();function Gi(e,t,n){return .299*e+.587*t+.114*n}function Wm(e,t){let n=Te(e,t);return[n[0],n[1],n[2]]}function yn(e,t,n,i){let o=e.r,r=o.colorValue[t];if(e.xe==="numeric"&&!isNaN(r)&&e.p>e.b)return Wm(n,rt(r,e.b,e.p));let s=e.f.get(o.colorLabel[t])??0;return i[s%i.length]??[0,0,0]}function Wi(e,t,n,i,o){let r=yn(e,t,n,i),s=e.r.sizeSign[t]<0?o:1;return[r[0],r[1],r[2],s]}fe();function ki(e,t,n,i,o,r,s){let a=Math.round(i*n),l=Math.round(o*n);(t.width!==a||t.height!==l)&&(t.width=a,t.height=l,e.Ct=!0);let u=t.getContext("2d");if(u){if(e.Ct){e.me?.close(),e.me=null,e.Ct=!1;let m=++e.wn;r(u),createImageBitmap(t).then(f=>{e.wn===m?(e.me?.close(),e.me=f):f.close()})}else e.me&&(u.clearRect(0,0,t.width,t.height),u.drawImage(e.me,0,0));s&&(u.save(),u.scale(n,n),s(u),u.restore())}}hi();Ye();Ci();function ya(e,t,n,i,o,r,s,a){if(n.length===0)return;let{Qn:l,Io:u,So:m}=t;e.font=`11px ${a}`;let f=16,p=8,c=0;for(let x of n){let _=e.measureText(x).width;_>c&&(c=_)}let b=c+p*2,h=n.length*f+p*2-4,y=i+12,g=o-h-8;y+b>r&&(y=i-b-12),y<0&&(y=4),g<0&&(g=o+12),g+h>s&&(g=s-h-4),e.fillStyle=l,e.strokeStyle=m,e.lineWidth=1,e.beginPath(),e.roundRect(y,g,b,h,4),e.fill(),e.stroke(),e.fillStyle=u,e.textAlign="left",e.textBaseline="top";for(let x=0;x<n.length;x++)e.fillText(n[x],y+p,g+p+x*f)}var xa=24,km=8,Ca=12,_a=2,va=" \\u203A ";function Ni(e,t,n,i,o){e.Ye=[];let r=e.A().Qn;t.fillStyle=r,t.fillRect(0,0,n,xa),t.font=`11px ${i}`,t.textAlign="left",t.textBaseline="middle";let s=km,a=e.r;for(let l=0;l<e.ue.length;l++){let u=e.ue[l],m=l===e.ue.length-1,f=a.name[u];t.fillStyle=o;let p=t.measureText(f).width;t.fillText(f,s,Ca),e.Ye.push({nodeId:u,x0:s-_a,y0:0,x1:s+p+_a,y1:xa}),s+=p,m||(t.fillText(va,s,Ca),s+=t.measureText(va).width)}}function Oi(e,t,n,i,o,r,s,a){let l=e.W.hoveredTarget===n?e.W.lines??[]:[];l.length!==0&&ya(t,e.A(),l,i,o,r,s,a)}function Ui(e,t,n,i,o,r,s,a=null){e.xe==="series"&&e.f.size>1?a?cn(t,a,e.f,n,o):xi(t,Aa(r,s),e.f,n,o):e.xe==="numeric"&&e.b<e.p&&It(t,Aa(r,s),{min:e.b,max:e.p,label:e.s},i,o,e.getColumnFormatter(e.s,"value"))}function Aa(e,t){return new ne(e,t,{hasXLabel:!1,hasYLabel:!1,hasLegend:!0})}function La(e,t){if(e._===-1)return;let n=t.gl,i=t.cssWidth,o=t.cssHeight;if(i<=0||o<=0)return;let r=e.r,s=e.D.length>0&&e.G.facet_mode==="grid",a=e.ue.length>1?28:0,u=(e.xe==="series"?e.f.size>1:e.xe==="numeric"&&e.b<e.p)?90:0,m=new Int32Array(Math.max(r.count,64));if(s)Nm(e,m,i,o,a,u);else{e.m=null;let b=r.depth[e._];Ei(r,e._,0,a,i-u,o,b,m,e.yi),ga(e,e._,100,b),br(e);let h=e.We,y=e.ze;for(let g=0;g<e.oe;g++)h[g]=b,y[g]=e._}if(!e.i){let b=j(t,"treemap",Xn,$n,["u_resolution"],["a_position","a_color"]);e.i=b.program,e.S=b}let f=e.A(),p=f.O,c=de(f.Be,p,Math.max(1,e.f.size));if(e.j){let b=e.j.getContext("2d");b&&b.clearRect(0,0,e.j.width,e.j.height)}e.Ct=!0,Om(e,n,p,c,f.ti),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),n.useProgram(e.i),n.uniform2f(e.S.u_resolution,i,o),n.bindBuffer(n.ARRAY_BUFFER,e.kt),n.enableVertexAttribArray(e.S.a_position),n.vertexAttribPointer(e.S.a_position,2,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,e.Nt),n.enableVertexAttribArray(e.S.a_color),n.vertexAttribPointer(e.S.a_color,4,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,e.eo),e.pe(()=>Nt(e))}function Nm(e,t,n,i,o,r){let s=e.r,a=[],l=[];for(let b=s.firstChild[e.X];b!==-1;b=s.nextSibling[b])s.value[b]<=0||(a.push(b),l.push(s.name[b]));let u=Math.max(1,i-o),m=Math.max(1,n-r),f=Re(l,{cssWidth:m,cssHeight:u,hasLegend:!1,xAxis:"none",yAxis:"none",gap:e.G.facet_padding});e.m=f,br(e);let p=e.We,c=0;for(let b=0;b<a.length;b++){let h=a[b],y=f.cells[b];if(!y)continue;let g=s.name[h],x=e.st.get(g)??h,_=s.depth[x],C=y.layout.e;Ei(s,x,C.x,C.y+o,C.x+C.width,C.y+o+C.height,_,t,e.yi);let v=dr(e,x,100,_,c);p.length<v&&br(e);let A=e.We,T=e.ze;for(let L=c;L<v;L++)A[L]=_,T[L]=x;c=v}e.oe=c}function br(e){let t=e.$?.length??e.r.count;(!e.We||e.We.length<t)&&(e.We=new Int32Array(t)),(!e.ze||e.ze.length<t)&&(e.ze=new Int32Array(t))}function Om(e,t,n,i,o){let r=e.r,s=e.$,a=e.oe,l=e.We,u=e.ze,m=y=>l?l[y]:r.depth[e._],f=y=>u?u[y]:e._,p=0;for(let y=0;y<a;y++){let g=s[y];if(g===f(y))continue;let x=r.x1[g]-r.x0[g],_=r.y1[g]-r.y0[g];x<1||_<1||(r.firstChild[g]===-1?p++:r.depth[g]-m(y)===1&&(p+=2))}let c=new Float32Array(p*6*2),b=new Float32Array(p*6*4),h=0;for(let y=0;y<a;y++){let g=s[y];if(g===f(y))continue;let x=r.x0[g],_=r.y0[g],C=r.x1[g],v=r.y1[g],A=C-x,T=v-_;if(!(A<1||T<1)){if(r.firstChild[g]===-1){let L=Wi(e,g,n,i,o);h=pr(c,b,h,x,_,C-1,v-1,L)}else if(r.depth[g]-m(y)===1){let w=[.25,.25,.25,1];h=pr(c,b,h,x,v-1,C,v,w),h=pr(c,b,h,C-1,_,C,v,w)}}}e.eo=h,e.kt||(e.kt=t.createBuffer()),t.bindBuffer(t.ARRAY_BUFFER,e.kt),t.bufferData(t.ARRAY_BUFFER,c.subarray(0,h*2),t.DYNAMIC_DRAW),e.Nt||(e.Nt=t.createBuffer()),t.bindBuffer(t.ARRAY_BUFFER,e.Nt),t.bufferData(t.ARRAY_BUFFER,b.subarray(0,h*4),t.DYNAMIC_DRAW)}function pr(e,t,n,i,o,r,s,a){let l=n*2,u=n*4;e[l+0]=i,e[l+1]=o,e[l+2]=r,e[l+3]=o,e[l+4]=i,e[l+5]=s,e[l+6]=r,e[l+7]=o,e[l+8]=r,e[l+9]=s,e[l+10]=i,e[l+11]=s;for(let m=0;m<6;m++)t[u+m*4+0]=a[0],t[u+m*4+1]=a[1],t[u+m*4+2]=a[2],t[u+m*4+3]=a[3];return n+6}function Nt(e){Um(e),e.presentOverlay()}function Um(e){if(!e.c||e._===-1)return;let t=e.t;if(!t)return;let{dpr:n,cssWidth:i,cssHeight:o}=t,r=e.re!==-1?e.re:e.P;ki(e,e.c,n,i,o,s=>Vm(e,s,n,i,o),r!==-1?s=>{let a=e.A(),{fontFamily:l}=a,u=e.r;Hm(s,u,r);let m=e.$,f=e.oe,p=e.We,c=e.ze;for(let b=0;b<f;b++){let h=m[b],y=c?c[b]:e._;if(h===y||u.firstChild[h]===-1)continue;let g=u.x1[h]-u.x0[h],x=u.y1[h]-u.y0[h],_=p?p[b]:u.depth[e._],C=u.depth[h]-_;C===1?Vi(s,u,h,g,x,a,!e.yi):C===2&&Vi(s,u,h,g,x,a,!0)}if(u.firstChild[r]===-1){let b=a.O,h=de(a.Be,b,Math.max(1,e.f.size)),y=u.x1[r]-u.x0[r],g=u.y1[r]-u.y0[r];Ta(e,s,r,y,g,l,b,h,!0)}e.re===-1&&e.P!==-1&&Ym(e,s,e.P,i,o,l)}:null)}function Vm(e,t,n,i,o){let r=e.c;t.clearRect(0,0,r.width,r.height),t.save(),t.scale(n,n);let s=e.A(),{fontFamily:a,Te:l}=s,u=s.O,m=de(s.Be,u,Math.max(1,e.f.size)),f=e.r,p=e.$,c=e.oe,b=e.We,h=e.ze;for(let y=0;y<c;y++){let g=p[y],x=h?h[y]:e._;if(g===x||f.firstChild[g]!==-1)continue;let _=f.x1[g]-f.x0[g],C=f.y1[g]-f.y0[g];Ta(e,t,g,_,C,a,u,m)}for(let y=0;y<c;y++){let g=p[y],x=h?h[y]:e._;if(g===x||f.firstChild[g]===-1)continue;let _=f.x1[g]-f.x0[g],C=f.y1[g]-f.y0[g],v=b?b[y]:f.depth[e._],A=f.depth[g]-v;A===1?Vi(t,f,g,_,C,s,!e.yi):A===2&&Vi(t,f,g,_,C,s,!0)}if(e.ue.length>1&&Ni(e,t,i,a,l),Ui(e,r,m,u,s,i,o),e.m){t.font=`11px ${a}`,t.fillStyle=l,t.textAlign="center",t.textBaseline="top";for(let y of e.m.cells){let g=y.layout.e;t.fillText(y.label,g.x+g.width/2,g.y-14)}}t.restore()}function Ta(e,t,n,i,o,r,s,a,l=!1){if(i<30||o<14)return;let p=e.r,c=yn(e,n,s,a),b=Gi(c[0],c[1],c[2]),h=l?b>.5?"rgba(0,0,0,0.85)":"rgba(255,255,255,0.9)":b>.5?"rgba(0,0,0,0.5)":"rgba(255,255,255,0.55)",y=Math.min(11,Math.floor(o/2));if(y<7)return;t.font=`${y}px ${r}`;let g=i-8,x=y*1.3,_=Math.max(1,Math.floor((o-8)/x)),C=Xs(t,p.name[n],g,_);if(C.length===0)return;let v=C.length*x,A=p.y0[n]+(o-v)/2+x/2;t.fillStyle=h,t.textAlign="center",t.textBaseline="middle";let T=p.x0[n]+i/2;for(let L=0;L<C.length;L++)t.fillText(C[L],T,A+L*x)}function Vi(e,t,n,i,o,{fontFamily:r,Te:s,backgroundColor:a},l){let u=t.x0[n],m=t.y0[n],f=t.name[n];if(l){if(i<60||o<30)return;let p=12;e.font=`${p}px ${r}`;let c=f,b=i-16;if(e.measureText(c).width>b){for(;c.length>1;)if(c=c.slice(0,-1),e.measureText(c+"\\u2026").width<=b){c+="\\u2026";break}}if(c.length<=3)return;e.save(),e.beginPath(),e.rect(u,m,i,o),e.clip();let y=u+i/2,g=m+o/2;e.textAlign="center",e.textBaseline="middle",e.lineWidth=2,e.strokeStyle=s,e.lineJoin="round",e.strokeText(c,y,g),e.fillStyle=a,e.fillText(c,y,g),e.restore()}else{if(i<40||o<22)return;let p=11;e.font=`${p}px ${r}`;let c=f,b=i-10;if(e.measureText(c).width>b){for(;c.length>1;)if(c=c.slice(0,-1),e.measureText(c+"\\u2026").width<=b){c+="\\u2026";break}}e.fillStyle=s,e.globalAlpha=.85,e.textAlign="left",e.textBaseline="top",e.fillText(c,u+5,m+4),e.globalAlpha=1}}function Hm(e,t,n){e.strokeStyle="rgba(255,255,255,0.9)",e.lineWidth=2,e.strokeRect(t.x0[n],t.y0[n],t.x1[n]-t.x0[n],t.y1[n]-t.y0[n])}function Ym(e,t,n,i,o,r){let s=e.r,a=(s.x0[n]+s.x1[n])/2,l=(s.y0[n]+s.y1[n])/2;Oi(e,t,n,a,l,i,o,r)}async function ke(e,t,n){let i=e.r,o=ca(i,t),r=e.D.length>0&&e.G.facet_mode==="grid",s=r?o.slice(0,e.D.length):[],a=r?o.slice(e.D.length,e.D.length+e.g.length):o.slice(0,e.g.length),l=n==="leaf"?i.leafRowIdx[t]??null:null;await e.emitClickAndSelect({rowIdx:l!=null&&l>=0?l:null,columnName:e.ne,groupByValues:a,splitByValues:s})}async function dt(e,t){let n=e.r,i=[],o=[],r=t;for(;n.parent[r]!==-1;)o.push(n.name[r]),r=n.parent[r];o.reverse(),o.length>0?i.push(o.join(" \\u203A ")):i.push(n.name[t]);let s=e.getColumnFormatter(e.ne,"value");if(i.push(`Value: ${s(n.value[t])}`),e.s&&!isNaN(n.colorValue[t])){let u=e.getColumnFormatter(e.s,"value");i.push(`${e.s}: ${u(n.colorValue[t])}`)}let a=n.leafRowIdx[t];if(n.firstChild[t]===-1&&a!==-1&&e.Pe){let u=await e.Pe.fetchRow(a);for(let[m,f]of u)f!=null&&(m===e.s&&!isNaN(n.colorValue[t])||(typeof f=="number"?i.push(`${m}: ${e.getColumnFormatter(m,"value")(f)}`):i.push(`${m}: ${f}`)))}return n.firstChild[t]!==-1&&i.push(`Children: ${n.childCount[t]}`),i}function Hi(e,t,n,i){e.T.dismiss(),e.re=t;let o=e.t?.cssWidth??0,r=e.t?.cssHeight??0;dt(e,t).then(s=>{e.re===t&&s.length!==0&&e.T.pin(s,{px:n.cx,py:n.cy},{cssWidth:o,cssHeight:r})}),e.P=-1,i()}function Yi(e){e.T.dismiss(),e.re=-1}function zi(e,t,n){let i=e.r;if(e.D.length>0&&e.G.facet_mode==="grid"){let o=t;for(;o!==-1&&i.parent[o]!==e.X;)o=i.parent[o];o!==-1&&e.st.set(i.name[o],t),e.P=-1,n();return}e._=t,Pi(e,t),e.P=-1,n()}function hr(e,t,n){let i=e.r,o=i.x0,r=i.y0,s=i.x1,a=i.y1,l=i.depth,u=i.firstChild,m=e.$,f=e.oe,p=e.We,c=e.ze,b=-1,h=1/0,y=-1,g=1/0,x=-1;if(!m)return{leafId:-1,branchId:-1,inHeader:!1};for(let _=0;_<f;_++){let C=m[_],v=c?c[_]:e._;if(C===v||!(t>=o[C]&&t<=s[C]&&n>=r[C]&&n<=a[C]))continue;let A=(s[C]-o[C])*(a[C]-r[C]);if(u[C]!==-1){A<g&&(g=A,y=C);let T=p?p[_]:l[e._],L=l[C]-T;if(L===1&&n<=r[C]+cr&&(x=C),L===2){let w=s[C]-o[C],F=a[C]-r[C];if(w>=60&&F>=30){let I=r[C]+F/2,S=o[C]+w/2;Math.abs(n-I)<10&&Math.abs(t-S)<w*.4&&(x=C)}}}else A<h&&(h=A,b=C)}return x!==-1?{leafId:-1,branchId:x,inHeader:!0}:{leafId:b,branchId:y,inHeader:!1}}function wa(e,t,n){if(e.re!==-1)return;for(let a of e.Ye)if(t>=a.x0&&t<=a.x1&&n>=a.y0&&n<=a.y1){e.T.setCursor("pointer"),e.P=-1,Nt(e);return}let{leafId:i,branchId:o,inHeader:r}=hr(e,t,n),s=r?o:i!==-1?i:o;if(s!==e.P){if(e.P=s,e.T.setCursor(o!==-1?"pointer":"default"),s!==-1){let a=e.W.beginHover(s);dt(e,s).then(l=>{e.W.commitHover(a,l)&&Nt(e)})}else e.W.clearHover();Nt(e)}}function Ra(e,t,n){if(e.re!==-1){xn(e),e.emitUnselect();return}for(let s of e.Ye)if(t>=s.x0&&t<=s.x1&&n>=s.y0&&n<=s.y1){s.nodeId!==e._&&(Xi(e,s.nodeId),e.emitUnselect());return}let{leafId:i,branchId:o,inHeader:r}=hr(e,t,n);o!==-1&&r?(Xi(e,o),ke(e,o,"branch")):i!==-1?(Fa(e,i),ke(e,i,"leaf")):o!==-1&&(Xi(e,o),ke(e,o,"branch"))}function Ma(e,t,n){let i=e.re!==-1;xn(e),i&&e.emitUnselect();let{leafId:o,branchId:r}=hr(e,t,n),s=e.r,a=r;if(a===-1&&o!==-1){let l=s.parent[o];l!==e._&&l!==-1&&(a=l)}a!==-1&&a!==e._&&s.firstChild[a]!==-1&&(Xi(e,a),ke(e,a,"branch"),o!==-1&&s.firstChild[o]===-1&&(Fa(e,o),ke(e,o,"leaf")))}function Xi(e,t){zi(e,t,()=>{e.t&&e.requestRender(e.t)})}function Fa(e,t){let n=e.r,i=(n.x0[t]+n.x1[t])/2,o=(n.y0[t]+n.y1[t])/2;Hi(e,t,{cx:i,cy:o},()=>Nt(e))}function xn(e){Yi(e)}var $i=class extends Gt{constructor(){super(...arguments);d(this,"i",null);d(this,"S",null);d(this,"kt",null);d(this,"Nt",null);d(this,"eo",0);d(this,"P",-1);d(this,"re",-1);d(this,"Ye",[]);d(this,"me",null);d(this,"Ct",!0);d(this,"wn",0);d(this,"st",new Map);d(this,"m",null);d(this,"yi",!1);d(this,"We",null);d(this,"ze",null)}tooltipCallbacks(){return{onHover:(n,i)=>wa(this,n,i),onLeave:()=>{this.P!==-1&&this.re===-1&&(this.P=-1,this.t&&this.requestRender(this.t))},onClickPre:(n,i)=>(Ra(this,n,i),!0),onDblClick:(n,i)=>Ma(this,n,i)}}async uploadAndRender(n,i,o,r){if(this.t=n,o===0){let s=this.R;if(this.ne=s[0]||Si(i)||"",this.s=s[1]||"",!this.s)this.xe="empty";else{let a=this.Ue[this.s],l=a==="float"||a==="integer"||a==="date"||a==="datetime";this.xe=l?"numeric":"series"}this.P=-1,this.re=-1,this.Ye=[],this.st.clear(),this.m=null,this.We=null,this.ze=null,this.eo=0,this.W.clearHover(),this.W.invalidatePin(),xn(this),this.me?.close(),this.me=null,this.Ct=!0,this.wn++,pn(this)}bn(this,i),hn(this),this.X!==-1&&await this.requestRender(n)}Bt(n){this.X!==-1&&(this.t=n,La(this,n))}destroyInternal(){xn(this),this.me?.close(),this.me=null;let n=this.t?.gl;n&&(this.kt&&n.deleteBuffer(this.kt),this.Nt&&n.deleteBuffer(this.Nt)),this.kt=null,this.Nt=null,this.i=null,this.S=null,this.X=-1,this._=-1,this.ue=[],this.Wt.clear(),this.$=null,this.oe=0,this.Ye=[],this.st.clear(),this.m=null,this.We=null,this.ze=null}};on();Fe();fe();var Sa=4,Cn=30;function zm(e,t){let n=0,i=e.depth[t],o=new Int32Array(128);o[0]=t;let r=1;for(;r>0;){r--;let s=o[r],a=e.depth[s]-i;a>n&&(n=a);for(let l=e.firstChild[s];l!==-1;l=e.nextSibling[l]){if(r>=o.length){let u=new Int32Array(o.length*2);u.set(o),o=u}o[r++]=l}}return n}function gr(e,t,n){let i=e.depth[t],o=Math.max(1,zm(e,t)),s=Math.max(0,n-Cn)/o;e.a0[t]=0,e.a1[t]=2*Math.PI,e.r0[t]=0,e.r1[t]=Cn,Ia(e,t,0,2*Math.PI,Cn,s,i)}function Ia(e,t,n,i,o,r,s){let a=e.value[t];if(a<=0)return;let l=i-n,u=n;for(let m=e.firstChild[t];m!==-1;m=e.nextSibling[m]){let f=e.value[m];if(f<=0)continue;let p=f/a,c=u,b=u+l*p;u=b;let h=o,y=o+r;e.a0[m]=c,e.a1[m]=b,e.r0[m]=h,e.r1[m]=y;let g=b-c,x=(h+y)/2;g*x*r<Sa||e.firstChild[m]!==-1&&Ia(e,m,c,b,y,r,s)}}function Da(e,t){e.oe=yr(e,t,0)}function yr(e,t,n){let i=e.r,o=i.a0,r=i.a1,s=i.r0,a=i.r1,l=i.firstChild,u=i.nextSibling,m=i.value;(!e.$||e.$.length<i.count)&&(e.$=new Int32Array(i.count));let f=e.$,p=n,c=new Int32Array(128);c[0]=t;let b=1;for(;b>0;){b--;let h=c[b];if(m[h]<=0)continue;f[p++]=h;let y=r[h]-o[h],g=(s[h]+a[h])/2,x=y*g,_=a[h]-s[h];if(!(x*_<Sa))for(let C=l[h];C!==-1;C=u[C]){if(b>=c.length){let v=new Int32Array(c.length*2);v.set(c),c=v}c[b++]=C}}return p}At();var ji=32,Xm=28,$m=90;function Zi(e,t){if(e.u.length===0)return{centerX:e.lt,centerY:e.ut};let n=e.r;for(let i of e.u){let o=t;for(;o!==-1;){if(o===i.drillRoot)return{centerX:i.centerX,centerY:i.centerY};o=n.parent[o]}}return{centerX:e.lt,centerY:e.ut}}function Ea(e,t){if(e._===-1)return;let n=t.gl,i=t.cssWidth,o=t.cssHeight;if(i<=0||o<=0)return;let r=e.D.length>0&&e.G.facet_mode==="grid",s=e.xe==="series"?e.f.size>1:e.xe==="numeric"&&e.b<e.p,a=!r&&e.ue.length>1?Xm:0,l=s?$m:0;if(r)jm(e,i,o,l);else{e.m=null,e.u=[];let b=i-l,h=o-a;e.lt=b/2,e.ut=a+h/2,e.to=Math.max(0,Math.min(b,h)/2-4),gr(e.r,e._,e.to),Da(e,e._)}Zm(e,t);let u=e.A(),m=u.O,f=de(u.Be,m,Math.max(1,e.f.size));if(e.j){let b=e.j.getContext("2d");b&&b.clearRect(0,0,e.j.width,e.j.height)}let p=t.dpr;e.Ct=!0,qm(e,n,m,f,u.ti,p),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),n.useProgram(e.i);let c=e.S;if(n.uniform2f(c.u_resolution,n.canvas.width,n.canvas.height),n.uniform1f(c.u_border_px,u.Bo*p),e.u.length>0)for(let b of e.u)b.instanceCount!==0&&(n.uniform2f(c.u_center,b.centerX*p,b.centerY*p),Ba(e,n,t,b.instanceStart,b.instanceCount));else n.uniform2f(c.u_center,e.lt*p,e.ut*p),Ba(e,n,t,0,e.no);e.pe(()=>qe(e))}function jm(e,t,n,i){let o=e.r,r=[],s=[];for(let f=o.firstChild[e.X];f!==-1;f=o.nextSibling[f])o.value[f]<=0||(r.push(f),s.push(o.name[f]));let a=Math.max(1,t-i),l=Re(s,{cssWidth:a,cssHeight:n,hasLegend:!1,xAxis:"none",yAxis:"none",gap:e.G.facet_padding});e.m=l;let u=[],m=0;for(let f=0;f<r.length;f++){let p=r[f],c=l.cells[f];if(!c)continue;let b=o.name[p],h=e.st.get(b)??p,y=c.layout.e,g=y.x+y.width/2,x=y.y+y.height/2,_=Math.max(0,Math.min(y.width,y.height)/2-4);gr(o,h,_);let C=yr(e,h,m),v=m,A=C-m;u.push({label:b,centerX:g,centerY:x,maxRadius:_,drillRoot:h,instanceStart:v,instanceCount:A,nodeStart:v,nodeCount:A}),m=C}e.oe=m,e.u=u,u.length>0&&(e.lt=u[0].centerX,e.ut=u[0].centerY,e.to=u[0].maxRadius)}function Zm(e,t){if(e.i)return;let n=t.gl,i=j(t,"sunburst-arc",Yn,zn,["u_center","u_resolution","u_border_px"],["a_strip_t","a_side","a_angles","a_radii","a_color"]);e.i=i.program,e.S=i;let o=new Float32Array((ji+1)*2*2);for(let r=0;r<=ji;r++){let s=r/ji,a=r*4;o[a+0]=s,o[a+1]=0,o[a+2]=s,o[a+3]=1}e.on=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,e.on),n.bufferData(n.ARRAY_BUFFER,o,n.STATIC_DRAW),e.rn=n.createBuffer()}function qm(e,t,n,i,o,r){let s=e.r,a=e.$,l=e.u.length>0,u=l?e.u.reduce((c,b)=>c+b.instanceCount,0):e.oe,m=new Float32Array(u*8),f=0,p=(c,b,h)=>{let y=f;for(let g=c;g<b;g++){let x=a[g];if(x===h)continue;let _=s.a0[x],C=s.a1[x],v=s.r0[x],A=s.r1[x];if(C<=_||A<=v)continue;let T=Wi(e,x,n,i,o),L=f*8;m[L+0]=_,m[L+1]=C,m[L+2]=v*r,m[L+3]=A*r,m[L+4]=T[0],m[L+5]=T[1],m[L+6]=T[2],m[L+7]=T[3],f++}return{rangeStart:y,rangeCount:f-y}};if(l)for(let c of e.u){let b=c.instanceStart,h=b+c.instanceCount,{rangeStart:y,rangeCount:g}=p(b,h,c.drillRoot);c.instanceStart=y,c.instanceCount=g}else p(0,e.oe,e._);e.no=f,t.bindBuffer(t.ARRAY_BUFFER,e.rn),t.bufferData(t.ARRAY_BUFFER,m.subarray(0,f*8),t.DYNAMIC_DRAW)}function Ba(e,t,n,i,o){if(o===0)return;let r=e.S;t.bindBuffer(t.ARRAY_BUFFER,e.on);let s=2*Float32Array.BYTES_PER_ELEMENT;t.enableVertexAttribArray(r.a_strip_t),t.vertexAttribPointer(r.a_strip_t,1,t.FLOAT,!1,s,0),t.enableVertexAttribArray(r.a_side),t.vertexAttribPointer(r.a_side,1,t.FLOAT,!1,s,Float32Array.BYTES_PER_ELEMENT);let a=J(n),{setDivisor:l}=a;l(r.a_strip_t,0),l(r.a_side,0),t.bindBuffer(t.ARRAY_BUFFER,e.rn);let u=8*Float32Array.BYTES_PER_ELEMENT,m=Float32Array.BYTES_PER_ELEMENT,f=i*u;t.enableVertexAttribArray(r.a_angles),t.vertexAttribPointer(r.a_angles,2,t.FLOAT,!1,u,f),l(r.a_angles,1),t.enableVertexAttribArray(r.a_radii),t.vertexAttribPointer(r.a_radii,2,t.FLOAT,!1,u,f+2*m),l(r.a_radii,1),t.enableVertexAttribArray(r.a_color),t.vertexAttribPointer(r.a_color,4,t.FLOAT,!1,u,f+4*m),l(r.a_color,1),a.drawArraysInstanced(t.TRIANGLE_STRIP,0,2*(ji+1),o),l(r.a_angles,0),l(r.a_radii,0),l(r.a_color,0)}function qe(e){Km(e),e.presentOverlay()}function Km(e){if(!e.c||e._===-1)return;let t=e.t;if(!t)return;let{dpr:n,cssWidth:i,cssHeight:o}=t;ki(e,e.c,n,i,o,r=>Jm(e,r,n,i,o),e.P!==-1?r=>{Qm(r,e,e.P),ef(e,r,e.P,i,o,e.A().fontFamily)}:null)}function Jm(e,t,n,i,o){let r=e.c;t.clearRect(0,0,r.width,r.height),t.save(),t.scale(n,n);let s=e.A(),{fontFamily:a,Te:l,Qn:u}=s,m=s.O,f=de(s.Be,m,Math.max(1,e.f.size)),p=e.r,c=e.$,b=e.oe,h=e.u.length>0;if(h)for(let g of e.u){let x=g.nodeStart+g.nodeCount;for(let _=g.nodeStart;_<x;_++){let C=c[_];C!==g.drillRoot&&Pa(e,t,C,a,m,f,g.centerX,g.centerY)}}else for(let g=0;g<b;g++){let x=c[g];x!==e._&&Pa(e,t,x,a,m,f,e.lt,e.ut)}let y=Math.max(0,Cn-s.Bo*.5);if(t.fillStyle=u,t.textAlign="center",t.textBaseline="middle",h){for(let g of e.u)if(t.beginPath(),t.fillStyle=u,t.arc(g.centerX,g.centerY,y,0,2*Math.PI),t.fill(),t.fillStyle=l,t.font=`11px ${a}`,t.fillText(p.name[g.drillRoot],g.centerX,g.centerY),e.m){let x=e.m.cells.find(_=>_.label===g.label);x?.titleRect&&(t.fillStyle=l,t.font=`11px ${a}`,t.textBaseline="middle",t.fillText(g.label,x.titleRect.x+x.titleRect.width/2,x.titleRect.y+x.titleRect.height/2))}}else t.beginPath(),t.arc(e.lt,e.ut,y,0,2*Math.PI),t.fill(),t.fillStyle=l,t.font=`11px ${a}`,t.fillText(p.name[e._],e.lt,e.ut);!h&&e.ue.length>1&&Ni(e,t,i,a,l),Ui(e,r,f,m,s,i,o,h?e.m?.legendRect??null:null),t.restore()}function Pa(e,t,n,i,o,r,s,a){let l=e.r,u=l.a0[n],m=l.a1[n],f=l.r0[n],p=l.r1[n],c=p-f,b=(f+p)/2,y=(m-u)*b;if(c<16||y<8)return;let g=Math.min(11,Math.floor(y*.7));if(g<7)return;t.font=`${g}px ${i}`;let x=l.name[n],_=c-4,C=x;if(t.measureText(C).width>_){for(;C.length>1;)if(C=C.slice(0,-1),t.measureText(C+"\\u2026").width<=_){C+="\\u2026";break}}if(C.length<2)return;let v=(u+m)/2;t.save(),t.translate(s,a);let A=v,T=v>Math.PI/2&&v<3*Math.PI/2;e.Xo==="upright"&&T&&(A+=Math.PI),t.rotate(A);let L=yn(e,n,o,r),w=Gi(L[0],L[1],L[2]);t.fillStyle=w>.5?"rgba(0,0,0,0.85)":"rgba(255,255,255,0.9)",t.textAlign="center",t.textBaseline="middle";let F=e.Xo==="upright"&&T?-b:b;t.fillText(C,F,0),t.restore()}function Qm(e,t,n){let i=t.r,o=i.a0[n],r=i.a1[n],s=i.r0[n],a=i.r1[n],{centerX:l,centerY:u}=Zi(t,n);e.strokeStyle="rgba(255,255,255,0.9)",e.lineWidth=2,e.beginPath(),e.arc(l,u,a,o,r),e.arc(l,u,s,r,o,!0),e.closePath(),e.stroke()}function ef(e,t,n,i,o,r){let s=e.r,a=(s.a0[n]+s.a1[n])/2,l=(s.r0[n]+s.r1[n])/2,{centerX:u,centerY:m}=Zi(e,n),f=u+Math.cos(a)*l,p=m+Math.sin(a)*l;Oi(e,t,n,f,p,i,o,r)}function Ga(e,t,n){if(e.u.length===0)return{centerX:e.lt,centerY:e.ut,drillRoot:e._};for(let i of e.u){let o=t-i.centerX,r=n-i.centerY;if(!(Math.sqrt(o*o+r*r)>i.maxRadius+4))return{centerX:i.centerX,centerY:i.centerY,drillRoot:i.drillRoot}}return null}function tf(e,t,n){let i=e.r,o=t;for(;o!==-1;){if(o===n)return!0;o=i.parent[o]}return!1}function Wa(e,t,n){let i=Ga(e,t,n);if(!i)return-1;let o=e.r,r=e.$,s=e.oe;if(!r)return-1;let a=t-i.centerX,l=n-i.centerY,u=Math.sqrt(a*a+l*l),m=Math.atan2(l,a);if(m<0&&(m+=2*Math.PI),u<o.r1[e.X]+.001&&i.drillRoot!==e.X)return i.drillRoot;let f=e.u.length>0;for(let p=0;p<s;p++){let c=r[p];if(c===i.drillRoot||f&&!tf(e,c,i.drillRoot))continue;let b=o.a0[c],h=o.a1[c],y=o.r0[c],g=o.r1[c];if(!(u<y||u>g)&&!(m<b||m>h))return c}return-1}function ka(e,t,n){if(e.re!==-1)return;for(let r of e.Ye)if(t>=r.x0&&t<=r.x1&&n>=r.y0&&n<=r.y1){e.T.setCursor("pointer"),e.P!==-1&&(e.P=-1,qe(e));return}let i=Wa(e,t,n),o=e.r;if(e.T.setCursor(i!==-1&&o.firstChild[i]!==-1?"pointer":"default"),i!==e.P){if(e.P=i,i!==-1){let r=e.W.beginHover(i);dt(e,i).then(s=>{e.W.commitHover(r,s)&&qe(e)})}else e.W.clearHover();qe(e)}}function Na(e,t,n){if(e.re!==-1){qi(e),e.emitUnselect();return}for(let s of e.Ye)if(t>=s.x0&&t<=s.x1&&n>=s.y0&&n<=s.y1){s.nodeId!==e._&&(xr(e,s.nodeId),e.emitUnselect());return}let i=e.r,o=Ga(e,t,n);if(o){let s=t-o.centerX,a=n-o.centerY;if(Math.sqrt(s*s+a*a)<i.r1[e.X]+.001){let u=i.parent[o.drillRoot];if(u!==-1&&u!==e.X)xr(e,u),e.emitUnselect();else if(e.u.length>0){let m=e.u.find(f=>f.drillRoot===o.drillRoot);m&&(e.st.delete(m.label),e.emitUnselect()),e.t&&e.requestRender(e.t)}return}}let r=Wa(e,t,n);r!==-1&&(i.firstChild[r]!==-1?(xr(e,r),ke(e,r,"branch")):(nf(e,r),ke(e,r,"leaf")))}function xr(e,t){zi(e,t,()=>{e.t&&e.requestRender(e.t)})}function nf(e,t){let n=e.r,i=(n.a0[t]+n.a1[t])/2,o=(n.r0[t]+n.r1[t])/2,{centerX:r,centerY:s}=Zi(e,t),a=r+Math.cos(i)*o,l=s+Math.sin(i)*o;Hi(e,t,{cx:a,cy:l},()=>qe(e))}function qi(e){Yi(e)}var Ki=class extends Gt{constructor(){super(...arguments);d(this,"i",null);d(this,"S",null);d(this,"on",null);d(this,"rn",null);d(this,"no",0);d(this,"Xo","upright");d(this,"lt",0);d(this,"ut",0);d(this,"to",0);d(this,"P",-1);d(this,"re",-1);d(this,"Ye",[]);d(this,"me",null);d(this,"Ct",!0);d(this,"wn",0);d(this,"m",null);d(this,"st",new Map);d(this,"u",[])}tooltipCallbacks(){return{onHover:(n,i)=>ka(this,n,i),onLeave:()=>{this.P!==-1&&this.re===-1&&(this.P=-1,qe(this))},onClickPre:(n,i)=>(Na(this,n,i),!0)}}async uploadAndRender(n,i,o,r){if(this.t=n,o===0){let s=this.R;if(this.ne=s[0]||Si(i)||"",this.s=s[1]||"",!this.s)this.xe="empty";else{let a=this.Ue[this.s],l=a==="float"||a==="integer"||a==="date"||a==="datetime";this.xe=l?"numeric":"series"}this.P=-1,this.re=-1,this.Ye=[],this.st.clear(),this.m=null,this.u=[],this.no=0,this.W.clearHover(),this.W.invalidatePin(),qi(this),this.me?.close(),this.me=null,this.Ct=!0,this.wn++,pn(this)}bn(this,i),hn(this),this.X!==-1&&await this.requestRender(n)}Bt(n){this.X!==-1&&(this.t=n,Ea(this,n))}destroyInternal(){qi(this),this.me?.close(),this.me=null;let n=this.t?.gl;n&&(this.on&&n.deleteBuffer(this.on),this.rn&&n.deleteBuffer(this.rn)),this.on=null,this.rn=null,this.i=null,this.S=null,this.X=-1,this._=-1,this.ue=[],this.Wt.clear(),this.$=null,this.oe=0,this.Ye=[],this.m=null,this.st.clear(),this.u=[]}};Qt();var Ot=class extends we{constructor(){super(...arguments);d(this,"Me",[]);d(this,"ee",0);d(this,"mt",0);d(this,"i",null);d(this,"k",null);d(this,"l",null);d(this,"ge",null);d(this,"ye",null);d(this,"Re",null);d(this,"si",!0)}getZoomConfig(){return{lockAxis:"y"}}};en();function Ji(e,t=.5,n=.1){let i=t/Math.max(1,e),o=i*(1-n)/2;return{slotWidth:i,halfWidth:o}}Ce();function Oa(e,t,n="bar"){let i=t?.[e]?.chart_type?.toLowerCase?.();return i==="bar"||i==="line"||i==="scatter"||i==="area"?i:n}function Ua(e,t,n){let i=n?.[e]?.stack;return typeof i=="boolean"?i:t==="bar"||t==="area"}function Cr(e,t){return t?.[e]?.alt_axis===!0}function Va(e,t,n){let i=n?.[e.aggName];if(!i)return null;let o=typeof i.palette=="string"?of(i.palette):null;if(o&&o.length>0){let r=t?0:e.splitIdx%o.length;return o[r]}return typeof i.color=="string"?Ho(i.color)??null:null}var Qi=new Map;function of(e){let t=Qi.get(e);return t===void 0&&(t=si(e),Qi.size>256&&Qi.clear(),Qi.set(e,t)),t}function Ha(e,t,n){if(t!=="line"&&t!=="area")return"skip";let i=n?.[e]?.interpolate;return i===void 0||t==="area"?"solid":i}var Ya=50,pt=0,eo=1;function to(){return{count:0,catIdx:new Int32Array(0),seriesId:new Int32Array(0),axis:new Uint8Array(0),chartType:new Uint8Array(0),xCenter:new Float64Array(0),halfWidth:new Float64Array(0),y0:new Float64Array(0),y1:new Float64Array(0)}}function rf(e,t){return e&&e.catIdx.length>=t?(e.count=0,e):{count:0,catIdx:new Int32Array(t),seriesId:new Int32Array(t),axis:new Uint8Array(t),chartType:new Uint8Array(t),xCenter:new Float64Array(t),halfWidth:new Float64Array(t),y0:new Float64Array(t),y1:new Float64Array(t)}}function _n(e,t,n,i,o){let r=e.seriesId[t],s=e.catIdx[t];return{catIdx:s,aggIdx:Math.floor(r/n),splitIdx:r%n,seriesId:r,xCenter:e.xCenter[t],halfWidth:e.halfWidth[t],y0:e.y0[t],y1:e.y1[t],value:i[s*o+r],axis:e.axis[t],chartType:e.chartType[t]===pt?"bar":"area"}}function za(e,t){return e&&e.length>=t?e:new Float64Array(Math.max(t,e?.length??0))}function Xa(e,t){e[t>>3]|=1<<(t&7)}function $a(e){let{columns:t,numRows:n,columnSlots:i,groupBy:o,splitBy:r,groupByTypes:s,columnsConfig:a,defaultChartType:l,autoAltYAxis:u,bandInnerFrac:m,barInnerPad:f,includeZero:p,facetSplits:c,scratchBars:b,scratchPosStack:h,scratchNegStack:y}=e,g=Wt(o,s),x={aggregates:[],splitPrefixes:[],rowPaths:[],numCategories:0,rowOffset:0,axisMode:g,numericCategoryDomain:null,categoryPositions:null,series:[],bars:to(),posStack:h??null,negStack:y??null,samples:new Float32Array(0),sampleValid:new Uint8Array(0),leftDomain:{min:0,max:0},rightDomain:null,hasRightAxis:!1,leftValueAxisMode:"numeric",rightValueAxisMode:null,leftValueCategoryDomain:null,rightValueCategoryDomain:null},_=i.filter(R=>!!R);if(_.length===0)return x;let C=[];if(r.length>0){for(let R of He(t,[],_))R.colNames.size>0&&C.push(R.prefix);C.length===0&&C.push("")}else C.push("");let v=o.map(R=>s[R]??"string"),{rowPaths:A,numCategories:T,rowOffset:L}=kt(t,n,o.length,v,g);if(T===0)return{...x,aggregates:_,splitPrefixes:C,rowPaths:A,rowOffset:L};let w=[],F=_.length,I=C.length;for(let R=0;R<F;R++)for(let P=0;P<I;P++){let E=_[R],O=C[P],z=O===""?E:`${O}${F>1?` | ${E}`:""}`,H=Oa(E,a,l),Z=Ua(E,H,a),be=Ha(E,H,a);w.push({seriesId:R*I+P,aggIdx:R,splitIdx:P,aggName:E,splitKey:O,label:z,color:[.5,.5,.5],axis:0,chartType:H,stack:Z,start:-1,end:-1,interpolateMode:be})}let S=[];for(let R=0;R<F;R++)S.push(p?{min:0,max:0}:{min:1/0,max:-1/0});let D=T,B=w.length,N=c?D*F*I:D*F,k=za(h??null,N),Y=za(y??null,N);k.fill(0,0,N),Y.fill(0,0,N);let W=new Float32Array(D*B),V=new Uint8Array(D*B+7>>3),U=null,X=null,q=1;if(g.mode==="numeric"&&D>0){let R=t.get("__ROW_PATH_0__"),P=ct(R?.values,D,L,o[0]??"",g.numericType==="date"||g.numericType==="datetime");P&&(U=P.categoryPositions,X=P.numericCategoryDomain,q=P.numericCategoryDomain.bandWidth)}let le=Ji(F,m,f),Se=le.slotWidth*q,ve=le.halfWidth*q,Ae=new Float64Array(F),et=(F-1)/2;for(let R=0;R<F;R++)Ae[R]=(R-et)*Se;let Xt=new Array(F*I),$t=new Array(F*I);for(let R=0;R<F;R++){let P=_[R];for(let E=0;E<I;E++){let O=C[E],z=O===""?P:`${O}|${P}`,H=t.get(z),Z=R*I+E;Xt[Z]=H?.values??null,$t[Z]=H?.valid??null}}let jt=new Array(F),he=new Array(F),se=!1;for(let R=0;R<F;R++){let P=_[R],E=C[0],O=E===""?P:`${E}|${P}`;jt[R]=t.get(O)?.type==="string",he[R]=Cr(P,a)?1:0,jt[R]&&(se=!0)}let Q=[],ie=[],Ie=[],De=[];for(let R=0;R<F;R++){let P=_[R];for(let E=0;E<I;E++){let O=C[E],z=O===""?P:`${O}|${P}`,H=R*I+E,Z={name:z,type:jt[R]?"string":"numeric",data:t.get(z)};he[R]===0?(Q.push(Z),Ie.push(H)):(ie.push(Z),De.push(H))}}let qr=Q.map(R=>R.name).filter((R,P,E)=>E.indexOf(R)===P).join(", "),wo=ie.map(R=>R.name).filter((R,P,E)=>E.indexOf(R)===P).join(", "),Be=Q.length>0?fr(Q,n,L,qr):null,K=ie.length>0?fr(ie,n,L,wo):null,bt=new Array(F*I).fill(null);if(Be)for(let R=0;R<Ie.length;R++)bt[Ie[R]]=Be.perColumnSlots[R];if(K)for(let R=0;R<De.length;R++)bt[De[R]]=K.perColumnSlots[R];let Yl=D*F*I,$=rf(b??null,Yl),ee=0;for(let R=0;R<D;R++){let P=R+L;for(let E=0;E<F;E++)for(let O=0;O<I;O++){let z=E*I+O,H=bt[z];if(H){let ae=E*I+O,ge=R*B+ae;W[ge]=H[R],Xa(V,ge);continue}let Z=Xt[z];if(!Z)continue;let be=$t[z];if(be&&!(be[P>>3]>>(P&7)&1))continue;let te=Z[P];if(!isFinite(te))continue;let gt=E*I+O,nt=R*B+gt;W[nt]=te,Xa(V,nt)}}for(let R=0;R<B;R++){let P=-1,E=-1;for(let O=0;O<D;O++){let z=O*B+R;V[z>>3]>>(z&7)&1&&(P===-1&&(P=O),E=O)}w[R].start=P,w[R].end=E}for(let R=0;R<B;R++){let P=w[R];if(!(P.start<0)&&P.interpolateMode!=="skip"){if(P.chartType==="line"){let E=P.start;for(let O=P.start+1;O<=P.end;O++){let z=O*B+R;if(V[z>>3]>>(z&7)&1){if(O-E>1){let Z=E*B+R,be=W[Z],te=W[z],gt=U?U[E]:E,ae=(U?U[O]:O)-gt;for(let ge=1;ge<O-E;ge++){let ce=E+ge,ye=U?U[ce]:ce,Kl=ae===0?0:(ye-gt)/ae;W[ce*B+R]=be+(te-be)*Kl}}E=O}}}else if(P.chartType==="area"){for(let E=0;E<P.start;E++)W[E*B+R]=0;for(let E=P.end+1;E<D;E++)W[E*B+R]=0;P.start=0,P.end=D-1}}}for(let R=0;R<D;R++){let P=U?U[R]:R;for(let E=0;E<F;E++){let O=Ae[E],z=P+O,H=S[E];for(let Z=0;Z<I;Z++){let be=E*I+Z,te=w[be];if(R<te.start||R>te.end)continue;let gt=te.chartType==="line"||te.chartType==="area"&&te.interpolateMode!=="skip",nt=R*B+be;if(!gt&&!(V[nt>>3]>>(nt&7)&1))continue;let ae=W[nt];if((te.chartType==="bar"||te.chartType==="area")&&te.stack){if(ae===0&&(te.chartType!=="area"||te.interpolateMode==="skip"))continue;let ge=c?(R*F+E)*I+Z:R*F+E,ce,ye;ae>=0?(ce=k[ge],ye=ce+ae,k[ge]=ye):(ce=Y[ge],ye=ce+ae,Y[ge]=ye),ce<H.min&&(H.min=ce),ye<H.min&&(H.min=ye),ce>H.max&&(H.max=ce),ye>H.max&&(H.max=ye),$.catIdx[ee]=R,$.seriesId[ee]=be,$.axis[ee]=0,$.chartType[ee]=te.chartType==="bar"?pt:eo,$.xCenter[ee]=z,$.halfWidth[ee]=ve,$.y0[ee]=ce,$.y1[ee]=ye,ee++}else if(ae<H.min&&(H.min=ae),ae>H.max&&(H.max=ae),p&&(0<H.min&&(H.min=0),0>H.max&&(H.max=0)),te.chartType==="bar"||te.chartType==="area"){if(ae===0)continue;$.catIdx[ee]=R,$.seriesId[ee]=be,$.axis[ee]=0,$.chartType[ee]=te.chartType==="bar"?pt:eo,$.xCenter[ee]=z,$.halfWidth[ee]=ve,$.y0[ee]=0,$.y1[ee]=ae,ee++}}}}$.count=ee;let ht=!1;if(u&&F>=2&&!se){let R=new Array(F),P=0,E=1/0;for(let O=0;O<F;O++){let z=S[O],H=Math.max(Math.abs(z.min),Math.abs(z.max),1e-12);R[O]=H,H>P&&(P=H),H<E&&(E=H)}if(P/E>Ya){let O=P/Math.sqrt(Ya);for(let z=0;z<F;z++)if(R[z]<O)for(let Z of w)Z.aggIdx===z&&(Z.axis=1);for(let z=0;z<$.count;z++)$.axis[z]=w[$.seriesId[z]].axis;ht=w.some(z=>z.axis===1)}}let Kr=!1;for(let R=0;R<F;R++)if(Cr(_[R],a))for(let P of w)P.aggIdx===R&&(P.axis=1,Kr=!0);if(Kr){for(let R=0;R<$.count;R++)$.axis[R]=w[$.seriesId[R]].axis;ht=!0}let Pe=p?{min:0,max:0}:{min:1/0,max:-1/0},tt=p?{min:0,max:0}:{min:1/0,max:-1/0};for(let R=0;R<$.count;R++){let P=$.axis[R]===0?Pe:tt,E=$.y0[R],O=$.y1[R];E<P.min&&(P.min=E),O<P.min&&(P.min=O),E>P.max&&(P.max=E),O>P.max&&(P.max=O)}for(let R=0;R<B;R++){let P=w[R];if(P.stack&&(P.chartType==="bar"||P.chartType==="area")||P.start<0)continue;let E=P.chartType==="line"||P.chartType==="area"&&P.interpolateMode!=="skip",O=P.axis===0?Pe:tt;for(let z=P.start;z<=P.end;z++){let H=z*B+R;if(!E&&!(V[H>>3]>>(H&7)&1))continue;let Z=W[H];Z<O.min&&(O.min=Z),Z>O.max&&(O.max=Z)}}(!isFinite(Pe.min)||!isFinite(Pe.max)||Pe.min===0&&Pe.max===0)&&(Pe.min=0,Pe.max=1);let zl=!isFinite(tt.min)||!isFinite(tt.max)||tt.min===0&&tt.max===0,Xl=ht?zl?{min:0,max:1}:tt:null,$l=Be?"category":"numeric",jl=ht?K?"category":"numeric":null,Zl=Be&&Be.domain.numRows>0?{min:0,max:Math.max(0,Be.domain.numRows-1)}:Pe,ql=K&&K.domain.numRows>0&&ht?{min:0,max:Math.max(0,K.domain.numRows-1)}:Xl;return{aggregates:_,splitPrefixes:C,rowPaths:A,numCategories:T,rowOffset:L,axisMode:g,numericCategoryDomain:X,categoryPositions:U,series:w,bars:$,posStack:k,negStack:Y,samples:W,sampleValid:V,leftDomain:Zl,rightDomain:ql,hasRightAxis:ht,leftValueAxisMode:$l,rightValueAxisMode:jl,leftValueCategoryDomain:Be?.domain??null,rightValueCategoryDomain:K?.domain??null}}Ye();rn();_t();Fe();var _r=pt;function ja(e,t,n,i){let o=i?.start??0,r=i?.count??e.Rn;if(e.Rn===0||r===0)return;let s=e.S,a=J(n),{setDivisor:l}=a;t.bindBuffer(t.ARRAY_BUFFER,e.k),t.enableVertexAttribArray(s.a_corner),t.vertexAttribPointer(s.a_corner,2,t.FLOAT,!1,0,0),l(s.a_corner,0),Ze(n,a,s.a_x_center,"bar_x",1,o)&&Ze(n,a,s.a_half_width,"bar_hw",1,o)&&Ze(n,a,s.a_y0,"bar_y0",1,o)&&Ze(n,a,s.a_y1,"bar_y1",1,o)&&Ze(n,a,s.a_color,"bar_color",3,o)&&Ze(n,a,s.a_series_id,"bar_sid",1,o)&&Ze(n,a,s.a_axis,"bar_axis",1,o)&&a.drawArraysInstanced(t.TRIANGLE_STRIP,0,4,r),l(s.a_x_center,0),l(s.a_half_width,0),l(s.a_y0,0),l(s.a_y1,0),l(s.a_color,0),l(s.a_series_id,0),l(s.a_axis,0)}var no=10;function Ut(e){return e.Fe>=0?_n(e.Ce,e.Fe,e.fe.length,e.qe,e.a.length):e.Se}function vr(e,t,n){if(!e.l)return;let i=e.l,o;if(e.m){let C=e.m.cells,v=-1;for(let A=0;A<C.length;A++){let T=C[A].layout.e;if(t>=T.x&&t<=T.x+T.width&&n>=T.y&&n<=T.y+T.height){v=A;break}}if(v<0){Za(e);return}i=C[v].layout,o=v}let r=i.e;if(t<r.x||t>r.x+r.width||n<r.y||n>r.y+r.height){Za(e);return}let s=i.Y,a=i.J,l=i.q,u=i.Q,m,f,p,c;if(e.Ke){let C=s,v=a,A=Math.min(l,u),T=Math.max(l,u),L=C+(t-r.x)/r.width*(v-C);m=A+(n-r.y)/r.height*(T-A),f=L,p=r.height/(T-A),c=r.width/(v-C)}else m=s+(t-r.x)/r.width*(a-s),f=u-(n-r.y)/r.height*(u-l),p=r.width/(a-s),c=r.height/(u-l);let b=e.sn&&e.te&&!e.Ke?e.te.max-(n-r.y)/r.height*(e.te.max-e.te.min):f,h=e.sn&&e.te&&!e.Ke?r.height/(e.te.max-e.te.min):c,y=-1,g=null,x=e.Ot,_=x.length<=1;for(let C=x.length-1;C>=0;C--){let v=x[C],A=_?void 0:{start:v.aggStart,end:v.aggEnd};switch(v.chartType){case"scatter":case"line":g=af(e,v.chartType,m,f,b,p,c,h,o,A);break;case"bar":y=sf(e,m,f,b,o,A);break;case"area":{let T=lf(e,m,f,b,o,A);T&&(T.idx>=0?y=T.idx:g=T.bar);break}}if(y>=0||g)break}uf(e,y,g)}function sf(e,t,n,i,o,r){let s=e.Ce,a=s.chartType,l=s.seriesId,u=s.xCenter,m=s.halfWidth,f=s.y0,p=s.y1,c=s.axis,b=e.K,h=Math.max(1,e.fe.length);for(let y=0;y<s.count;y++){if(a[y]!==pt||b.has(l[y])||o!==void 0&&l[y]%h!==o)continue;if(r!==void 0){let L=Math.floor(l[y]/h);if(L<r.start||L>r.end)continue}let g=u[y],x=m[y];if(t<g-x||t>g+x)continue;let _=c[y]===0?n:i,C=f[y],v=p[y],A=C<v?C:v,T=C<v?v:C;if(_>=A&&_<=T)return y}return-1}function af(e,t,n,i,o,r,s,a,l,u){let m=e.ee,f=e.a.length;if(m===0||f===0)return null;let p=e.qe,c=e.Ut,h=no*no,y=null,g=e.se;for(let x of e.a){if(x.chartType!==t||e.K.has(x.seriesId)||l!==void 0&&x.splitIdx!==l||u!==void 0&&(x.aggIdx<u.start||x.aggIdx>u.end))continue;let _=x.axis===1?o:i,C=x.axis===1?a:s,v=g?0:Math.max(0,Math.floor(n-no/r)),A=g?m-1:Math.min(m-1,Math.ceil(n+no/r));for(let T=v;T<=A;T++){let L=T*f+x.seriesId;if(!(c[L>>3]>>(L&7)&1))continue;let w=p[L],F=g?g[T]:T,I=(F-n)*r,S=(w-_)*C,D=I*I+S*S;D<h&&(h=D,y={catIdx:T,aggIdx:x.aggIdx,splitIdx:x.splitIdx,seriesId:x.seriesId,xCenter:F,halfWidth:0,y0:0,y1:w,value:w,axis:x.axis,chartType:"bar"})}}return y}function lf(e,t,n,i,o,r){let s=Math.round(t);if(s<0||s>=e.ee||Math.abs(t-s)>.5)return null;let a=e.a.length,l=e.qe,u=e.Ut,m=e.Ce,f=m.chartType,p=m.catIdx,c=m.seriesId,b=m.axis,h=m.y0,y=m.y1,g=e.fe.length;for(let x=0;x<m.count;x++){if(f[x]!==eo||p[x]!==s||e.K.has(c[x])||o!==void 0&&c[x]%g!==o)continue;if(r!==void 0){let L=Math.floor(c[x]/Math.max(1,g));if(L<r.start||L>r.end)continue}let _=b[x]===0?n:i,C=h[x],v=y[x],A=C<v?C:v,T=C<v?v:C;if(_>=A&&_<=T)return{idx:x,bar:null}}for(let x of e.a){if(x.chartType!=="area"||x.stack||e.K.has(x.seriesId)||o!==void 0&&x.splitIdx!==o||r!==void 0&&(x.aggIdx<r.start||x.aggIdx>r.end))continue;let _=s*a+x.seriesId;if(!(u[_>>3]>>(_&7)&1))continue;let C=l[_],v=x.axis===1?i:n,A=Math.min(0,C),T=Math.max(0,C);if(v>=A&&v<=T)return{idx:-1,bar:{catIdx:s,aggIdx:x.aggIdx,splitIdx:x.splitIdx,seriesId:x.seriesId,xCenter:s,halfWidth:.5,y0:0,y1:C,value:C,axis:x.axis,chartType:"area"}}}return null}function Za(e){(e.Fe!==-1||e.Se!==null)&&(e.Fe=-1,e.Se=null,e.t&&e.requestRender(e.t))}function uf(e,t,n){let i=e.Fe===t,o=(e.Se?.seriesId??-1)===(n?.seriesId??-1)&&(e.Se?.catIdx??-1)===(n?.catIdx??-1);i&&o||(e.Fe=t,e.Se=n,e.t&&e.requestRender(e.t))}function qa(e,t,n){if(e.an.length===0)return!1;for(let i of e.an){let o=i.rect;if(t>=o.x&&t<=o.x+o.width&&n>=o.y&&n<=o.y+o.height){let r=i.seriesIds.some(s=>!e.K.has(s));for(let s of i.seriesIds)r?e.K.add(s):e.K.delete(s);return e._t=null,e.xi=!1,e.Ci=null,e.t&&(io(e,e.t),oo(e,e.t),e.requestRender(e.t)),!0}}return!1}function Ar(e,t){let n=[],i=e.a[t.seriesId],o=mf(e,t.catIdx);o&&n.push(o);let r=e.getColumnFormatter(i.aggName,"value");return n.push(`${i.aggName}: ${r(t.value)}`),i.splitKey&&n.push(`Split: ${i.splitKey}`),t.y0!==0&&(n.push(`Base: ${r(t.y0)}`),n.push(`Top: ${r(t.y1)}`)),n}function mf(e,t){if(e.ke==="numeric"&&e.se){let i=e.se[t];if(i==null)return"";let o=e.g[0];return e.getColumnFormatter(o,"value")(i)}if(e.Me.length===0)return"";let n=[];for(let i of e.Me){let o=i.labels[t];o!=null&&o!==""&&n.push(o)}return n.join(" / ")}function Ka(e,t){t<0||t>=e.Ce.count||(e.io=t,Qa(e,_n(e.Ce,t,e.fe.length,e.qe,e.a.length)))}function Ja(e,t){e.io=-1,Qa(e,t)}function Qa(e,t){if(e.T.dismiss(),!e.l)return;let n=Lr(e,t);if(!n)return;let o=(e.a[t.seriesId]?.chartType??"bar")==="bar"?(t.y0+t.y1)/2:t.y1,r=t.axis===0?e.Ke?n.B(o,t.xCenter):n.B(t.xCenter,o):Tr(e,t.xCenter,o,n),s=Ar(e,t);s.length!==0&&(e.T.pin(s,r,n),e.Fe=-1,e.Se=null,e.t&&e.requestRender(e.t))}Le();jo();Le();ut();St();bi();function el(e,t,n){if(n)return n;if(!e.isDate)return me;let i=t.length>1?t[1]-t[0]:0;return o=>xe(o,i)}function wr(e,t,n,i,o,r,s){let{Te:a,fontFamily:l}=r,{e:u}=t,m=o==="bottom"?u.y+u.height:u.y;e.fillStyle=a,e.font=`11px ${l}`,e.lineWidth=1,di(e,u,i,m,o,f=>t.B(f,0).px,el(n,i,s)),e.font=`13px ${l}`,e.textAlign="center",e.textBaseline="bottom",e.fillText(n.label,u.x+u.width/2,o==="bottom"?t.cssHeight-2:10)}function Rr(e,t,n,i,o,r,s){let{Te:a,fontFamily:l}=r,{e:u}=t,m=o==="left"?u.x:u.x+u.width;e.fillStyle=a,e.font=`11px ${l}`,e.lineWidth=1,pi(e,u,i,m,o,f=>t.B(0,f).py,el(n,i,s)),e.font=`13px ${l}`,e.save(),o==="left"?(e.translate(14,u.y+u.height/2),e.rotate(-Math.PI/2)):(e.translate(t.cssWidth-10,u.y+u.height/2),e.rotate(Math.PI/2)),e.textAlign="center",e.textBaseline="bottom",e.fillText(n.label,0,0),e.restore()}function ro(e,t,n,i,o,r){wr(e,t,n,i,"bottom",o,r)}function so(e,t,n,i,o,r){Rr(e,t,n,i,"left",o,r)}function ao(e,t,n,i,o,r,s,a=!1,l={}){let u=ue(e,i,r);if(!u)return;let{e:m}=i;if(u.strokeStyle=o.ei,u.lineWidth=1,u.beginPath(),u.moveTo(m.x,m.y),u.lineTo(m.x,m.y+m.height),u.lineTo(m.x+m.width,m.y+m.height),s&&(a?(u.moveTo(m.x,m.y),u.lineTo(m.x+m.width,m.y)):(u.moveTo(m.x+m.width,m.y),u.lineTo(m.x+m.width,m.y+m.height))),u.stroke(),a){if(t.mode==="category"?Me(u,i,t.domain,o):so(u,i,t.domain,t.ticks,o,l.category),n.mode==="category"?pe(u,i,n.domain,o):wr(u,i,n.domain,n.ticks,"bottom",o,l.value),s)if(s.mode==="category")pe(u,i,s.domain,o);else{let f=i.Y,p=i.J;i.Y=s.domain.min,i.J=s.domain.max,wr(u,i,s.domain,s.ticks,"top",o,l.alt),i.Y=f,i.J=p}}else if(t.mode==="category"?pe(u,i,t.domain,o):ro(u,i,t.domain,t.ticks,o,l.category),n.mode==="category"?Me(u,i,n.domain,o):Rr(u,i,n.domain,n.ticks,"left",o,l.value),s)if(s.mode==="category")Me(u,i,s.domain,o);else{let f=i.q,p=i.Q;i.q=s.domain.min,i.Q=s.domain.max,Rr(u,i,s.domain,s.ticks,"right",o,l.alt),i.q=f,i.Q=p}}function lo(e,t,n,i,o,r=!1){let s=ue(e,t,o);s&&(s.strokeStyle=i.dn,s.lineWidth=1,r?Tt(s,t.e,n,a=>t.B(a,0).px):wt(s,t.e,n,a=>t.B(0,a).py))}St();At();ci();ut();bi();var Ke=null;function tl(e){if(Ke&&Ke.xCenters.length>=e&&Ke.colors.length>=e*3)return Ke;let t=Math.max(e,Ke?.xCenters.length??0);return Ke={xCenters:new Float32Array(t),halfWidths:new Float32Array(t),y0s:new Float32Array(t),y1s:new Float32Array(t),seriesIds:new Float32Array(t),axes:new Float32Array(t),colors:new Float32Array(t*3)},Ke}function io(e,t){let n=e.Ce,i=n.count,o=e.fe.length,r=e.Vt&&o>0,s=0;if(e._i=null,e.Mn=null,e.Fn=null,i>0){let l=tl(i);(!e.Sn||e.Sn.length<i)&&(e.Sn=new Int32Array(i));let u=e.Sn,m=e.ae,f=e.a,p=e.K,c=n.chartType,b=n.seriesId,h=n.xCenter,y=n.halfWidth,g=n.y0,x=n.y1,_=n.axis,C=Math.max(1,e.vt.length),v=r?S=>S%o*C+Math.floor(S/o):S=>o>0?Math.floor(S/o):S,A=r?o*C:C,T=new Array(A).fill(0);for(let S=0;S<i;S++)c[S]!==_r||p.has(b[S])||T[v(b[S])]++;let L=[],w=new Int32Array(A),F=0;for(let S=0;S<A;S++)L.push({start:F,count:T[S]}),w[S]=F,F+=T[S];r?(e.Fn=null,e.Mn=Array.from({length:o},(S,D)=>L.slice(D*C,(D+1)*C)),e._i=Array.from({length:o},(S,D)=>{let B=L[D*C],N=L[(D+1)*C-1];return{start:B.start,count:N.start+N.count-B.start}})):(e.Fn=L,e.Mn=null);let I=S=>w[v(S)]++;for(let S=0;S<i;S++){if(c[S]!==_r)continue;let D=b[S];if(p.has(D))continue;let B=I(D);l.xCenters[B]=h[S]-m,l.halfWidths[B]=y[S],l.y0s[B]=g[S],l.y1s[B]=x[S],l.seriesIds[B]=D,l.axes[B]=_[S];let N=f[D].color;l.colors[B*3]=N[0],l.colors[B*3+1]=N[1],l.colors[B*3+2]=N[2],u[B]=S,s++}}else r&&(e._i=Array.from({length:o},()=>({start:0,count:0})));if(e.Rn=s,s===0){e.Xe=null;return}let a=Ke;t.v.ensureCapacity(s),t.v.upload("bar_x",a.xCenters.subarray(0,s),0,1),t.v.upload("bar_hw",a.halfWidths.subarray(0,s),0,1),t.v.upload("bar_y0",a.y0s.subarray(0,s),0,1),t.v.upload("bar_y1",a.y1s.subarray(0,s),0,1),t.v.upload("bar_sid",a.seriesIds.subarray(0,s),0,1),t.v.upload("bar_axis",a.axes.subarray(0,s),0,1),t.v.upload("bar_color",a.colors.subarray(0,s*3),0,3),(!e.Xe||e.Xe.length<s*3)&&(e.Xe=new Float32Array(Math.max(s*3,e.Xe?.length??0))),e.Xe.set(a.colors.subarray(0,s*3))}function ff(e,t){let n=e.Rn;if(n===0)return;let i=e.Sn,o=e.a,r=e.Ce.seriesId,s=tl(n);for(let l=0;l<n;l++){let u=o[r[i[l]]].color;s.colors[l*3]=u[0],s.colors[l*3+1]=u[1],s.colors[l*3+2]=u[2]}let a=e.Xe;if(a&&a.length>=n*3){let l=!0;for(let u=0;u<n*3;u++)if(a[u]!==s.colors[u]){l=!1;break}if(l)return}t.v.upload("bar_color",s.colors.subarray(0,n*3),0,3),(!a||a.length<n*3)&&(e.Xe=new Float32Array(n*3)),e.Xe.set(s.colors.subarray(0,n*3))}function nl(e){e.N.lines.invalidateBuffers(e),e.N.scatter.invalidateBuffers(e),e.N.areas.invalidateBuffers(e)}function oo(e,t){e.N.lines.rebuildBuffers(e,t),e.N.scatter.rebuildBuffers(e,t),e.N.areas.rebuildBuffers(e,t)}function il(e,t){let n=t.gl,i=t.dpr,o=n.canvas.width/i,r=n.canvas.height/i;if(o<=0||r<=0||e.ee===0)return;let s=e.A();Mr(e)&&e.Rn>0&&ff(e,t);let a=e.Ke,l=e.ke==="numeric",u=l?e.E.min:-.5,m=l?e.E.max:e.ee-.5,f=e.oo.min,p=e.oo.max;e.h&&(a?e.h.setBaseDomain(f,p,u,m):e.h.setBaseDomain(u,m,f,p));let c=u,b=m,h=f,y=p,g=e.te?.min??0,x=e.te?.max??1;if(e.h){let V=e.h.getVisibleDomain();a?(h=V.xMin,y=V.xMax,c=V.yMin,b=V.yMax):(c=V.xMin,b=V.xMax,h=V.yMin,y=V.yMax)}let _=a?!e.h?.isYDefault():!e.h?.isXDefault();if(e.si&&e.h&&_){let V=Cf(e,c,b);V.hasLeft&&(h=V.leftMin,y=V.leftMax),e.te&&V.hasRight&&(g=V.rightMin,x=V.rightMax)}if(e.C.include_zero&&(h>0&&(h=0),y<0&&(y=0),e.te&&(g>0&&(g=0),x<0&&(x=0))),e.Vt&&e.fe.length>1){df(e,t,{horizontal:a,numericCat:l,cssWidth:o,cssHeight:r,visCatMin:c,visCatMax:b,visValMin:h,visValMax:y,visRightMin:g,visRightMax:x});return}e.m=null;let C=e.a.length>1,v=e.g.length>0,A={levels:e.Me,numRows:e.ee,levelLabels:e.g.slice()},T=e.ln,L=e.In==="category"&&T!==null&&T.numRows>0,w;if(a){let V=l?55:Ft(A),U=V+(v?16:0),X=C?80:16,q=Math.max(1,o-U-X),le=L?We(T,q):void 0;w=new ne(o,r,{hasXLabel:!0,hasYLabel:v,hasLegend:C,leftExtra:V,bottomExtra:le})}else if(l){let V=L?Ft(T):void 0;w=new ne(o,r,{hasXLabel:v,hasYLabel:!0,hasLegend:C,bottomExtra:24,leftExtra:V})}else{let V=L?Ft(T):55,U=V+16,X=C?80:16,q=Math.max(1,o-U-X),le=We(A,q);w=new ne(o,r,{hasXLabel:v,hasYLabel:!0,hasLegend:C,bottomExtra:le,leftExtra:L?V:void 0})}e.l=w,e.h&&e.h.updateLayout(w);let F=e.C.include_zero,I=a?w.buildProjectionMatrix(h,y,b,c,"x",F,void 0,0,e.ae):w.buildProjectionMatrix(c,b,h,y,"y",F,void 0,e.ae,0),S;if(e.sn&&e.te&&!a){let V=w.Y,U=w.J,X=w.q,q=w.Q;S=w.buildProjectionMatrix(c,b,g,x,"y",F,void 0,e.ae,0),w.Y=V,w.J=U,w.q=X,w.Q=q}else S=I;let D=oe(h,y,6),B=e.sn&&e.te&&!a?oe(g,x,6):null,N=A,k={min:h,max:y,label:e.ro},Y=e.te&&!a?{min:g,max:x,label:e.$o}:null;e.j&&lo(e.j,w,D,s,t.dpr,a);let W=e.a.length>1?Ut(e):null;ze(n,w,t.dpr,()=>{ol(e,n,t,I,S,s.ti,a,W?W.seriesId:-1)}),e.ge=N,e.ye=k,e.Re=D,e.vi=Y,e.Ai=B,e.$e=l?oe(c,b,6):null,e.pe(()=>rl(e))}function ol(e,t,n,i,o,r,s,a,l){let u=e.Ot,m=u.length<=1;for(let f of u){let p=m?void 0:{start:f.aggStart,end:f.aggEnd};switch(f.chartType){case"area":s||e.N.areas.draw(e,t,n,i,o,r,l,p);break;case"bar":{t.useProgram(e.i);let c=e.S;t.uniformMatrix4fv(c.u_proj_left,!1,i),t.uniformMatrix4fv(c.u_proj_right,!1,o),t.uniform1f(c.u_horizontal,s?1:0),t.uniform1f(c.u_hover_series,a),ja(e,t,n,cf(e,f,l));break}case"line":s||e.N.lines.draw(e,t,n,i,o,l,p);break;case"scatter":s||e.N.scatter.draw(e,t,n,i,o,l,p);break}}}function cf(e,t,n){let i=n!==void 0?e.Mn?.[n]:e.Fn;if(!i)return n!==void 0?{start:0,count:0}:void 0;let o=i[t.aggStart],r=i[t.aggEnd];return{start:o.start,count:r.start+r.count-o.start}}function df(e,t,n){let i=t.gl,o=t.dpr,r=e.A(),{horizontal:s,numericCat:a,cssWidth:l,cssHeight:u,visCatMin:m,visCatMax:f,visValMin:p,visValMax:c,visRightMin:b,visRightMax:h}=n,y=e.g.length>0,g=e.ln,x=e.In==="category"&&g!==null&&g.numRows>0,_=e.vt.length>1,C=a?"outer":"cell",v=x?"cell":"outer",A=Re(e.fe,{cssWidth:l,cssHeight:u,xAxis:s?v:C,yAxis:s?C:v,hasLegend:_,hasXLabel:s?!0:y,hasYLabel:s?y:!0,gap:e.G.facet_padding});if(e.m=A,e.l=A.cells[0]?.layout??null,A.cells.length===0||!e.l)return;e.syncFacetZoomLayouts(A.cells);let T=oe(p,c,6),L=a?oe(m,f,6):null,w=A.cells[0].layout,F=e.j;F&&e.pe(()=>ue(F,w,o));let I=e.C.include_zero,S=e.a.length>1?Ut(e):null,D=e.sn&&e.te!==null&&!s;at(i);for(let B=0;B<A.cells.length;B++){let k=A.cells[B].layout,Y=s?k.buildProjectionMatrix(p,c,f,m,"x",I,void 0,0,e.ae):k.buildProjectionMatrix(m,f,p,c,"y",I,void 0,e.ae,0),W=Y;if(D){let V=k.Y,U=k.J,X=k.q,q=k.Q;W=k.buildProjectionMatrix(m,f,b,h,"y",I,void 0,e.ae,0),k.Y=V,k.J=U,k.q=X,k.Q=q}F&&e.pe(()=>pf(F,k,T,r,o,s)),lt(i,k,o,()=>{ol(e,i,t,Y,W,r.ti,s,S&&S.splitIdx===B?S.seriesId:-1,B)})}e.ge={levels:e.Me,numRows:e.ee,levelLabels:e.g.slice()},e.ye={min:p,max:c,label:e.ro},e.Re=T,e.vi=null,e.Ai=null,e.$e=L,e.pe(()=>rl(e))}function pf(e,t,n,i,o,r){let s=re(e,o);s&&(s.strokeStyle=i.dn,s.lineWidth=1,r?Tt(s,t.e,n,a=>t.B(a,0).px):wt(s,t.e,n,a=>t.B(0,a).py))}function Lr(e,t){return e.m?e.m.cells[t.splitIdx]?.layout??null:e.l}function rl(e){bf(e),e.presentOverlay()}function bf(e){if(!e.c||!e.l||!e.ye||!e.Re)return;if(e.m){hf(e);return}let t=e.A(),n;if(e.ke==="numeric"&&e.E&&e.$e)n={mode:"numeric",domain:{min:e.E.min,max:e.E.max,isDate:e.E.isDate,label:e.E.label},ticks:e.$e};else if(e.ge)n={mode:"category",domain:e.ge};else return;let i=e.a.find(l=>l.axis===0),o=e.a.find(l=>l.axis===1),r=e.g[0],s=e.In==="category"&&e.ln?{mode:"category",domain:e.ln}:{mode:"numeric",domain:e.ye,ticks:e.Re},a;e.vi&&e.Ai&&(a=e.jo==="category"&&e.so?{mode:"category",domain:e.so}:{mode:"numeric",domain:e.vi,ticks:e.Ai}),ao(e.c,n,s,e.l,t,e.t?.dpr??1,a,e.Ke,{value:e.getColumnFormatter(i?.aggName??null,"tick"),alt:e.getColumnFormatter(o?.aggName??null,"tick"),category:e.getColumnFormatter(r,"tick")}),xf(e),Ut(e)&&sl(e)}function hf(e){let t=e.m,n=e.c,i=e.A(),o=e.t?.dpr??1,r=e.Ke,s=e.g.length>0,a=e.ke==="numeric"&&e.E!==null&&e.$e!==null;if(!ue(n,e.l,o))return;let l=e.ge,u=e.ye,m=e.Re,f=e.ln,p=e.In==="category"&&f!==null&&f.numRows>0,c=e.a.find(g=>g.axis===0),b=e.getColumnFormatter(c?.aggName??null,"tick"),h=e.getColumnFormatter(e.g[0],"tick");for(let g of t.cells){let x=g.layout,_=x.e,C=re(n,o);C&&(C.strokeStyle=i.ei,C.lineWidth=1,C.beginPath(),C.moveTo(_.x,_.y),C.lineTo(_.x,_.y+_.height),C.lineTo(_.x+_.width,_.y+_.height),C.stroke(),r?(!a&&l&&Me(C,x,l,i),p&&pe(C,x,f,i)):(!a&&l&&pe(C,x,l,i),p&&Me(C,x,f,i)),g.titleRect&&vt(n,g.label,g.titleRect,i,o))}let y=a?{min:e.E.min,max:e.E.max,isDate:e.E.isDate,label:e.E.label}:null;r?(y&&t.outerYAxisRect&&ln(n,t.outerYAxisRect,y,e.$e,nn(t),i,s,o,h),!p&&t.outerXAxisRect&&an(n,t.outerXAxisRect,u,m,tn(t),i,!0,o,b)):(y&&t.outerXAxisRect&&an(n,t.outerXAxisRect,y,e.$e,tn(t),i,s,o,h),!p&&t.outerYAxisRect&&ln(n,t.outerYAxisRect,u,m,nn(t),i,!0,o,b)),gf(e,t),Ut(e)&&sl(e)}function gf(e,t){if(e.an=[],!e.c||!t.legendRect)return;let n=e.vt.length;if(n<=1)return;let i=e.c.getContext("2d");if(!i)return;i.save();let o=e.A(),r=10,s=18,a=t.legendRect.x+12,l=t.legendRect.y+10;i.font=`11px ${o.fontFamily}`,i.textAlign="left",i.textBaseline="middle";for(let u=0;u<n;u++){let m=[],f=[.5,.5,.5];for(let x of e.a)x.aggIdx===u&&(m.push(x.seriesId),f=x.color);let p=e.vt[u],c=m.every(x=>e.K.has(x)),b=Math.round(f[0]*255),h=Math.round(f[1]*255),y=Math.round(f[2]*255);i.globalAlpha=c?.3:1,i.fillStyle=`rgb(${b},${h},${y})`,i.fillRect(a,l-r/2,r,r),i.fillStyle=o.pn,i.fillText(p,a+r+6,l);let g=i.measureText(p).width;c&&(i.strokeStyle=o.pn,i.lineWidth=1,i.beginPath(),i.moveTo(a+r+6,l),i.lineTo(a+r+6+g,l),i.stroke()),i.globalAlpha=1,e.an.push({seriesIds:m,rect:{x:a-2,y:l-s/2,width:r+6+g+4,height:s}}),l+=s}i.restore()}var uo=new Float64Array(0);function yf(e,t,n){if(e.xi)return;let i=e.a;uo.length<i.length&&(uo=new Float64Array(i.length)),t.save(),t.font=`11px ${n}`;for(let o=0;o<i.length;o++)uo[o]=t.measureText(i[o].label).width;t.restore(),e.xi=!0}function xf(e){if(e.an=[],!e.c||!e.l||e.a.length<=1)return;let t=e.c.getContext("2d");if(!t)return;t.save();let n=e.A(),i=n.pn,o=n.fontFamily;yf(e,t,o);let r=e.l,s=10,a=18,l=r.e.x+r.e.width+12,u=r.margins.top+10;t.font=`11px ${o}`,t.textAlign="left",t.textBaseline="middle";let m=e.a,f=uo;for(let p=0;p<m.length;p++){let c=m[p],b=e.K.has(c.seriesId),h=Math.round(c.color[0]*255),y=Math.round(c.color[1]*255),g=Math.round(c.color[2]*255);t.globalAlpha=b?.3:1,t.fillStyle=`rgb(${h},${y},${g})`,t.fillRect(l,u-s/2,s,s),t.fillStyle=i,t.fillText(c.label,l+s+6,u);let x=f[p];b&&(t.strokeStyle=i,t.lineWidth=1,t.beginPath(),t.moveTo(l+s+6,u),t.lineTo(l+s+6+x,u),t.stroke()),t.globalAlpha=1;let _={x:l-2,y:u-a/2,width:s+6+x+4,height:a};e.an.push({seriesIds:[c.seriesId],rect:_}),u+=a}t.restore()}function sl(e){if(!e.c||!e.l)return;let t=Ut(e);if(!t)return;let n=Lr(e,t);if(!n)return;let o=(e.a[t.seriesId]?.chartType??"bar")==="bar"?(t.y0+t.y1)/2:t.y1,r=t.axis===0?e.Ke?n.B(o,t.xCenter):n.B(t.xCenter,o):Tr(e,t.xCenter,o,n),s=Ar(e,t),a=e.A();Ee(e.c,r,s,n,a,e.t?.dpr??1)}function Tr(e,t,n,i){let o=i??e.l,{x:r,y:s,width:a,height:l}=o.e,u=(t-o.Y)/(o.J-o.Y),m=e.te,f=(n-m.min)/(m.max-m.min);return{px:r+u*a,py:s+(1-f)*l}}function Cf(e,t,n){let i=e._t;if(i&&i.catMin===t&&i.catMax===n&&i.hidden===e.K)return i;let o=Af(e),r=1/0,s=-1/0,a=!1,l=1/0,u=-1/0,m=!1;if(o.n>0){let p=e.se,c,b;if(p){let v=_f(p,o.n,t,n);c=v.lo,b=v.hi}else c=Math.max(0,Math.floor(t)),b=Math.min(o.n-1,Math.ceil(n));let h=o.leftMin,y=o.leftMax,g=o.rightMin,x=o.rightMax,_=o.hasLeft,C=o.hasRight;for(let v=c;v<=b;v++)_[v]&&(h[v]<r&&(r=h[v]),y[v]>s&&(s=y[v]),a=!0),C[v]&&(g[v]<l&&(l=g[v]),x[v]>u&&(u=x[v]),m=!0)}let f=i??vf();return f.catMin=t,f.catMax=n,f.hidden=e.K,f.leftMin=r,f.leftMax=s,f.hasLeft=a,f.rightMin=l,f.rightMax=u,f.hasRight=m,e._t=f,f}function _f(e,t,n,i){if(t===0||n>i)return{lo:0,hi:-1};let o=0,r=t;for(;o<r;){let l=o+r>>>1;e[l]<n?o=l+1:r=l}let s=Math.max(0,o-1);for(o=0,r=t;o<r;){let l=o+r>>>1;e[l]<=i?o=l+1:r=l}let a=Math.min(t-1,o);return{lo:s,hi:a}}function vf(){return{catMin:0,catMax:0,hidden:new Set,leftMin:0,leftMax:0,hasLeft:!1,rightMin:0,rightMax:0,hasRight:!1}}function Af(e){let t=e.ee,n=e.Zo,i=n&&n.leftMin.length>=t;if(n&&i&&e.Ci===e.K)return n;!n||!i?(n={leftMin:new Float64Array(t),leftMax:new Float64Array(t),rightMin:new Float64Array(t),rightMax:new Float64Array(t),hasLeft:new Uint8Array(t),hasRight:new Uint8Array(t),n:t},e.Zo=n):n.n=t;for(let h=0;h<t;h++)n.leftMin[h]=1/0,n.leftMax[h]=-1/0,n.rightMin[h]=1/0,n.rightMax[h]=-1/0,n.hasLeft[h]=0,n.hasRight[h]=0;let o=e.Ce,r=e.K,s=o.catIdx,a=o.seriesId,l=o.y0,u=o.y1,m=o.axis;for(let h=0;h<o.count;h++){if(r.has(a[h]))continue;let y=s[h];if(y<0||y>=t)continue;let g=l[h],x=u[h],_=g<x?g:x,C=g<x?x:g;m[h]===1?(_<n.rightMin[y]&&(n.rightMin[y]=_),C>n.rightMax[y]&&(n.rightMax[y]=C),n.hasRight[y]=1):(_<n.leftMin[y]&&(n.leftMin[y]=_),C>n.leftMax[y]&&(n.leftMax[y]=C),n.hasLeft[y]=1)}let f=[e.Dn,e.Bn],p=e.qe,c=e.Ut,b=e.a.length;for(let h of f)for(let y of h){if(r.has(y.seriesId))continue;let g=y.axis===1,x=y.seriesId;for(let _=0;_<t;_++){let C=_*b+x;if(!(c[C>>3]>>(C&7)&1))continue;let v=p[C];g?(v<n.rightMin[_]&&(n.rightMin[_]=v),v>n.rightMax[_]&&(n.rightMax[_]=v),n.hasRight[_]=1):(v<n.leftMin[_]&&(n.leftMin[_]=v),v>n.leftMax[_]&&(n.leftMax[_]=v),n.hasLeft[_]=1)}}return e.Ci=r,n}on();Fe();fe();var vn=new Float32Array(0),An=new Uint8Array(0);function Lf(e){return vn.length>=e||(vn=new Float32Array(Math.max(e,vn.length*2))),vn}function Tf(e){return An.length>=e||(An=new Uint8Array(Math.max(e,An.length*2))),An}function wf(e){return e==="solid"?1:e==="transparent"?.5:0}var mo=class{constructor(){d(this,"i",null);d(this,"o",null)}ensureProgram(t){if(this.i)return this.i;let n=je(t.gl),i=j(t,"bar-line",Ue,Ve,["u_projection","u_color","u_resolution","u_line_width","u_interp_alpha"],["a_start","a_end","a_corner","a_real_start","a_real_end"]);return this.i={...i,cornerBuffer:n},this.i}invalidateBuffers(t){let n=this.o;if(!n||!t.t){this.o=null;return}let i=t.t.gl;for(let o of n.series)i.deleteBuffer(o.gpuBuffer),i.deleteBuffer(o.gpuRealBuffer);this.o=null}rebuildBuffers(t,n){let i=t.Dn;if(i.length===0){this.o=null;return}if(t.ee===0){this.o=null;return}this.ensureProgram(n);let r=n.gl,s=t.qe,a=t.Ut,l=t.ae,u=t.se,m=t.a.length,f=[];for(let p of i){let c=t.a[p.seriesId],b=c.start,h=c.end;if(b<0||h<b)continue;let y=h-b+1;if(y<2)continue;let g=Lf(y*2),x=Tf(y),_=0;for(let A=b;A<=h;A++){let T=u?u[A]-l:A,L=A*m+p.seriesId;g[_*2]=T,g[_*2+1]=s[L],x[_]=a[L>>3]>>(L&7)&1,_++}let C=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,C),r.bufferData(r.ARRAY_BUFFER,g.subarray(0,_*2),r.STATIC_DRAW);let v=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,v),r.bufferData(r.ARRAY_BUFFER,x.subarray(0,_),r.STATIC_DRAW),f.push({seriesId:p.seriesId,axis:p.axis,color:[p.color[0],p.color[1],p.color[2]],gpuBuffer:C,gpuRealBuffer:v,count:y,interpolateMode:c.interpolateMode})}this.o={series:f}}draw(t,n,i,o,r,s,a){let l=this.o,u=this.i;if(!l||!u||l.series.length===0)return;let m=i.dpr;n.useProgram(u.program),n.uniform2f(u.u_resolution,n.canvas.width,n.canvas.height),n.uniform1f(u.u_line_width,t.C.line_width_px*m);let f=J(i),{setDivisor:p,drawArraysInstanced:c}=f;n.bindBuffer(n.ARRAY_BUFFER,u.cornerBuffer),n.enableVertexAttribArray(u.a_corner),n.vertexAttribPointer(u.a_corner,1,n.FLOAT,!1,0,0),p(u.a_corner,0);let b=2*Float32Array.BYTES_PER_ELEMENT,h=Uint8Array.BYTES_PER_ELEMENT,y=t.K;for(let g of l.series){if(y.has(g.seriesId)||s!==void 0&&t.a[g.seriesId].splitIdx!==s)continue;let x=t.a[g.seriesId].aggIdx;if(a!==void 0&&(x<a.start||x>a.end))continue;n.uniformMatrix4fv(u.u_projection,!1,g.axis===1?r:o);let _=t.a[g.seriesId].color;n.uniform4f(u.u_color,_[0],_[1],_[2],1),n.uniform1f(u.u_interp_alpha,wf(g.interpolateMode)),n.enableVertexAttribArray(u.a_start),p(u.a_start,1),n.enableVertexAttribArray(u.a_end),p(u.a_end,1),n.enableVertexAttribArray(u.a_real_start),p(u.a_real_start,1),n.enableVertexAttribArray(u.a_real_end),p(u.a_real_end,1),n.bindBuffer(n.ARRAY_BUFFER,g.gpuBuffer),n.vertexAttribPointer(u.a_start,2,n.FLOAT,!1,b,0),n.vertexAttribPointer(u.a_end,2,n.FLOAT,!1,b,b),n.bindBuffer(n.ARRAY_BUFFER,g.gpuRealBuffer),n.vertexAttribPointer(u.a_real_start,1,n.UNSIGNED_BYTE,!1,h,0),n.vertexAttribPointer(u.a_real_end,1,n.UNSIGNED_BYTE,!1,h,h),c(n.TRIANGLE_STRIP,0,4,g.count-1)}p(u.a_start,0),p(u.a_end,0),p(u.a_real_start,0),p(u.a_real_end,0)}destroy(t){let n=t.t?.gl;if(n){this.invalidateBuffers(t);let i=this.i;i&&n.deleteBuffer(i.cornerBuffer)}this.i=null,this.o=null}};fe();var Ne=new Float32Array(0),_e=new Float32Array(0);function Rf(e){Ne.length<e*2&&(Ne=new Float32Array(Math.max(e*2,Ne.length*2))),_e.length<e*3&&(_e=new Float32Array(Math.max(e*3,_e.length*2)))}var fo=class{constructor(){d(this,"i",null);d(this,"o",null)}ensureProgram(t){if(this.i)return this.i;let n=t.gl,i=j(t,"bar-scatter",kn,Nn,["u_projection","u_point_size"],["a_position","a_color"]);return this.i={...i,posLeftBuffer:n.createBuffer(),posRightBuffer:n.createBuffer(),colorLeftBuffer:n.createBuffer(),colorRightBuffer:n.createBuffer()},this.i}invalidateBuffers(t){this.o=null}rebuildBuffers(t,n){let i=t.Bn;if(i.length===0){this.o=null;return}let o=t.ee,r=t.a.length;if(o===0||r===0){this.o=null;return}let s=this.ensureProgram(n),a=n.gl,l=t.qe,u=t.Ut,m=t.se,f=t.ae,p=t.K,c=0,b=0;for(let _ of i)if(!p.has(_.seriesId))for(let C=0;C<o;C++){let v=C*r+_.seriesId;u[v>>3]>>(v&7)&1&&(_.axis===1?b++:c++)}let h=c+b;if(h===0){this.o=null;return}Rf(h);let y=[],g=0,x=c;for(let _ of i){if(p.has(_.seriesId))continue;let C=_.axis===1?x-c:g,v=_.color[0],A=_.color[1],T=_.color[2];for(let w=0;w<o;w++){let F=w*r+_.seriesId;if(!(u[F>>3]>>(F&7)&1))continue;let I=m?m[w]-f:w,S=l[F];_.axis===1?(Ne[x*2]=I,Ne[x*2+1]=S,_e[x*3]=v,_e[x*3+1]=A,_e[x*3+2]=T,x++):(Ne[g*2]=I,Ne[g*2+1]=S,_e[g*3]=v,_e[g*3+1]=A,_e[g*3+2]=T,g++)}let L=_.axis===1?x-c:g;L>C&&y.push({seriesId:_.seriesId,axis:_.axis,first:C,count:L-C})}c>0&&(a.bindBuffer(a.ARRAY_BUFFER,s.posLeftBuffer),a.bufferData(a.ARRAY_BUFFER,Ne.subarray(0,c*2),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,s.colorLeftBuffer),a.bufferData(a.ARRAY_BUFFER,_e.subarray(0,c*3),a.STATIC_DRAW)),b>0&&(a.bindBuffer(a.ARRAY_BUFFER,s.posRightBuffer),a.bufferData(a.ARRAY_BUFFER,Ne.subarray(c*2,h*2),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,s.colorRightBuffer),a.bufferData(a.ARRAY_BUFFER,_e.subarray(c*3,h*3),a.STATIC_DRAW)),this.o={leftCount:c,rightCount:b,seriesRanges:y}}draw(t,n,i,o,r,s,a){let l=this.o,u=this.i;if(!l||!u||l.leftCount===0&&l.rightCount===0)return;let m=i.dpr;if(n.useProgram(u.program),n.uniform1f(u.u_point_size,t.C.point_size_px*m),s!==void 0||a!==void 0){for(let f of l.seriesRanges){if(s!==void 0&&t.a[f.seriesId].splitIdx!==s)continue;let p=t.a[f.seriesId].aggIdx;a!==void 0&&(p<a.start||p>a.end)||Fr(n,u,f.axis===1?u.posRightBuffer:u.posLeftBuffer,f.axis===1?u.colorRightBuffer:u.colorLeftBuffer,f.count,f.axis===1?r:o,f.first)}return}Fr(n,u,u.posLeftBuffer,u.colorLeftBuffer,l.leftCount,o),Fr(n,u,u.posRightBuffer,u.colorRightBuffer,l.rightCount,r)}destroy(t){let n=t.t?.gl;if(n){let i=this.i;i&&(n.deleteBuffer(i.posLeftBuffer),n.deleteBuffer(i.posRightBuffer),n.deleteBuffer(i.colorLeftBuffer),n.deleteBuffer(i.colorRightBuffer))}this.i=null,this.o=null}};function Fr(e,t,n,i,o,r,s=0){o!==0&&(e.uniformMatrix4fv(t.u_projection,!1,r),e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t.a_position),e.vertexAttribPointer(t.a_position,2,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,i),e.enableVertexAttribArray(t.a_color),e.vertexAttribPointer(t.a_color,3,e.FLOAT,!1,0,0),e.drawArrays(e.POINTS,s,o))}fe();var Ln=new Float32Array(0);function Mf(e){return Ln.length>=e||(Ln=new Float32Array(Math.max(e,Ln.length*2))),Ln}var co=class{constructor(){d(this,"i",null);d(this,"o",null)}ensureProgram(t){return this.i?this.i:(this.i=j(t,"bar-area",Gn,Wn,["u_projection","u_color","u_opacity"],["a_position"]),this.i)}invalidateBuffers(t){let n=this.o;if(!n||!t.t){this.o=null;return}let i=t.t.gl;for(let o of n.series)i.deleteBuffer(o.gpuBuffer);this.o=null}rebuildBuffers(t,n){let i=t.Li;if(i.length===0){this.o=null;return}let o=t.ee,r=t.a.length;if(o===0||r===0){this.o=null;return}this.ensureProgram(n);let s=n.gl,a=t.qe,l=t.Ut,u=t.se,m=t.ae,f=t.ao,p=t.Ce,c=[];for(let b of i){let h=t.a[b.seriesId],y=Ff(b,o,r,a,l,f,p.y0,p.y1,u,m,h.start,h.end,h.interpolateMode);if(y.totalVertices===0)continue;let g=s.createBuffer();s.bindBuffer(s.ARRAY_BUFFER,g),s.bufferData(s.ARRAY_BUFFER,y.scratch.subarray(0,y.totalVertices*2),s.STATIC_DRAW),c.push({seriesId:b.seriesId,axis:b.axis,color:[b.color[0],b.color[1],b.color[2]],gpuBuffer:g,strips:y.descriptors})}this.o={series:c}}draw(t,n,i,o,r,s,a,l){let u=this.o,m=this.i;if(!u||!m||u.series.length===0)return;n.useProgram(m.program),n.uniform1f(m.u_opacity,s);let f=t.K;for(let p of u.series){if(f.has(p.seriesId)||a!==void 0&&t.a[p.seriesId].splitIdx!==a)continue;let c=t.a[p.seriesId].aggIdx;if(l!==void 0&&(c<l.start||c>l.end))continue;n.uniformMatrix4fv(m.u_projection,!1,p.axis===1?r:o);let b=t.a[p.seriesId].color;n.uniform3f(m.u_color,b[0],b[1],b[2]),n.bindBuffer(n.ARRAY_BUFFER,p.gpuBuffer),n.enableVertexAttribArray(m.a_position),n.vertexAttribPointer(m.a_position,2,n.FLOAT,!1,0,0);for(let h of p.strips)n.bindBuffer(n.ARRAY_BUFFER,p.gpuBuffer),n.vertexAttribPointer(m.a_position,2,n.FLOAT,!1,0,h.offsetBytes),n.drawArrays(n.TRIANGLE_STRIP,0,h.vertexCount)}}destroy(t){this.invalidateBuffers(t),this.i=null}};function Ff(e,t,n,i,o,r,s,a,l,u,m,f,p){let c=Mf(t*4),b=[],h=e.seriesId*1e9,y=p!=="skip",g=0,x=0;for(let _=0;_<t;_++){let C=0,v=0,A=!1;if(e.stack){let T=r?.get(h+_);T!==void 0&&(C=s[T],v=a[T],A=!0)}else{let T=_*n+e.seriesId;y?_>=m&&_<=f&&(v=i[T],A=!0):o[T>>3]>>(T&7)&1&&(v=i[T],A=!0)}if(A){let T=l?l[_]-u:_;c[g++]=T,c[g++]=C,c[g++]=T,c[g++]=v}else if(g>x){let T=(g-x)/2;T>=4&&b.push({offsetBytes:x*4,vertexCount:T}),x=g}}if(g>x){let _=(g-x)/2;_>=4&&b.push({offsetBytes:x*4,vertexCount:_})}return{descriptors:b,totalVertices:g/2,scratch:c}}Fe();fe();function Tn(e,t){return e&&(t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max)),{min:t.min,max:t.max}}var Je=class extends Ot{constructor(n="vertical"){super();d(this,"Ke");d(this,"S",null);d(this,"vt",[]);d(this,"fe",[]);d(this,"a",[]);d(this,"Vt",!1);d(this,"m",null);d(this,"_i",null);d(this,"Ot",[]);d(this,"Fn",null);d(this,"Mn",null);d(this,"Ce",to());d(this,"uo",[]);d(this,"Dn",[]);d(this,"Bn",[]);d(this,"Li",[]);d(this,"ro","");d(this,"$o","");d(this,"In","numeric");d(this,"jo",null);d(this,"ln",null);d(this,"so",null);d(this,"ao",null);d(this,"Xe",null);d(this,"Ti",null);d(this,"wi",null);d(this,"mo",null);d(this,"fo",null);d(this,"oo",{min:0,max:1});d(this,"te",null);d(this,"sn",!1);d(this,"Pn",null);d(this,"En",null);d(this,"Ri",null);d(this,"ke","category");d(this,"E",null);d(this,"ae",0);d(this,"$e",null);d(this,"se",null);d(this,"K",new Set);d(this,"Fe",-1);d(this,"io",-1);d(this,"Se",null);d(this,"qe",new Float32Array(0));d(this,"Ut",new Uint8Array(0));d(this,"N",{lines:new mo,scatter:new fo,areas:new co});d(this,"vi",null);d(this,"Ai",null);d(this,"Rn",0);d(this,"Sn",new Int32Array(0));d(this,"an",[]);d(this,"xi",!1);d(this,"_t",null);d(this,"Zo",null);d(this,"Ci",null);this.Ke=n==="horizontal"}getZoomConfig(){return{lockAxis:this.Ke?"x":"y"}}tooltipCallbacks(){return{onHover:(n,i)=>vr(this,n,i),onLeave:()=>{(this.Fe!==-1||this.Se)&&(this.Fe=-1,this.Se=null,this.t&&this.requestRender(this.t))},onClickPre:(n,i)=>qa(this,n,i),onPin:(n,i)=>{if(vr(this,n,i),this.Fe>=0){let o=this.Fe;Ka(this,o);let r=_n(this.Ce,o,this.fe.length,this.qe,this.a.length);this.qo(r)}else if(this.Se){let o=this.Se;Ja(this,o),this.qo(o)}},onUnpin:()=>{this.emitUnselect()}}}async qo(n){if(!this.vt[n.aggIdx])return;let i=this.ke==="numeric"&&this.se?[this.se[n.catIdx]??null]:this.Me.map(s=>s.labels[n.catIdx]??null),o=this.fe[n.splitIdx]??"",r=this.D.length>0&&o!==""?o.split("|"):[];await this.emitClickAndSelect({rowIdx:n.catIdx+this.mt,columnName:this.vt[n.aggIdx],groupByValues:i,splitByValues:r})}async uploadAndRender(n,i,o,r){this.t=n;let s=n.gl;if(o!==0)return;if(!this.i){let u=j(n,"bar",Sn,In,["u_proj_left","u_proj_right","u_hover_series","u_horizontal"],["a_corner","a_x_center","a_half_width","a_y0","a_y1","a_color","a_series_id","a_axis"]);this.i=u.program,this.S=u,this.k=Ti(s)}let a=this.D.length>0&&this.G.facet_mode==="grid",l=$a({columns:i,numRows:r,columnSlots:this.R,groupBy:this.g,splitBy:this.D,groupByTypes:this.gt,columnsConfig:this.gn,defaultChartType:this.oi,autoAltYAxis:this.C.auto_alt_y_axis,bandInnerFrac:this.C.band_inner_frac,barInnerPad:this.C.bar_inner_pad,includeZero:this.C.include_zero,facetSplits:a,scratchBars:this.Ce,scratchPosStack:this.mo,scratchNegStack:this.fo});if(this.C.domain_mode==="expand"){let u=If(l);this.Ri!==u&&(this.Pn=null,this.En=null,this.Ri=u),this.Pn=Tn(this.Pn,l.leftDomain),l.rightDomain&&(this.En=Tn(this.En,l.rightDomain))}else this.Pn=null,this.En=null,this.Ri=null;this.vt=l.aggregates,this.fe=l.splitPrefixes,this.Vt=a&&l.splitPrefixes.length>1,this.Me=l.rowPaths,this.ee=l.numCategories,this.mt=l.rowOffset,this.ke=l.axisMode.mode,this.E=l.numericCategoryDomain,this.se=l.categoryPositions,this.ae=l.numericCategoryDomain?.min??0,this.a=l.series,this.Ce=l.bars,this.mo=l.posStack,this.fo=l.negStack,this.qe=l.samples,this.uo.length=0,this.Dn.length=0,this.Bn.length=0,this.Li.length=0;for(let u of l.series)switch(u.chartType){case"bar":this.uo.push(u);break;case"line":this.Dn.push(u);break;case"scatter":this.Bn.push(u);break;case"area":this.Li.push(u);break}this.ro=al(l.series,0),this.$o=al(l.series,1),this.Ot.length=0;{let u=Math.max(1,l.splitPrefixes.length);for(let m=0;m<l.aggregates.length;m++){let f=l.series[m*u].chartType,p=this.Ot[this.Ot.length-1];p&&p.chartType===f?p.aggEnd=m:this.Ot.push({chartType:f,aggStart:m,aggEnd:m})}}this.ao=Sf(this.Ce),this._t=null,this.xi=!1,this.Ti=null,this.wi=null,this.Ci=null,this.Xe=null,this.Fe=-1,this.Se=null,this.Ut=l.sampleValid,this.oo=l.leftDomain,this.te=l.rightDomain,this.sn=l.hasRightAxis,this.In=l.leftValueAxisMode,this.jo=l.rightValueAxisMode,this.ln=l.leftValueCategoryDomain,this.so=l.rightValueCategoryDomain,Mr(this),io(this,n),nl(this),oo(this,n),await this.requestRender(n)}Bt(n){this.i&&(this.t=n,il(this,n))}resetExpandedDomain(){this.Pn=null,this.En=null,this.Ri=null}destroyInternal(){if(this.t){let n=this.t.gl;this.k&&n.deleteBuffer(this.k),Bf(this)}this.i=null,this.S=null,this.k=null,this.Vt=!1,this.m=null,this._i=null,this.Mn=null,this.Fn=null,this.Ot.length=0,this.Ce=to(),this.a=[],this.uo=[],this.Dn=[],this.Bn=[],this.Li=[],this.ao=null,this.Ti=null,this.wi=null,this.Xe=null,this.mo=null,this.fo=null,this.Me=[],this.ee=0,this.K.clear(),this.Fe=-1,this.Se=null}};function Sf(e){let t=new Map;for(let n=0;n<e.count;n++)e.chartType[n]===1&&t.set(e.seriesId[n]*1e9+e.catIdx[n],n);return t}function al(e,t){let n=new Set,i=[];for(let o of e)o.axis===t&&(n.has(o.aggName)||(n.add(o.aggName),i.push(o.aggName)));return i.join(", ")}function If(e){let t=Math.max(1,e.splitPrefixes.length),n=[];for(let i=0;i<e.aggregates.length;i++)n.push(`${e.aggregates[i]}:${e.series[i*t].axis}`);return n.join("\\0")}function Mr(e){let t=e.A(),n=t.Be,i=t.O,o=e.gn,r=e.Vt?Math.max(1,e.vt.length):e.a.length,s=e.wi;if(e.Ti&&s&&s.Be===n&&s.O===i&&s.seriesLength===r&&s.columnsConfig===o)return!1;let a=Df(n,i,r);e.Ti=a,e.wi={Be:n,O:i,seriesLength:r,columnsConfig:o};for(let l=0;l<e.a.length;l++){let u=e.a[l],m=e.Vt?a[u.aggIdx]:a[l];u.color=Va(u,e.Vt,o)??m}return!0}function Df(e,t,n){return de(e,t,n)}function Bf(e){e.N.lines.destroy(e),e.N.scatter.destroy(e),e.N.areas.destroy(e)}var po=class extends Je{constructor(){super("horizontal")}};Qt();Ye();mn();function Sr(e){let{columns:t,numRows:n,groupBy:i,splitBy:o,groupByTypes:r}=e,s=Wt(i,r),a={xLevels:[],yColumnNames:[],yLevels:[],numX:0,numY:0,rowOffset:0,cells:[],cells2D:[],colorMin:0,colorMax:1,xAxisMode:s,yAxisMode:{mode:"category"},xPositions:null,yPositions:null,xNumericDomain:null,yNumericDomain:null},l=i.map(w=>r[w]??"string"),{rowPaths:u,numCategories:m,rowOffset:f}=kt(t,n,i.length,l,s),p=null,c=null;if(s.mode==="numeric"&&m>0){let w=t.get("__ROW_PATH_0__"),F=ct(w?.values,m,f,i[0]??"",s.numericType==="date"||s.numericType==="datetime");F&&(p=F.categoryPositions,c=F.numericCategoryDomain)}let b=[];for(let w of t.keys())w.startsWith("__")||!t.get(w)?.values||b.push(w);let h=b.length;if(m===0||h===0)return{...a,xLevels:u,rowOffset:f};let y=Gf(b),g=Pf(o,r),x={mode:"category"},_=null,C=null;if(g.mode==="numeric"){let w=Ef(b,g.numericType);if(w){let F=ct(w,h,0,o[0]??"",g.numericType==="date"||g.numericType==="datetime");F&&(x=g,_=F.categoryPositions,C=F.numericCategoryDomain)}}let v=[],A=new Array(m*h).fill(null),T=1/0,L=-1/0;for(let w=0;w<h;w++){let F=t.get(b[w]),I=F.values,S=F.valid;for(let D=0;D<m;D++){let B=D+f;if(S&&!(S[B>>3]>>(B&7)&1))continue;let N=I[B];if(!isFinite(N))continue;let k={xIdx:D,yIdx:w,value:N};v.push(k),A[w*m+D]=k,N<T&&(T=N),N>L&&(L=N)}}return!isFinite(T)||!isFinite(L)?(T=0,L=1):T===L&&(L=T+1),{xLevels:u,yColumnNames:b,yLevels:y,numX:m,numY:h,rowOffset:f,cells:v,cells2D:A,colorMin:T,colorMax:L,xAxisMode:s,yAxisMode:x,xPositions:p,yPositions:_,xNumericDomain:c,yNumericDomain:C}}function Pf(e,t){if(e.length!==1)return{mode:"category"};let n=t[e[0]];return n==="date"||n==="datetime"||n==="integer"||n==="float"?{mode:"numeric",numericType:n}:{mode:"category"}}function Ef(e,t){let n=new Float64Array(e.length);for(let i=0;i<e.length;i++){let o=e[i],r=o.indexOf("|"),s=r===-1?o:o.slice(0,r),a;if(t==="date"||t==="datetime"?(a=Date.parse(s),isFinite(a)||(a=Date.parse(s.replace(" ","T")))):a=Number(s),!isFinite(a))return null;n[i]=a}return n}function ll(e,t){return t.map(n=>{let i=new Map;for(let[o,r]of e){if(o.startsWith("__ROW_PATH_")||o==="__GROUPING_ID__"){i.set(o,r);continue}let s=o.lastIndexOf("|");(s===-1?o:o.slice(s+1))===n&&i.set(o,r)}return{label:n,columns:i}})}function Gf(e){if(e.length===0)return[];let t=0,n=e.map(o=>o.split("|"));for(let o of n)o.length>t&&(t=o.length);if(t===0)return[];let i=[];for(let o=0;o<t;o++){let r=[],s=new Map,a=new Int32Array(e.length),l=new Array(e.length),u=0;for(let p=0;p<e.length;p++){let c=n[p][o]??"",b=s.get(c);b===void 0&&(b=r.length,r.push(c),s.set(c,b)),a[p]=b,l[p]=c,c.length>u&&(u=c.length)}let f=o===t-1?[]:gi(a,r,0,e.length);i.push({labels:l,runs:f,maxLabelChars:u})}return i}Ye();ci();rn();Fe();fe();ut();At();St();mn();hi();function Dr(e,t){return t?.skipLeafLevel&&e.length>0?e.slice(0,-1):e}var Wf=80,kf=20,Ir=5,Br=11;function Vt(e,t){return e.B(0,t).py}function ul(e,t){let n=Dr(e.levels,t),i=n.length,o=[];for(let r=0;r<i;r++){let s=n[r].maxLabelChars;if(r===i-1){let a=Math.max(Wf,s*6.5+16);o.push({size:a})}else{let a=Math.max(kf,s*6.5+16);o.push({size:a})}}return o}function ml(e,t){let n=Dr(e.levels,t);if(e.numRows===0||n.length===0)return 55;let i=ul(e,t),o=0;for(let r of i)o+=r.size;return o}function Nf(e,t){return e.labels[t]??""}function Pr(e,t,n,i,o){let r=Dr(n.levels,o);if(n.numRows===0||r.length===0)return;let{Dt:s,Te:a,fontFamily:l}=i,{e:u}=t;e.strokeStyle=s,e.fillStyle=s,e.lineWidth=1,e.font=`${Br}px ${l}`;let m=ul(n,o),f=Math.max(0,Math.ceil(t.q)),p=Math.min(n.numRows-1,Math.floor(t.Q));if(p<f)return;let c=r.length,b=u.x;for(let y=c-1;y>=0;y--){let g=r[y],x=m[y],_=b,C=b-x.size;b=C,y===c-1?Of(e,t,g,f,p,_,C,l,s):Uf(e,t,g,f,p,C,_,l,s)}let h=n.levelLabels.filter(y=>!!y).join(" / ");h&&(e.fillStyle=a,e.font=`13px ${l}`,e.save(),e.translate(14,u.y+u.height/2),e.rotate(-Math.PI/2),e.textAlign="center",e.textBaseline="top",e.fillText(h,0,0),e.restore())}function Of(e,t,n,i,o,r,s,a,l){let u=t.e;e.strokeStyle=l,e.fillStyle=l,e.beginPath();for(let f=i;f<=o;f++){let p=Vt(t,f);p<u.y-1||p>u.y+u.height+1||(e.moveTo(r,p),e.lineTo(r-Ir,p))}e.stroke(),e.font=`${Br}px ${a}`,e.textAlign="right",e.textBaseline="middle";let m=r-Ir-4-s-4;for(let f=i;f<=o;f++){let p=Vt(t,f);if(p<u.y-1||p>u.y+u.height+1)continue;let c=Nf(n,f);if(!c)continue;let b=mt(e,c,m);b&&e.fillText(b,r-Ir-4,p)}}function Uf(e,t,n,i,o,r,s,a,l){let u=t.e,m=un(n.runs,i,o);if(m.length===0)return;e.strokeStyle=l,e.fillStyle=l;let f=s-3;e.beginPath();for(let p of m){let c=Vt(t,p.endIdx+.5),b=Vt(t,p.startIdx-.5),h=Math.min(c,b),y=Math.max(c,b),g=Math.max(u.y,h),x=Math.min(u.y+u.height,y);x<=g||(e.moveTo(f,g),e.lineTo(f,x),e.moveTo(f,g),e.lineTo(f+3,g),e.moveTo(f,x),e.lineTo(f+3,x))}e.stroke(),e.font=`${Br}px ${a}`;for(let p of m){let c=Vt(t,p.endIdx+.5),b=Vt(t,p.startIdx-.5),h=Math.min(c,b),y=Math.max(c,b),g=Math.max(u.y,h),x=Math.min(u.y+u.height,y);if(x<=g)continue;let _=(g+x)/2,C=r+(s-r-3)/2,v=p.label;if(!v)continue;let A=x-g-4,T=mt(e,v,Math.max(0,A));T&&(e.save(),e.translate(C,_),e.rotate(-Math.PI/2),e.textAlign="center",e.textBaseline="middle",e.fillText(T,0,0),e.restore())}}Le();Ci();Ce();Lt();_t();function Gr(e,t,n){if(e.Ko=t,e.Jo=n,e.u.length>0){for(let o=0;o<e.u.length;o++){let r=e.u[o],s=r.layout.e;if(t<s.x||t>s.x+s.width||n<s.y||n>s.y+s.height)continue;let a=cl(r.layout,r.pipeline.numX,r.pipeline.numY,r.pipeline.cells2D,r.pipeline.xPositions,r.pipeline.yPositions,r.pipeline.xNumericDomain?.bandWidth??1,r.pipeline.yNumericDomain?.bandWidth??1,t,n);Er(e,a,o);return}Er(e,null,-1);return}if(!e.l)return;let i=cl(e.l,e.At,e.Lt,e.Mi,e.Tt,e.Gn,e.ft?.bandWidth??1,e.ct?.bandWidth??1,t,n);Er(e,i,-1)}function fl(e,t,n){if(e.length===0)return-1;let i=0,o=e.length-1;for(;i<o;){let s=i+o>>1;e[s]<t?i=s+1:o=s}let r=i;return r>0&&Math.abs(e[r-1]-t)<Math.abs(e[r]-t)&&(r-=1),Math.abs(e[r]-t)>n*.5?-1:r}function cl(e,t,n,i,o,r,s,a,l,u){let m=e.e;if(l<m.x||l>m.x+m.width||u<m.y||u>m.y+m.height)return null;let f=e.Y,p=e.J,c=e.q,b=e.Q,h=f+(l-m.x)/m.width*(p-f),y=b-(u-m.y)/m.height*(b-c),g=o?fl(o,h,s):Math.round(h),x=r?fl(r,y,a):Math.round(y);return g<0||g>=t||x<0||x>=n?null:i[x*t+g]??null}function Er(e,t,n){let i=e.Ne;(i?.xIdx??-1)===(t?.xIdx??-1)&&(i?.yIdx??-1)===(t?.yIdx??-1)&&e.Wn===n||(e.Ne=t,e.Wn=n,e.t&&e.co&&e.co())}function dl(e,t){let n=[];for(let i of e){let o=i.labels[t];o!=null&&o!==""&&n.push(o)}return n.join(" / ")}function Wr(e){if(!e.c||!e.Ne)return;let t,n,i,o,r=null;if(e.Wn>=0){let c=e.u[e.Wn];if(!c)return;t=c.layout,n=c.pipeline.xLevels,i=c.pipeline.yLevels,o=c.pipeline.xPositions,r=c.label}else{if(!e.l)return;t=e.l,n=e.Ht,i=e.Yt,o=e.Tt}let s=e.Ne,a={px:e.Ko,py:e.Jo},l=[];r&&l.push(r);let u=e.zt.mode==="numeric"&&o?e.getColumnFormatter(e.g[0],"value")(o[s.xIdx]):dl(n,s.xIdx),m=dl(i,s.yIdx);u&&l.push(u),m&&l.push(m);let f=e.getColumnFormatter(e.R[0],"value");l.push(`Value: ${f(s.value)}`);let p=e.A();Ee(e.c,a,l,t,p,e.t?.dpr??1)}var kr={skipLeafLevel:!0};function pl(e,t){let n=t.gl,i=t.dpr,o=n.canvas.width/i,r=n.canvas.height/i;if(o<=0||r<=0)return;if(e.u.length>0){Hf(e,t,o,r);return}if(e.At===0||e.Lt===0)return;let s=e.A(),a={levels:e.Ht,numRows:e.At,levelLabels:e.g.slice()},l={levels:e.Yt,numRows:e.Lt,levelLabels:[]},u=e.zt.mode==="numeric",m=e.kn.mode==="numeric",f=m?55:ml(l,kr),p=u?24:We(a,Math.max(1,o-f-110)),c=new ne(o,r,{hasXLabel:e.g.length>0,hasYLabel:!1,hasLegend:!0,bottomExtra:p,leftExtra:f});e.l=c,e.h&&e.h.updateLayout(c);let b=u?e.ft.min:-.5,h=u?e.ft.max:e.At-.5,y=m?e.ct.min:-.5,g=m?e.ct.max:e.Lt-.5;e.h&&e.h.setBaseDomain(b,h,y,g);let x=e.h?e.h.getVisibleDomain():{xMin:b,xMax:h,yMin:y,yMax:g},_=c.buildProjectionMatrix(x.xMin,x.xMax,x.yMin,x.yMax,void 0,void 0,0,e.M,e.F),C=c.e,v=C.width/(x.xMax-x.xMin),A=C.height/(x.yMax-x.yMin),T=s.Do*.5,L=u?e.ft.bandWidth:1,w=m?e.ct.bandWidth:1,F=Math.min(L*.5,v>0?T/v:0),I=Math.min(w*.5,A>0?T/A:0);if(e.j){let S=ue(e.j,c,t.dpr)}bl(e,t),hl(e,t),e.ie=sn(t,e.ie,s.O),ze(n,c,t.dpr,()=>{n.useProgram(e.i);let S=e.S;n.uniformMatrix4fv(S.u_projection,!1,_),n.uniform2f(S.u_cell_inset,F,I),n.uniform2f(S.u_cell_size,L,w),Ge(t,e.ie.texture,S.u_gradient_lut,0),gl(e,n,t,0,e.Qo)}),e.pe(()=>bo(e))}function bl(e,t){if(e.i)return;let n=t.gl,i=j(t,"heatmap",Vn,Hn,["u_projection","u_cell_inset","u_cell_size","u_gradient_lut"],["a_corner","a_cell","a_color_t"]);e.i=i.program,e.S=i;let o=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,o),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,1,1]),n.STATIC_DRAW),e.k=o}function hl(e,t){let n=e.Qe.length;if(e.Qo=n,n===0)return;let i=new Float32Array(n*2),o=new Float32Array(n);if(e.u.length>0){let r=0;for(let s of e.u){let a=s.pipeline.xPositions,l=s.pipeline.yPositions,u=s.xOrigin,m=s.yOrigin;for(let f of s.pipeline.cells)i[r*2]=a?a[f.xIdx]-u:f.xIdx,i[r*2+1]=l?l[f.yIdx]-m:f.yIdx,o[r]=rt(f.value,e.b,e.p),r++}}else{let r=e.Tt,s=e.Gn,a=e.M,l=e.F;for(let u=0;u<n;u++){let m=e.Qe[u];i[u*2]=r?r[m.xIdx]-a:m.xIdx,i[u*2+1]=s?s[m.yIdx]-l:m.yIdx,o[u]=rt(m.value,e.b,e.p)}}t.v.ensureCapacity(n),t.v.upload("heatmap_cell",i,0,2),t.v.upload("heatmap_t",o,0,1)}function gl(e,t,n,i,o){if(o===0)return;let r=e.S,s=J(n),{setDivisor:a}=s,l=Float32Array.BYTES_PER_ELEMENT;t.bindBuffer(t.ARRAY_BUFFER,e.k),t.enableVertexAttribArray(r.a_corner),t.vertexAttribPointer(r.a_corner,2,t.FLOAT,!1,0,0),a(r.a_corner,0);let u=n.v.peek("heatmap_cell"),m=n.v.peek("heatmap_t");!u||!m||(t.bindBuffer(t.ARRAY_BUFFER,u.buffer),t.enableVertexAttribArray(r.a_cell),t.vertexAttribPointer(r.a_cell,2,t.FLOAT,!1,0,i*2*l),a(r.a_cell,1),t.bindBuffer(t.ARRAY_BUFFER,m.buffer),t.enableVertexAttribArray(r.a_color_t),t.vertexAttribPointer(r.a_color_t,1,t.FLOAT,!1,0,i*l),a(r.a_color_t,1),s.drawArraysInstanced(t.TRIANGLE_STRIP,0,4,o),a(r.a_cell,0),a(r.a_color_t,0))}function bo(e){Vf(e),e.presentOverlay()}function Vf(e){if(!e.c)return;if(e.u.length>0){Yf(e);return}if(!e.l)return;let t=e.l,n=e.A(),i=e.t?.dpr??1,o=ue(e.c,t,i);if(!o)return;o.strokeStyle=n.dn,o.lineWidth=1,o.beginPath(),o.moveTo(t.e.x,t.e.y),o.lineTo(t.e.x,t.e.y+t.e.height),o.lineTo(t.e.x+t.e.width,t.e.y+t.e.height),o.stroke();let r={levels:e.Ht,numRows:e.At,levelLabels:e.g.slice()},s={levels:e.Yt,numRows:e.Lt,levelLabels:[]},a=e.g[0],l=e.g[1]??e.D[0];if(e.zt.mode==="numeric"&&e.ft){let u=oe(t.Y,t.J,6);ro(o,t,e.ft,u,n,e.getColumnFormatter(a,"tick"))}else pe(o,t,r,n);if(e.kn.mode==="numeric"&&e.ct){let u=oe(t.q,t.Q,6);so(o,t,e.ct,u,n,e.getColumnFormatter(l,"tick"))}else Pr(o,t,s,n,kr);It(e.c,t,{min:e.b,max:e.p,label:e.po},n.O,n,e.getColumnFormatter(e.R[0],"value")),e.Ne&&Wr(e)}function Hf(e,t,n,i){let o=t.gl,r=e.A(),{effectiveSharedX:s,effectiveSharedY:a}=e.computeEffectiveFacetFlags(),l=Re(e.u.map(m=>m.label),{cssWidth:n,cssHeight:i,xAxis:s?"outer":"cell",yAxis:a?"outer":"cell",hasLegend:!0,hasXLabel:e.g.length>0,hasYLabel:!1,gap:8});e.m=l;for(let m=0;m<e.u.length;m++){let f=l.cells[m];f&&(e.u[m].layout=f.layout)}e.syncFacetZoomLayouts(l.cells),bl(e,t),hl(e,t),e.ie=sn(t,e.ie,r.O),o.useProgram(e.i);let u=e.S;Ge(t,e.ie.texture,u.u_gradient_lut,0),at(o);for(let m=0;m<e.u.length;m++){let f=e.u[m];if(f.instanceCount===0)continue;let{numX:p,numY:c}=f.pipeline;if(p===0||c===0)continue;let b=f.layout,h=f.pipeline.xAxisMode.mode==="numeric",y=f.pipeline.yAxisMode.mode==="numeric",g=h?f.pipeline.xNumericDomain.min:-.5,x=h?f.pipeline.xNumericDomain.max:p-.5,_=y?f.pipeline.yNumericDomain.min:-.5,C=y?f.pipeline.yNumericDomain.max:c-.5,v=e.getZoomControllerForFacet(m);v&&v.setBaseDomain(g,x,_,C);let A=v?v.getVisibleDomain():{xMin:g,xMax:x,yMin:_,yMax:C},T=b.buildProjectionMatrix(A.xMin,A.xMax,A.yMin,A.yMax,void 0,void 0,0,f.xOrigin,f.yOrigin),L=b.e,w=L.width/(A.xMax-A.xMin),F=L.height/(A.yMax-A.yMin),I=r.Do*.5,S=h?f.pipeline.xNumericDomain.bandWidth:1,D=y?f.pipeline.yNumericDomain.bandWidth:1,B=Math.min(S*.5,w>0?I/w:0),N=Math.min(D*.5,F>0?I/F:0);lt(o,b,t.dpr,()=>{o.uniformMatrix4fv(u.u_projection,!1,T),o.uniform2f(u.u_cell_inset,B,N),o.uniform2f(u.u_cell_size,S,D),gl(e,o,t,f.instanceStart,f.instanceCount)})}e.pe(()=>bo(e))}function Yf(e){if(!e.c||!e.m)return;let t=e.A(),n=e.t?.dpr??1,i=ue(e.c,e.u[0].layout,n);if(!i)return;let o=e.ni,r=e.ii,s=e.m;for(let a=0;a<e.u.length;a++){let l=e.u[a],u=s.cells[a],m=l.layout,f=m.e;i.strokeStyle=t.dn,i.lineWidth=1,i.beginPath(),i.moveTo(f.x,f.y),i.lineTo(f.x,f.y+f.height),i.lineTo(f.x+f.width,f.y+f.height),i.stroke();let p={levels:l.pipeline.xLevels,numRows:l.pipeline.numX,levelLabels:e.g.slice()},c={levels:l.pipeline.yLevels,numRows:l.pipeline.numY,levelLabels:[]},b=e.g[0],h=e.g[1]??e.D[0];if(!o||u.isBottomEdge)if(l.pipeline.xAxisMode.mode==="numeric"&&l.pipeline.xNumericDomain){let y=oe(m.Y,m.J,6);ro(i,m,l.pipeline.xNumericDomain,y,t,e.getColumnFormatter(b,"tick"))}else pe(i,m,p,t);if(!r||u.isLeftEdge)if(l.pipeline.yAxisMode.mode==="numeric"&&l.pipeline.yNumericDomain){let y=oe(m.q,m.Q,6);so(i,m,l.pipeline.yNumericDomain,y,t,e.getColumnFormatter(h,"tick"))}else Pr(i,m,c,t,kr)}for(let a=0;a<s.cells.length;a++){let l=s.cells[a],u=e.u[a];!u||!l.titleRect||vt(e.c,u.label,l.titleRect,t,n)}s.legendRect&&fn(e.c,{x:s.legendRect.x,y:s.legendRect.y+20,width:s.legendRect.width,height:Math.max(1,s.legendRect.height-20)},{min:e.b,max:e.p,label:""},t.O,t,e.getColumnFormatter(e.R[0],"value")),e.Ne&&Wr(e)}var ho=class extends we{constructor(){super(...arguments);d(this,"i",null);d(this,"S",null);d(this,"k",null);d(this,"ie",null);d(this,"Ht",[]);d(this,"Yt",[]);d(this,"bo",[]);d(this,"At",0);d(this,"Lt",0);d(this,"mt",0);d(this,"zt",{mode:"category"});d(this,"kn",{mode:"category"});d(this,"Tt",null);d(this,"Gn",null);d(this,"ft",null);d(this,"ct",null);d(this,"M",0);d(this,"F",0);d(this,"Qe",[]);d(this,"Mi",[]);d(this,"Qo",0);d(this,"b",0);d(this,"p",1);d(this,"po","");d(this,"Ne",null);d(this,"l",null);d(this,"Ko",0);d(this,"Jo",0);d(this,"u",[]);d(this,"m",null);d(this,"Wn",-1);d(this,"co",()=>bo(this))}colorScaleColumn(){return this.R[0]||null}tooltipCallbacks(){return{onHover:(n,i)=>Gr(this,n,i),onLeave:()=>{this.Ne&&(this.Ne=null,this.co())},onPin:(n,i)=>{Gr(this,n,i),this.Ne&&this.dr(this.Ne.xIdx,this.Ne.yIdx)},onUnpin:()=>{this.emitUnselect()}}}async dr(n,i){let o=this.zt.mode==="numeric"&&this.Tt?[this.Tt[n]??null]:this.Ht.map(a=>a.labels[n]??null),r=this.Yt.slice(0,this.D.length).map(a=>a.labels[i]??null),s=this.R[0]??"";await this.emitClickAndSelect({rowIdx:n+this.mt,columnName:s,groupByValues:o,splitByValues:r})}async uploadAndRender(n,i,o,r){if(this.t=n,o!==0)return;let s=this.R.filter(a=>!!a);if(s.length>1){let a=ll(i,s),l=[],u=[],m=1/0,f=-1/0;for(let p of a){let c=Sr({columns:p.columns,numRows:r,groupBy:this.g,splitBy:this.D,groupByTypes:this.gt}),b=u.length;for(let h of c.cells)u.push({xIdx:h.xIdx,yIdx:h.yIdx,value:h.value});l.push({label:p.label,pipeline:c,layout:new ne(1,1,{hasXLabel:!1,hasYLabel:!1,hasLegend:!1}),instanceStart:b,instanceCount:c.cells.length,xOrigin:c.xNumericDomain?.min??0,yOrigin:c.yNumericDomain?.min??0}),isFinite(c.colorMin)&&c.colorMin<m&&(m=c.colorMin),isFinite(c.colorMax)&&c.colorMax>f&&(f=c.colorMax)}!isFinite(m)||!isFinite(f)?(m=0,f=1):m===f&&(f=m+1),this.Ht=[],this.Yt=[],this.bo=[],this.At=0,this.Lt=0,this.mt=0,this.Mi=[],this.l=null,this.zt={mode:"category"},this.kn={mode:"category"},this.Tt=null,this.Gn=null,this.ft=null,this.ct=null,this.M=0,this.F=0,this.u=l,this.Qe=u,this.b=m,this.p=f,this.po=s.join(", ")}else{let a=Sr({columns:i,numRows:r,groupBy:this.g,splitBy:this.D,groupByTypes:this.gt});this.u=[],this.m=null,this.Ht=a.xLevels,this.Yt=a.yLevels,this.bo=a.yColumnNames,this.At=a.numX,this.Lt=a.numY,this.mt=a.rowOffset,this.Qe=a.cells,this.Mi=a.cells2D,this.b=a.colorMin,this.p=a.colorMax,this.po=s[0]??"Color",this.zt=a.xAxisMode,this.kn=a.yAxisMode,this.Tt=a.xPositions,this.Gn=a.yPositions,this.ft=a.xNumericDomain,this.ct=a.yNumericDomain,this.M=a.xNumericDomain?.min??0,this.F=a.yNumericDomain?.min??0}await this.requestRender(n)}Bt(n){this.t=n;let i=this.At>0&&this.Lt>0,o=this.u.length>0;!i&&!o||pl(this,n)}destroyInternal(){this.k&&this.t&&this.t.gl.deleteBuffer(this.k),this.i=null,this.S=null,this.k=null,this.Ht=[],this.Yt=[],this.bo=[],this.Qe=[],this.Mi=[],this.Ne=null,this.u=[],this.m=null,this.Wn=-1,this.zt={mode:"category"},this.kn={mode:"category"},this.Tt=null,this.Gn=null,this.ft=null,this.ct=null}};en();function wn(){return{count:0,catIdx:new Int32Array(0),splitIdx:new Int32Array(0),seriesId:new Int32Array(0),xCenter:new Float64Array(0),halfWidth:new Float64Array(0),open:new Float64Array(0),close:new Float64Array(0),high:new Float64Array(0),low:new Float64Array(0),isUp:new Uint8Array(0)}}function zf(e,t){return e&&e.catIdx.length>=t?(e.count=0,e):{count:0,catIdx:new Int32Array(t),splitIdx:new Int32Array(t),seriesId:new Int32Array(t),xCenter:new Float64Array(t),halfWidth:new Float64Array(t),open:new Float64Array(t),close:new Float64Array(t),high:new Float64Array(t),low:new Float64Array(t),isUp:new Uint8Array(t)}}var yl={splitPrefixes:[],rowPaths:[],numCategories:0,rowOffset:0,axisMode:{mode:"category"},numericCategoryDomain:null,categoryPositions:null,series:[],yDomain:{min:0,max:1}};function xl(e){let{columns:t,numRows:n,columnSlots:i,groupBy:o,splitBy:r,groupByTypes:s,bandInnerFrac:a,barInnerPad:l,scratchCandles:u}=e,m=Wt(o,s),f=i[0]||"";if(!f)return{...yl,candles:wn()};let p=i[1]||"",c=i[2]||"",b=i[3]||"",h=[];if(r.length>0){let U=[f];p&&U.push(p),c&&U.push(c),b&&U.push(b);for(let X of He(t,[f],U))X.colNames.has(f)&&h.push(X.prefix);h.length===0&&h.push("")}else h.push("");let y=o.map(U=>s[U]??"string"),{rowPaths:g,numCategories:x,rowOffset:_}=kt(t,n,o.length,y,m);if(x===0)return{...yl,axisMode:m,splitPrefixes:h,rowPaths:g,rowOffset:_,candles:wn()};let C=h.length,v=[];for(let U=0;U<C;U++){let X=h[U];v.push({seriesId:U,splitIdx:U,splitKey:X,label:X===""?f:X})}let A=null,T=null,L=1;if(m.mode==="numeric"&&x>0){let U=t.get("__ROW_PATH_0__"),X=ct(U?.values,x,_,o[0]??"",m.numericType==="date"||m.numericType==="datetime");X&&(A=X.categoryPositions,T=X.numericCategoryDomain,L=X.numericCategoryDomain.bandWidth)}let w=Ji(C,a,l),F=w.slotWidth*L,I=w.halfWidth*L,S=(C-1)/2,D=[];for(let U=0;U<C;U++){let X=h[U],q=et=>X===""?et:`${X}|${et}`,le=t.get(q(f));if(!le?.values){D.push({openCol:null,closeCol:null,highCol:null,lowCol:null,openValid:null,closeValid:null,highValid:null,lowValid:null});continue}let Se=p?t.get(q(p)):null,ve=c?t.get(q(c)):null,Ae=b?t.get(q(b)):null;D.push({openCol:le.values,closeCol:Se?.values??null,highCol:ve?.values??null,lowCol:Ae?.values??null,openValid:le.valid??null,closeValid:Se?.valid??null,highValid:ve?.valid??null,lowValid:Ae?.valid??null})}let B=x*C,N=zf(u??null,B),k=0,Y=1/0,W=-1/0,V=x;for(let U=0;U<C;U++){let X=D[U],q=X.openCol;if(!q)continue;let le=X.closeCol,Se=X.highCol,ve=X.lowCol,Ae=X.openValid,et=X.closeValid,Xt=X.highValid,$t=X.lowValid,jt=(U-S)*F;for(let he=0;he<V;he++){let se=he+_;if(Ae&&!(Ae[se>>3]>>(se&7)&1))continue;let Q=q[se];if(!isFinite(Q))continue;let ie;if(le&&(!et||(et[se>>3]>>(se&7)&1)!==0)){let K=le[se];ie=isFinite(K)?K:Q}else{let K=he<V-1?he+1+_:se;if(!Ae||(Ae[K>>3]>>(K&7)&1)!==0){let bt=q[K];ie=isFinite(bt)?bt:Q}else ie=Q}let Ie;if(Se&&(!Xt||(Xt[se>>3]>>(se&7)&1)!==0)){let K=Se[se];Ie=isFinite(K)?K:Q>ie?Q:ie}else Ie=Q>ie?Q:ie;let De;if(ve&&(!$t||($t[se>>3]>>(se&7)&1)!==0)){let K=ve[se];De=isFinite(K)?K:Q<ie?Q:ie}else De=Q<ie?Q:ie;let wo=(A?A[he]:he)+jt,Be=ie>=Q?1:0;N.catIdx[k]=he,N.splitIdx[k]=U,N.seriesId[k]=U,N.xCenter[k]=wo,N.halfWidth[k]=I,N.open[k]=Q,N.close[k]=ie,N.high[k]=Ie,N.low[k]=De,N.isUp[k]=Be,k++,De<Y&&(Y=De),Ie>W&&(W=Ie)}}if(N.count=k,!isFinite(Y)||!isFinite(W))Y=0,W=1;else if(Y===W){let U=Math.max(Math.abs(Y),1)*.05;Y-=U,W+=U}return{splitPrefixes:h,rowPaths:g,numCategories:x,rowOffset:_,axisMode:m,numericCategoryDomain:T,categoryPositions:A,series:v,candles:N,yDomain:{min:Y,max:W}}}Ye();Ce();rn();_t();Le();St();var Xf=3;function Cl(e,t,n){let i=0,o=t;for(;i<o;){let r=i+o>>>1;e[r]<n?i=r+1:o=r}return i}function Nr(e,t,n){if(e.ho!==-1)return;let i=e.l;if(!i)return;let o=e._e;if(o.count===0){e.ve!==-1&&(e.ve=-1,Qe(e));return}let r=i.e,s=i.Y,a=i.J,l=i.q,u=i.Q;if(t<r.x||t>r.x+r.width||n<r.y||n>r.y+r.height){e.ve!==-1&&(e.ve=-1,Qe(e));return}let m=s+(t-r.x)/r.width*(a-s),f=u-(n-r.y)/r.height*(u-l),p=r.width/(a-s),c=Xf/p,b=o.xCenter,h=o.halfWidth,y=o.open,g=o.close,x=o.high,_=o.low,C=o.count>0?h[0]:0,v=Math.max(C,c),A=Cl(b,o.count,m-v),T=Cl(b,o.count,m+v+1e-12),L=-1;for(let w=T-1;w>=A;w--){let F=b[w],I=h[w],S=m>=F-I&&m<=F+I,D=Math.abs(m-F)<=c;if(!S&&!D)continue;let B=y[w],N=g[w],k=B<N?B:N,Y=B<N?N:B,W=S&&f>=k&&f<=Y,V=f>=_[w]&&f<=x[w];if(W||V){L=w;break}}L!==e.ve&&(e.ve=L,Qe(e))}function _l(e,t){e.T.dismiss(),e.ho=t;let n=e._e;if(t<0||t>=n.count||!e.l)return;let i=Or(e,t);if(i.length===0)return;let o=n.xCenter[t],r=(n.high[t]+n.low[t])/2,s=e.l.B(o,r),a=e.l.cssWidth,l=e.l.cssHeight;e.T.pin(i,s,{cssWidth:a,cssHeight:l}),e.ve=-1,Qe(e)}function Or(e,t){let n=[],i=e._e;if(t<0||t>=i.count)return n;let o=i.catIdx[t],r=i.splitIdx[t],s=i.open[t],a=i.close[t],l=i.high[t],u=i.low[t];if(e.ke==="numeric"&&e.E&&e.se){let b=e.se[o],h=e.g[0];n.push(e.getColumnFormatter(h,"value")(b))}else if(e.Me.length>0){let b=[];for(let h of e.Me){let y=h.labels[o]??"";y&&b.push(y)}b.length>0&&n.push(b.join(" \\u203A "))}else n.push(`Row ${o+e.mt}`);if(r>=0&&e.fe.length>1){let b=e.fe[r];b&&n.push(b)}let m=e.getColumnFormatter(e.R[0],"value"),f=e.getColumnFormatter(e.R[1],"value"),p=e.getColumnFormatter(e.R[2],"value"),c=e.getColumnFormatter(e.R[3],"value");return n.push(`Open: ${m(s)}`),n.push(`Close: ${f(a)}`),n.push(`High: ${p(l)}`),n.push(`Low: ${c(u)}`),n}function vl(e,t,n,i,o){let r=1/0,s=-1/0,a={cat:0,lo:0,hi:0,skip:!1};for(let u=0;u<e.length;u++)a.skip=!1,i(e[u],a),!a.skip&&(a.cat<t||a.cat>n||(a.lo<r&&(r=a.lo),a.hi>s&&(s=a.hi)));let l=isFinite(r)&&isFinite(s);if(l&&r===s){let u=Math.abs(r)||1;r-=u,s+=u}return o.min=r,o.max=s,o.hasFit=l,o}function Ur(e){let n=e.A().O;if(e.Fi===n)return;let i=Te(n,1),o=Te(n,0);e.Si=[i[0],i[1],i[2]],e.Ii=[o[0],o[1],o[2]],e.Fi=n}function Al(e){e.N.bodyWick.invalidateBuffers(e),e.N.ohlc.invalidateBuffers(e)}function Ll(e,t){e.N.bodyWick.rebuildBuffers(e,t),e.N.ohlc.rebuildBuffers(e,t)}function Tl(e,t){let n=t.gl,i=t.dpr,o=n.canvas.width/i,r=n.canvas.height/i;if(o<=0||r<=0||e.ee===0)return;let s=e.A();Ur(e);let a=e.ke==="numeric",l=a?e.E.min:-.5,u=a?e.E.max:e.ee-.5;e.h&&e.h.setBaseDomain(l,u,e.Nn.min,e.Nn.max);let m=e.h?e.h.getVisibleDomain():{xMin:l,xMax:u,yMin:e.Nn.min,yMax:e.Nn.max};if(e.si&&e.h&&!e.h.isXDefault()){let _=Zf(e,m.xMin,m.xMax);_.hasFit&&(m.yMin=_.min,m.yMax=_.max)}let f=e.g.length>0,p={levels:e.Me,numRows:e.ee,levelLabels:e.g.slice()},c;if(a)c=new ne(o,r,{hasXLabel:f,hasYLabel:!0,hasLegend:!1,bottomExtra:24});else{let v=Math.max(1,o-71-16),A=We(p,v);c=new ne(o,r,{hasXLabel:f,hasYLabel:!0,hasLegend:!1,bottomExtra:A})}e.l=c,e.h&&e.h.updateLayout(c);let b=c.buildProjectionMatrix(m.xMin,m.xMax,m.yMin,m.yMax,"y",void 0,void 0,e.ae,0),h=oe(m.yMin,m.yMax,6),y=e.R[0]||"",g=p,x={min:m.yMin,max:m.yMax,label:y};e.j&&lo(e.j,c,h,s,t.dpr),ze(n,c,t.dpr,()=>{e.oi==="ohlc"?e.N.ohlc.draw(e,n,t,b):e.N.bodyWick.draw(e,n,t,b)}),e.ge=g,e.ye=x,e.Re=h,e.$e=a?oe(m.xMin,m.xMax,6):null,e.pe(()=>Qe(e))}function Qe(e){$f(e),e.presentOverlay()}function $f(e){if(!e.c||!e.l||!e.ye||!e.Re)return;let t=e.A(),n;if(e.ke==="numeric"&&e.E&&e.$e)n={mode:"numeric",domain:{min:e.E.min,max:e.E.max,isDate:e.E.isDate,label:e.E.label},ticks:e.$e};else if(e.ge)n={mode:"category",domain:e.ge};else return;let i=e.R[0]??e.R[1]??e.R[2]??e.R[3],o=e.g[0];ao(e.c,n,{mode:"numeric",domain:e.ye,ticks:e.Re},e.l,t,e.t?.dpr??1,void 0,!1,{value:e.getColumnFormatter(i,"tick"),category:e.getColumnFormatter(o,"tick")}),e.ve>=0&&e.ve<e._e.count&&jf(e)}function jf(e){if(!e.c||!e.l)return;let t=e.ve,n=e._e;if(t<0||t>=n.count)return;let i=e.l,o=n.xCenter[t],r=(n.high[t]+n.low[t])/2,s=i.B(o,r),a=Or(e,t),l=e.A();Ee(e.c,s,a,i,l,e.t?.dpr??1,{crosshair:!1,highlightRadius:0})}function Zf(e,t,n){let i=e._t;if(i&&i.xMin===t&&i.xMax===n)return i;let o=i??qf();o.xMin=t,o.xMax=n;let r=e._e,s=1/0,a=-1/0,l=!1,u=r.xCenter,m=r.low,f=r.high;for(let p=0;p<r.count;p++){let c=u[p];c<t||c>n||(m[p]<s&&(s=m[p]),f[p]>a&&(a=f[p]),l=!0)}return o.min=l?s:0,o.max=l?a:1,o.hasFit=l,e._t=o,o}function qf(){return{xMin:0,xMax:0,min:0,max:1,hasFit:!1}}Fe();fe();var go=class{constructor(){d(this,"i",null);d(this,"o",null)}ensureProgram(t){if(this.i)return this.i;let n=t.gl,i=Ti(n),r={...j(t,"candlestick-body",On,Un,["u_projection"],["a_corner","a_x_center","a_half_width","a_y0","a_y1","a_color"]),quadBuffer:i,instanceBuffer:n.createBuffer()},s=je(n),l={...j(t,"line-uniform",Ue,Ve,["u_projection","u_color","u_resolution","u_line_width","u_interp_alpha"],["a_corner","a_start","a_end","a_real_start","a_real_end"]),cornerBuffer:s,segmentBuffer:n.createBuffer()};return this.i={body:r,wick:l},this.i}invalidateBuffers(t){let n=this.o;if(!n||!t.t){this.o=null;return}let i=t.t.gl;i.deleteBuffer(n.upWickBuffer),i.deleteBuffer(n.downWickBuffer),this.o=null}rebuildBuffers(t,n){let i=t._e,o=this.ensureProgram(n),r=n.gl,s=t.ae;if(i.count===0){let F=r.createBuffer(),I=r.createBuffer();this.o={bodyCount:0,upWickCount:0,downWickCount:0,upWickBuffer:F,downWickBuffer:I};return}let a=new Float32Array(i.count*7),l=0,u=0,m=i.xCenter,f=i.halfWidth,p=i.open,c=i.close,b=i.isUp,h=t.Si,y=t.Ii;for(let F=0;F<i.count;F++){let I=p[F],S=c[F],D=I<S?I:S,B=I<S?S:I,N=b[F]!==0,k=N?h:y,Y=F*7;a[Y+0]=m[F]-s,a[Y+1]=f[F]*.7,a[Y+2]=D,a[Y+3]=B,a[Y+4]=k[0],a[Y+5]=k[1],a[Y+6]=k[2],N?l++:u++}r.bindBuffer(r.ARRAY_BUFFER,o.body.instanceBuffer),r.bufferData(r.ARRAY_BUFFER,a,r.STATIC_DRAW);let g=new Float32Array(l*4),x=new Float32Array(u*4),_=0,C=0,v=i.low,A=i.high;for(let F=0;F<i.count;F++){let I=m[F]-s,S=v[F],D=A[F];b[F]!==0?(g[_+0]=I,g[_+1]=S,g[_+2]=I,g[_+3]=D,_+=4):(x[C+0]=I,x[C+1]=S,x[C+2]=I,x[C+3]=D,C+=4)}let T=this.o,L=T?.upWickBuffer??r.createBuffer(),w=T?.downWickBuffer??r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,L),r.bufferData(r.ARRAY_BUFFER,g,r.STATIC_DRAW),r.bindBuffer(r.ARRAY_BUFFER,w),r.bufferData(r.ARRAY_BUFFER,x,r.STATIC_DRAW),this.o={bodyCount:i.count,upWickCount:l,downWickCount:u,upWickBuffer:L,downWickBuffer:w}}draw(t,n,i,o){let r=this.o;if(!r||r.bodyCount===0)return;let s=this.ensureProgram(i);Kf(n,i,s.body,r.bodyCount,o),Jf(t,n,i,s.wick,r,o)}destroy(t){let n=t.t?.gl;if(n){this.invalidateBuffers(t);let i=this.i;i&&(n.deleteBuffer(i.body.quadBuffer),n.deleteBuffer(i.body.instanceBuffer),n.deleteBuffer(i.wick.cornerBuffer),n.deleteBuffer(i.wick.segmentBuffer))}this.i=null,this.o=null}};function Kf(e,t,n,i,o){if(i===0)return;let r=7*Float32Array.BYTES_PER_ELEMENT;e.useProgram(n.program),e.uniformMatrix4fv(n.u_projection,!1,o);let s=J(t),{setDivisor:a}=s;e.bindBuffer(e.ARRAY_BUFFER,n.quadBuffer),e.enableVertexAttribArray(n.a_corner),e.vertexAttribPointer(n.a_corner,2,e.FLOAT,!1,0,0),a(n.a_corner,0),e.bindBuffer(e.ARRAY_BUFFER,n.instanceBuffer);let l=Float32Array.BYTES_PER_ELEMENT,u=(m,f,p)=>{e.enableVertexAttribArray(m),e.vertexAttribPointer(m,f,e.FLOAT,!1,r,p),a(m,1)};u(n.a_x_center,1,0),u(n.a_half_width,1,1*l),u(n.a_y0,1,2*l),u(n.a_y1,1,3*l),u(n.a_color,3,4*l),s.drawArraysInstanced(e.TRIANGLE_STRIP,0,4,i),a(n.a_x_center,0),a(n.a_half_width,0),a(n.a_y0,0),a(n.a_y1,0),a(n.a_color,0)}function Jf(e,t,n,i,o,r){if(o.upWickCount===0&&o.downWickCount===0)return;let s=n.dpr;t.useProgram(i.program),t.uniformMatrix4fv(i.u_projection,!1,r),t.uniform2f(i.u_resolution,t.canvas.width,t.canvas.height),t.uniform1f(i.u_line_width,e.C.wick_width_px*s),t.disableVertexAttribArray(i.a_real_start),t.disableVertexAttribArray(i.a_real_end),t.vertexAttrib1f(i.a_real_start,1),t.vertexAttrib1f(i.a_real_end,1),t.uniform1f(i.u_interp_alpha,1);let a=J(n),{setDivisor:l}=a;t.bindBuffer(t.ARRAY_BUFFER,i.cornerBuffer),t.enableVertexAttribArray(i.a_corner),t.vertexAttribPointer(i.a_corner,1,t.FLOAT,!1,0,0),l(i.a_corner,0),wl(t,a,i,o.upWickBuffer,o.upWickCount,e.Si),wl(t,a,i,o.downWickBuffer,o.downWickCount,e.Ii),l(i.a_start,0),l(i.a_end,0)}function wl(e,t,n,i,o,r){if(o===0)return;let s=2*Float32Array.BYTES_PER_ELEMENT,{setDivisor:a}=t;e.uniform4f(n.u_color,r[0],r[1],r[2],1),e.bindBuffer(e.ARRAY_BUFFER,i),e.enableVertexAttribArray(n.a_start),e.vertexAttribPointer(n.a_start,2,e.FLOAT,!1,2*s,0),a(n.a_start,1),e.enableVertexAttribArray(n.a_end),e.vertexAttribPointer(n.a_end,2,e.FLOAT,!1,2*s,s),a(n.a_end,1),t.drawArraysInstanced(e.TRIANGLE_STRIP,0,4,o)}Fe();fe();var yo=class{constructor(){d(this,"i",null);d(this,"o",null)}ensureProgram(t){if(this.i)return this.i;let n=t.gl,i=je(n),o=j(t,"line-uniform",Ue,Ve,["u_projection","u_color","u_resolution","u_line_width","u_interp_alpha"],["a_corner","a_start","a_end","a_real_start","a_real_end"]);return this.i={...o,cornerBuffer:i,segmentBuffer:n.createBuffer()},this.i}invalidateBuffers(t){let n=this.o;if(!n||!t.t){this.o=null;return}let i=t.t.gl;i.deleteBuffer(n.upBuffer),i.deleteBuffer(n.downBuffer),this.o=null}rebuildBuffers(t,n){if(t.oi!=="ohlc")return;let i=t._e,o=n.gl;this.ensureProgram(n);let r=t.ae,s=i.xCenter,a=i.halfWidth,l=i.open,u=i.close,m=i.high,f=i.low,p=i.isUp,c=0,b=0;for(let A=0;A<i.count;A++)p[A]!==0?c++:b++;let h=new Float32Array(c*3*4),y=new Float32Array(b*3*4),g=0,x=0;for(let A=0;A<i.count;A++){let T=s[A]-r,L=l[A],w=u[A],F=f[A],I=m[A],S=a[A],D=p[A]!==0?h:y,B=p[A]!==0?g:x;D[B++]=T,D[B++]=F,D[B++]=T,D[B++]=I,D[B++]=T-S,D[B++]=L,D[B++]=T,D[B++]=L,D[B++]=T,D[B++]=w,D[B++]=T+S,D[B++]=w,p[A]!==0?g=B:x=B}let _=this.o,C=_?.upBuffer??o.createBuffer(),v=_?.downBuffer??o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,C),o.bufferData(o.ARRAY_BUFFER,h,o.STATIC_DRAW),o.bindBuffer(o.ARRAY_BUFFER,v),o.bufferData(o.ARRAY_BUFFER,y,o.STATIC_DRAW),this.o={upBuffer:C,downBuffer:v,upInstanceCount:c*3,downInstanceCount:b*3}}draw(t,n,i,o){let r=this.o;if(!r||r.upInstanceCount===0&&r.downInstanceCount===0)return;let s=this.ensureProgram(i),a=i.dpr;n.useProgram(s.program),n.uniformMatrix4fv(s.u_projection,!1,o),n.uniform2f(s.u_resolution,n.canvas.width,n.canvas.height),n.uniform1f(s.u_line_width,t.C.ohlc_line_width_px*a),n.disableVertexAttribArray(s.a_real_start),n.disableVertexAttribArray(s.a_real_end),n.vertexAttrib1f(s.a_real_start,1),n.vertexAttrib1f(s.a_real_end,1),n.uniform1f(s.u_interp_alpha,1);let l=J(i),{setDivisor:u}=l;n.bindBuffer(n.ARRAY_BUFFER,s.cornerBuffer),n.enableVertexAttribArray(s.a_corner),n.vertexAttribPointer(s.a_corner,1,n.FLOAT,!1,0,0),u(s.a_corner,0),Rl(n,l,s,r.upBuffer,r.upInstanceCount,t.Si),Rl(n,l,s,r.downBuffer,r.downInstanceCount,t.Ii),u(s.a_start,0),u(s.a_end,0)}destroy(t){let n=t.t?.gl;if(n){this.invalidateBuffers(t);let i=this.i;i&&(n.deleteBuffer(i.cornerBuffer),n.deleteBuffer(i.segmentBuffer))}this.i=null,this.o=null}};function Rl(e,t,n,i,o,r){if(o===0)return;let s=4*Float32Array.BYTES_PER_ELEMENT,a=2*Float32Array.BYTES_PER_ELEMENT,{setDivisor:l}=t;e.uniform4f(n.u_color,r[0],r[1],r[2],1),e.bindBuffer(e.ARRAY_BUFFER,i),e.enableVertexAttribArray(n.a_start),e.vertexAttribPointer(n.a_start,2,e.FLOAT,!1,s,0),l(n.a_start,1),e.enableVertexAttribArray(n.a_end),e.vertexAttribPointer(n.a_end,2,e.FLOAT,!1,s,a),l(n.a_end,1),t.drawArraysInstanced(e.TRIANGLE_STRIP,0,4,o)}var Rn=class extends Ot{constructor(){super(...arguments);d(this,"S",null);d(this,"fe",[]);d(this,"a",[]);d(this,"_e",wn());d(this,"Nn",{min:0,max:1});d(this,"Di",null);d(this,"ke","category");d(this,"E",null);d(this,"se",null);d(this,"$e",null);d(this,"ae",0);d(this,"Si",[0,.8,.4]);d(this,"Ii",[.8,.2,.2]);d(this,"Fi",null);d(this,"ve",-1);d(this,"ho",-1);d(this,"N",{bodyWick:new go,ohlc:new yo});d(this,"si",!0);d(this,"_t",null)}tooltipCallbacks(){return{onHover:(n,i)=>Nr(this,n,i),onLeave:()=>{this.ve!==-1&&(this.ve=-1,Qe(this))},onPin:(n,i)=>{if(Nr(this,n,i),this.ve>=0){let o=this.ve;_l(this,o),this.pr(o)}},onUnpin:()=>{this.emitUnselect()}}}async pr(n){if(n<0||n>=this._e.count)return;let i=this._e.catIdx[n],o=this._e.splitIdx[n],r=this.ke==="numeric"&&this.se?[this.se[i]??null]:this.Me.map(u=>u.labels[i]??null),s=this.fe[o]??"",a=this.D.length>0&&s!==""?s.split("|"):[],l=this.R[1]||this.R.find(u=>!!u)||"";await this.emitClickAndSelect({rowIdx:i+this.mt,columnName:l,groupByValues:r,splitByValues:a})}invalidateTheme(){super.invalidateTheme(),this.Fi=null}async uploadAndRender(n,i,o,r){if(this.t=n,o!==0)return;let s=xl({columns:i,numRows:r,columnSlots:this.R,groupBy:this.g,splitBy:this.D,groupByTypes:this.gt,bandInnerFrac:this.C.band_inner_frac,barInnerPad:this.C.bar_inner_pad,scratchCandles:this._e});this.C.domain_mode==="expand"?this.Di=Tn(this.Di,s.yDomain):this.Di=null,this.Me=s.rowPaths,this.ee=s.numCategories,this.mt=s.rowOffset,this.fe=s.splitPrefixes,this.a=s.series,this._e=s.candles,this.Nn=s.yDomain,this.ke=s.axisMode.mode,this.E=s.numericCategoryDomain,this.se=s.categoryPositions,this.ae=s.numericCategoryDomain?.min??0,this._t=null,Ur(this),Al(this),Ll(this,n),await this.requestRender(n)}Bt(n){this.t=n,Tl(this,n)}resetExpandedDomain(){this.Di=null}destroyInternal(){if(this.t){let n=this.t.gl;this.k&&n.deleteBuffer(this.k),this.N.bodyWick.destroy(this),this.N.ohlc.destroy(this)}this.i=null,this.S=null,this.k=null,this._e=wn(),this.a=[],this.Me=[],this.ee=0,this.Fi=null}};var Wl={scatter:async()=>wi,line:async()=>Ri,density:async()=>Mi,treemap:async()=>$i,sunburst:async()=>Ki,heatmap:async()=>ho,"y-bar":async()=>Je,"y-line":async()=>Je,"y-scatter":async()=>Je,"y-area":async()=>Je,"x-bar":async()=>po,candlestick:async()=>Rn,ohlc:async()=>Rn,"map-scatter":async()=>(await Promise.resolve().then(()=>(Ao(),vo))).MapScatterChart,"map-line":async()=>(await Promise.resolve().then(()=>(Ao(),vo))).MapLineChart,"map-density":async()=>(await Promise.resolve().then(()=>(Ao(),vo))).MapDensityChart};async function kl(e,t,n){let i=new Map;await e.with_typed_arrays(n??{},async(o,r,s,a)=>{for(let u=0;u<o.length;u++){let m=o[u],f=r[u],p=s[u]??void 0,c=a[u];c!==null?i.set(m,{type:"string",indices:f,dictionary:c,valid:p}):f instanceof Float32Array?i.set(m,{type:"float32",values:f,valid:p}):f instanceof Int32Array?i.set(m,{type:"int32",values:f,valid:p}):f instanceof Float64Array?i.set(m,{type:"float64",values:f,valid:p}):i.set(m,{type:"float32",values:new Float32Array(f),valid:p})}let l=0;if(i.size>0){l=1/0;for(let u of i.values()){let m=u.indices?.length??u.values?.length??0;m<l&&(l=m)}}await t(i,l)})}var Nl=new Map;async function Ol(e){let t=[e.family,e.src,e.weight??"",e.style??""].join("|"),n=Nl.get(t);if(n){await n;return}n=(async()=>{try{let i={};e.style&&(i.style=e.style),e.weight&&(i.weight=e.weight),e.stretch&&(i.stretch=e.stretch);let o=new FontFace(e.family,e.src,i);await o.load(),self.fonts.add(o)}catch(i){console.warn(`Failed to load font ${e.family}:`,i)}})(),Nl.set(t,n),await n}function zt(e,t){switch(t.kind){case"setViewByName":e.setViewByName(t.name);break;case"setColumnsConfig":e.chartImpl.setColumnsConfig?.(t.cfg);break;case"setPluginConfig":e.chartImpl.setPluginConfig?.(t.cfg),e.redraw();break;case"setBufferMaxCapacity":e.glManager.v.maxCapacity=t.n;break;case"loadAndRender":e.loadAndRender(t);break;case"redraw":e.redraw();break;case"deselect":e.chartImpl.deselect?.();break;case"resize":e.resize(t.cssWidth,t.cssHeight,t.dpr),e.redrawAck(t.msgId);break;case"clear":e.clear();break;case"invalidateTheme":e.chartImpl.setTheme?.(t.themeVars),e.chartImpl.invalidateTheme?.(),e.resize(e.cssWidth,e.cssHeight,e.dpr);break;case"restoreZoom":e.restoreZoom(t.state);break;case"resetAllZooms":e.resetAllZooms(),e.redraw(),e.post({kind:"zoomChanged",isDefault:e.allZoomsDefault()});break;case"resetExpandedDomain":e.resetExpandedDomain();break;case"interaction":e.onInteraction(t.event);break;case"saveZoom":e.post({kind:"saveZoomReply",requestId:t.requestId,state:e.saveZoom()});break;case"destroy":e.destroy();break;case"init":break;case"snapshotPng":{let n=t.requestId;e.snapshotPng().then(i=>{e.post({kind:"snapshotPngReply",requestId:n,blob:i})}).catch(i=>{e.post({kind:"error",message:String(i)})});break}}}var Fn=new Map,$r=new Set;function jr(e,t,n){let i={sessionId:e,msg:t};n&&n.length>0?self.postMessage(i,n):self.postMessage(i)}function nc(e){return{postMessage:(t,n)=>jr(e,t,n),addEventListener:()=>{},removeEventListener:()=>{},start:()=>{},close:()=>{},dispatchEvent:()=>!1,onmessage:null,onmessageerror:null}}function Ul(e){self.addEventListener("message",function(t){let n=t.data,{sessionId:i,msg:o}=n;if(o.kind==="init"){if(Fn.has(i)){jr(i,{kind:"error",message:`sessionId ${i} already initialized`});return}e(o,nc(i)).then(s=>{if($r.delete(i)){zt(s,{kind:"destroy"});return}Fn.set(i,s)}).catch(s=>{$r.delete(i),jr(i,{kind:"error",message:String(s)})});return}if(o.kind==="destroy"){let s=Fn.get(i);s?(zt(s,o),Fn.delete(i)):$r.add(i);return}let r=Fn.get(i);r&&zt(r,o)})}Yo();var Lo=class extends Error{constructor(){super("StaleGenerationError")}};async function Hl(e){let t=Wl[e];if(!t)throw new Error(`Unknown chart tag: ${e}`);return await t()}var Zr=null;function ic(e){return Zr||(Zr=new ei(4,{precompile:e})),Zr}var To=class{constructor(t,n,i,o,r,s){d(this,"chartImpl");d(this,"glManager");d(this,"zoomController",null);d(this,"gridlines");d(this,"chrome");d(this,"cssWidth");d(this,"cssHeight");d(this,"dpr");d(this,"Bi",null);d(this,"rr",null);d(this,"un",null);d(this,"go",0);d(this,"yo",!1);d(this,"client");d(this,"view");d(this,"table");d(this,"controlPort");d(this,"xo",0);d(this,"Pi",null);d(this,"Co",0);d(this,"_o",0);if(this.client=n,this.view=i,this.table=o,this.controlPort=r,this.chartImpl=new s,t.renderMode==="blit"&&!t.glCanvas&&!0)this.glManager=new Kt(ic(t.precompileShaders??!1).acquire());else{let m=t.glCanvas??new OffscreenCanvas(Math.max(1,Math.round(t.cssWidth*t.dpr)),Math.max(1,Math.round(t.cssHeight*t.dpr)));this.glManager=new Kt(m,{precompile:t.precompileShaders??!1})}let l=Math.max(1,Math.round(t.cssWidth*t.dpr)),u=Math.max(1,Math.round(t.cssHeight*t.dpr));this.gridlines=t.gridlinesCanvas??new OffscreenCanvas(l,u),this.chrome=t.chromeCanvas??new OffscreenCanvas(l,u),t.renderMode==="blit"&&(this.glManager.setFrameCallback(m=>{this.go+=1;let f=this.sr(m);this.post({kind:"frameBitmap",bitmap:f},[f])}),this.chartImpl.setOverlayPresenter?.(()=>this.xr())),this.cssWidth=t.cssWidth,this.cssHeight=t.cssHeight,this.dpr=t.dpr,this.chartImpl.setGridlineCanvas?.(this.gridlines),this.chartImpl.setChromeCanvas?.(this.chrome),this.chartImpl.setTheme?.(t.themeVars),t.defaultChartType&&this.chartImpl.setDefaultChartType?.(t.defaultChartType),this.chartImpl.setFacetConfig?.(t.facetConfig),this.chartImpl.setPluginConfig?.(t.pluginConfig),t.columnsConfig&&this.chartImpl.setColumnsConfig?.(t.columnsConfig),this.chartImpl.setZoomController&&(this.zoomController=new xt,this.chartImpl.setZoomController(this.zoomController)),this.chartImpl.setView?.(i),this.glManager.v.maxCapacity=t.bufferMaxCapacity,this.glManager.resize(t.cssWidth,t.cssHeight,t.dpr),this.chartImpl.attachTooltip?.(new ni(m=>this.post(m)))}setViewByName(t){this.view=this.client.__unsafe_open_view(t),this.chartImpl.setView?.(this.view)}async loadAndRender(t){let n=++this.xo;try{let[i,o,r,s]=await Promise.all([this.view.num_rows(),this.view.schema(),this.view.expression_schema(),this.table?.schema()??Promise.resolve({})]);if(this.xo!==n)return;this.chartImpl.setViewPivots?.(t.viewerConfig.group_by,t.viewerConfig.split_by),this.chartImpl.setColumnTypes?.(o),this.chartImpl.setGroupByTypes?.({...s,...r}),this.chartImpl.setColumnSlots?.(t.viewerConfig.columns);let a=Object.keys(o).length||1,l=Math.floor(this.glManager.v.maxCapacity/a),u=Math.min(i,l);this.glManager.ensureBufferCapacity(u);try{await kl(this.view,async(m,f)=>{if(this.xo!==n)throw new Lo;await this.chartImpl.uploadAndRender(this.glManager,m,0,Math.min(u,f))},{end_row:u,float32:t.options.float32})}catch(m){if(!(m instanceof Lo))throw m}}catch(i){(i+"").indexOf("View not found")===-1&&console.error("loadAndRender failed",i)}finally{this.post({kind:"loadAndRenderAck",msgId:t.msgId})}}redraw(){this.chartImpl.requestRender(this.glManager)}redrawAck(t){this.chartImpl.requestRender(this.glManager).catch(()=>{}).finally(()=>this.post({kind:"resizeAck",msgId:t}))}resize(t,n,i){this.cssWidth=t,this.cssHeight=n,this.dpr=i,this.glManager.requestResize(t,n,i),this.chartImpl.requestRender(this.glManager)}clear(){Fs(this.glManager,()=>{this.glManager.clear(),this.gridlines.getContext("2d")?.clearRect(0,0,this.gridlines.width,this.gridlines.height)})}saveZoom(){return this.zoomController?.serialize()}restoreZoom(t){t&&this.zoomController?.restore(t)}allZoomsDefault(){if(this.zoomController&&!this.zoomController.isDefault())return!1;let t=this.chartImpl?.hn;if(t){for(let n of t)if(n&&!n.isDefault())return!1}return!0}resetAllZooms(){this.zoomController?.reset();let t=this.chartImpl?.hn;if(t)for(let n of t)n?.reset();this.resetExpandedDomain()}resetExpandedDomain(){this.chartImpl.resetExpandedDomain?.()}ar(t,n){let i=this.chartImpl,o=i?.m;if(o){for(let a=0;a<o.cells.length;a++){let l=o.cells[a],u=l.layout.e;if(t>=u.x&&t<=u.x+u.width&&n>=u.y&&n<=u.y+u.height){let m=i.getZoomControllerForFacet?.(a)??this.zoomController;return m?{controller:m,layout:l.layout}:null}}return null}if(!this.zoomController)return null;let r=i?.l;if(!r)return null;let s=r.e;return t<s.x||t>s.x+s.width||n<s.y||n>s.y+s.height?null:{controller:this.zoomController,layout:r}}onInteraction(t){switch(t.type){case"wheel":{let n=this.ar(t.mx,t.my);if(!n)return;rs(n,t.mx,t.my,t.deltaY),this.chartImpl.requestRender(this.glManager),this.post({kind:"zoomChanged",isDefault:this.allZoomsDefault()});break}case"pointerdown":{let n=this.ar(t.mx,t.my);if(!n)return;this.Pi=n,this.Co=t.mx,this._o=t.my;break}case"pointermove":{if(this.Pi){let n=t.mx-this.Co,i=t.my-this._o;this.Co=t.mx,this._o=t.my,ss(this.Pi,n,i),this.chartImpl.requestRender(this.glManager),this.post({kind:"zoomChanged",isDefault:this.allZoomsDefault()})}else this.T()?.dispatchHover(t.mx,t.my);break}case"pointerup":{this.Pi=null;break}case"pointerleave":{this.T()?.dispatchLeave();break}case"click":{this.T()?.dispatchClick(t.mx,t.my);break}case"dblclick":{this.T()?.dispatchDblClick(t.mx,t.my);break}}}T(){return this.chartImpl?.T??null}sr(t){let n=t.width,i=t.height;this.Bi||(this.Bi=new OffscreenCanvas(n,i),this.rr=this.Bi.getContext("2d"));let o=this.Bi,r=this.rr;return r?(o.width!==n||o.height!==i?(o.width=n,o.height=i):r.clearRect(0,0,n,i),this.gridlines.width===n&&this.gridlines.height===i&&r.drawImage(this.gridlines,0,0),r.drawImage(t,0,0),this.un!==t&&(this.un?.close(),this.un=t),this.chrome.width===n&&this.chrome.height===i&&r.drawImage(this.chrome,0,0),o.transferToImageBitmap()):t}xr(){if(this.yo)return;this.yo=!0;let t=this.go;queueMicrotask(()=>{this.yo=!1;let n=this.un;if(this.go!==t||!n)return;let i=Math.max(1,Math.round(this.cssWidth*this.dpr)),o=Math.max(1,Math.round(this.cssHeight*this.dpr));if(n.width!==i||n.height!==o)return;let r=this.sr(n);r!==n&&this.post({kind:"frameBitmap",bitmap:r},[r])})}async snapshotPng(){this.glManager.beginFrame(),this.chartImpl.renderFrameSync(this.glManager);let t=this.glManager.gl,n=t.canvas,i=n.width,o=n.height,r=new Uint8ClampedArray(i*o*4);t.readPixels(0,0,i,o,t.RGBA,t.UNSIGNED_BYTE,r);let s=new OffscreenCanvas(i,o),a=s.getContext("2d");if(!a)throw new Error("snapshotPng: 2D context unavailable");let u=this.chartImpl.A?.()?.backgroundColor??"transparent";u!=="transparent"&&(a.fillStyle=u,a.fillRect(0,0,i,o)),a.drawImage(this.gridlines,0,0);let m=new OffscreenCanvas(i,o),f=m.getContext("2d");if(!f)throw new Error("snapshotPng: 2D context unavailable for GL blit");return f.putImageData(new ImageData(r,i,o),0,0),a.save(),a.scale(1,-1),a.drawImage(m,0,-o),a.restore(),a.drawImage(this.chrome,0,0),await s.convertToBlob({type:"image/png"})}destroy(){Ss(this.glManager),this.un?.close(),this.un=null,this.chartImpl.destroy(),this.glManager.destroy()}post(t,n){n&&n.length>0?this.controlPort.postMessage(t,n):this.controlPort.postMessage(t)}},oc=typeof globalThis.importScripts=="function";async function rc(e,t){if(!e.clientWorkerURL||!e.clientWasm||!e.proxyPort)throw new Error("Init error");let n=await import(e.clientWorkerURL.toString());await n.initSync({module:e.clientWasm}),e.fontFaces?.length&&await Promise.all(e.fontFaces.map(Ol));let i=e.proxyPort,o=new n.Client(async u=>{let m=u.slice().buffer;i.postMessage(m,[m])},async()=>i.close());i.addEventListener("message",u=>{o.handle_response(new Uint8Array(u.data))}),i.start();let r=o.__unsafe_open_view(e.viewName),s=e.tableName?await o.open_table(e.tableName):null,a=await Hl(e.chartTag),l=new To(e,o,r,s,t,a);return l.post({kind:"ready"}),l}async function qC(e){let t=e.client.__unsafe_open_view(e.msg.viewName),n=e.msg.tableName?await e.client.open_table(e.msg.tableName):null,i=await Hl(e.msg.chartTag),o=new To(e.msg,e.client,t,n,e.controlPort,i);return e.controlPort.addEventListener("message",r=>{let s=r.data;s?.kind!=="init"&&zt(o,s)}),e.controlPort.start(),o.post({kind:"ready"}),o}oc&&Ul(rc);export{To as WorkerRenderer,qC as bootstrapInProcess};\n',je=null;async function na(){if(je)return je;let e=new Blob([ra],{type:"application/javascript"});return je=URL.createObjectURL(e),je}var lr=na,Tt=null,kt=new Map,oa=0;async function sa(){return Tt||(Tt=(async()=>{let e=await lr(),t=new Worker(e,{type:"module",name:"viewer-charts"});return t.addEventListener("message",i=>{let r=i.data;kt.get(r.sessionId)?.(r.msg)}),t})(),Tt)}var aa=class{_handle=null;_destroyed=!1;_proxyChannel=null;_proxySession=null;_client;_view;_tableName;_panel;_clientWorkerURL;_clientWasm;_chartTag;_maxCells;_precompileShaders;_ready;_resolveReady;_rejectReady;_pending=new Map;_pendingCounter=0;_onZoomChanged=null;_allZoomsDefault=!0;_hostGlCanvas=null;_displayCtx=null;_lastPostedSize=null;_holdPresent=!1;_stagedFrame=null;_hostSink=null;_lastInsertConfig=void 0;constructor(e){this._client=e.client,this._view=e.view,this._tableName=e.tableName,this._panel=e.panel,this._clientWorkerURL=e.clientWorkerURL,this._clientWasm=e.clientWasm,this._chartTag=e.chartTag,this._maxCells=e.maxCells,this._precompileShaders=e.precompileShaders??!1,this._onZoomChanged=e.onZoomChanged??null,this._ready=new Promise((t,i)=>{this._resolveReady=t,this._rejectReady=i})}async init(e){this._hostGlCanvas=e.gl;let t=await lr();re==="worker"&&(this._proxyChannel=new MessageChannel,this._proxySession=this._client.new_proxy_session(p=>{let f=p.slice().buffer;this._proxyChannel.port1.postMessage(f,[f])}),this._proxyChannel.port1.addEventListener("message",p=>{this._proxySession.handle_request(new Uint8Array(p.data))}),this._proxyChannel.port1.start());let i,r,n;e.renderBlitMode==="blit"?this._displayCtx=e.gl.getContext("2d"):(i=e.gl.transferControlToOffscreen(),r=e.gridlines.transferControlToOffscreen(),n=e.chrome.transferControlToOffscreen());let o=e.gl.getBoundingClientRect(),s=window.devicePixelRatio||1,a=Rt(e.gl),l=re==="worker"?Qs():[],u=re==="worker"?this._clientWasm:void 0,c=re==="worker"?this._clientWorkerURL:void 0,d=re==="worker"?this._proxyChannel.port2:void 0,h={kind:"init",renderMode:e.renderBlitMode,glCanvas:i,gridlinesCanvas:r,chromeCanvas:n,proxyPort:d,clientWorkerURL:c,clientWasm:u,chartTag:this._chartTag,viewName:this._view.__unsafe_get_name(),tableName:this._tableName,facetConfig:e.facetConfig,pluginConfig:e.pluginConfig,columnsConfig:e.columnsConfig,defaultChartType:e.defaultChartType,themeVars:a,fontFaces:l,cssWidth:o.width,cssHeight:o.height,dpr:s,bufferMaxCapacity:0,precompileShaders:this._precompileShaders};if(this._lastPostedSize={cssWidth:o.width,cssHeight:o.height,dpr:s},this._handle=await this._createHandle(t,h),this._handle.addMessageListener(p=>this._handleRendererMsg(p)),re==="worker"){let p=[this._proxyChannel.port2];n&&p.unshift(n),r&&p.unshift(r),i&&p.unshift(i),this._handle.post(h,p)}await this._ready}async _createHandle(e,t){if(re==="worker"){let n=await sa(),o=++oa;return{post:(s,a)=>n.postMessage({sessionId:o,msg:s},a),addMessageListener:s=>{kt.set(o,s)},terminate:()=>{kt.delete(o)}}}let i=await import(e),r=new MessageChannel;return await i.bootstrapInProcess({msg:t,client:this._client,controlPort:r.port2}),{post:(n,o)=>r.port1.postMessage(n,o),addMessageListener:n=>{r.port1.addEventListener("message",o=>n(o.data)),r.port1.start()},terminate:()=>{r.port1.close(),r.port2.close()}}}setView(e){this._view=e,this._post({kind:"setViewByName",name:this._view.__unsafe_get_name()})}setColumnsConfig(e){this._post({kind:"setColumnsConfig",cfg:e})}setPluginConfig(e){this._post({kind:"setPluginConfig",cfg:e})}setBufferMaxCapacity(e){this._post({kind:"setBufferMaxCapacity",n:e})}loadAndRender(e){let{id:t,promise:i}=this._allocPending("loadAndRender"),r={kind:"loadAndRender",msgId:t,viewerConfig:e.viewerConfig,options:{float32:e.options?.float32??!0}};return this._post(r),i}redraw(){this._post({kind:"redraw"})}deselect(){this._post({kind:"deselect"})}resize(){if(!this._hostGlCanvas)return Promise.resolve();let e=this._hostGlCanvas.getBoundingClientRect(),t=window.devicePixelRatio||1,i=this._lastPostedSize;return i&&Math.abs(i.cssWidth-e.width)<=.5&&Math.abs(i.cssHeight-e.height)<=.5&&i.dpr===t?Promise.resolve():this._postResize(e.width,e.height)}presize(e,t){if(!this._hostGlCanvas)return Promise.resolve();let i=window.devicePixelRatio||1,r=this._lastPostedSize;return r&&Math.abs(r.cssWidth-e)<=.5&&Math.abs(r.cssHeight-t)<=.5&&r.dpr===i?Promise.resolve():(this._holdPresent=!0,this._postResize(e,t).then(()=>()=>this._presentStaged(),n=>{throw this._presentStaged(),n}))}_postResize(e,t){let i=window.devicePixelRatio||1,{id:r,promise:n}=this._allocPending("resize");return this._lastPostedSize={cssWidth:e,cssHeight:t,dpr:i},this._post({kind:"resize",msgId:r,cssWidth:e,cssHeight:t,dpr:i}),n}_presentStaged(){this._holdPresent=!1;let e=this._stagedFrame;this._stagedFrame=null,e&&this._drawFrameBitmap(e)}clear(){this._post({kind:"clear"})}invalidateTheme(){if(!this._hostGlCanvas)return;let e=Rt(this._hostGlCanvas);this._post({kind:"invalidateTheme",themeVars:e})}async saveZoom(){let{id:e}=this._allocPending("saveZoom");this._post({kind:"saveZoom",requestId:e})}_allocPending(e){if(this._destroyed){if(e==="loadAndRender")return{id:-1,promise:Promise.resolve(void 0)};let r=Promise.reject(new Error("RendererTransport destroyed"));return r.catch(()=>{}),{id:-1,promise:r}}let t=++this._pendingCounter,i=new Promise((r,n)=>{this._pending.set(t,{kind:e,resolve:r,reject:n})});return{id:t,promise:i}}restoreZoom(e){this._post({kind:"restoreZoom",state:e})}allZoomsDefault(){return this._allZoomsDefault}resetAllZooms(){this._post({kind:"resetAllZooms"})}resetExpandedDomain(){this._post({kind:"resetExpandedDomain"})}snapshotPng(){let{id:e,promise:t}=this._allocPending("snapshotPng");return this._post({kind:"snapshotPng",requestId:e}),t}forwardInteraction(e){this._post({kind:"interaction",event:e})}destroy(){this._destroyed=!0,this._post({kind:"destroy"}),this._proxySession&&this._proxySession.close().catch(()=>{}),this._proxyChannel&&(this._proxyChannel.port1.close(),this._proxyChannel=null),this._handle&&(this._handle.terminate(),this._handle=null),this._hostSink?.dismiss(),this._hostSink=null,this._hostGlCanvas=null,this._displayCtx=null,this._holdPresent=!1,this._stagedFrame?.close(),this._stagedFrame=null;let e=new Error("RendererTransport destroyed");for(let t of this._pending.values())t.kind==="loadAndRender"?t.resolve(void 0):t.reject(e);this._pending.clear()}_post(e){this._postRaw(e,[])}_postRaw(e,t){this._handle&&this._handle.post(e,t)}_handleRendererMsg(e){switch(e.kind){case"ready":this._resolveReady();break;case"zoomChanged":this._allZoomsDefault=e.isDefault,this._onZoomChanged?.(e.isDefault);break;case"saveZoomReply":this._resolvePending(e.requestId,"saveZoom",e.state);break;case"pinTooltip":this._ensureHostSink()?.pin(e.lines,e.pos,e.bounds);break;case"dismissTooltip":this._hostSink?.dismiss();break;case"setCursor":this._ensureHostSink()?.setCursor(e.cursor);break;case"userClick":this._dispatchOnViewer(new CustomEvent("perspective-click",{bubbles:!0,composed:!0,detail:{...e.detail,panel:this._panel}}));break;case"userSelect":{let t=this._lastInsertConfig?[this._lastInsertConfig]:[],i=e.selected?[e.insertConfig]:[];this._lastInsertConfig=e.selected?e.insertConfig:void 0;let r=new Q(e.selected,e.row,e.column_names,t,i);r.panel=this._panel,this._dispatchOnViewer(new CustomEvent("perspective-global-filter",{bubbles:!0,composed:!0,detail:r}));break}case"frameBitmap":this._holdPresent?(this._stagedFrame?.close(),this._stagedFrame=e.bitmap):this._drawFrameBitmap(e.bitmap);break;case"error":this._rejectReady(new Error(e.message));break;case"loadAndRenderAck":this._resolvePending(e.msgId,"loadAndRender",void 0);break;case"resizeAck":this._resolvePending(e.msgId,"resize",void 0);break;case"snapshotPngReply":this._resolvePending(e.requestId,"snapshotPng",e.blob);break}}_resolvePending(e,t,i){let r=this._pending.get(e);!r||r.kind!==t||(this._pending.delete(e),r.resolve(i))}_drawFrameBitmap(e){if(this._displayCtx&&this._hostGlCanvas){let t=e.width,i=e.height;this._hostGlCanvas.width!==t&&(this._hostGlCanvas.width=t),this._hostGlCanvas.height!==i&&(this._hostGlCanvas.height=i),this._displayCtx.globalCompositeOperation="copy",this._displayCtx.drawImage(e,0,0)}e.close()}_dispatchOnViewer(e){if(!this._hostGlCanvas)return;let t=this._hostGlCanvas;for(;t;){if(t instanceof HTMLElement&&t.tagName==="PERSPECTIVE-VIEWER"){t.dispatchEvent(e);return}t=t.host??t.parentNode??null}}_ensureHostSink(){if(this._hostSink)return this._hostSink;let e=this._hostGlCanvas?.parentElement;return!e||!this._hostGlCanvas?null:(this._hostSink=new ta(this._hostGlCanvas,e),this._hostSink)}};function la(e){return isFinite(e)?e<0?0:e>1?1:e:.5}function nr(e){return!isFinite(e)||e<0?1:e}function ca(e){let t=(o,s)=>e[o]||s,i=e["--psp-charts--gradient--background"]||e["--psp-charts--full-gradient--background"]||"linear-gradient(#0366d6 0%, #ff7f0e 100%)",r=Us(i),n=[];for(let o=1;;o++){let s=e[`--psp-charts--series-${o}--color`];if(!s)break;n.push(ar(s))}return{fontFamily:t("--psp-charts--font-family",t("font-family","monospace")),backgroundColor:t("--psp--background-color","rgba(255, 255, 255, 1)"),tickColor:t("--psp-charts--axis-ticks--color","rgba(160, 0, 0, 0.8)"),labelColor:t("--psp--color","rgba(180, 0, 0, 0.9)"),axisLineColor:t("--psp-charts--axis-lines--color","rgba(160, 0, 0, 0.4)"),gridlineColor:t("--psp-charts--gridline--color","rgba(255, 0, 0, 1)"),gradientStops:r,legendText:t("--psp-charts--legend--color","rgba(180, 180, 180, 0.9)"),legendBorder:t("--psp-charts--legend-border--color","rgba(128,128,128,0.3)"),tooltipBg:t("--psp-charts--tooltip--background","rgba(155,155,155,0.8)"),tooltipText:t("--psp-charts--tooltip--color","#161616"),tooltipBorder:t("--psp-charts--tooltip--border-color","#fff"),areaOpacity:la(parseFloat(t("--psp-charts--area--opacity","0.85"))),heatmapGapPx:nr(parseFloat(t("--psp-charts--heatmap-gap--px","0"))),sunburstGapPx:nr(parseFloat(t("--psp-charts--sunburst-gap--px","1"))),seriesPalette:n}}function ua(e,t){if(t<=0)return[];let i=new Array(t);for(let r=0;r<t;r++){let n=t===1?.5:r/(t-1),o=Vs(e,n);i[r]=[o[0],o[1],o[2]]}return i}function or(e,t,i){if(e.length>0){if(e.length>=i)return e.slice(0,i);let r=new Array(i);for(let n=0;n<i;n++)r[n]=e[n%e.length];return r}return ua(t,i)}var da={...js},ha={auto_alt_y_axis:{kind:"Bool"},include_zero:{kind:"Bool"},domain_mode:{kind:"Enum",variants:[{value:"fit",label:"Fit"},{value:"expand",label:"Expand"}]},facet_mode:{kind:"Enum",variants:[{value:"grid",label:"Grid"},{value:"overlay",label:"Overlay"}]},facet_zoom_mode:{kind:"Enum",variants:[{value:"shared",label:"Shared"},{value:"independent",label:"Independent"}]},series_zoom_mode:{kind:"Enum",variants:[{value:"dynamic",label:"Dynamic"},{value:"fixed",label:"Fixed"}]},line_width_px:{kind:"Number",min:.5,step:.5,max:16},point_size_px:{kind:"Number",min:1,max:32},band_inner_frac:{kind:"Number",min:.1,max:1,step:.01},bar_inner_pad:{kind:"Number",min:0,max:.9,step:.01},wick_width_px:{kind:"Number",min:.5,step:.5,max:8},ohlc_line_width_px:{kind:"Number",min:.5,step:.5,max:8},gradient_radius_px:{kind:"Number",min:2,step:1,max:256},gradient_intensity:{kind:"Number",min:.05,step:.05,max:4},gradient_heat_max:{kind:"Number",min:.1,step:.1,max:64},gradient_color_mode:{kind:"Enum",variants:[{value:"mean",label:"Mean (density-weighted)"},{value:"density",label:"Density only"},{value:"extreme",label:"Extremes"},{value:"signed",label:"Signed sum"}]},map_tile_provider:{kind:"Enum",variants:[{value:"carto-positron",label:"Light (Positron)"},{value:"carto-dark-matter",label:"Dark Matter"},{value:"carto-voyager",label:"Voyager"}]},map_tile_alpha:{kind:"Number",min:0,max:1,step:.05}};function pa(e,t){return{...ha[e],key:e,default:t[e]}}var fa=(()=>{let e=new CSSStyleSheet;return e.replaceSync(Xs),[e]})(),sr=ia,ma=class cr extends HTMLElement{_initialized=!1;_glCanvas;_gridlineCanvas;_chromeCanvas;_renderer=null;_rendererPromise=null;_rawEventForwarder=null;_resetClickAbort=null;_pluginConfigStore=null;_columnsConfig={};get _pluginConfig(){return this._pluginConfigStore||(this._pluginConfigStore=this._effectiveDefaults()),this._pluginConfigStore}set _pluginConfig(t){this._pluginConfigStore=t}_effectiveDefaults(){return{...qs,...this._chartType.plugin_field_defaults??{}}}connectedCallback(){if(!this._initialized){this.attachShadow({mode:"open"});for(let t of fa)this.shadowRoot.adoptedStyleSheets.push(t);this.shadowRoot.innerHTML='<div class="webgl-container"><div class="zoom-controls"><button class="zoom-reset">Reset Zoom</button></div></div>',this._initialized=!0}this._glCanvas?.isConnected||this._buildCanvasStack()}_buildCanvasStack(){let t=this.shadowRoot.querySelector(".webgl-container");t.insertAdjacentHTML("afterbegin",'<canvas class="webgl-gridlines"></canvas><canvas class="webgl-canvas"></canvas><canvas class="webgl-chrome"></canvas>'),this._glCanvas=t.querySelector(".webgl-canvas"),this._gridlineCanvas=t.querySelector(".webgl-gridlines"),this._chromeCanvas=t.querySelector(".webgl-chrome")}_clearCanvasStack(){let t=this.shadowRoot?.querySelector(".webgl-container");if(t)for(let i of Array.from(t.querySelectorAll("canvas")))i.remove();this._glCanvas=null,this._gridlineCanvas=null,this._chromeCanvas=null}disconnectedCallback(){this.delete(),this._clearCanvasStack()}_ensureRenderer(t){if(this._initialized||this.connectedCallback(),this._rendererPromise)return this._rendererPromise;let i=this._buildRenderer(t).then(r=>{if(this._rendererPromise!==i)throw r.destroy(),new Error("renderer disposed during init");return this._renderer=r,this._setupInteraction(r),r});return i.catch(()=>{}),this._rendererPromise=i,i}_setupInteraction(t){if(this._rawEventForwarder)return;let i=this.shadowRoot.querySelector(".zoom-controls");this._rawEventForwarder=new Ks,this._rawEventForwarder.attach(this._glCanvas,n=>{t.forwardInteraction(n)});let r=this.shadowRoot.querySelector(".zoom-reset");r&&(this._resetClickAbort=new AbortController,r.addEventListener("click",()=>{t.resetAllZooms(),i&&i.classList.remove("visible")},{signal:this._resetClickAbort.signal}))}async _buildRenderer(t){let i=this.parentElement,r=this.getAttribute("slot")??void 0,n=await i.getClient({panel:r}),o=customElements.get("perspective-viewer"),s=o.get_wasm_module(),a=o.get_worker_url(),l=await i?.getTable?.({panel:r}),u=l?await l.get_name():void 0,c=this.shadowRoot.querySelector(".zoom-controls"),d=new aa({client:n,view:t,tableName:u,panel:r,clientWorkerURL:a,clientWasm:s,chartTag:this._chartType.tag,maxCells:this._chartType.max_cells,precompileShaders:!0,onZoomChanged:h=>{c&&c.classList.toggle("visible",!h)}});return await d.init({gl:this._glCanvas,gridlines:this._gridlineCanvas,chrome:this._chromeCanvas,facetConfig:{...da,facet_mode:this._pluginConfig.facet_mode,zoom_mode:this._pluginConfig.facet_zoom_mode},pluginConfig:this._pluginConfig,columnsConfig:this._columnsConfig,defaultChartType:this._chartType.default_chart_type,renderBlitMode:sr}),d}static setBlitMode(t){sr=t}get_static_config(){return{name:this._chartType.name,category:this._chartType.category,select_mode:this._chartType.selectMode,min_config_columns:this._chartType.initial.count,config_column_names:this._chartType.initial.names,max_cells:this._chartType.max_cells,max_columns:this._chartType.max_columns,group_rollup_modes:["flat"],split_rollup_modes:["flat"],group_by_role:this._chartType.group_by_role,split_by_role:this._chartType.split_by_role,connects_row_order:!!this._chartType.connects_row_order,priority:0,can_render_column_styles:!!this._chartType.default_chart_type||this._chartType.category==="Cartesian Charts"||this._chartType.category==="Hierarchical Charts"||this._chartType.category==="Map Charts"}}column_config_schema(t,i,r,n,o){let s=[];i==="Color"&&((this._chartType.category==="Hierarchical Charts"?t==="integer"||t==="float"||t==="date"||t==="datetime":t!=="string")?s.push({kind:"GradientStops",key:"gradient",default:this._themeGradientStopsSpec()}):s.push({kind:"Palette",key:"palette",default:this._themeSeriesPaletteHex()}));let a=this._chartType.default_chart_type;if(a&&(t==="integer"||t==="float")){let l=a==="bar"||a==="line"||a==="scatter"||a==="area";if(l)if((o?.split_by?.length??0)>0)s.push({kind:"Palette",key:"palette",default:this._themeSeriesPaletteHex()});else{let d=(o?.columns??[]).filter(h=>!!h).indexOf(r);s.push({kind:"Color",key:"color",default:this._themeSeriesColorHex(Math.max(0,d))})}s.push({kind:"Enum",key:"chart_type",default:a,variants:[{value:"bar",label:"Bar"},{value:"line",label:"Line"},{value:"scatter",label:"Scatter"},{value:"area",label:"Area"}]});let u=n?.chart_type??a,c=u==="bar"||u==="area";if(c&&s.push({kind:"Bool",key:"stack",default:c}),l&&s.push({kind:"Bool",key:"alt_axis",default:!1}),u==="line"||u==="area"){let d=u==="area"?[{value:"skip",label:"Skip"},{value:"solid",label:"Solid"}]:[{value:"skip",label:"Skip"},{value:"solid",label:"Solid"},{value:"transparent",label:"Transparent"}];s.push({kind:"Enum",key:"interpolate",default:"solid",variants:d})}}return t==="integer"||t==="float"?s.push({kind:"NumberFormat"}):(t==="date"||t==="datetime")&&s.push({kind:"DatetimeFormat"}),{fields:s}}plugin_config_schema(t){let i=this._effectiveDefaults();return{fields:this._chartType.applicable_plugin_fields.map(r=>pa(r,i))}}_resolvedTheme(){return ca(Rt(this))}static GRADIENT_PALETTE_FALLBACK_COUNT=6;_themeSeriesPaletteHex(){let t=this._resolvedTheme(),i=t.seriesPalette.length||cr.GRADIENT_PALETTE_FALLBACK_COUNT;return Gs(or(t.seriesPalette,t.gradientStops,i))}_themeSeriesColorHex(t){let i=this._resolvedTheme(),r=Math.max(i.seriesPalette.length,t+1);return Lt(or(i.seriesPalette,i.gradientStops,r)[t])}_themeGradientStopsSpec(){return $s(this._resolvedTheme().gradientStops)}async draw(t){return this._renderer?.resetExpandedDomain(),this._renderer?.resetAllZooms(),this._drawImpl(t)}async update(t){return this._drawImpl(t)}async _drawImpl(t){let i;try{i=await this._ensureRenderer(t)}catch{return}i.setView(t),i.setBufferMaxCapacity(this._chartType.max_cells);let r=this.getAttribute("slot")??void 0,n=this.parentElement;if(n===null)return;let o=await n.getViewConfig({panel:r});await i.loadAndRender({viewerConfig:{group_by:o?.group_by??[],split_by:o?.split_by??[],columns:o?.columns??[]},options:{float32:!0}})}async clear(){this._renderer?.clear()}async resize(){!this.isConnected||this.offsetParent==null||await this._renderer?.resize()}async presize(t,i){if(!this.isConnected||this.offsetParent==null||!this._renderer||!this._glCanvas)return;let r=this.getBoundingClientRect(),n=this._glCanvas.getBoundingClientRect();return await this._renderer.presize(Math.max(0,n.width+(t-r.width)),Math.max(0,n.height+(i-r.height)))}restyle(){this._renderer?.invalidateTheme()}async deselect(){this._renderer?.deselect()}async render(t){return await this._ensureRenderer(t),await this.draw(t),this._renderer.snapshotPng()}restore(t,i){t?.zoom&&this._renderer?.restoreZoom(t.zoom),this._pluginConfig={...this._effectiveDefaults(),...t},this._columnsConfig=i??{},this._renderer?.setPluginConfig(this._pluginConfig),this._renderer?.setColumnsConfig(this._columnsConfig)}delete(){this._rawEventForwarder&&(this._rawEventForwarder.detach(),this._rawEventForwarder=null),this._resetClickAbort&&(this._resetClickAbort.abort(),this._resetClickAbort=null),this._renderer&&(this._renderer.destroy(),this._renderer=null),this._rendererPromise=null}};function ga(...e){let t=new Set(e.length>0?e:rr.map(r=>r.name)),i=[];rr.forEach(r=>{if(t.has(r.name)){let n=`perspective-viewer-charts-${r.tag}`;if(customElements.get(n)){i.push(n);return}customElements.define(n,class extends ma{_chartType=r;static _chartType=r}),customElements.whenDefined("perspective-viewer").then(async()=>{await customElements.get("perspective-viewer").registerPlugin(n)})}}),i.length>0&&console.warn(`viewer-charts plugins already registered (${i.length}); skipping duplicate registration (Perspective was loaded more than once on this page).`)}ga();function R(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function L(e){let t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstElementChild}function w(e,t){let i=e.querySelector(t);if(!i)throw new Error(`No element matches "${t}"`);return i}function N(e){return(Array.isArray(e)?e.map(i=>[i,i]):Object.entries(e)).map(([i,r])=>`<option value="${R(i)}">${R(r)}</option>`).join("")}function Y(e){return String(e instanceof Error?e.message:e)}function qe(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):void 0}catch{return}}function Ke(e,t){let i=w(e,"form"),r=w(e,".modal__status"),n=w(e,"[type=submit]");return document.body.appendChild(e),w(e,"[data-role=cancel]").addEventListener("click",()=>e.close()),i.addEventListener("submit",async o=>{if(o.preventDefault(),!!i.reportValidity()){n.disabled=!0,t.busy?.(!0),r.textContent=t.pending;try{await t.submit(r),r.textContent="",e.close()}catch(s){r.textContent=Y(s)}finally{n.disabled=!1,t.busy?.(!1)}}}),t.trigger.addEventListener("click",()=>{r.textContent="",e.showModal()}),{status:r,submit:n}}var _a="/perspective-docs.json",Dt="perspective-agent-config",ke={Anthropic:{name:"anthropic",url:"https://api.anthropic.com/v1/chat/completions",headers:{"anthropic-dangerous-direct-browser-access":"true"},model:"claude-opus-5"},OpenAI:{name:"openai",url:"https://api.openai.com/v1/chat/completions",model:"gpt-5.2"},Gemini:{name:"gemini",url:"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",model:"gemini-2.5-flash"},OpenRouter:{name:"openrouter",url:"https://openrouter.ai/api/v1/chat/completions"},"LM Studio (local)":{name:"lmstudio",url:"http://localhost:1234/v1/chat/completions",note:"Enable CORS in LM Studio's settings."},"Ollama (local)":{name:"ollama",url:"http://localhost:11434/v1/chat/completions",note:"Set OLLAMA_ORIGINS for CORS."},"Custom (OpenAI-compatible)":{name:"custom",url:""}},Pt={"Full (default)":void 0,"Read-only":["read_view","read_docs"]},ba=`<dialog class="modal">
<form method="dialog">
<h2>Configure Agent</h2>
<label class="field">
<span class="field__label">Provider</span>
<select name="provider">${N(Object.keys(ke))}</select>
</label>
<label class="field">
<span class="field__label">Model</span>
<input name="model" type="text" placeholder="provider default" />
</label>
<label class="field">
<span class="field__label">API key</span>
<input name="apiKey" type="password" placeholder="sk-\u2026" />
</label>
<label class="field">
<span class="field__label">Base URL</span>
<input name="baseUrl" type="url" required />
</label>
<label class="field">
<span class="field__label">Access</span>
<select name="access">${N(Object.keys(Pt))}</select>
<small class="field__hint">What the agent is allowed to do.</small>
</label>
<label class="field">
<span class="field__label">
Load documentation bundle (312 KB)
</span>
<input name="docs" type="checkbox" checked />
</label>
<p class="modal__note" data-role="note"></p>
<p class="modal__note">
Your key and settings are saved in this browser's localStorage on
this device (\u201CDisable\u201D erases them), and the key is sent from the
browser directly to the provider you choose.
</p>
<div class="modal__status" aria-live="polite"></div>
<div class="modal__actions">
<button type="button" class="btn" data-role="disable" hidden>
Disable
</button>
<button type="button" class="btn" data-role="cancel">
Cancel
</button>
<button type="submit" class="btn btn--primary">Enable</button>
</div>
</form>
</dialog>`;function ya(e,t){return t.startsWith("http://")&&location.protocol==="https:"?`This page is served over HTTPS, so the browser blocks requests to ${t} as mixed content. Local providers work when the docs site is run over http://localhost.`:e.headers?`${e.note??""} This provider requires a special browser-access header, which is sent for you.`.trim():e.note??""}function ur(e,t){let i=L(ba),r=w(i,"[name=provider]"),n=w(i,"[name=model]"),o=w(i,"[name=apiKey]"),s=w(i,"[name=baseUrl]"),a=w(i,"[name=access]"),l=w(i,"[name=docs]"),u=w(i,"[data-role=note]"),c=w(i,"[data-role=disable]"),{status:d,submit:h}=Ke(i,{trigger:t,pending:"Configuring\u2026",async submit(){await g(),localStorage.setItem(Dt,JSON.stringify({provider:r.value,model:n.value,apiKey:o.value,baseUrl:s.value,access:a.value,docs:l.checked}))}});function p(){u.textContent=ya(ke[r.value],s.value)}function f(){let b=ke[r.value];s.value=b.url,n.value=b.model??"",p()}function _(b){t.textContent=b?`Agent: ${r.value}`:"Configure Agent"}async function g(){let b=ke[r.value],y;l.checked&&(d.textContent="Loading documentation bundle\u2026",y=await(await fetch(_a)).json()),e.agentConfig({name:b.name,url:s.value.trim(),headers:b.headers,apiKey:o.value||void 0,model:n.value.trim()||void 0,entitlements:Pt[a.value],docs:y}),c.hidden=!1,h.textContent="Update",_(!0)}function m(b){b.provider in ke&&(r.value=b.provider,f()),s.value=b.baseUrl??s.value,n.value=b.model??n.value,o.value=b.apiKey??"",b.access in Pt&&(a.value=b.access),l.checked=b.docs!==!1,p(),_(!0),(async()=>{try{await customElements.whenDefined("perspective-viewer"),await g(),d.textContent=""}catch(y){_(!1),console.warn("Stored agent config was not re-applied:",y)}})()}r.addEventListener("change",f),s.addEventListener("input",p),c.addEventListener("click",async()=>{await e.agentReset?.(),localStorage.removeItem(Dt),c.hidden=!0,h.textContent="Enable",_(!1),i.close()}),e.addEventListener("perspective-agent-tool",b=>{console.log("[agent tool]",b.detail)}),f();let v=qe(Dt);v&&m(v)}function ge(e){let t=e,i=new Set;return{get:()=>t,set(r){t=r;for(let n of i)n(r)},subscribe(r){return i.add(r),r(t),()=>{i.delete(r)}}}}var Ze={"perspective-server":"perspective-server","duckdb-wasm":"DuckDB-WASM"},Ft={"perspective-server":{id:"perspective-server",label:Ze["perspective-server"],status:"idle"},"duckdb-wasm":{id:"duckdb-wasm",label:Ze["duckdb-wasm"],status:"idle"}};function dr(){return Object.values(Ft).map(e=>({...e}))}var hr=ge(dr());function pr(e){return hr.subscribe(e)}function It(e,t,i){Ft[e].status=t,Ft[e].error=i,hr.set(dr())}function fr(e,t){let i;return()=>(i??=(async()=>{It(e,"starting");try{let r=await t();return It(e,"ready"),r}catch(r){throw It(e,"failed",String(r)),i=void 0,r}})(),i)}var Bt;function mr(e){Bt=e}var Nt=(async()=>{let e=await import("./perspective-SCAINCJ6.js"),t=await import("./perspective-viewer-T4I36ALH.js"),i=import("./perspective-viewer-OQGO3DQX.js");return await Promise.all([e.init_server({wasm64:()=>import("./perspective-server.memory64-VAR4TCPV.js").then(r=>r.default),wasm32:()=>import("./perspective-server-IL45GI6G.js").then(r=>r.default)}),t.init_client(i.then(r=>r.default))]),e})();async function gr(){return(await Nt).worker()}var _e=fr("perspective-server",async()=>{let t=await(await Nt).worker();return await Bt.load(t),{qualify:i=>i,client:()=>t,async drop(i){await(await t.open_table(i)).delete()}}}),be=fr("duckdb-wasm",async()=>{let e=await Nt,t=await import("./duckdb-browser-DLM4QKRI.js"),i=await t.selectBundle(t.getJsDelivrBundles()),r=URL.createObjectURL(new Blob([`importScripts("${i.mainWorker}");`],{type:"text/javascript"})),n=new Worker(r),o=new t.AsyncDuckDB(new t.VoidLogger,n);await o.instantiate(i.mainModule,i.pthreadWorker),URL.revokeObjectURL(r);let s=await o.connect();await s.query("SET default_null_order=NULLS_FIRST_ON_ASC_LAST_ON_DESC;");let{DuckDBHandler:a}=await import("./duckdb-7NPAJDPS.js"),l=new a(s),u=await e.worker(e.createMessageHandler(l));return await Bt.load(u),{db:o,conn:s,qualify:c=>`memory.${c}`,client:()=>u,async drop(c){await s.query(`DROP TABLE IF EXISTS "${c}"`),await s.query(`DROP VIEW IF EXISTS "${c}"`)}}});function Qe(e){return e==="duckdb-wasm"?be():_e()}var ne=ge([]),va=0;function oe(){return`source_${va++}`}function j(){return ne.get()}function se(e){ne.set([...ne.get(),e])}function _r(e){let t=ne.get().filter(i=>i.id!==e);t.length<ne.get().length&&ne.set(t)}function Je(e){return ne.subscribe(e)}var yr="perspective-theme",vr="(prefers-color-scheme: dark)",xa={light:"Pro Light",dark:"Pro Dark"},Me=ge(et()??wa());function et(){let e=localStorage.getItem(yr);return e==="light"||e==="dark"?e:void 0}function wa(){return matchMedia(vr).matches?"dark":"light"}function xr(e,t){t&&(document.documentElement.dataset.theme=e)}var br=0;async function Ea(e,t){let i=++br,r=xa[t],n=await e.getThemes();i!==br||!n.includes(r)||(await e.resetThemes([r,...n.filter(o=>o!==r)]),e.getPanelNames().length>0&&await e.restore({theme:r}).catch(()=>{}))}function tt(){return Me.get()}function Le(e){return Me.subscribe(e)}async function wr(e){xr(Me.get(),et()!==void 0),matchMedia(vr).addEventListener("change",t=>{et()===void 0&&Ot(t.matches?"dark":"light",!1)}),await customElements.whenDefined("perspective-viewer"),Le(t=>void Ea(e,t))}function Ot(e,t=!0){e!==Me.get()&&(t&&localStorage.setItem(yr,e),xr(e,t||et()!==void 0),Me.set(e))}function it(e,t){e.addEventListener("pointerdown",i=>{e.setPointerCapture(i.pointerId);let r=o=>t.apply(t.toPx(o)),n=o=>{e.releasePointerCapture(o.pointerId),e.removeEventListener("pointermove",r),e.removeEventListener("pointerup",n)};e.addEventListener("pointermove",r),e.addEventListener("pointerup",n)}),e.addEventListener("keydown",i=>{let r=i.key===t.growKey?16:i.key===t.shrinkKey?-16:0;r&&(i.preventDefault(),t.apply(t.current()+r))})}var Yt="perspective-sidebar-width",Er="perspective-sidebar-collapsed",Cr=180,Ht=350,Ca=24,Sa=`<aside class="sidebar">
<button type="button" class="sidebar__gutter" aria-label="Expand sidebar">
<span class="sidebar__gutter-label">Sources</span>
</button>
<div class="sidebar__brand">
<a class="sidebar__logo" href="/">
<img alt="Perspective" src="/svg/perspective-logo-dark.svg" />
</a>
<div class="sidebar__brand-right">
<ul class="sidebar__links">
<li><a href="/guide/index.html">Docs</a></li>
<li>
<a href="https://github.com/perspective-dev/perspective">
GitHub
</a>
</li>
</ul>
<button type="button" class="sidebar__theme"></button>
<button
type="button"
class="sidebar__collapse"
aria-label="Collapse sidebar"
></button>
</div>
</div>
<button
type="button"
id="create_source"
class="sidebar__action sidebar__action--browse"
>Import Data</button>
<button
type="button"
id="browse_projects"
class="sidebar__action sidebar__action--browse"
>Browse Projects</button>
<div class="sidebar__tree"></div>
<div class="sidebar__footer">
<button
type="button"
id="configure_agent"
class="sidebar__action"
>Configure Agent</button>
</div>
</aside>`,Aa=`<div
class="sidebar__splitter"
role="separator"
aria-orientation="vertical"
tabindex="0"
></div>`;function Ta(e,t){switch(e.status){case"ready":return"ready";case"failed":return"failed";case"starting":return"starting\u2026";default:return"not started"}}function Ra(e,t,i){return`<li class="source${i?" source--active":""}"
data-source="${R(e.id)}">
<span class="source__label" title="${R(e.table)}"
>${R(e.label)}</span>
<span class="source__count" title="${t} panel(s)"
>${t||""}</span>
<button
type="button"
class="source__delete"
aria-label="Delete ${R(e.label)}"
>\xD7</button>
</li>`}function ka(e,t,i){let r=`<div class="engine__status engine__status--${e.status}"
${e.error?`title="${R(e.error)}"`:""}
>${R(Ta(e,t.length))}</div>`,n=t.length?`<ul class="engine__sources">${t.join("")}</ul>`:'<div class="engine__empty">No sources loaded</div>',o=i?`<button
type="button"
class="engine__sql"
aria-label="Toggle the DuckDB SQL panel"
>SQL</button>`:"";return`<section class="engine">
<div class="engine__name">
<span>${R(e.label)}</span>
${o}
${r}
</div>
${n}
</section>`}function Ma(e,t,i){let r=0;function n(s){}function o(s){let a=Math.max(Cr,e.clientWidth*.5),l=Math.min(Math.max(s,Cr),a);return e.style.setProperty("--sidebar-width",`${l}px`),localStorage.setItem(Yt,String(l)),l}return it(i,{toPx:s=>s.clientX-e.getBoundingClientRect().left,current:()=>{let s=parseInt(getComputedStyle(e).getPropertyValue("--sidebar-width"),10);return Number.isNaN(s)?Ht:s},growKey:"ArrowRight",shrinkKey:"ArrowLeft",apply:s=>(o(s),void 0)}),o(Number(localStorage.getItem(Yt)??Ht)),n}function La(e){let t=w(e,".sidebar__theme"),i=w(e,".sidebar__logo img");Le(r=>{let n=r==="dark",o=`Switch to the ${n?"light":"dark"} theme`;t.title=o,t.setAttribute("aria-label",o),i.src=`/svg/perspective-logo-${n?"dark":"light"}.svg`}),t.addEventListener("click",()=>Ot(tt()==="dark"?"light":"dark"))}function Da(e,t,i){function r(n){e.dataset.sidebar=n?"collapsed":"expanded",localStorage.setItem(Er,String(n)),i(n?Ca:Number(localStorage.getItem(Yt)??Ht))}w(t,".sidebar__collapse").addEventListener("click",()=>r(!0)),w(t,".sidebar__gutter").addEventListener("click",()=>r(!1)),r(localStorage.getItem(Er)==="true")}function Sr(e,t,i={}){let r=L(Sa),n=L(Aa),o=w(r,".sidebar__tree"),s=w(r,"#browse_projects");e.prepend(r,n);let a=new Map,l=null,u=[],c=j();function d(m){return[...a.entries()].filter(([,v])=>v===m.table).map(([v])=>v)}function h(){o.innerHTML=u.map(m=>ka(m,c.filter(v=>v.engine===m.id).map(v=>{let b=d(v);return Ra(v,b.length,b.includes(l??""))}),m.id==="duckdb-wasm"&&!!i.openSql)).join("")}async function p(m){try{return(await t.save({panel:m}))?.table??void 0}catch{return}}async function f(m){let v=new Map;await Promise.all(m.map(async b=>{let y=await p(b);y&&v.set(b,y)})),a=v,h()}async function _(m){let v=t.getPanelNames();return(await Promise.all(v.map(async y=>await p(y)===m.table?y:void 0))).filter(y=>!!y)}async function g(m){let v=c.find(y=>y.id===m);if(!v)return;let b=await _(v);if(b.length>0){let y=b.length===1?"panel":"panels";if(!confirm(`Delete "${v.label}"? This closes ${b.length} ${y}.`))return}for(let y of b)await t.removePanel(y);try{await(await Qe(v.engine)).drop(v.table.replace(/^memory\./,""))}catch(y){console.error(`Could not drop ${v.table}`,y);return}_r(v.id)}return o.addEventListener("click",m=>{let v=m.target;if(v.closest(".engine__sql")){i.openSql?.();return}let b=v.closest(".source__delete")?.closest(".source")?.dataset.source;b&&g(b)}),t.addEventListener("perspective-layout-update",m=>{f(m.detail?.panels??[])}),t.addEventListener("perspective-active-panel-update",m=>{l=m.detail?.panel??null,h()}),pr(m=>{u=m,h()}),Je(m=>{c=m,s.disabled=m.length===0,s.title=s.disabled?"The project gallery is already showing":"",h()}),La(r),Da(e,r,Ma(e,t,n)),{createSource:w(r,"#create_source"),browseProjects:s,configureAgent:w(r,"#configure_agent")}}var Ar=`
// Scene constants
var resolution := 100;
var fov := 30 * (pi / 180);
var camera[3] := {0, 0, -600};
var light[3] := {0.5, 1, 0};
// Torus constants
var radius := 1;
var tube := 0.4;
var radialSegments := 12;
var tubularSegments := 16;
var rotation := 40 * (pi / 180);
// Mesh
var arc := pi * 2;
var vs[663];
for (var j := 0; j <= radialSegments; j += 1) {
for (var i := 0; i <= tubularSegments; i += 1) {
// Vertex
var u := (i / tubularSegments) * arc;
var v := (j / radialSegments) * pi * 2;
var i0 := j * 3 * (tubularSegments + 1) + (i * 3);
vs[i0] := (radius + tube * cos(v)) * cos(u) * 100;
vs[i0 + 1] := (radius + tube * cos(v)) * sin(u) * 100;
vs[i0 + 2] := tube * sin(v) * 100;
// Rotate
var b := vs[i0 + 1];
var bcos := cos(rotation);
var bsin := sin(rotation);
vs[i0 + 1] := vs[i0 + 1] * bcos - vs[i0 + 2] * bsin;
vs[i0 + 2] := b * bsin + vs[i0 + 2] * bcos;
b := vs[i0];
vs[i0] := vs[i0] * bcos - vs[i0 + 2] * bsin;
vs[i0 + 2] := b * bsin + vs[i0 + 2] * bcos;
}
};
// Render scene
var scale := resolution / (tan(fov / 2) * 400);
var x := (floor(index() / resolution) - resolution / 2) / scale;
var y := (index() % resolution - resolution / 2) / scale;
var d[3] := {x, y, 200};
var color := 0;
var depth := inf;
var light_norm := norm3(light);
for (var j := 1; j <= radialSegments; j += 1) {
for (var i := 1; i <= tubularSegments; i += 1) {
// Index
var aa := (tubularSegments + 1) * j + i - 1;
var b := (tubularSegments + 1) * (j - 1) + i - 1;
var c := (tubularSegments + 1) * (j - 1) + i;
var dd := (tubularSegments + 1) * j + i;
var face[6] := {aa, b, dd, b, c, dd};
for (var ii:= 0; ii < 2; ii += 1) {
var i0 := face[ii * 3];
var i1 := face[ii * 3 + 1];
var i2 := face[ii * 3 + 2];
var v0[3] := {vs[i0 * 3], vs[i0 * 3 + 1], vs[i0 * 3 + 2]};
var v1[3] := {vs[i1 * 3], vs[i1 * 3 + 1], vs[i1 * 3 + 2]};
var v2[3] := {vs[i2 * 3], vs[i2 * 3 + 1], vs[i2 * 3 + 2]};
// Render triangle
var e1[3] := v1 - v0;
var e2[3] := v2 - v0;
var h[3];
cross_product3(d, e2, h);
var a := dot_product3(e1, h);
if (a != 0) {
var f := 1 / a;
var s[3] := camera - v0;
var u := f * dot_product3(s, h);
if (u > 0 and u < 1) {
var q[3];
cross_product3(s, e1, q);
var v := f * dot_product3(d, q);
if (v > 0 and u + v < 1) {
var t := f * dot_product3(e2, q);
if (t >= 0) {
var t2 := 1 - u - v;
var d1[3] := v0 * t2 + v1 * u + v2 * v;
var dist := norm3(d1 - camera);
if (dist < depth) {
depth := dist;
// Lighting
var n[3];
cross_product3(v0 - v1, v2 - v1, n);
color := acos(dot_product3(light, n) / (light_norm * norm3(n)))
}
}
}
}
}
}
}
};
color;
`,Tr=`// color
var resolution := 200;
var xmin := -0.4;
var xmax := -0.3;
var ymin := 0.6;
var ymax := 0.7;
var iterations := 100;
var x := floor("index" / resolution);
var y := "index" % resolution;
var c := iterations;
var cx := xmin + ((xmax - xmin) * x) / (resolution - 1);
var cy := ymin + ((ymax - ymin) * y) / (resolution - 1);
var vx := 0;
var vy := 0;
var vxx := 0;
var vyy := 0;
var vxy := 0;
for (var ii := 0; ii < iterations; ii += 1) {
if (vxx + vyy <= float(4)) {
vxy := vx * vy;
vxx := vx * vx;
vyy := vy * vy;
vx := vxx - vyy + cx;
vy := vxy + vxy + cy;
c -= 1;
}
};
c`;async function Rr(e,t,i){for(let r=0;r<e;r+=t)await i(r,Math.min(r+t,e)),await new Promise(n=>setTimeout(n,0))}var kr=e=>e[Math.floor(Math.random()*e.length)],Mr=(e,t)=>Math.random()*(t-e)+e,Pa=()=>Math.random().toString(36).substring(7),Ia=["float","integer","string","datetime","boolean"];function Fa(e){let t={};for(let i of Ia)for(let r=0;r<(e[`num_${i}`]??0);r++)t[`${i[0].toUpperCase()}${i.slice(1)} ${r}`]=i;return t}var O={dataset:{label:"Random dataset",description:"Random data with a configurable column mix \u2014 the shape used to benchmark the engine.",params:[{key:"num_rows",label:"Rows",min:25,max:1e6},{key:"num_float",label:"Float columns",min:0,max:50},{key:"num_integer",label:"Integer columns",min:0,max:50},{key:"num_string",label:"String columns",min:0,max:50},{key:"num_strings",label:"Unique strings",min:1,max:500,hint:"Dictionary size each string column draws from."},{key:"num_datetime",label:"Datetime columns",min:0,max:50},{key:"num_boolean",label:"Boolean columns",min:0,max:50}],defaults:{num_rows:1e5,num_float:5,num_integer:5,num_string:5,num_strings:50,num_datetime:5,num_boolean:1},async build(e,t,i){let r=Fa(i);if(Object.keys(r).length===0)throw new Error("Choose at least one column.");let n=new Array(Math.max(1,i.num_strings)).fill(null).map(Pa),o=await e.table(r,{name:t}),s={float:()=>Mr(-10,10),integer:()=>Math.floor(Mr(-10,10)),string:()=>kr(n),datetime:()=>new Date,boolean:()=>kr([!0,!1,null])};await Rr(i.num_rows,25e3,async(a,l)=>{let u=new Array(l-a);for(let c=0;c<u.length;c++){let d={};for(let[h,p]of Object.entries(r))d[h]=s[p]();u[c]=d}await o.update(u)})},panel:()=>({plugin:"Datagrid"})},fractal:{label:"Mandelbrot",description:"A fractal computed entirely in ExprTK, one static frame.",params:[],defaults:{},async build(e,t){let i=await e.table({index:"integer"},{name:t});await Rr(200**2,5e4,async(r,n)=>{let o=new Array(n-r);for(let s=r;s<n;s++)o[s-r]={index:s};await i.update(o)})},panel:()=>({plugin:"Heatmap",group_by:[`floor("index" / ${200})`],split_by:[`"index" % ${200}`],columns:["color"],expressions:{color:Tr,[`floor("index" / ${200})`]:`floor("index" / ${200})`,[`"index" % ${200}`]:`"index" % ${200}`}})},raycasting:{label:"Raycasting",description:"A raytraced torus, rendered by an ExprTK expression.",params:[],defaults:{},async build(e,t){let i=new Array(100**2).fill(0);await e.table({index:i},{name:t})},panel:()=>({plugin:"Heatmap",group_by:["x"],split_by:["y"],columns:["color"],theme:null,expressions:{color:Ar,x:`floor(index() / ${100}) - ${100} / 2`,y:`index() % ${100} - ${100} / 2`}})}};function Dr(e){return e.replace(/'/g,"''")}function Pr(e){switch(e){case"csv":return"read_csv_auto";case"json":case"ndjson":return"read_json_auto";default:return"read_parquet"}}function Ba(e,t){return e instanceof TypeError?new Error(`Could not fetch ${t}. The browser reports no detail for this class of failure; the usual cause is a missing CORS header on the remote (this site is static, so there is no proxy to route around it).`):e instanceof Error?e:new Error(String(e))}async function Ir(e){let t;try{t=await fetch(e)}catch(i){throw Ba(i,e)}if(!t.ok)throw new Error(`HTTP ${t.status} ${t.statusText}`);return t}async function Fr(e){return new Uint8Array(await(await Ir(e)).arrayBuffer())}async function Na(e){return(await Ir(e)).text()}async function Lr(e,t){return t==="arrow"?Fr(e):Na(e)}function Br(e){if(e==="parquet")throw new Error("perspective-server cannot read parquet; choose the DuckDB-WASM engine for this source.")}async function Oa(e){let t=await _e();return await new Function("api","return ("+e.code+")(api)")({client:t.client(),name:e.name,worker:gr}),{table:t.qualify(e.name),label:e.name}}async function Ya(e){let t=O[e.generator];if(!t)throw new Error(`Unknown generator "${e.generator}"`);let i={...t.defaults,...e.params??{}},r=await _e();return await t.build(r.client(),e.name,i),{table:r.qualify(e.name),label:e.name,panel:t.panel(i)}}async function zt(e,t,i,r){if(e==="duckdb-wasm"){let l=await be();if(r==="arrow")for(let[u,c]of t.entries())await l.conn.insertArrowFromIPCStream(await Fr(c),{name:i,create:u===0});else{let u=t.map(c=>`'${Dr(c)}'`).join(", ");await l.conn.query(`CREATE OR REPLACE TABLE "${i}" AS SELECT * FROM ${Pr(r)}([${u}])`)}return{table:l.qualify(i),label:i}}Br(r);let n=await _e(),[o,...s]=t,a=await n.client().table(await Lr(o,r),{name:i,format:r});for(let l of s)await a.update(await Lr(l,r));return{table:n.qualify(i),label:i}}async function Nr(e,t,i,r){if(e==="duckdb-wasm"){let s=await be();if(r==="arrow")await s.conn.insertArrowFromIPCStream(new Uint8Array(await t.arrayBuffer()),{name:i,create:!0});else{let a=await import("./duckdb-browser-DLM4QKRI.js");await s.db.registerFileHandle(t.name,t,a.DuckDBDataProtocol.BROWSER_FILEREADER,!0),await s.conn.query(`CREATE OR REPLACE TABLE "${i}" AS SELECT * FROM ${Pr(r)}('${Dr(t.name)}')`)}return{table:s.qualify(i),label:i}}Br(r);let n=await _e(),o=r==="arrow"?new Uint8Array(await t.arrayBuffer()):await t.text();return await n.client().table(o,{name:i,format:r}),{table:n.qualify(i),label:i}}function Ut(e){return zt(e.engine,[e.url],e.name,e.format)}async function rt(e){return e.kind==="eval"?Oa(e):e.kind==="generated"?Ya(e):Ut(e)}function H(e){return{layout:{type:"tab-layout",tabs:["p0"],selected:0},panels:{p0:{table:"",...e}},active:"p0"}}function nt(e,t){let i={};for(let[r,n]of Object.entries(t))i[r]={table:"",...n};return{layout:e,panels:i,active:Object.keys(t)[0]}}function z(...e){return{type:"tab-layout",tabs:e,selected:0}}function le(e,t,i){return{type:"split-layout",orientation:e,sizes:t,children:i}}function Pe(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function Wt(e,t){return`/projects/${t}/${e}.png`}var ot={kind:"fetch",engine:"perspective-server",url:"/data/superstore.lz4.arrow",format:"arrow",name:"superstore"},Ha={kind:"fetch",engine:"perspective-server",url:"/data/movies.arrow",format:"arrow",name:"movies"},Or=[{id:"superstore",title:"Superstore",description:"Superstore data",source:ot,workspace:{active:"PERSPECTIVE_GENERATED_ID_0",layout:{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0},panels:{PERSPECTIVE_GENERATED_ID_0:{plugin:"Datagrid",title:"Superstore"}}}},{id:"superstore-overview",title:"Superstore (Workspace)",description:"Sales by sub-category, profit over time, and the grouped grid underneath.",source:ot,workspace:{active:"PERSPECTIVE_GENERATED_ID_1",layout:{type:"split-layout",children:[{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0}],sizes:[.5,.5],orientation:"horizontal"},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0}],sizes:[.55,.45],orientation:"vertical"},panels:{PERSPECTIVE_GENERATED_ID_0:{columns_config:{},plugin:"Y Bar",plugin_config:{},table:"superstore",title:"Y Bar",group_by:["Sub-Category"],split_by:["Segment"],sort:[["Sales","desc"]],filter:[],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{},columns:["Sales"],aggregates:{}},PERSPECTIVE_GENERATED_ID_1:{columns_config:{Profit:{number_fg_mode:"label-bar",fg_gradient:17320}},plugin:"Datagrid",plugin_config:{},table:"superstore",title:"Group By 2",group_by:["Region","State"],split_by:["Category","Sub-Category"],sort:[["Profit","asc"]],filter:[],group_rollup_mode:"rollup",split_rollup_mode:"rollup",expressions:{},columns:["Sales","Profit"],aggregates:{}},PERSPECTIVE_GENERATED_ID_2:{columns_config:{},plugin:"Treemap",plugin_config:{},table:"superstore",title:"Y Line - Datetime Axis",group_by:["Region","State"],split_by:[],sort:[["Profit","desc"]],filter:[],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{},columns:["Sales","Profit",null],aggregates:{}}}}}],Yr=[{id:"olympics",title:"Olympics",description:"120 years of Olympic athletes, from Kaggle.",source:{kind:"fetch",engine:"perspective-server",url:"/data/olympics.arrow",format:"arrow",name:"olympics"},workspace:{active:"PERSPECTIVE_GENERATED_ID_0",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0}],sizes:[.5,.5],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_0:{plugin:"Heatmap",table:"olympics",title:"Age Distribution by Sport",group_by:["Age"],split_by:["Sport"],sort:[["Event","col desc"]],columns:["Name"]},PERSPECTIVE_GENERATED_ID_1:{plugin:"X/Y Scatter",table:"olympics",title:"Avg Height vs Weight by Sport",group_by:["Sport"],columns:["Height","Weight",null,"City","Sport",null],aggregates:{Weight:"avg",Sport:"dominant",Height:"avg"}}}}}],Hr=[{id:"nypd",title:"NYPD CCRB",description:"Civilian complaints against NYPD officers.",source:{kind:"fetch",engine:"perspective-server",url:"/data/nypdccrb.arrow",format:"arrow",name:"nypd"},workspace:H({title:"NYPD CCRB",plugin:"Datagrid",theme:null})},{id:"nypd-3",title:"NYPD CCRB",description:"Civilian complaints against NYPD officers.",source:{kind:"fetch",engine:"perspective-server",url:"/data/nypdccrb.arrow",format:"arrow",name:"nypd"},workspace:{active:"PERSPECTIVE_GENERATED_ID_4",layout:{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_4"],selected:0},panels:{PERSPECTIVE_GENERATED_ID_4:{plugin:"Heatmap",table:"ccrb",title:"Incidents",group_by:[`bucket("IncidentDate", '3M')`],split_by:["Allegation"],sort:[["IncidentDate","col asc"]],filter:[["IncidentDate",">","1985-01-01"],["IncidentDate","<","2025-01-01"]],expressions:{"bucket(\"IncidentDate\", '3M')":`bucket("IncidentDate", '3M')`},columns:["AllegationID"],aggregates:{IncidentDate:"median",AllegationID:"distinct count"}}}}},{id:"nypd-2",title:"NYPD CCRB",description:"Civilian complaints against NYPD officers.",source:{kind:"fetch",engine:"perspective-server",url:"/data/nypdccrb.arrow",format:"arrow",name:"nypd"},workspace:{active:"PERSPECTIVE_GENERATED_ID_1",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_3"],selected:0}],sizes:[.5,.5],orientation:"vertical"}],sizes:[.25,.75],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_1:{plugin:"Datagrid",table:"ccrb",title:"Filter",group_by:["FADOType","Allegation"],sort:[["ComplaintID","desc"]],columns:["ComplaintID"],aggregates:{ComplaintID:"distinct count"}},PERSPECTIVE_GENERATED_ID_2:{plugin:"Heatmap",table:"ccrb",title:"Year vs Month of Incident",group_by:[`bucket("IncidentDate", 'Y')`],split_by:['month_of_year("IncidentDate")'],filter:[["IncidentDate",">","1985-01-01"],["IncidentDate","<","2025-01-01"]],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{"bucket(\"IncidentDate\", 'Y')":`bucket("IncidentDate", 'Y')`,'month_of_year("IncidentDate")':'month_of_year("IncidentDate")'},columns:["ComplaintID"],aggregates:{ComplaintID:"distinct count"}},PERSPECTIVE_GENERATED_ID_3:{plugin:"Heatmap",table:"ccrb",title:"Month vs Weekday of Incident",group_by:['month_of_year("IncidentDate")'],split_by:['day_of_week("IncidentDate")'],filter:[["IncidentDate",">","1985-01-01"],["IncidentDate","<","2025-01-01"]],expressions:{'month_of_year("IncidentDate")':'month_of_year("IncidentDate")',"bucket(\"IncidentDate\", 'Y')":`bucket("IncidentDate", 'Y')`,'day_of_week("IncidentDate")':'day_of_week("IncidentDate")'},columns:["ComplaintID"],aggregates:{ComplaintID:"distinct count"}}}}},{id:"nypd-4",title:"NYPD CCRB",description:"Civilian complaints against NYPD officers.",source:{kind:"fetch",engine:"perspective-server",url:"/data/nypdccrb.arrow",format:"arrow",name:"nypd"},workspace:{active:"PERSPECTIVE_GENERATED_ID_9",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_9"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_10"],selected:0}],sizes:[.5,.5],orientation:"vertical"},panels:{PERSPECTIVE_GENERATED_ID_10:{plugin:"Y Area",table:"ccrb",title:"Incidents (area)",group_by:[`bucket("IncidentDate", 'M')`],split_by:["FADOType"],sort:[["AllegationID","col asc"]],filter:[["IncidentDate",">","1985-01-01"],["IncidentDate","<","2025-01-01"]],expressions:{"bucket(\"IncidentDate\", 'M')":`bucket("IncidentDate", 'M')`},columns:["AllegationID"],aggregates:{AllegationID:"distinct count"}},PERSPECTIVE_GENERATED_ID_9:{plugin:"Y Line",table:"ccrb",title:"Incidents (line)",group_by:[`bucket("IncidentDate", 'M')`],split_by:["FADOType"],sort:[["AllegationID","col asc"]],filter:[["IncidentDate",">","1985-01-01"],["IncidentDate","<","2025-01-01"]],expressions:{"bucket(\"IncidentDate\", 'M')":`bucket("IncidentDate", 'M')`},columns:["AllegationID"],aggregates:{AllegationID:"distinct count"}}}}}],zr=[{id:"movies",title:"Movies",description:"Box office and ratings, from the Vega sample data.",source:Ha,workspace:{active:"PERSPECTIVE_GENERATED_ID_2",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0},{type:"split-layout",children:[{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_3"],selected:0}],sizes:[.5,.5],orientation:"horizontal"},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0}],sizes:[.5,.5],orientation:"vertical"}],sizes:[.25,.75],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_0:{plugin:"Heatmap",table:"movies",group_by:['bucket("Rotten Tomatoes Rating", 2.5)'],split_by:['bucket("IMDB Rating", 0.25)'],filter:[['bucket("IMDB Rating", 0.25)',"is not null",null]],expressions:{'bucket("Rotten Tomatoes Rating", 2.5)':'bucket("Rotten Tomatoes Rating", 2.5)','bucket("IMDB Rating", 0.25)':'bucket("IMDB Rating", 0.25)'},columns:["US Gross"],aggregates:{'bucket("Rotten Tomatoes Rating", 2.5)':"avg"}},PERSPECTIVE_GENERATED_ID_1:{plugin:"Y Line",table:"movies",title:"Ratings vs Sales",group_by:[`bucket("Release Date", 'Y')`],expressions:{"bucket(\"Release Date\", 'Y')":`bucket("Release Date", 'Y')`},columns:["US Gross","Rotten Tomatoes Rating","Production Budget","Worldwide Gross","US DVD Sales"],aggregates:{"Rotten Tomatoes Rating":"avg"}},PERSPECTIVE_GENERATED_ID_2:{plugin:"Datagrid",plugin_config:{scroll_lock:!0,edit_mode:"SELECT_ROW_TREE"},table:"movies",group_by:["Distributor"],sort:[["US Gross","desc"]],columns:["US Gross"]},PERSPECTIVE_GENERATED_ID_3:{plugin:"Y Area",table:"movies",title:"US Gross by Genre",group_by:[`bucket("Release Date", 'Y')`],split_by:["Major Genre"],expressions:{"bucket(\"Release Date\", 'Y')":`bucket("Release Date", 'Y')`},columns:["US Gross"]}},masters:["PERSPECTIVE_GENERATED_ID_2"]}}],Ur=[{id:"evictions-2",title:"SF Evictions",description:"San Francisco eviction notices, from DataSF.",source:{kind:"fetch",engine:"perspective-server",url:"/data/evictions.arrow",format:"arrow",name:"evictions"},workspace:H({columns_config:{state:{gradient:"linear-gradient(to right, #000000 0%, #590d4f 24%, #dd6367 52.6%, #ffe894 70.1%, #ffffff 100%)"}},plugin:"Map Density",plugin_config:{map_tile_provider:"carto-dark-matter",gradient_radius_px:15,gradient_intensity:1},table:"evictions",group_by:["lat","lon"],filter:[["lon","is not null",null]],expressions:{lat:`var x[2];
indexof("shape", ' .+?( )', x);
var y := substring("shape", x[0], length("shape") - x[1]);
float(y)`,lon:`var x[2];
indexof("shape", ' .+?( )', x);
var y := substring("shape", 7, x[1] - 7);
float(y)`},columns:["lon","lat","state",null],aggregates:{lat:"any",lon:"any"}})},{id:"evictions-3",title:"SF Evictions",description:"San Francisco eviction notices, from DataSF.",source:{kind:"fetch",engine:"perspective-server",url:"/data/evictions.arrow",format:"arrow",name:"evictions"},workspace:H({columns_config:{},plugin:"Map Scatter",plugin_config:{map_tile_provider:"carto-dark-matter"},table:"evictions",theme:null,title:null,group_by:["lat","lon"],split_by:[],sort:[],filter:[["lon","is not null",null]],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{lat:`var x[2];
indexof("shape", ' .+?( )', x);
var y := substring("shape", x[0], length("shape") - x[1]);
float(y)`,lon:`var x[2];
indexof("shape", ' .+?( )', x);
var y := substring("shape", 7, x[1] - 7);
float(y)`},columns:["lon","lat","neighborhood",null,null,null],aggregates:{neighborhood:"dominant",lat:"any",lon:"any"}})}],Wr=[{id:"fractal",title:"Mandelbrot",description:O.fractal.description,source:{kind:"generated",generator:"fractal",name:"raw_data"},workspace:H({title:"Mandelbrot",theme:null,columns_config:{color:{gradient:"linear-gradient(to right, #000000 50%, #4d0034 54.5%, #880f02 73.8%, #ca7f16 82.5%, #72991e 88.7%, #1a6b2a 94%, #175e59 97.5%, #3289c8 100%)"}},...O.fractal.panel(O.fractal.defaults)})},{id:"raycasting",title:"Raycasting",description:O.raycasting.description,source:{kind:"generated",generator:"raycasting",name:"raycasting"},workspace:H({title:"Raycasting",theme:null,columns_config:{color:{gradient:"linear-gradient(to right, #242526 50%, #071841 69.5%, #3289c8 87%, #7ae4ff 100%)"}},...O.raycasting.panel(O.raycasting.defaults)})}];var $r=`async (api) => {
const MSG_BATCH_TIMEOUT = 50;
const MSG_PER_BATCH = 10;
const MSG_TIME_DELTA = 20 * (100 / MSG_PER_BATCH);
const MARKET_OPEN_PRICE = 20;
const MARKET_MAX_TRADES = 20000;
const TRADE_EXPIRATION = 10;
const SEED = 0x5eed;
const FAST = !!globalThis.__PERSPECTIVE_SCREENSHOT__;
function mulberry32(seed) {
let state = seed;
return () => {
state = (state + 0x6d2b79f5) | 0;
let t = Math.imul(state ^ (state >>> 15), 1 | state);
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
const random = FAST ? mulberry32(SEED) : Math.random;
const MARKET_OPEN = FAST ? 0 : performance.now();
const SCHEMA = {
id: "integer",
side: "string",
security: "string",
price: "float",
timestamp: "datetime",
status: "string",
};
async function query_columns(table, config) {
const view = await table.view(config);
const columns = await view.to_columns();
await view.delete();
return columns;
}
class OrderBook {
constructor(table, side) {
this._memo = undefined;
this._side = side;
this._table = table;
this._price_view = table.view({
columns: ["price"],
group_by: ["security"],
aggregates: { price: side === "buy" ? "max" : "min" },
filter: [
["side", "==", side],
["status", "==", "open"],
],
});
}
async best_open_price() {
if (this._memo === undefined) {
const view = await this._price_view;
const { price } = await view.to_columns({ leaves_only: true });
this._memo = price.length === 0 ? MARKET_OPEN_PRICE : price[0];
}
return this._memo;
}
async matched_orders(price) {
const sort_dir = this._side === "buy" ? "desc" : "asc";
const op = this._side === "buy" ? ">" : "<";
return await query_columns(this._table, {
columns: ["id"],
filter: [
["side", "==", this._side],
["status", "==", "open"],
["price", op, price],
],
sort: [
["price", sort_dir],
["timestamp", "asc"],
],
});
}
reset() {
this._memo = undefined;
}
}
let stopped = false;
class Market {
constructor(table, model) {
this._seq = 0;
this._table = table;
this._model = model;
this._buy_book = new OrderBook(table, "buy");
this._sell_book = new OrderBook(table, "sell");
}
async poll() {
if (stopped) {
return;
}
if (!FAST && document.hidden && this._seq >= MARKET_MAX_TRADES) {
setTimeout(() => void this.poll(), 1000);
return;
}
try {
// The first wake fills the ENTIRE ring in one uninterrupted
// pass; every later wake runs a single paced step.
await this._run_market_step();
while (this._seq < MARKET_MAX_TRADES && !stopped) {
await this._run_market_step();
}
} catch (e) {
stopped = true;
return;
}
// Runs forever, live; the thumbnail harness stops at the fill
// for byte-reproducible screenshots.
if (!FAST && !stopped) {
setTimeout(() => void this.poll(), MSG_BATCH_TIMEOUT);
}
}
async _run_market_step() {
if (await this._generate_trades()) {
await this._clear_trades();
await this._expire_trades();
}
this._buy_book.reset();
this._sell_book.reset();
}
async _generate_trades() {
const trades = [];
const timestamp = new Date(MARKET_OPEN + this._seq * MSG_TIME_DELTA);
for (let i = 0; i < MSG_PER_BATCH; i++) {
const { side, discount } = this._model();
const book = side === "buy" ? this._sell_book : this._buy_book;
const best_open_price = await book.best_open_price();
trades.push({
security: "Prospective Co",
status: "open",
// Ring allocation: the keyed write REPLACES the row from
// \`MARKET_MAX_TRADES\` trades ago, capping the table at
// exactly that size forever.
id: this._seq++ % MARKET_MAX_TRADES,
price: discount + best_open_price,
side,
timestamp,
});
}
if (trades.length > 0) {
await this._table.update(trades);
return true;
}
}
async _clear_trades() {
const sell_price = await this._sell_book.best_open_price();
const buy_price = await this._buy_book.best_open_price();
const { id: buys } = await this._buy_book.matched_orders(sell_price);
const { id: sells } = await this._sell_book.matched_orders(buy_price);
const num_clear = Math.min(buys.length, sells.length);
const status = Array(num_clear * 2).fill("closed");
const id = buys.slice(0, num_clear).concat(sells.slice(0, num_clear));
if (id.length > 0) {
await this._table.update({ status, id });
}
}
async _expire_trades() {
// By TIMESTAMP, not id \u2014 ids wrap (the ring), the clock doesn't.
const cutoff = new Date(
MARKET_OPEN +
(this._seq - MSG_PER_BATCH * TRADE_EXPIRATION) *
MSG_TIME_DELTA,
);
const expired = await query_columns(this._table, {
columns: ["id"],
filter: [
["status", "==", "open"],
["timestamp", "<", cutoff.toISOString()],
],
});
if (expired.id.length > 0) {
expired.status = Array(expired.id.length).fill("expired");
await this._table.update(expired);
}
}
}
const SKEW_MODEL_OFFSET = 2;
const SKEW_MODEL_STDDEV = 2;
const SKEW_MODEL_SKEW = 0;
function random_skew_normal(bias) {
const u3 = random(),
u2 = random();
const R = Math.sqrt(-2.0 * Math.log(u3));
const O = 2.0 * Math.PI * u2;
const u0 = R * Math.cos(O);
const v = R * Math.sin(O);
if (SKEW_MODEL_SKEW === 0) {
return bias * SKEW_MODEL_OFFSET + SKEW_MODEL_STDDEV * u0;
} else {
const n = -bias * SKEW_MODEL_SKEW;
const s = n / Math.sqrt(1 + Math.pow(SKEW_MODEL_SKEW, 2));
const u1 = s * u0 + Math.sqrt(1 - s * s) * v;
const z = u0 >= 0 ? u1 : -u1;
return bias * SKEW_MODEL_OFFSET + SKEW_MODEL_STDDEV * z;
}
}
function skew_model() {
const parts = random() > 0.5 ? ["buy", -1] : ["sell", 1];
const discount = random_skew_normal(parts[1]);
return { side: parts[0], discount };
}
const market_client = await api.worker();
const market_table = await market_client.table(SCHEMA, { index: "id" });
const market_view = await market_table.view();
const gui_table = await api.client.table(market_view, {
index: "id",
name: api.name,
});
await gui_table.on_delete(() => {
stopped = true;
market_table.delete().catch(() => {});
if (typeof market_client.terminate === "function") {
market_client.terminate();
}
});
const market = new Market(market_table, skew_model);
void market.poll();
await new Promise((resolve) => {
const check = async () => {
try {
if ((await gui_table.size()) > 0) {
resolve(undefined);
return;
}
} catch (e) {
resolve(undefined);
return;
}
setTimeout(() => void check(), 100);
};
void check();
});
}`;var Gr=[{plugin:"Heatmap",plugin_config:{},title:"Heatmap",group_by:[`bucket("timestamp", 'm')`],split_by:['bucket("price", 0.5)'],columns:[`if("side"=='buy'){-1}else{1}`],filter:[],sort:[],expressions:{"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,'bucket("price", 0.5)':'bucket("price", 0.5)',"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`},aggregates:{}},{plugin:"Heatmap",plugin_config:{},title:"Heatmap (Closed)",group_by:[`bucket("timestamp", 'm')`],split_by:['bucket("price", 0.25)'],columns:[`if("side"=='buy'){-1}else{1}`],filter:[["status","==","closed"]],sort:[],expressions:{"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,'bucket("price", 0.25)':'bucket("price", 0.25)',"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`},aggregates:{}},{plugin:"Y Scatter",plugin_config:{},title:"Closed Orders ((s) bucket)",group_by:[`bucket("timestamp", 's')`],split_by:[`if("status"!='open'){"status"}else{"side"}`],columns:["price"],filter:[],sort:[],expressions:{"if(\"status\"=='closed'){1}else if(\"status\"=='expired'){2}else{0}":`if("status"=='closed'){1}else if("status"=='expired'){2}else{0}`,'if("status"!=\'open\'){"status"}else{"side"}':`if("status"!='open'){"status"}else{"side"}`,"bucket(\"timestamp\", 's')":`bucket("timestamp", 's')`},aggregates:{price:"avg",timestamp:"dominant"}},{plugin:"X/Y Scatter",plugin_config:{},title:"Closed Orders",group_by:[],split_by:[],columns:["timestamp","price",`if("status"!='open'){"status"}else{"side"}`],filter:[],sort:[],expressions:{'if("status"!=\'open\'){"status"}else{"side"}':`if("status"!='open'){"status"}else{"side"}`,"if(\"status\"=='closed'){1}else if(\"status\"=='expired'){2}else{0}":`if("status"=='closed'){1}else if("status"=='expired'){2}else{0}`},aggregates:{}},{plugin:"Y Line",plugin_config:{zoom:{k:1,x:1,y:-1}},title:"Mid Timeseries",group_by:[`bucket("timestamp", 's')`],split_by:["status","side"],columns:["price"],filter:[["status","==","closed"]],sort:[],expressions:{"bucket(\"timestamp\", 's')":`bucket("timestamp", 's')`},aggregates:{price:"avg"}},{plugin:"Y Bar",plugin_config:{},title:"Depth Timeseries",group_by:[`bucket("timestamp", 'm')`],split_by:["side","status"],columns:[`if("side"=='buy'){1}else{-1}`],filter:[],sort:[],expressions:{"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"if(\"side\"=='buy'){1}else{-1}":`if("side"=='buy'){1}else{-1}`,"if(\"side\"=='sell'){-1}else{integer(null)}":`if("side"=='sell'){-1}else{integer(null)}`},aggregates:{"bucket(\"timestamp\", 'm')":"dominant"}},{columns_config:{"Diff from market open":{number_fg_mode:"bar",fg_gradient:12.9},"if(\"side\"=='buy'){-1}else{1}":{number_fg_mode:"bar",fg_gradient:8,aggregate_depth:1},status:{string_color_mode:"series",color:"#94aa27"},side:{string_color_mode:"series"}},plugin:"Datagrid",plugin_config:{},settings:!0,title:"Blotter",group_by:[],split_by:[],sort:[["timestamp","desc"]],filter:[],expressions:{'bucket("price", 1)':'bucket("price", 1)',"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"Diff from market open":'"price" - 20'},columns:["timestamp","id","Diff from market open","price","status","side"],aggregates:{}},{columns_config:{"if(\"side\"=='buy'){-1}else{1}":{aggregate_depth:1,number_fg_mode:"bar",fg_gradient:8}},plugin:"Datagrid",plugin_config:{},settings:!0,title:"Order Book",group_by:['bucket("price", 0.5)'],split_by:["side"],sort:[['bucket("price", 0.5)',"desc"]],filter:[["status","==","open"]],expressions:{"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`,'bucket("price", 0.5)':'bucket("price", 0.5)'},columns:[`if("side"=='buy'){-1}else{1}`],aggregates:{}},{plugin:"X Bar",plugin_config:{},title:"Order Book (Chart)",group_by:['bucket("price", 0.5)'],split_by:["side"],columns:[`if("side"=='buy'){-1}else{1}`],filter:[["status","==","open"]],sort:[['bucket("price", 0.5)',"desc"]],expressions:{"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`,'bucket("price", 0.5)':'bucket("price", 0.5)'},aggregates:{}},{plugin:"Candlestick",plugin_config:{},title:"Candlestick",group_by:[`bucket("timestamp", 'm')`],split_by:[],columns:["price",null,"price 2","price 3"],filter:[["status","==","closed"]],sort:[],expressions:{"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"price 2":'"price"',"price 3":'"price"'},aggregates:{price:"avg","price 2":"high","price 3":"low"}},{plugin:"Candlestick",plugin_config:{},title:"Candlestick 2",group_by:[`bucket("timestamp", 'm')`],split_by:[],columns:["price",null,null,null],filter:[["status","==","closed"]],sort:[],expressions:{"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"price 2":'"price"',"price 3":'"price"'},aggregates:{price:"avg","price 2":"high","price 3":"low"}},{plugin:"X Bar",plugin_config:{},title:"Order Book (All Status)",group_by:['bucket("price", 0.5)'],split_by:[],columns:[`if("status"=='open' and "side"=='buy'){1}else{float(null)}`,`if("status"=='open' and "side"=='sell'){1}else{float(null)}`,`if("status"=='closed'){1}else{0}`],filter:[],sort:[['bucket("price", 0.5)',"desc"]],expressions:{"if(\"status\"=='open' and \"side\"=='buy'){1}else{float(null)}":`if("status"=='open' and "side"=='buy'){1}else{float(null)}`,"bucket(\"timestamp\", 's')":`bucket("timestamp", 's')`,'bucket("price", 0.5)':'bucket("price", 0.5)','if("status"==\'open\'){"price"}else{float(null)}':`if("status"=='open'){"price"}else{float(null)}`,"if(\"status\"=='closed'){1}else{0}":`if("status"=='closed'){1}else{0}`,"if(\"status\"=='open' and \"side\"=='sell'){1}else{float(null)}":`if("status"=='open' and "side"=='sell'){1}else{float(null)}`},aggregates:{}},{plugin:"Y Scatter",plugin_config:{},title:"Order Book (Scatter All Status)",group_by:['bucket("price", 0.5)'],split_by:[],columns:[`if("status"=='open' and "side"=='buy'){1}else{float(null)}`,`if("status"=='open' and "side"=='sell'){1}else{float(null)}`,`if("status"=='closed'){1}else{0}`],filter:[],sort:[],expressions:{"if(\"status\"=='open' and \"side\"=='buy'){1}else{float(null)}":`if("status"=='open' and "side"=='buy'){1}else{float(null)}`,"bucket(\"timestamp\", 's')":`bucket("timestamp", 's')`,'bucket("price", 0.5)':'bucket("price", 0.5)','if("status"==\'open\'){"price"}else{float(null)}':`if("status"=='open'){"price"}else{float(null)}`,"if(\"status\"=='closed'){1}else{0}":`if("status"=='closed'){1}else{0}`,"if(\"status\"=='open' and \"side\"=='sell'){1}else{float(null)}":`if("status"=='open' and "side"=='sell'){1}else{float(null)}`},aggregates:{}},{plugin:"X Bar",plugin_config:{},title:"Order Book (Stack All Status)",group_by:['bucket("price", 0.5)'],split_by:[`if("status"=='closed'){'closed'}else{"side"}`],columns:["price"],filter:[["status","!=","expired"]],sort:[['bucket("price", 0.5)',"desc"],["status","col asc"]],expressions:{"if(\"status\"=='open' and \"side\"=='buy'){1}else{float(null)}":`if("status"=='open' and "side"=='buy'){1}else{float(null)}`,"bucket(\"timestamp\", 's')":`bucket("timestamp", 's')`,'bucket("price", 0.5)':'bucket("price", 0.5)','if("status"==\'open\'){"price"}else{float(null)}':`if("status"=='open'){"price"}else{float(null)}`,"if(\"status\"=='closed'){1}else{0}":`if("status"=='closed'){1}else{0}`,"if(\"status\"=='open' and \"side\"=='sell'){1}else{float(null)}":`if("status"=='open' and "side"=='sell'){1}else{float(null)}`,"if(\"status\"=='closed'){'closed'}else{\"side\"}":`if("status"=='closed'){'closed'}else{"side"}`},aggregates:{}},{columns_config:{},plugin:"Candlestick",plugin_config:{},table:"market",title:"Candlestick 3 Son Of Candllestick",group_by:[`bucket("timestamp", 'm')`],split_by:[],sort:[],filter:[["status","==","closed"]],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{"price 3":'"price"',"price 2":'"price"',"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`},windows:{"New Column 3":{column:"price",aggregate:"avg",rows:100},"New Column 4":{column:"price",aggregate:"avg",rows:100},"New Column 1":{column:"price",aggregate:"avg",rows:100},"New Column 2":{column:"price",aggregate:"avg",rows:100}},columns:["New Column 1","New Column 2","New Column 3","New Column 4",null],aggregates:{"New Column 3":"high","New Column 2":"last","New Column 4":"low","New Column 1":"first"}}];var Vr=`async (api) => {
const WIDTH = 80;
const HEIGHT = 60;
const FRAME_TIMEOUT = 50;
const SCREENSHOT = !!globalThis.__PERSPECTIVE_SCREENSHOT__;
let stopped = false;
let stream = null;
const canvas = document.createElement("canvas");
canvas.width = WIDTH;
canvas.height = HEIGHT;
const context = canvas.getContext("2d", { willReadFrequently: true });
const video = document.createElement("video");
video.width = WIDTH;
video.height = HEIGHT;
video.muted = true;
video.setAttribute("playsinline", "");
function sample(tdata) {
const data = context.getImageData(0, 0, WIDTH, HEIGHT);
for (let i = 0; i < data.data.byteLength / 4; i++) {
const r = data.data[i * 4];
const g = data.data[i * 4 + 1];
const b = data.data[i * 4 + 2];
tdata.color[i] = 255 - (0.21 * r + 0.72 * g + 0.07 * b);
}
}
async function draw_placeholder() {
await new Promise((resolve) => {
const img = new Image();
img.onload = () => {
context.drawImage(img, 0, 0, WIDTH, HEIGHT);
resolve(undefined);
};
img.onerror = () => {
context.fillStyle = "#808080";
context.fillRect(0, 0, WIDTH, HEIGHT);
resolve(undefined);
};
img.src = "/img/dogs-playing-poker.png";
});
}
const tdata = { index: [], color: [] };
for (let i = 0; i < WIDTH * HEIGHT; i++) {
tdata.index[i] = i;
tdata.color[i] = 0;
}
const table = await api.client.table(tdata, {
index: "index",
name: api.name,
});
await table.on_delete(() => {
stopped = true;
if (stream) {
for (const track of stream.getTracks()) {
track.stop();
}
}
});
let live = false;
if (
!SCREENSHOT &&
navigator.mediaDevices &&
navigator.mediaDevices.getUserMedia
) {
try {
stream = await navigator.mediaDevices.getUserMedia({
video: true,
});
video.srcObject = stream;
await video.play();
live = true;
} catch (e) {
live = false;
}
}
if (!live) {
await draw_placeholder();
}
async function frame() {
if (stopped) {
return;
}
try {
if (live) {
context.drawImage(video, 0, 0, WIDTH, HEIGHT);
}
sample(tdata);
await table.update(tdata);
} catch (e) {
stopped = true;
return;
}
if (live) {
schedule();
}
}
function schedule() {
setTimeout(
() => {
if (stopped) {
return;
}
if (document.hidden) {
schedule();
return;
}
void frame();
},
document.hidden ? 1000 : FRAME_TIMEOUT,
);
}
await frame();
}`;var Xr=[{plugin:"Datagrid",columns_config:{color:{bg_gradient:251.04,neg_bg_color:"#ffa38f",number_bg_mode:"gradient",number_fg_mode:"disabled",pos_bg_color:"#346ead"}},plugin_config:{editable:!1,scroll_lock:!1},title:"Spreadsheet Cam",group_rollup_mode:"flat",group_by:["y"],split_by:["x"],columns:["color"],filter:[],sort:[],expressions:{"New Column 1":'bucket("color", 5)',y:'floor("index" / 80)',x:'-"index" % 80'},aggregates:{}},{plugin:"Heatmap",title:"Heatmap Cam",group_by:["x"],split_by:["y"],columns:["color"],expressions:{y:'-floor("index" / 80)',x:'-"index" % 80'},aggregates:{"New Column 1":"any"}},{plugin:"Heatmap",plugin_config:{},settings:!0,title:"Downsampled Heatmap Cam",group_by:["x"],split_by:["y"],columns:["color"],filter:[],sort:[],expressions:{y:'bucket(-floor("index" / 80), 3)',x:'bucket(-"index" % 80, 3)'},aggregates:{}},{plugin:"Y Bar",plugin_config:{},title:"Luminosity Histogram",group_by:['bucket("color", 5)'],split_by:[],columns:["color"],filter:[],sort:[],expressions:{'bucket("color", 5)':'bucket("color", 5)',y:'-floor("index" / 80)',x:'-"index" % 80'},aggregates:{}},{plugin:"Datagrid",columns_config:{color:{bg_gradient:2463.68,neg_bg_color:"#ffa38f",number_bg_mode:"gradient",number_fg_mode:"disabled",pos_bg_color:"#307bb0"}},group_rollup_mode:"flat",plugin_config:{editable:!1,scroll_lock:!1},title:"Small Spreadsheet Cam",group_by:["bucket(y, 5)"],split_by:["bucket(x, 5)"],columns:["color"],filter:[["bucket(x, 5)","<",0]],sort:[],expressions:{"bucket(y, 5)":'bucket(floor("index" / 80), 2)',"New Column 1":'bucket("color", 5)',"bucket(x, 5)":'bucket(-"index" % 80, 5)'},aggregates:{}},{plugin:"Y Line",plugin_config:{},title:"Max Headroom",group_by:["x"],split_by:["y"],columns:["New Column 2"],filter:[["x","<",0]],sort:[],expressions:{x:'-"index" % 80',y:'floor("index" / 80)',"New Column 2":'-floor("index" / 80) * 20 - "color"'},aggregates:{"New Column 2":"avg"}},{plugin:"X/Y Scatter",plugin_config:{},title:"Scatter Cam",group_by:["x","y"],split_by:[],columns:["x","New Column 2","color",null,null,null,null],filter:[["x","<",0]],sort:[],expressions:{"New Column 2":'-floor("index" / 80) * 50 - "color"',x:'-"index" % 80',y:'floor("index" / 80)'},aggregates:{x:"avg","New Column 2":"avg"}},{plugin:"Datagrid",plugin_config:{editable:!1,scroll_lock:!1},title:"Raw Stream",group_by:[],split_by:[],columns:["index","color"],filter:[],sort:[],expressions:{},aggregates:{}},{plugin:"Density",plugin_config:{gradient_intensity:1,gradient_radius_px:42},title:"Density Cam",expressions:{y:'-floor("index" / 80)',x:'-"index" % 80'},columns:["x","y","color",null],aggregates:{y:"any",x:"any"}}];var $t=Gr,Gt=Xr,ye={kind:"eval",name:"market",code:$r},st={kind:"eval",name:"webcam",code:Vr};function Vt(e,t){let i=e.find(r=>r.title===t);if(!i)throw new Error(`Unknown layout "${t}"`);return i}var jr=$t.map(e=>({id:`market-${Pe(e.title)}`,title:`Market \u2014 ${e.title}`,description:"Simulated real-time order flow: a stateful matching engine on a private worker, view-mirrored to the UI.",source:ye,workspace:H({theme:null,...e})})),qr=Gt.map(e=>({id:`webcam-${Pe(e.title)}`,title:`Webcam \u2014 ${e.title}`,description:"Live webcam luminance sampled into a Perspective table at 20fps (falls back to a placeholder image without a camera).",source:st,workspace:H(e)}));var ve=(e,t)=>({theme:t,...Vt($t,e)}),Xt=e=>Vt(Gt,e),Jc=le("horizontal",[.6,.4],[z("candle"),le("vertical",[.5,.5],[z("book"),z("blotter")])]),Kr=le("vertical",[.5,.5],[z("depth"),le("horizontal",[.5,.5],[z("heat"),z("closed")])]),Wa=le("horizontal",[.55,.45],[z("heat"),le("vertical",[.5,.5],[z("histo"),z("scatter")])]),Zr="Candlestick, live order book and blotter over one simulated feed.",Qr="Depth over time, price-level heatmap and closed orders from the same feed.",Jr="One camera, three readings: heatmap, luminosity histogram and scatter.",en=[{id:"market-trading-desk",title:"Market",description:Zr,source:ye,workspace:{active:"PERSPECTIVE_GENERATED_ID_0",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0},{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0}],sizes:[.5,.5],orientation:"vertical"}],sizes:[.5,.5],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_0:{columns_config:{price:{number_fg_mode:"label-bar",fg_gradient:20}},plugin:"Datagrid",table:"market",title:"Blotter",sort:[["timestamp","desc"]],columns:["id","side","security","price","timestamp","status"]},PERSPECTIVE_GENERATED_ID_1:{plugin:"X Bar",table:"market",title:"Order Book (Chart)",group_by:['bucket("price", 0.5)'],split_by:["side"],sort:[['bucket("price", 0.5)',"desc"]],filter:[["status","==","open"]],expressions:{"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`,'bucket("price", 0.5)':'bucket("price", 0.5)'},columns:[`if("side"=='buy'){-1}else{1}`]},PERSPECTIVE_GENERATED_ID_2:{plugin:"Candlestick",table:"market",title:"Candlestick",group_by:[`bucket("timestamp", 'm')`],filter:[["status","==","closed"]],expressions:{"price 3":'"price"',"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"price 2":'"price"'},columns:["price",null,"price 2","price 3"],aggregates:{price:"avg","price 3":"low","price 2":"high"}}}}},{id:"market-trading-desk-2",title:"Market \u2014 Themed",description:Zr,source:ye,workspace:{active:"PERSPECTIVE_GENERATED_ID_2",layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0},{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0}],sizes:[.5,.5],orientation:"vertical"}],sizes:[.5,.5],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_0:{columns_config:{price:{number_fg_mode:"label-bar",fg_gradient:20}},plugin:"Datagrid",theme:"Solarized Dark",table:"market",title:"Blotter",sort:[["timestamp","desc"]],columns:["id","side","security","price","timestamp","status"]},PERSPECTIVE_GENERATED_ID_1:{plugin:"X Bar",theme:"Phosphor",table:"market",title:"Order Book (Chart)",group_by:['bucket("price", 0.5)'],split_by:["side"],sort:[['bucket("price", 0.5)',"desc"]],filter:[["status","==","open"]],expressions:{"if(\"side\"=='buy'){-1}else{1}":`if("side"=='buy'){-1}else{1}`,'bucket("price", 0.5)':'bucket("price", 0.5)'},columns:[`if("side"=='buy'){-1}else{1}`]},PERSPECTIVE_GENERATED_ID_2:{plugin:"Candlestick",theme:"Dracula",table:"market",title:"Candlestick",group_by:[`bucket("timestamp", 'm')`],filter:[["status","==","closed"]],expressions:{"price 3":'"price"',"bucket(\"timestamp\", 'm')":`bucket("timestamp", 'm')`,"price 2":'"price"'},columns:["price",null,"price 2","price 3"],aggregates:{price:"avg","price 3":"low","price 2":"high"}}}}},{id:"market-order-flow",title:"Market \u2014 Orders",description:Qr,source:ye,workspace:nt(Kr,{depth:ve("Depth Timeseries"),heat:ve("Heatmap"),closed:ve("Closed Orders")})},{id:"market-order-flow-themed",title:"Market \u2014 Orders Themed",description:Qr,source:ye,workspace:nt(Kr,{depth:ve("Depth Timeseries","Vaporwave"),heat:ve("Heatmap","Solarized Dark"),closed:ve("Closed Orders","Solarized Light")})},{id:"webcam-video-wall",title:"Webcam \u2014 Video Wall",description:Jr,source:st,workspace:nt(Wa,{heat:Xt("Heatmap Cam"),histo:Xt("Luminosity Histogram"),scatter:Xt("Scatter Cam")})},{id:"webcam-video-wall-2",title:"Webcam \u2014 Video Wall Themed",description:Jr,source:st,workspace:{layout:{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_0"],selected:0},{type:"split-layout",children:[{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_1"],selected:0},{type:"tab-layout",tabs:["PERSPECTIVE_GENERATED_ID_2"],selected:0}],sizes:[.5,.5],orientation:"vertical"}],sizes:[.55,.45],orientation:"horizontal"},panels:{PERSPECTIVE_GENERATED_ID_0:{columns_config:{},plugin:"Heatmap",plugin_config:{},table:"webcam",theme:"Phosphor",title:"Heatmap Cam",group_by:["x"],split_by:["y"],sort:[],filter:[],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{y:'-floor("index" / 80)',x:'-"index" % 80'},columns:["color"],aggregates:{}},PERSPECTIVE_GENERATED_ID_1:{columns_config:{},plugin:"Y Bar",plugin_config:{},table:"webcam",theme:"Dracula",title:"Luminosity Histogram",group_by:['bucket("color", 5)'],split_by:[],sort:[],filter:[],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{'bucket("color", 5)':'bucket("color", 5)',y:'-floor("index" / 80)',x:'-"index" % 80'},columns:["color"],aggregates:{}},PERSPECTIVE_GENERATED_ID_2:{columns_config:{},plugin:"X/Y Scatter",plugin_config:{},table:"webcam",theme:"Vaporwave",title:"Scatter Cam",group_by:["x","y"],split_by:[],sort:[],filter:[["x","<",0]],group_rollup_mode:"flat",split_rollup_mode:"flat",expressions:{y:'floor("index" / 80)',"New Column 2":'-floor("index" / 80) * 50 - "color"',x:'-"index" % 80'},columns:["x","New Column 2","color",null,null,null,null],aggregates:{"New Column 2":"avg",x:"avg"}}},active:"PERSPECTIVE_GENERATED_ID_0"}}];var tn=[{name:"Group By 1",description:"Data grid with 1 level of groups for rows",config:{plugin:"Datagrid",title:"Group By 1",group_by:["Sub-Category"]},aggregates:"dominant"},{name:"Group By 2",description:"Data grid with 2 levels of groups for rows",config:{plugin:"Datagrid",title:"Group By 2",group_by:["Category","Sub-Category"]}},{name:"Split By",description:"Data grid with 1 level of categories for columns",config:{plugin:"Datagrid",title:"Split By",split_by:["Category"],columns:["Sales","Quantity","Discount","Profit"]}},{name:"Split By 2",description:"Data grid with 2 levels of categories and columns",config:{plugin:"Datagrid",title:"Split By 2",split_by:["Category","Sub-Category"],columns:["Sales","Quantity","Discount","Profit"]}},{name:"Both",description:"Data grid with grouped rows and categorized columns",config:{plugin:"Datagrid",title:"Both",group_by:["Region"],split_by:["Category"],columns:["Sales","Quantity","Discount","Profit"]}},{name:"Both 2",description:"Data grid with 2 levels of groups and 2 levels of categories",config:{plugin:"Datagrid",title:"Both 2",group_by:["Region","State"],split_by:["Category","Sub-Category"],columns:["Sales","Quantity","Discount","Profit"]}},{name:"Flat Group By 1",description:"Flat data grid with 1 level of groups for rows, no rollup rows",config:{title:"Flat Group By 1",group_by:["Sub-Category"],group_rollup_mode:"flat"}},{name:"Flat Group By 2",description:"Flat data grid with 2 levels of groups for rows, no rollup rows",config:{title:"Flat Group By 2",group_by:["Category","Sub-Category"],group_rollup_mode:"flat"}},{name:"Flat Both",description:"Flat data grid with grouped rows and categorized columns, no rollup rows",config:{title:"Flat Both",group_by:["Region"],split_by:["Category"],columns:["Sales","Quantity","Discount","Profit"],group_rollup_mode:"flat"}},{name:"Flat Both 2",description:"Flat data grid with 2 levels of groups and 2 levels of categories, no rollup rows",config:{title:"Flat Both 2",group_by:["Region","State"],split_by:["Category","Sub-Category"],columns:["Sales","Quantity","Discount","Profit"],group_rollup_mode:"flat"}},{name:"Background Row And Split By",description:"Data grid with groups, categories, and solid color conditional highlighting",config:{title:"Background Row And Split By",group_by:["State"],split_by:["Sub-Category"],columns:["Profit"],sort:[["Profit","col asc"]],columns_config:{Profit:{number_bg_mode:"color"}}}},{name:"Gradient Row And Split By",description:"Data grid with groups, categories, and gradient conditional highlighting",config:{title:"Gradient Row And Split By",group_by:["State"],split_by:["Sub-Category"],columns:["Profit"],sort:[["Profit","col asc"]],columns_config:{Profit:{number_bg_mode:"gradient",bg_gradient:1600}}}},{name:"Background Row And Split By",description:"Data grid with groups, categories, and a bar chart",config:{title:"Background Row And Split By",group_by:["State"],split_by:["Sub-Category"],columns:["Sales"],aggregates:{Sales:"avg"},columns_config:{Sales:{number_fg_mode:"bar",fg_gradient:600}}}},{name:"Foreground Colors",description:"Data grid with 6 categories. 3 categories have conditional formatting using foreground colors.",config:{title:"Foreground Colors",columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],columns_config:{Profit:{pos_fg_color:"#32cd82",neg_fg_color:"#f50fed"},Sales:{pos_fg_color:"#780aff",neg_fg_color:"#f5ac0f"},Discount:{pos_fg_color:"#f5ac0f",neg_fg_color:"#780aff"}},sort:[["Sub-Category","desc"]]}},{name:"Background Colors",description:"Data grid with 6 categories. 3 categories have custom, solid color conditional formatting.",config:{title:"Background Colors",plugin:"Datagrid",columns_config:{Discount:{neg_bg_color:"#780aff",number_bg_mode:"color",number_fg_mode:"disabled",pos_bg_color:"#f5ac0f"},Profit:{neg_bg_color:"#f50fed",number_bg_mode:"color",number_fg_mode:"disabled",pos_bg_color:"#32cd82"},Sales:{neg_bg_color:"#f5ac0f",number_bg_mode:"color",number_fg_mode:"disabled",pos_bg_color:"#780aff"}},plugin_config:{scroll_lock:!0},columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],sort:[["Sub-Category","desc"]]}},{name:"Gradient Colors",description:"Data grid with 6 categories. 3 categories have custom, gradient color conditional formatting.",config:{title:"Gradient Colors",columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],columns_config:{Profit:{number_bg_mode:"gradient",bg_gradient:600,pos_bg_color:"#32cd82",neg_bg_color:"#f50fed"},Sales:{number_bg_mode:"gradient",bg_gradient:2268,pos_bg_color:"#780aff",neg_bg_color:"#f5ac0f"},Discount:{number_bg_mode:"gradient",bg_gradient:.8,pos_bg_color:"#f5ac0f",neg_bg_color:"#780aff"}},sort:[["Sub-Category","desc"]]}},{name:"Bar Colors",description:"Data grid with 6 categories. 3 categories have custom colored bars.",config:{title:"Bar Colors",columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],columns_config:{Profit:{number_fg_mode:"bar",fg_gradient:600,pos_fg_color:"#32cd82",neg_fg_color:"#f50fed"},Sales:{number_fg_mode:"bar",fg_gradient:2268,pos_fg_color:"#780aff",neg_fg_color:"#f5ac0f"},Discount:{number_fg_mode:"bar",fg_gradient:.8,pos_fg_color:"#f5ac0f",neg_fg_color:"#780aff"}},sort:[["Sub-Category","desc"]]}},{name:"Label Bar",description:"Data grid with 6 categories. 3 categories have label bars showing the value overlaid on the bar.",config:{title:"Label Bar",columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],columns_config:{Profit:{number_fg_mode:"label-bar",fg_gradient:600},Sales:{number_fg_mode:"label-bar",fg_gradient:2268},Discount:{number_fg_mode:"label-bar",fg_gradient:.8}},sort:[["Sub-Category","desc"]]}},{name:"Label Bar Colors",description:"Data grid with 6 categories. 3 categories have custom colored label bars.",config:{title:"Label Bar Colors",columns:["Category","Sales","Discount","Profit","Sub-Category","Order Date"],columns_config:{Profit:{number_fg_mode:"label-bar",fg_gradient:600,pos_fg_color:"#32cd82",neg_fg_color:"#f50fed"},Sales:{number_fg_mode:"label-bar",fg_gradient:2268,pos_fg_color:"#780aff",neg_fg_color:"#f5ac0f"},Discount:{number_fg_mode:"label-bar",fg_gradient:.8,pos_fg_color:"#f5ac0f",neg_fg_color:"#780aff"}},sort:[["Sub-Category","desc"]]}},{name:"Thermometer",description:"Data grid with 1 group and 3 columns. 2 columns use bars and 1 column uses gradient conditional highlighting.",config:{title:"Thermometer",group_by:["State"],columns:["Profit (-)","Profit","Profit (+)"],columns_config:{"Profit (-)":{number_fg_mode:"bar",fg_gradient:1e4},Profit:{number_bg_mode:"gradient",bg_gradient:1e4},"Profit (+)":{number_fg_mode:"bar",fg_gradient:1e4}},expressions:{"Profit (-)":'if("Profit"<0){"Profit"}else{0}',"Profit (+)":'if("Profit">0){"Profit"}else{0}'}}},{name:"Y Bar",description:"Bar chart with 17 bars. X is 'Sub-Category', and Y is 'Sales'.",config:{title:"Y Bar",plugin:"Y Bar",group_by:["Sub-Category"],columns:["Sales"]}},{name:"Y Bar, Sorted Desc By Y-Axis",description:"Bar chart with 17 bars sorted descending. X is 'Sub-Category', and Y is 'Sales'.",config:{title:"Y Bar, Sorted Desc By Y-Axis",plugin:"Y Bar",group_by:["Sub-Category"],columns:["Sales"],sort:[["Sales","desc"]]}},{name:"Y Bar - Row And Split By",description:"Stacked bar chart with 17 bars. X is 'Sub-Category', Y is 'Sales', and subgroup is 'Ship Mode'",config:{title:"Y Bar - Row And Split By",plugin:"Y Bar",group_by:["Sub-Category"],split_by:["Ship Mode"],columns:["Sales"]}},{name:"Y Bar - Group By 2 Sorted",description:"Bar chart with 3 categories and 17 total subcategories, sorted descending within each category.",config:{title:"Y Bar - Group By 2 Sorted",plugin:"Y Bar",group_by:["Category","Sub-Category"],columns:["Sales"],sort:[["Sales","desc"]]}},{name:"Y Bar - Group By 2 And Split By Sorted",description:"Bar chart with 3 colored categories and 17 total subcategories, sorted descending within each category.",config:{title:"Y Bar - Group By 2 And Split By Sorted",plugin:"Y Bar",group_by:["Category","Sub-Category"],split_by:["Category"],columns:["Sales"],sort:[["Sales","desc"]]}},{name:"Y Bar - Group By 2 And 2 Split By Sorted",description:"Stacked bar chart with 3 categories and 17 total subcategories, sorted descending within each category. X is 'Category, Sub-Category', y is 'Sales', subgroup is 'Region'",config:{title:"Y Bar - Group By 2 And 2 Split By Sorted",plugin:"Y Bar",group_by:["Category","Sub-Category"],split_by:["Category","Region"],columns:["Sales"],sort:[["Sales","desc"]]}},{name:"Y Bar - Group By 2 And 2 Split By Sorted 2",description:"Bar chart. X is 'State', Y is 'Profit'. Each state has, when applicable, 2 bars: Profit and Loss. States are sorted by Net.",config:{title:"Y Bar - Group By 2 And 2 Split By Sorted 2",plugin:"Y Bar",group_by:["State"],split_by:["Profit (-/+)"],columns:["Profit"],expressions:{"Profit (-/+)":'if("Profit"<0){1}else{0}'},sort:[["Profit","desc"]]},viewport:{width:600,height:450}},{name:"Y Bar Multi Axis",description:"Groupd bar chart. X is 'Sub-Category', Y is 'Quantity' and 'Sales'. Each X value has 2 bars.",config:{title:"Y Bar Multi Axis",plugin:"Y Bar",group_by:["Sub-Category"],columns:["Quantity","Sales"],aggregates:{Sales:"avg"},sort:[["Sales","desc"]]}},{name:"Y Bar Multi Axis - SPlit",description:"Groupd bar chart. X is 'Sub-Category', Y is 'Quantity', and the second Y is 'Sales'. Each X value has 2 bars.",config:{title:"Y Bar Multi Axis - SPlit",plugin:"Y Bar",group_by:["Sub-Category"],columns:["Quantity","Sales"],sort:[["Sales","desc"]],aggregates:{Sales:"avg"},plugin_config:{splitMainValues:["Sales"]}}},{name:"X Bar",description:"Horizontal bar chart with 17 bars. X is 'Sub-Category' and Y is 'Sales'.",config:{title:"X Bar",plugin:"X Bar",group_by:["Sub-Category"],columns:["Sales"]}},{name:"X Bar",description:"Grouped horizontal bar chart. X is 'Sub-Category' and Y is 'Quantity, Profit'.",config:{title:"X Bar",plugin:"X Bar",group_by:["Sub-Category"],columns:["Quantity","Profit"]}},{name:"X Bar, Sorted Desc By X-Axis",description:"Sorted horizontal bar chart. X is 'Sub-Category' and Y is 'Sales'.",config:{title:"X Bar, Sorted Desc By X-Axis",plugin:"X Bar",group_by:["Sub-Category"],columns:["Sales"],sort:[["Sales","asc"]]}},{name:"X Bar - Row And Split By",description:"Stacked horizontal bar chart. X is 'Sub-Category', Y is 'Sales', and subgroup is 'Region'",config:{title:"X Bar - Row And Split By",plugin:"X Bar",group_by:["Sub-Category"],split_by:["Region"],columns:["Sales"]}},{name:"X Bar - Row And Split By",description:"Sorted stacked horizontal bar chart. X is 'Sub-Category', Y is 'Sales', and subgroup is 'Region'",config:{title:"X Bar - Row And Split By",plugin:"X Bar",group_by:["Sub-Category"],split_by:["Region"],columns:["Sales"],sort:[["Sales","asc"]]}},{name:"Y Line - Datetime Axis",description:"Line chart. X is Order Date from January 2014 to December 2017. Y is 'Sales'.",config:{title:"Y Line - Datetime Axis",plugin:"Y Line",group_by:["Order Date"],columns:["Sales"]}},{name:"Y Line - Datetime Axis",description:"Line chart with 3 lines. X is Order Date, Y is Sales, and the lines are 'Consumer', 'Corporate', and 'Home Office'.",config:{title:"Y Line - Datetime Axis",plugin:"Y Line",group_by:["Order Date"],split_by:["Segment"],columns:["Sales"]}},{name:"Y Line - Datetime Axis Computed",description:"Line Chart. X is 'Order Date', summarized by month. Y is 'Sales'",config:{title:"Y Line - Datetime Axis Computed",plugin:"Y Line",group_by:[`bucket("Order Date", 'M')`],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},columns:["Sales"]}},{name:"Y Line - Datetime Axis",description:"Line Chart with 4 lines. X is 'Order Date' from January 2014 to December 2017. Y is 'Sales'. Each line is for each year.",config:{title:"Y Line - Datetime Axis",plugin:"Y Line",group_by:[`bucket("Order Date", 'M')`],split_by:[`bucket("Order Date", 'Y')`],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`,"bucket(\"Order Date\", 'Y')":`bucket("Order Date", 'Y')`},columns:["Sales"]}},{name:"Y Line - Datetime Axis And Split By",description:"Line Chart with 4 lines. X is Order Date, Y is Sales, and the lines track different regions.",config:{title:"Y Line - Datetime Axis And Split By",plugin:"Y Line",group_by:[`bucket("Order Date", 'M')`],split_by:["Region"],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},columns:["Sales"]}},{name:"Y Line - Category Axis",description:"Line Chart. X is State and Y is Sales.",config:{title:"Y Line - Category Axis",plugin:"Y Line",group_by:["State"],columns:["Sales"]},viewport:{width:600,height:450}},{name:"Y Line - Category Axis",description:"Line Chart. X is State and Y is Sales. Sorted descending.",config:{title:"Y Line - Category Axis",plugin:"Y Line",group_by:["State"],columns:["Sales"],sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Line - Row and Split By",description:"Line chart with 3 lines. X is State, Y is Sales, and each line tracks a customer segment. States are sorted descending by total sales.",config:{title:"Y Line - Row and Split By",plugin:"Y Line",group_by:["State"],split_by:["Segment"],columns:["Sales"],sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Line - Multi Axis Split",description:"Line chart with 2 lines. X is State, Y is Profit, and second Y is Sales. States are sorted descending by Sales.",config:{title:"Y Line - Multi Axis Split",plugin:"Y Line",group_by:["State"],columns:["Sales","Profit"],plugin_config:{splitMainValues:["Sales"]},sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Line - Multi Axis Split",description:"Line chart with 2 lines. X is State, Y is Profit, second Y is Sales, and each line is profit/sales for each customer segment. States are sorted descending by total Sales.",config:{title:"Y Line - Multi Axis Split",plugin:"Y Line",group_by:["State"],split_by:["Segment"],columns:["Sales","Profit"],plugin_config:{splitMainValues:["Sales"]},sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Area - Datetime Axis Computed",description:"Area chart. X is 'Order Date', bucketed by month. Y is Sales.",config:{title:"Y Area - Datetime Axis Computed",plugin:"Y Area",group_by:[`bucket("Order Date", 'M')`],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},columns:["Sales"]}},{name:"Y Area - Datetime Axis",description:"Area chart. X is 'Order Date', bucketed by month. Y is sales. Each year is its own color and area.",config:{title:"Y Area - Datetime Axis",plugin:"Y Area",group_by:[`bucket("Order Date", 'M')`],split_by:[`bucket("Order Date", 'Y')`],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`,"bucket(\"Order Date\", 'Y')":`bucket("Order Date", 'Y')`},columns:["Sales"]}},{name:"Y Area - Datetime Axis And Split By",description:"Stacked area chart. X is 'Order Date', bucketed by month. Y is sales. Subgroup is Region.",config:{title:"Y Area - Datetime Axis And Split By",plugin:"Y Area",group_by:[`bucket("Order Date", 'M')`],split_by:["Region"],expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},columns:["Sales"]}},{name:"Y Area - Category Axis",description:"Area chart. X is 'State'. Y is Sales.",config:{title:"Y Area - Category Axis",plugin:"Y Area",group_by:["State"],columns:["Sales"]},viewport:{width:600,height:450}},{name:"Y Area - Row and Split By",description:"Stacked area chart. X is 'State'. Y is 'Sales'. Subgroup is customer segment.",config:{title:"Y Area - Row and Split By",plugin:"Y Area",group_by:["State"],split_by:["Ship Mode"],columns:["Sales"]},viewport:{width:600,height:450}},{name:"Y Area - 2 Group By",description:"Grouped area chart. X is State, grouped by Region. Y is sales. Sorted descending by Sales for each region.",config:{title:"Y Area - 2 Group By",plugin:"Y Area",group_by:["Region","State"],columns:["Sales"],sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Area - Row and Split By",description:"Grouped area chart. X is State, grouped by Region. Y is sales. Sorted descending by Sales for each region. Each group is a different color.",config:{title:"Y Area - Row and Split By",plugin:"Y Area",group_by:["Region","State"],split_by:["Region"],columns:["Sales"],sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"Y Area - Row and Split By 2",description:"Stacked grouped area chart. X is State, grouped by Region. Y is sales. Subgroup is customer segment. Sorted descending by total sales.",config:{title:"Y Area - Row and Split By 2",plugin:"Y Area",group_by:["Region","State"],split_by:["Ship Mode"],columns:["Sales"],sort:[["Sales","desc"]]},viewport:{width:600,height:450}},{name:"X/Y Scatter",description:"Scatter plot. X is Sales. Y is Quantity.",config:{title:"X/Y Scatter",plugin:"X/Y Scatter",group_by:["City"],columns:["Sales","Quantity"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg"}}},{name:"X/Y Scatter - Split By",description:"Grouped Scatter plot. X is Sales. Y is Quantity. Group is Region.",config:{title:"X/Y Scatter - Split By",plugin:"X/Y Scatter",group_by:["City"],split_by:["Region"],columns:["Sales","Quantity"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg"}}},{name:"X/Y Scatter - Color By Float",description:"Scatter plot. X is Sales. Y is Quantity. Each dot is colored by Profit.",config:{title:"X/Y Scatter - Color By Float",plugin:"X/Y Scatter",group_by:["State"],columns:["Sales","Quantity","Profit"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg"},sort:[["Profit","desc"]]}},{name:"X/Y Scatter - Bubble",description:"Bubble plot. X is Sales. Y is Quantity. Size is Profit.",config:{title:"X/Y Scatter - Bubble",plugin:"X/Y Scatter",group_by:["Sub-Category"],columns:["Sales","Quantity",null,"Profit"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Bubble",description:"Grouped bubble plot. X is Sales. Y is Quantity. Size is Profit. Group is Product Sub-Category.",config:{title:"X/Y Scatter - Bubble",plugin:"X/Y Scatter",group_by:["Sub-Category"],split_by:["Category"],columns:["Sales","Quantity",null,"Profit"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Bubble",description:"Colored bubble plot. X is Sales. Y is Quantity. Size is Row ID. Color is Profit.",config:{title:"X/Y Scatter - Bubble",plugin:"X/Y Scatter",group_by:["Sub-Category"],columns:["Sales","Quantity","Profit","Row ID"],sort:[["Profit","desc"]],aggregates:{Sales:"avg",Profit:"sum",Quantity:"avg","Row ID":"avg"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Category Y Axis",description:"Horizontal Bubble plot. X is State. Y is Profit. Size is Quantity.",config:{title:"X/Y Scatter - Category Y Axis",plugin:"X/Y Scatter",columns:["Profit","State",null,"Quantity"],group_by:["City"],aggregates:{State:"dominant"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Category Y Axis And Size And Color",description:"Colored Bubble plot. X is State. Y is product sub-category. Size is Sales. Color is Quantity.",config:{title:"X/Y Scatter - Category Y Axis And Size And Color",plugin:"X/Y Scatter",columns:["State","Sub-Category","Quantity","Sales",null],group_by:["State","Sub-Category"],aggregates:{State:"dominant","Sub-Category":"dominant",Profit:"low"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Label",description:"Labeled scatter plot. X is Sales. Y is Quantity. Each dot is labeled by Sub-Category.",config:{title:"X/Y Scatter - Label",plugin:"X/Y Scatter",group_by:["Sub-Category"],columns:["Sales","Quantity",null,null,null,"Sub-Category"],aggregates:{Sales:"avg",Quantity:"avg","Sub-Category":"dominant"}},viewport:{width:600,height:450}},{name:"X/Y Scatter - Label And Color",description:"Labeled colored scatter plot. X is Sales. Y is Quantity. Color is Profit. Each dot is labeled by State.",config:{title:"X/Y Scatter - Label And Color",plugin:"X/Y Scatter",group_by:["State"],columns:["Sales","Quantity","Profit",null,null,"State"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg",State:"dominant"},sort:[["Profit","desc"]]},viewport:{width:600,height:450}},{name:"X/Y Scatter - Label And Size",description:"Labeled bubble plot. X is Sales. Y is Quantity. Size is Profit. Each bubble is labeled by Sub-Category.",config:{title:"X/Y Scatter - Label And Size",plugin:"X/Y Scatter",group_by:["Sub-Category"],columns:["Sales","Quantity",null,"Profit",null,"Sub-Category"],aggregates:{Sales:"avg",Profit:"avg",Quantity:"avg","Sub-Category":"dominant"}},viewport:{width:600,height:450}},{name:"X/Y Line",description:"Line chart with 4 lines. X is Sales. Y is Profit. Each line represents a region.",config:{title:"X/Y Line",columns:["Sales","Profit"],plugin:"X/Y Line",aggregates:{"Order Date":"dominant",Sales:"avg",Profit:"avg"},group_by:["State"],sort:[["Profit","desc"],["Sales","desc"]],split_by:["Region"]}},{name:"Treemap",description:"Treemap with 1-level hierarchy and 17 tiles. Each tile is a product sub-category, and the tile's size represents sales",config:{title:"Treemap",plugin:"Treemap",group_by:["Sub-Category"],columns:["Sales"]}},{name:"Treemap - 2 Group By",description:"Treemap with 2-level hierarchies for Category and Sub-Category. Size is Sales.",config:{title:"Treemap - 2 Group By",plugin:"Treemap",group_by:["Category","Sub-Category","Segment"],columns:["Sales"]}},{name:"Treemap - Float Color",description:"Colored treemap with 2-level hierarchies for Category and Sub-Category. Size is Sales. Color is Quantity.",config:{title:"Treemap - Float Color",plugin:"Treemap",group_by:["Category","Sub-Category"],columns:["Sales","Quantity"],sort:[["Quantity","desc"]]}},{name:"Treemap - Category Color",description:"Treemap with 2-level hierarchies for Category and Sub-Category, with each Category colored differently. Size is Sales.",config:{title:"Treemap - Category Color",plugin:"Treemap",group_by:["Category","Sub-Category"],columns:["Sales","Category"],aggregates:{Category:"dominant"}}},{name:"Treemap - Row And Split By Float Color",description:"Colored treemap with 3-level hierarchies for Region, Category, and Sub-Category. Size is Sales. Color is Quantity.",config:{title:"Treemap - Row And Split By Float Color",plugin:"Treemap",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Quantity"],sort:[["Quantity","desc"]]},viewport:{width:800,height:600}},{name:"Treemap - Row And Split By Category Color",description:"Treemap with 3-level hierarchies for Region, Category, and Sub-Category, with each Region colored differently. Size is Sales.",config:{title:"Treemap - Row And Split By Category Color",plugin:"Treemap",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Region"],aggregates:{Region:"dominant"}},viewport:{width:800,height:600}},{name:"Treemap - Row And Split By Category Color 2",description:"Treemap with 3-level hierarchies for Region, Category, and Sub-Category, with each Category colored differently. Size is Sales.",config:{title:"Treemap - Row And Split By Category Color 2",plugin:"Treemap",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Category"],aggregates:{Category:"dominant"}},viewport:{width:800,height:600}},{name:"Treemap - Row And Split By Category Color 2",description:"Treemap with 3-level hierarchies for Region, Category, and Sub-Category, with each Category colored differently. Size is Sales.",config:{plugin:"Treemap",theme:null,title:"Treemap - Category Color 2",group_by:["State","City"],columns:["Sales","State",null],aggregates:{State:"dominant"}},viewport:{width:800,height:600}},{name:"Sunburst",description:"Sunburst with 1-level hierarchy. Hierarchy is Category. Size is Sales.",config:{title:"Sunburst",plugin:"Sunburst",group_by:["Sub-Category"],columns:["Sales"]}},{name:"Sunburst - 2 Group By",description:"Sunburst with 3-level hierarchy. Hierarchies are Category, Sub-category, and Customer Segment.",config:{title:"Sunburst - 2 Group By",plugin:"Sunburst",group_by:["Category","Sub-Category","Segment"],columns:["Sales"]}},{name:"Sunburst - Float Color",description:"Colored sunburst with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Quantity. Color is Sales.",config:{title:"Sunburst - Float Color",plugin:"Sunburst",group_by:["Category","Sub-Category"],columns:["Quantity","Sales"],sort:[["Quantity","desc"]]}},{name:"Sunburst - Category Color",description:"Colored sunburst with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Sales. Color is also Category.",config:{title:"Sunburst - Category Color",plugin:"Sunburst",group_by:["Category","Sub-Category"],columns:["Sales","Category"],aggregates:{Category:"dominant"}}},{name:"Sunburst - Row And Split By",description:"Grouped sunbursts with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Sales. Each sunburst is a different region.",config:{title:"Sunburst - Row And Split By",plugin:"Sunburst",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales"]},viewport:{width:600,height:450}},{name:"Sunburst - Row And Split By Float Color",description:"Grouped colored sunbursts with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Sales. Color is Quantity. Each sunburst is a different region.",config:{title:"Sunburst - Row And Split By Float Color",plugin:"Sunburst",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Quantity"]},viewport:{width:600,height:450}},{name:"Sunburst - Row And Split By Category Color",description:"Grouped sunbursts with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Sales. Each sunburst is a different region and color.",config:{title:"Sunburst - Row And Split By Category Color",plugin:"Sunburst",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Region"],aggregates:{Region:"dominant"}},viewport:{width:600,height:450}},{name:"Sunburst - Row And Split By Category Color 2",description:"Grouped sunbursts with 2-level hierarchy. Hierarchies are Category and Sub-category. Size is Sales. Each sunburst is a different region, and each category is colored.",config:{title:"Sunburst - Row And Split By Category Color 2",plugin:"Sunburst",group_by:["Category","Sub-Category"],split_by:["Region"],columns:["Sales","Category"],aggregates:{Category:"dominant"}},viewport:{width:600,height:450}},{name:"Heatmap",description:"Heatmap. Columns are Sub-Category. Rows are Region. Color is Profit.",config:{title:"Heatmap",plugin:"Heatmap",group_by:["Sub-Category"],split_by:["Region"],columns:["Profit"],sort:[["Profit","desc"],["Profit","col desc"]]}},{name:"Heatmap 2",description:"Heatmap. Columns are State. Rows are Sub-Category. Color is Profit.",config:{title:"Heatmap 2",plugin:"Heatmap",group_by:["State"],split_by:["Sub-Category"],columns:["Profit"],sort:[["Profit","desc"],["Profit","col desc"]]},viewport:{width:600,height:450}},{name:"Heatmap 3",description:"Heatmaps. Columns are order date, bucketed by month. Rows are Sub-Category. Color is Discount.",config:{title:"Heatmap 3",columns:["Discount"],plugin:"Heatmap",expressions:{"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},aggregates:{"Order Date":"dominant",Sales:"avg"},split_by:["Sub-Category"],group_by:[`bucket("Order Date", 'M')`],sort:[["Discount","col asc"]]},viewport:{width:600,height:450}},{name:"Heatmap 4",description:"Heatmap. Columns are order date, bucketed by month. Rows are Profit, bucketed by 100. Color is Profit.",config:{title:"Heatmap 4",plugin:"Heatmap",columns:["Profit"],expressions:{'bucket("Profit", 100)':'bucket("Profit", 100)',"bucket(\"Order Date\", 'M')":`bucket("Order Date", 'M')`},group_by:[`bucket("Order Date", 'M')`],split_by:['bucket("Profit", 100)']},viewport:{width:600,height:450}}];var $a=tn;var rn=$a.map((e,t)=>({id:`feature-${String(t).padStart(2,"0")}-${Pe(e.name)}`,title:e.name,description:e.description,source:ot,workspace:H({...e.config,theme:null})}));var at=[...Or,...Wr,...Hr,...Ur,...zr,...Yr,...en,...jr,...qr,...rn];function nn(e){return at.find(t=>t.id===e)}var jt="project",on=document.title,Ga=`<div class="projects">
<button
type="button"
class="projects__close"
aria-label="Close project gallery"
>\xD7</button>
<div class="projects__grid"></div>
<div class="projects__status" aria-live="polite"></div>
</div>`;function lt(){return new URLSearchParams(location.search).get(jt)}function ct(e,t){if(t==="none")return;document.title=e?`${e.title} \u2014 ${on}`:on;let i=new URL(location.href);e?i.searchParams.set(jt,e.id):i.searchParams.delete(jt),i.href!==location.href&&(t==="push"?history.pushState(null,"",i):history.replaceState(null,"",i))}function Va(e,t){let i={};for(let[r,n]of Object.entries(e.panels??{}))i[r]={...n,table:t};return{...e,panels:i}}function Xa(e){let t=e.description?` title="${R(e.description)}"`:"";return`<button
type="button"
class="projects__card"
data-project="${R(e.id)}"${t}
>
<img
class="projects__thumb"
loading="lazy"
decoding="async"
alt=""
src="${R(Wt(e.id,tt()))}"
/>
<span class="projects__title">${R(e.title)}</span>
</button>`}async function ja(e,t){let i=t.source,r=i.kind==="generated"||i.kind==="eval"?"perspective-server":i.engine,n=j().find(s=>s.engine===r&&s.label===i.name),o=n??await rt(i);await e.restoreWorkspace(Va(t.workspace,o.table)),n||se({id:oe(),engine:r,table:o.table,label:o.label,kind:i.kind})}function sn(e,t){let i=lt(),r=L(Ga),n=w(r,".projects__grid"),o=w(r,".projects__status"),s=L('<dialog class="modal modal--projects"></dialog>');e.appendChild(r),document.body.appendChild(s);let a=!1,l=!0,u=!1;function c(){let _=u||!l;e.dataset.stage=_?"viewer":"projects",r.hidden=a?!1:_}function d(){a||(a=!0,r.classList.add("projects--modal"),s.appendChild(r),c(),s.showModal())}function h(){a&&(a=!1,r.classList.remove("projects--modal"),e.appendChild(r),s.close(),c())}async function p(_,g="push"){let m=nn(_);if(!m){lt()!==null&&ct(null,"replace");return}let v=a;r.classList.add("projects--busy"),o.textContent=`Loading ${m.title}\u2026`,u=!0,h(),c();try{await ja(t,m),o.textContent="",ct(m,g)}catch(b){o.textContent=Y(b),v&&d()}finally{u=!1,r.classList.remove("projects--busy"),c()}}s.addEventListener("close",h),s.addEventListener("click",_=>{_.target===s&&s.close()}),w(r,".projects__close").addEventListener("click",()=>s.close()),n.addEventListener("click",_=>{let g=_.target.closest(".projects__card")?.dataset.project;g&&p(g)}),n.addEventListener("load",_=>{_.target.classList.add("projects__thumb--ready")},!0),n.addEventListener("error",_=>{let g=_.target;g.closest(".projects__card")?.classList.add("projects__card--untitled"),g.remove()},!0);let f=!1;return Je(_=>{l=_.length===0,l&&f&<()!==null&&ct(null,"replace"),f=f||!l,c()}),window.addEventListener("popstate",()=>{let _=lt();if(_){p(_,"replace");return}ct(null,"replace"),l||d()}),n.innerHTML=at.map(Xa).join(""),Le(_=>{for(let g of n.querySelectorAll(".projects__thumb")){let m=g.closest(".projects__card")?.dataset.project;m&&(g.src=Wt(m,_))}}),window.__loadProject=_=>p(_,"none"),window.__projectIds=()=>at.map(_=>_.id),l=j().length===0,c(),i&&p(i,"replace"),{openModal:d}}var qa=["arrow","csv","json","ndjson"],Ka=["parquet","arrow","csv","json"];function qt(e){return e==="duckdb-wasm"?Ka:qa}function Kt(e){return e==="duckdb-wasm"?".parquet,.arrow,.feather,.csv,.json,.ndjson":".arrow,.feather,.csv,.json,.ndjson"}function xe(e){switch(e.split("?")[0].split("#")[0].split(".").pop()?.toLowerCase()){case"parquet":return"parquet";case"arrow":case"feather":case"lz4":return"arrow";case"csv":return"csv";case"json":return"json";case"ndjson":case"jsonl":return"ndjson";default:return}}function W(e){let i=(e.split("?")[0].split("#")[0].split("/").filter(Boolean).pop()??"source").replace(/\.[^.]+$/,"").replace(/[^A-Za-z0-9_]/g,"_");return/^[A-Za-z_]/.test(i)?i:`t_${i}`}function an(e,t){let i=e.value;e.innerHTML=N(t),t.includes(i)&&(e.value=i)}var Za=`<div>
<label class="field">
<span class="field__label">URL</span>
<input
name="url"
type="url"
required
placeholder="https://example.com/data.arrow"
/>
<small class="field__hint">Must be readable cross-origin (CORS).</small>
</label>
<label class="field">
<span class="field__label">Format</span>
<select name="format">${N(["auto",...qt("perspective-server")])}</select>
</label>
<label class="field">
<span class="field__label">Table name</span>
<input name="name" type="text" placeholder="derived from the URL" />
</label>
</div>`;function ln(){let e=L(Za),t=w(e,"[name=url]"),i=w(e,"[name=format]"),r=w(e,"[name=name]");return t.addEventListener("input",()=>{r.value||(r.placeholder=W(t.value)||"derived from the URL")}),{render(n){n.replaceChildren(...e.children)},onEngineChange(n){an(i,["auto",...qt(n)])},async create(n){let o=t.value.trim(),s=i.value==="auto"?xe(o)??"arrow":i.value;return Ut({kind:"fetch",engine:n,url:o,format:s,name:r.value.trim()||W(o)})}}}var Qa=`<div>
<label class="field">
<span class="field__label">File</span>
<input name="file" type="file" required />
<small class="field__hint">
Read in the browser; never uploaded anywhere.
</small>
</label>
<label class="field">
<span class="field__label">Table name</span>
<input
name="name"
type="text"
placeholder="derived from the file name"
/>
</label>
</div>`;function cn(){let e=L(Qa),t=w(e,"[name=file]"),i=w(e,"[name=name]");return t.accept=Kt("perspective-server"),t.addEventListener("change",()=>{let r=t.files?.[0];r&&!i.value&&(i.placeholder=W(r.name))}),{render(r){r.replaceChildren(...e.children)},onEngineChange(r){t.accept=Kt(r)},async create(r){let n=t.files?.[0];if(!n)throw new Error("Choose a file first.");let o=i.value.trim()||W(n.name),s=xe(n.name)??"arrow";return Nr(r,n,o,s)}}}var Zt=Object.keys(O),Ja=`<div>
<label class="field">
<span class="field__label">Generator</span>
<select name="generator">${N(Zt.map(e=>O[e].label))}</select>
</label>
<p class="modal__note" data-role="description"></p>
<div data-role="params"></div>
<label class="field">
<span class="field__label">Table name</span>
<input
name="name"
type="text"
placeholder="derived from the generator"
/>
</label>
</div>`;function el(e,t){let i=[e.min!==void 0?`min="${e.min}"`:"",e.max!==void 0?`max="${e.max}"`:"",`step="${e.step??1}"`].join(" ");return`<label class="field">
<span class="field__label">${R(e.label)}</span>
<input
name="${R(e.key)}"
type="number"
required
value="${t}"
${i}
/>
${e.hint?`<small class="field__hint">${R(e.hint)}</small>`:""}
</label>`}function un(){let e=L(Ja),t=w(e,"[name=generator]"),i=w(e,"[data-role=description]"),r=w(e,"[data-role=params]"),n=w(e,"[name=name]");function o(){return Zt[t.selectedIndex]??Zt[0]}function s(){let a=O[o()];i.textContent=a.description,r.innerHTML=a.params.map(l=>el(l,Number(a.defaults[l.key]??0))).join(""),n.placeholder=o()}return t.addEventListener("change",s),s(),{render(a){a.replaceChildren(...e.children)},async create(a){let l=o(),u={};for(let c of r.querySelectorAll("input")){let d=Number(c.value);if(!Number.isFinite(d))throw new Error(`"${c.name}" must be a number.`);u[c.name]=d}return rt({kind:"generated",generator:l,name:n.value.trim()||l,params:u})}}}var dn="AWS4-HMAC-SHA256";function Qt(e){return encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)}function tl(e){return e===""||e==="/"?"/":e.split("/").map(Qt).join("/")}function il(e){return e.map(([t,i])=>[Qt(t),Qt(i)]).sort(([t,i],[r,n])=>t<r?-1:t>r?1:i<n?-1:i>n?1:0).map(([t,i])=>`${t}=${i}`).join("&")}function hn(e){return Array.from(new Uint8Array(e)).map(t=>t.toString(16).padStart(2,"0")).join("")}async function rl(e){let t=new TextEncoder().encode(e);return hn(await crypto.subtle.digest("SHA-256",t))}async function Ie(e,t){let i=e instanceof Uint8Array?new Uint8Array(e):e,r=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return crypto.subtle.sign("HMAC",r,new TextEncoder().encode(t))}async function nl(e,t,i,r){let n=new TextEncoder().encode(`AWS4${e}`),o=await Ie(n,t),s=await Ie(o,i),a=await Ie(s,r);return Ie(a,"aws4_request")}function ol(e){let t=e.toISOString().replace(/[-:]/g,"").replace(/\.\d{3}/,"");return{long:t,short:t.slice(0,8)}}function Jt(){return typeof crypto<"u"&&!!crypto.subtle}async function ei(e,t){if(!Jt())throw new Error("WebCrypto is unavailable \u2014 S3 request signing requires a secure context (https:, or localhost during development).");let i="s3",r=e.expires??900,{long:n,short:o}=ol(new Date),s=`${o}/${e.region}/${i}/aws4_request`,a=[];e.url.searchParams.forEach((f,_)=>a.push([_,f])),a.push(["X-Amz-Algorithm",dn],["X-Amz-Credential",`${t.accessKeyId}/${s}`],["X-Amz-Date",n],["X-Amz-Expires",String(r)],["X-Amz-SignedHeaders","host"]),t.sessionToken&&a.push(["X-Amz-Security-Token",t.sessionToken]);let l=il(a),u=e.url.host,c=[e.method,tl(e.url.pathname),l,`host:${u}
`,"host","UNSIGNED-PAYLOAD"].join(`
`),d=[dn,n,s,await rl(c)].join(`
`),h=await nl(t.secretAccessKey,o,e.region,i),p=hn(await Ie(h,d));return`${e.url.origin}${e.url.pathname}?${l}&X-Amz-Signature=${p}`}function ii(e){if(!e)return;let t;try{t=new URL(e)}catch{throw new Error(`Endpoint is not a valid URL: ${e}`)}if(t.protocol==="http:"&&location.protocol==="https:")throw new Error(`This page is served over HTTPS, so the browser blocks requests to the plain-HTTP endpoint ${t.origin} as mixed content. The endpoint needs TLS, or a TLS-terminating proxy.`)}function mn(e){return e?"path":"virtual-hosted"}function sl(e){return e.endpoint?new URL(e.endpoint).origin:`https://s3.${e.region}.amazonaws.com`}function gn(e,t){let i=t?`/${t}`:"";return e.style==="virtual-hosted"&&!e.endpoint?new URL(`https://${e.bucket}.s3.${e.region}.amazonaws.com${i}`):new URL(`${sl(e)}/${e.bucket}${i}`)}function _n(e,t,i){return ei({method:"GET",url:gn(e,t),region:e.region,expires:i},e.credentials)}async function al(e){let t=await fetch(e),i=await t.text(),r=new DOMParser().parseFromString(i,"text/xml");if(!t.ok){let n=q(r,"Message")??t.statusText;throw new Error(`S3 error ${t.status}: ${n}`)}return r}function q(e,t){return e.getElementsByTagName(t)[0]?.textContent??void 0}function pn(e,t){return Array.from(e.getElementsByTagName(t))}function ll(e){let t=pn(e,"CommonPrefixes").map(r=>q(r,"Prefix")).filter(r=>!!r),i=pn(e,"Contents").map(r=>({key:q(r,"Key")??"",size:Number(q(r,"Size")??0),lastModified:q(r,"LastModified")??""}));return{prefixes:t,objects:i}}var ti=new WeakMap;async function ri(e,t){ii(e.endpoint);let i=ti.get(e)??2;try{let r=await fn(e,t,i);return ti.set(e,i),r}catch(r){if(i===2)return ti.set(e,1),fn(e,t,1);throw r}}async function fn(e,t,i){let r={prefixes:[],objects:[]},n;do{let o=gn(e,"");o.searchParams.set("delimiter","/"),o.searchParams.set("max-keys","1000"),t&&o.searchParams.set("prefix",t),i===2?(o.searchParams.set("list-type","2"),n&&o.searchParams.set("continuation-token",n)):n&&o.searchParams.set("marker",n);let s=await al(await ei({method:"GET",url:o,region:e.region},e.credentials)),a=ll(s);r.prefixes.push(...a.prefixes),r.objects.push(...a.objects),q(s,"IsTruncated")==="true"?i===2?n=q(s,"NextContinuationToken"):n=q(s,"NextMarker")??a.objects[a.objects.length-1]?.key:n=void 0}while(n);return r}var yn={AWS:{endpoint:"",region:"us-east-1",style:"virtual-hosted"},"Cloudflare R2":{endpoint:"",region:"auto",style:"path"},"Backblaze B2":{endpoint:"",region:"us-west-004",style:"path"},"MinIO / other S3-compatible":{endpoint:"http://localhost:9000",region:"us-east-1",style:"path"}},bn=100,cl=`<div>
<label class="field">
<span class="field__label">Provider</span>
<select name="provider">${N(Object.keys(yn))}</select>
</label>
<label class="field">
<span class="field__label">Endpoint</span>
<input name="endpoint" type="text" placeholder="blank for AWS" />
<small class="field__hint">Blank for AWS.</small>
</label>
<label class="field">
<span class="field__label">Region</span>
<input name="region" type="text" required placeholder="us-east-1" />
<small class="field__hint">R2 uses the literal \`auto\`.</small>
</label>
<label class="field">
<span class="field__label">URL style</span>
<select name="style">${N(["path","virtual-hosted"])}</select>
</label>
<label class="field">
<span class="field__label">Bucket</span>
<input name="bucket" type="text" required />
</label>
<label class="field">
<span class="field__label">Access key ID</span>
<input name="keyId" type="text" required />
</label>
<label class="field">
<span class="field__label">Secret access key</span>
<input name="secret" type="password" required />
</label>
<label class="field">
<span class="field__label">Session token</span>
<input
name="token"
type="password"
placeholder="temporary credentials only"
/>
</label>
<button type="button" class="btn" data-role="connect">Connect</button>
<div class="s3__status" aria-live="polite"></div>
<div class="s3__browser" hidden></div>
<label class="field">
<span class="field__label">Table name</span>
<input name="name" type="text" placeholder="derived from the key" />
</label>
</div>`;function ul(e){let t=["B","KB","MB","GB","TB"],i=e,r=0;for(;i>=1024&&r<t.length-1;)i/=1024,r++;return`${i.toFixed(r===0?0:1)} ${t[r]}`}function dl(e,t){let i="",r=t.split("/").filter(Boolean).map(n=>(i+=`${n}/`,`<button type="button" class="s3__crumb"
data-browse="${R(i)}">${R(n)}</button>`));return`<div class="s3__crumbs">
<button type="button" class="s3__crumb" data-browse=""
>${R(e||"/")}</button>
${r.join("")}
</div>`}function hl(e,t,i){let r=e?`<li><button
type="button"
class="s3__entry s3__entry--prefix"
data-select-prefix
>Use this whole prefix (${R(e)})</button></li>`:"",n=t.map(s=>`<li><button
type="button"
class="s3__entry s3__entry--folder"
data-browse="${R(s)}"
>${R(s.slice(e.length).replace(/\/$/,""))}</button></li>`),o=i.map(s=>`<li><button
type="button"
class="s3__entry s3__entry--object"
data-key="${R(s.key)}"
>${R(s.key.slice(e.length))} (${ul(s.size)})</button></li>`);return`<ul class="s3__list">${r}${n.join("")}${o.join("")}</ul>`}function vn(){let e=L(cl),t=w(e,"[name=provider]"),i=w(e,"[name=endpoint]"),r=w(e,"[name=region]"),n=w(e,"[name=style]"),o=w(e,"[name=bucket]"),s=w(e,"[name=keyId]"),a=w(e,"[name=secret]"),l=w(e,"[name=token]"),u=w(e,"[name=name]"),c=w(e,".s3__status"),d=w(e,".s3__browser"),h,p="",f;function _(){let b=yn[t.value];b&&(i.value=b.endpoint,r.value=b.region,n.value=b.style,t.value.startsWith("MinIO")&&location.hostname==="localhost"&&(s.value||="perspective",a.value||="perspective",o.value||="perspective"))}function g(){let b=i.value.trim()||void 0;return ii(b),{endpoint:b,region:r.value.trim(),bucket:o.value.trim(),style:n.value,credentials:{accessKeyId:s.value.trim(),secretAccessKey:a.value,sessionToken:l.value.trim()||void 0}}}async function m(b){if(h){p=b,c.textContent=`Listing ${p||"/"}\u2026`;try{let y=await ri(h,p);d.hidden=!1,d.innerHTML=dl(o.value.trim(),p)+hl(p,y.prefixes,y.objects),c.textContent=""}catch(y){c.textContent=Y(y)}}}async function v(){if(!h)return;c.textContent="Enumerating prefix\u2026",f={keys:(await ri(h,p)).objects.map(y=>y.key),label:W(p)},c.textContent=`Selected ${f.keys.length} object(s) under ${p}.`}return t.addEventListener("change",_),i.addEventListener("input",()=>{n.value=mn(i.value.trim()||void 0)}),d.addEventListener("click",b=>{let y=b.target.closest("button");y&&(y.dataset.browse!==void 0?m(y.dataset.browse):y.dataset.selectPrefix!==void 0?v():y.dataset.key&&(f={keys:[y.dataset.key],label:W(y.dataset.key)},c.textContent=`Selected ${y.dataset.key}.`))}),w(e,"[data-role=connect]").addEventListener("click",async()=>{if(!Jt()){c.textContent="WebCrypto is unavailable \u2014 signing requires a secure context (https:, or localhost).";return}try{h=g()}catch(b){c.textContent=Y(b);return}await m("")}),_(),{render(b){b.replaceChildren(...e.children)},async create(b){if(!h)throw new Error("Connect first, then choose an object.");if(!f||f.keys.length===0)throw new Error("Choose an object or a prefix.");let y=u.value.trim()||f.label;if(f.keys.length>bn)throw new Error(`${f.keys.length} objects exceeds the ${bn}-object presigned-list cap. Narrow the prefix, or use a DuckDB \`CREATE SECRET\` glob.`);let A=await Promise.all(f.keys.map(x=>_n(h,x))),T=xe(f.keys[0])??"parquet";return zt(b,A,y,T)}}}var pl={fetch:"Fetch",file:"File",s3:"S3",generated:"Generated"},fl={generated:"perspective-server"},ml=`<dialog id="source_modal" class="modal">
<form method="dialog">
<h2>Create Data Source</h2>
<div class="modal__selects">
<label class="field">
<span class="field__label">Source</span>
<select name="kind">${N(pl)}</select>
</label>
<label class="field">
<span class="field__label">Engine</span>
<select name="engine">${N(Ze)}</select>
</label>
</div>
<div class="modal__body"></div>
<div class="modal__status" aria-live="polite"></div>
<div class="modal__actions">
<button type="button" class="btn" data-role="cancel">
Cancel
</button>
<button type="submit" class="btn btn--primary">Create</button>
</div>
</form>
</dialog>`;function xn(e,t){let i=L(ml),r=w(i,"[name=kind]"),n=w(i,"[name=engine]"),o=w(i,".modal__body"),s=w(i,"[data-role=cancel]"),a={fetch:ln(),file:cn(),s3:vn(),generated:un()},l={};for(let d of Object.keys(a)){let h=L('<fieldset class="modal__fieldset"></fieldset>');a[d].render(h),l[d]=h,o.appendChild(h)}function u(){let d=r.value;for(let p of Object.keys(l)){let f=p===d;l[p].hidden=!f,l[p].disabled=!f}let h=fl[d];n.disabled=h!==void 0,h&&(n.value=h)}async function c(d,h){try{await(await Qe(d)).drop(h.replace(/^memory\./,""))}catch{return}}Ke(i,{trigger:t,pending:"Connecting\u2026",busy(d){s.disabled=d,r.disabled=d,n.disabled=d},async submit(d){let h=r.value,p=n.value,f;try{f=await a[h].create(p),d.textContent="Creating panel\u2026",await e.addPanel({table:f.table,title:f.label,...f.panel??{}}),se({id:oe(),engine:p,table:f.table,label:f.label,kind:h})}catch(_){throw f&&await c(p,f.table),_}}}),r.addEventListener("change",u),n.addEventListener("change",()=>{for(let d of Object.values(a))d.onEngineChange?.(n.value)}),u()}var gl=1e3;function _l(e){return e==null?"NULL":String(e)}function bl(e,t){let i=e.schema.fields,r=i.map(o=>`<th>${R(o.name)}</th>`).join(""),n=e.slice(0,t).toArray().map(o=>{let s=o.toJSON();return`<tr>${i.map(l=>`<td>${R(_l(s[l.name]))}</td>`).join("")}</tr>`}).join("");return`<div class="sqldrawer__grid">
<table>
<thead><tr>${r}</tr></thead>
<tbody>${n}</tbody>
</table>
</div>`}function yl(e,t){let i=L(`<div class="sqldrawer__entry">
${t?'<div class="sqldrawer__query"></div>':""}
</div>`);t&&(w(i,".sqldrawer__query").textContent=t),e.appendChild(i);function r(n,o){let s=L(`<div class="${n}"></div>`);return s.textContent=o,i.appendChild(s),s}return{ok(n){r("sqldrawer__ok",n)},error(n){r("sqldrawer__error",n)},pending(n){let o=r("sqldrawer__ok",n);return()=>o.remove()},preview(n){let o=n.numRows,s=Math.min(o,gl);i.appendChild(L(bl(n,s))),o>s&&r("sqldrawer__ok",`\u2026 ${(o-s).toLocaleString()} more rows not shown \u2014 open as a panel to explore all of them.`)},action(n,o,s){let a=L(`<div class="sqldrawer__actions">
${n?`<span class="sqldrawer__ok">${R(n)}</span>`:""}
<button type="button" class="btn">${R(o)}</button>
</div>`),l=w(a,"button");l.addEventListener("click",async()=>{l.disabled=!0;try{l.textContent=await s()}catch(u){l.disabled=!1,r("sqldrawer__error",Y(u))}}),i.appendChild(a)}}}function wn(e){return{entry:t=>yl(e,t),scrollToEnd(){e.scrollTop=e.scrollHeight}}}var En="perspective-sql-open",Cn="perspective-sql-height",Tn="perspective-sql-history",Sn=120,vl=280,xl=100,wl=`<section class="sqldrawer">
<div
class="sqldrawer__splitter"
role="separator"
aria-orientation="horizontal"
tabindex="0"
></div>
<div class="sqldrawer__header">
<span>DuckDB SQL</span>
<button
type="button"
class="sqldrawer__close"
aria-label="Close SQL panel"
>\xD7</button>
</div>
<div class="sqldrawer__scrollback" aria-live="polite"></div>
<form class="sqldrawer__input">
<label class="sqldrawer__editor" data-value="">
<textarea
rows="1"
spellcheck="false"
aria-label="SQL query"
placeholder="SELECT \u2026 \u2014 \u2318\u23CE to run"
></textarea>
</label>
<button type="submit" class="btn btn--primary">Run</button>
</form>
</section>`;function El(){let e;return async()=>{let t=await be();return e??=await t.db.connect(),{duck:t,conn:e}}}function ut(e){e.parentElement.dataset.value=e.value}function Cl(){let e=qe(Tn);return Array.isArray(e)?e:[]}function Sl(e){let t=Cl(),i=t.length,r="";return e.addEventListener("keydown",n=>{let o=e.selectionStart===0&&e.selectionEnd===0;n.key==="ArrowUp"&&o&&i>0?(i===t.length&&(r=e.value),i-=1,e.value=t[i],ut(e),n.preventDefault()):n.key==="ArrowDown"&&e.selectionStart===e.value.length&&i<t.length&&(i+=1,e.value=i===t.length?r:t[i],ut(e),n.preventDefault())}),n=>{t=[...t.filter(o=>o!==n),n].slice(-xl),localStorage.setItem(Tn,JSON.stringify(t)),i=t.length,r=""}}function Al(e,t){function i(){return Number(localStorage.getItem(Cn)??vl)}function r(n){let o=Math.max(Sn,e.clientHeight*.6),s=Math.min(Math.max(n,Sn),o);e.style.setProperty("--sql-height",`${s}px`),localStorage.setItem(Cn,String(s))}it(t,{toPx:n=>e.getBoundingClientRect().bottom-n.clientY,current:i,growKey:"ArrowUp",shrinkKey:"ArrowDown",apply:r}),r(i())}function Tl(e){return e.replace(/[\s;]+$/g,"")}function Rl(){let e=j().map(t=>/^memory\.sql_result_(\d+)$/.exec(t.table)?.[1]).filter(t=>!!t).map(Number);return e.length?Math.max(...e)+1:1}async function An(e){try{return new Set(await e.get_hosted_table_names())}catch{return new Set}}function kl(e,t){let i=new Set(j().map(r=>r.table));return[...t].filter(r=>!e.has(r)&&!i.has(r)&&r.startsWith("memory.")&&!/^memory\.(sql_result_|__sql_preview)/.test(r))}function Ml(e,t,i){async function r(o){let{duck:s,conn:a}=await i(),l=`sql_result_${Rl()}`;await a.query(`CREATE OR REPLACE TABLE memory.main."${l}" AS (
${Tl(o)}
)`);let u=s.qualify(l);return await e.addPanel({table:u,title:l}),se({id:oe(),engine:"duckdb-wasm",table:u,label:l,kind:"sql"}),`Opened as "${l}"`}async function n(o){let s=o.replace(/^memory\./,"");return await e.addPanel({table:o,title:s}),se({id:oe(),engine:"duckdb-wasm",table:o,label:s,kind:"sql"}),"Registered"}return async function(s){let a=t.entry(s),l=a.pending("Running\u2026");try{let{duck:u,conn:c}=await i(),d=await An(u.client()),h=performance.now(),p=await c.query(s),f=Math.round(performance.now()-h);l(),p.numRows>0?(a.ok(`${p.numRows.toLocaleString()} row(s) in ${f}ms`),a.preview(p),a.action("","Open as panel",()=>r(s))):a.ok(`OK in ${f}ms`);let _=await An(u.client());for(let g of kl(d,_))a.action(`Created ${g} \u2014 `,"Register as source",()=>n(g));return!0}catch(u){return l(),a.error(Y(u)),!1}finally{t.scrollToEnd()}}}function Rn(e,t){let i=L(wl),r=w(i,"textarea"),n=w(i,"form"),o=w(i,"button[type=submit]");e.appendChild(i);let s=wn(w(i,".sqldrawer__scrollback")),a=El(),l=Sl(r),u=Ml(t,s,a);Al(e,w(i,".sqldrawer__splitter"));let c=!1;async function d(p){if(!(c||!p.trim())){c=!0,o.disabled=!0;try{await u(p)&&(l(p),r.value="",ut(r))}finally{c=!1,o.disabled=!1}}}function h(p){e.dataset.sql=p?"open":"closed",localStorage.setItem(En,String(p)),p&&(a().catch(f=>{s.entry("").error(`DuckDB engine failed to start: ${Y(f)}`)}),r.focus())}return n.addEventListener("submit",p=>{p.preventDefault(),d(r.value)}),r.addEventListener("input",()=>ut(r)),r.addEventListener("keydown",p=>{(p.metaKey||p.ctrlKey)&&p.key==="Enter"&&(p.preventDefault(),d(r.value))}),w(i,".sqldrawer__close").addEventListener("click",()=>h(!1)),localStorage.getItem(En)==="true"?h(!0):e.dataset.sql="closed",{toggle(){h(e.dataset.sql!=="open")}}}var ni=document.getElementById("app"),ce=document.getElementById("viewer");mr(ce);wr(ce);var Ll=Rn(ni,ce),{createSource:Dl,browseProjects:Pl,configureAgent:Il}=Sr(ni,ce,{openSql:()=>Ll.toggle()}),Fl=sn(ni,ce);Pl.addEventListener("click",()=>Fl.openModal());xn(ce,Dl);ur(ce,Il);
//# sourceMappingURL=index.js.map