From 1f115d390e23352838d8a1ab054e86ec6c962043 Mon Sep 17 00:00:00 2001 From: "@zuopngfei" Date: Fri, 18 Jul 2025 17:20:48 +0800 Subject: [PATCH] dsdsd --- app.json | 2 + assets/images/diagnosticResults/bg.png | Bin 122607 -> 0 bytes assets/images/diagnosticResults/icon_1.png | Bin 2230 -> 0 bytes assets/images/diagnosticResults/icon_2.png | Bin 2980 -> 0 bytes assets/images/diagnosticResults/icon_3.png | Bin 2430 -> 0 bytes assets/images/diagnosticResults/icon_4.png | Bin 1548 -> 0 bytes assets/images/diagnosticResults/img1.png | Bin 89533 -> 0 bytes miniprogram_npm/@antv/g2/index.js | 30284 ------------------- miniprogram_npm/@antv/g2/index.js.map | 1 - miniprogram_npm/crypto-js/index.js | 7365 ----- miniprogram_npm/crypto-js/index.js.map | 1 - pages/AddTherapeuticRegimen/index.json | 1 - pages/clockIn/index.json | 3 +- pages/emergency/index.json | 2 - pages/home/index.wxml | 2 +- pages/medicationRecord/index.json | 1 - 16 files changed, 4 insertions(+), 37658 deletions(-) delete mode 100644 assets/images/diagnosticResults/bg.png delete mode 100644 assets/images/diagnosticResults/icon_1.png delete mode 100644 assets/images/diagnosticResults/icon_2.png delete mode 100644 assets/images/diagnosticResults/icon_3.png delete mode 100644 assets/images/diagnosticResults/icon_4.png delete mode 100644 assets/images/diagnosticResults/img1.png delete mode 100644 miniprogram_npm/@antv/g2/index.js delete mode 100644 miniprogram_npm/@antv/g2/index.js.map delete mode 100644 miniprogram_npm/crypto-js/index.js delete mode 100644 miniprogram_npm/crypto-js/index.js.map diff --git a/app.json b/app.json index 8f6d1e0..273987a 100644 --- a/app.json +++ b/app.json @@ -1,8 +1,10 @@ { "pages": ["pages/home/index", "pages/message/index", "pages/my/index"], + "lazyCodeLoading": "requiredComponents", "usingComponents": { "t-toast": "tdesign-miniprogram/toast/toast" }, + "subpackages": [ { diff --git a/assets/images/diagnosticResults/bg.png b/assets/images/diagnosticResults/bg.png deleted file mode 100644 index 36f0e93d4029db7bae5626aed61d4812f95aab1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122607 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%0AiM#eyui*^jplaG4R|k)klxe`gL- zH%ODAOOBKiRNIISq@|^WqV0k~bWqi%Gb|DK5@N#e;X%W%BCvshn8^3)pZ`JGP^fu0 z-DE|?+aj8Iq-b{NT^BPcJ*;QQ$@;A>@6PPmV_}gjlv!9bbGxR8-@FwrdgNG5Jv}KN zSkSKnDJdyIIB@@hamx*M(OcL9tNqR+Sw$4?4o(X@`d!B2eH~9E(bK?xQ{)ilVIeHc zJe!5Vzt8t5OqS85`-R2Bn7#hm6Hvgn^lPIszlKCbMZKjne#m3B?CwZgRNJy_VKXzC zlyFC9SWJ^6A+)<5$#>xAY#|Y zb^vud7RGPYG)S2A%;{Hua*4SG?G3rSzdZAg8Eu`f$DeO3T3lYaj>|r5nEF}O%cwr;69l@yvDs{&`CG%E z1G6>3d$=^zH#yN+yNW|2ueWch{Fet!os1`p_c!VYKCzz}$`W7E6)o|hsjb_nEt>o(S^Eo|UXmR$N)Am;UYF0zb+qlfs z2OBb=7SHGnV?6-5f%-MOG(yPC%#0=+pNH`PYVJcZUFR$|Hg+eRQ2(94qSF)3eftjO zE{z4;2HheRhGidqQ4-qi+=6-Bo*Go0Je1A8v2^*AQA}t?UrH140Wue$6OpjtK}Re~ ztsa7OsNmp6j8%e6At$06ukTKG+^XnEom+Gx^GVX<+ayVNth#Q&jMkg0Lc06%P-zl% zLbS+E=-dwD@sJq1`8YtO6Go~t@sOjEdK%B;0Yrpr^UlG?Mkj7=x;HA&(@DVE=USIk zdvRUDxyug8Y;KV)rvDIMkQA#)lHx`8P!j$Oiy)q%)nSd_;y%_cm0B+nY9R%4~0Me+}|GFrXel(IeTZvwL3Ak&v%3@F(b@I`6G| zBMBS%J`NyNDiI0VJ{r436Yz1~<#M^m6f(}|!KKycH}S7QDIDDbnHSJ$_q^K%oVOmx z)WO*bz(c49SNXt1ppP-6guZ3rh#gV+6eQ&(9ppkRN`FZ0!29SM;*HkuAry=hoDcaK w=oDEGU<-1)W3+iwV^a~BiojF^{=XvdU%$0Qq-qVmRsaA107*qoM6N<$f{k~P3IG5A diff --git a/assets/images/diagnosticResults/icon_4.png b/assets/images/diagnosticResults/icon_4.png deleted file mode 100644 index 71870957fa93355a389c57a39c69a221c703c2db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 zcmV+n2J`ueP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHc1c7*RA>e5m`#inMHI(-XBQXw zTm(f{f&mdlBPbCJDgnhPN{AusK@;Q27)?BI@$6X-8l#?!a3E3RQ4bnLNlcWGh!I^u zmJdHLe2T1~D7Z5Iem&hY%}jSs&#WXHGymj2Rb5^6>b+O5UR6&JbkOlY#{(S?bUe`U zK*t0BUk}X0v?t*Q@HBiKj(N;L!>8e=@E=&NV;|3B4ka{N3*Uu*!+NEY&r5kfrmz8R zhG0_3au3hf23_TqL8*KzOuT>fztp~a6vEIkcn!V)rz@um_VbIv!Ci13^*(q7{0{pr z*eM8>!C|-)MorY(#Apmq`KO#$#c$wuWzZcgq?`tgsTfYuL)+nSk;2wB{5}rgB<|XiO+^=YvToE^i*Zw-QUNn-1~}#+IL}HeXvF~c;!AJ~KCf;%L!n*#m>7#9E0D7T-rb74 zq6WBE--8a3hwm|DKRinPIOT7Yz4RGRnFf_t&Skvx0Q7Wo3~;Zj+lM~np@_3yLBKN#F>9>G zTS=Ti(J!D1r@`I>=u+MFX`Q0BbCmCpT%!$kgvb7z?%^w!s~MKZ9p+*{J+7qfL8u|F zfT1)@8SioxA6Gvpq0zIg&I)3YGs0dM%v-8_lLM z1Bt$|n2es4=8NMYy=(P||26%6L#sj!;;As9P(#1^28}*d@xHGPK<`SqC}O}Lv4n5& zZMz3oEF-VsBMm%gTg;2Hm0%eecuonEliuAqkNpj+>}$1f3jkXQMCXbf~m+` zfj1a2mmFQbKj`kd3ZWkTddt&gAGL|JnKjx$oPKwpd>o@@p?h$Q*)F=GXpek9YmThh zO<&=jy#--QqJVMI&zMlJ36)>hB$$k8L+=b@J*f1ot66`&C=DXmY~j~e8qU+W6$Q-ap$ci8qBc+BMX>&Z$ay0JJP*vq{w>ph zECX~_2$e~~m|Gkwp02!oJ;+?GG&stYb6?G&?l*H9&ez7PLj8hOhh!NrL=R8)-XjQV z^`k}aac2q*@f04%v!T%!(mPah7&j62P$sf#+*~QM3^3hqflqi8{&T?wF5^LU+Xwx8H4mgBZ#B(s z-@pOZug8npcw|lw<)+FSRihW5U2OdALD@sh8^TGr7AB&Jr#j@VK-~3VDsMusH-YhO zYE68Q+uSx(T<4(t$eBvcSC*IBHSjAR@=(M8$IpkG;0hlE-+$+>3rfASskgc+=BHyQ z?RlW`bt&d;Ui5L diff --git a/assets/images/diagnosticResults/img1.png b/assets/images/diagnosticResults/img1.png deleted file mode 100644 index 954a984a4a2d806b5b722a90c335f405e4a00bd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89533 zcmXtebzBr*)c!8rEU;-;zgaxDG2ulX9G9w-U>!hs1u-27NOd1p3Rw= z7H%~a-#hu*;w}pqFV_?<2fHYwGe3_XOx=K zlqJgYQ#5=5Y-q2rtTAS)3-nLV-!u5R^96tMRbk5E{hhX)gB0!@&#(G2`vNLoY!+tx z(3)S{TaiwNfW~F#Kr!IM-DftmY4>+V0NsDG42Lv&WFD2?HJ5|>c;%IF^yNFDixypA z^Zc~!(23LQg0@Kf&EPY?*id_i#`b!9$jR!8SVGI?jWM#S?1Lb z^&tu~H9(nw2&ef7^A2B$%ONConepQQ0GdW5kww#pE-@gOekCh$N1btHN6%Czxp%L` zh(gBL)(GE09XHj-CMF=FmMEW3#kE;Ex8G%r*5T#4G%oz*h_8TquFGCJt{(mJJZV

(!Mbg4%bnw~Y*-x-l*nyRW{B(!*R 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
WE~;smW!K%p-(WdzuSM0Y@Est&ZtA z;tGg_-Hdz?an9K$sH62j@cZ%~db?xu9Pc^jX@dZ4Es z|4{$AXC8&A8WJ-?Fi6c6q{4Bzoe^YLgvdTyYEBrgmZDT1hNE`uB6%Q>sTpiWgmMa~ zhy#xHf2$+^=AKv)@`o3WeQ0u&lf2eWnaX+4n6wdOh>;Wm~hUnaT zpNI}arM#v6TOh>zt+$H#d+$jBh!!K_;3Dfu=(bX4oCQEm=No|u?zJmlBUj77%yUP1 z@S#eFeov|nhzy3{dYirEl1eau4F@$9J$)EgW@54_}U+cM7A_@36(BF35I0JL`hz!-fSwIy{OnQmO|&2I�eDO6@K`I0X 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 Hu0mjfpOw~# diff --git a/miniprogram_npm/@antv/g2/index.js b/miniprogram_npm/@antv/g2/index.js deleted file mode 100644 index 0793740..0000000 --- a/miniprogram_npm/@antv/g2/index.js +++ /dev/null @@ -1,30284 +0,0 @@ -module.exports = (function() { -var __MODS__ = {}; -var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; }; -var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; }; -var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } }; -var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; }; -__DEFINE__(1751263815802, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Chart = exports.stdlib = exports.geolib = exports.graphlib = exports.plotlib = exports.corelib = exports.litelib = void 0; -const lib_1 = require("./lib"); -Object.defineProperty(exports, "litelib", { enumerable: true, get: function () { return lib_1.litelib; } }); -Object.defineProperty(exports, "corelib", { enumerable: true, get: function () { return lib_1.corelib; } }); -Object.defineProperty(exports, "plotlib", { enumerable: true, get: function () { return lib_1.plotlib; } }); -Object.defineProperty(exports, "graphlib", { enumerable: true, get: function () { return lib_1.graphlib; } }); -Object.defineProperty(exports, "geolib", { enumerable: true, get: function () { return lib_1.geolib; } }); -Object.defineProperty(exports, "stdlib", { enumerable: true, get: function () { return lib_1.stdlib; } }); -const api_1 = require("./api"); -__exportStar(require("./exports"), exports); -/** - * G2 standard library initial all the libs except 3D and auto. - */ -const library = Object.assign({}, (0, lib_1.stdlib)()); -exports.Chart = (0, api_1.extend)(api_1.Runtime, library); -//# sourceMappingURL=index.js.map -}, function(modId) {var map = {"./lib":1751263815803,"./api":1751263816191,"./exports":1751263816203}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815803, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.litelib = exports.stdlib = exports.plotlib = exports.graphlib = exports.geolib = exports.corelib = void 0; -var core_1 = require("./core"); -Object.defineProperty(exports, "corelib", { enumerable: true, get: function () { return core_1.corelib; } }); -var geo_1 = require("./geo"); -Object.defineProperty(exports, "geolib", { enumerable: true, get: function () { return geo_1.geolib; } }); -var graph_1 = require("./graph"); -Object.defineProperty(exports, "graphlib", { enumerable: true, get: function () { return graph_1.graphlib; } }); -var plot_1 = require("./plot"); -Object.defineProperty(exports, "plotlib", { enumerable: true, get: function () { return plot_1.plotlib; } }); -var std_1 = require("./std"); -Object.defineProperty(exports, "stdlib", { enumerable: true, get: function () { return std_1.stdlib; } }); -var lite_1 = require("./lite"); -Object.defineProperty(exports, "litelib", { enumerable: true, get: function () { return lite_1.litelib; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./core":1751263815804,"./geo":1751263816186,"./graph":1751263816187,"./plot":1751263816188,"./std":1751263816189,"./lite":1751263816190}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815804, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.corelib = void 0; -const coordinate_1 = require("../coordinate"); -const encode_1 = require("../encode"); -const mark_1 = require("../mark"); -const palette_1 = require("../palette"); -const scale_1 = require("../scale"); -const theme_1 = require("../theme"); -const component_1 = require("../component"); -const animation_1 = require("../animation"); -const interaction_1 = require("../interaction"); -const composition_1 = require("../composition"); -const transform_1 = require("../transform"); -const data_1 = require("../data"); -const label_transform_1 = require("../label-transform"); -function corelib() { - return { - 'data.fetch': data_1.Fetch, - 'data.inline': data_1.Inline, - 'data.sortBy': data_1.SortBy, - 'data.sort': data_1.Sort, - 'data.filter': data_1.Filter, - 'data.pick': data_1.Pick, - 'data.rename': data_1.Rename, - 'data.fold': data_1.Fold, - 'data.slice': data_1.Slice, - 'data.custom': data_1.Custom, - 'data.map': data_1.Map, - 'data.join': data_1.Join, - 'data.kde': data_1.KDE, - 'data.log': data_1.Log, - 'data.wordCloud': data_1.WordCloud, - 'data.ema': data_1.EMA, - 'transform.stackY': transform_1.StackY, - 'transform.binX': transform_1.BinX, - 'transform.bin': transform_1.Bin, - 'transform.dodgeX': transform_1.DodgeX, - 'transform.jitter': transform_1.Jitter, - 'transform.jitterX': transform_1.JitterX, - 'transform.jitterY': transform_1.JitterY, - 'transform.symmetryY': transform_1.SymmetryY, - 'transform.diffY': transform_1.DiffY, - 'transform.stackEnter': transform_1.StackEnter, - 'transform.normalizeY': transform_1.NormalizeY, - 'transform.select': transform_1.Select, - 'transform.selectX': transform_1.SelectX, - 'transform.selectY': transform_1.SelectY, - 'transform.groupX': transform_1.GroupX, - 'transform.groupY': transform_1.GroupY, - 'transform.groupColor': transform_1.GroupColor, - 'transform.group': transform_1.Group, - 'transform.sortX': transform_1.SortX, - 'transform.sortY': transform_1.SortY, - 'transform.sortColor': transform_1.SortColor, - 'transform.flexX': transform_1.FlexX, - 'transform.pack': transform_1.Pack, - 'transform.sample': transform_1.Sample, - 'transform.filter': transform_1.Filter, - 'coordinate.cartesian': coordinate_1.Cartesian, - 'coordinate.polar': coordinate_1.Polar, - 'coordinate.transpose': coordinate_1.Transpose, - 'coordinate.theta': coordinate_1.Theta, - 'coordinate.parallel': coordinate_1.Parallel, - 'coordinate.fisheye': coordinate_1.Fisheye, - 'coordinate.radial': coordinate_1.Radial, - 'coordinate.radar': coordinate_1.Radar, - 'coordinate.helix': coordinate_1.Helix, - 'encode.constant': encode_1.Constant, - 'encode.field': encode_1.Field, - 'encode.transform': encode_1.Transform, - 'encode.column': encode_1.Column, - 'mark.interval': mark_1.Interval, - 'mark.rect': mark_1.Rect, - 'mark.line': mark_1.Line, - 'mark.point': mark_1.Point, - 'mark.text': mark_1.Text, - 'mark.cell': mark_1.Cell, - 'mark.area': mark_1.Area, - 'mark.link': mark_1.Link, - 'mark.image': mark_1.Image, - 'mark.polygon': mark_1.Polygon, - 'mark.box': mark_1.Box, - 'mark.vector': mark_1.Vector, - 'mark.lineX': mark_1.LineX, - 'mark.lineY': mark_1.LineY, - 'mark.connector': mark_1.Connector, - 'mark.range': mark_1.Range, - 'mark.rangeX': mark_1.RangeX, - 'mark.rangeY': mark_1.RangeY, - 'mark.path': mark_1.Path, - 'mark.shape': mark_1.Shape, - 'mark.density': mark_1.Density, - 'mark.heatmap': mark_1.Heatmap, - 'mark.wordCloud': mark_1.WordCloud, - 'palette.category10': palette_1.Category10, - 'palette.category20': palette_1.Category20, - 'scale.linear': scale_1.Linear, - 'scale.ordinal': scale_1.Ordinal, - 'scale.band': scale_1.Band, - 'scale.identity': scale_1.Identity, - 'scale.point': scale_1.Point, - 'scale.time': scale_1.Time, - 'scale.log': scale_1.Log, - 'scale.pow': scale_1.Pow, - 'scale.sqrt': scale_1.Sqrt, - 'scale.threshold': scale_1.Threshold, - 'scale.quantile': scale_1.Quantile, - 'scale.quantize': scale_1.Quantize, - 'scale.sequential': scale_1.Sequential, - 'scale.constant': scale_1.Constant, - 'theme.classic': theme_1.Classic, - 'theme.classicDark': theme_1.ClassicDark, - 'theme.academy': theme_1.Academy, - 'theme.light': theme_1.Light, - 'theme.dark': theme_1.Dark, - 'component.axisX': component_1.AxisX, - 'component.axisY': component_1.AxisY, - 'component.legendCategory': component_1.LegendCategory, - 'component.legendContinuous': component_1.LegendContinuous, - 'component.legends': component_1.Legends, - 'component.title': component_1.TitleComponent, - 'component.sliderX': component_1.SliderX, - 'component.sliderY': component_1.SliderY, - 'component.scrollbarX': component_1.ScrollbarX, - 'component.scrollbarY': component_1.ScrollbarY, - 'animation.scaleInX': animation_1.ScaleInX, - 'animation.scaleOutX': animation_1.ScaleOutX, - 'animation.scaleInY': animation_1.ScaleInY, - 'animation.scaleOutY': animation_1.ScaleOutY, - 'animation.waveIn': animation_1.WaveIn, - 'animation.fadeIn': animation_1.FadeIn, - 'animation.fadeOut': animation_1.FadeOut, - 'animation.zoomIn': animation_1.ZoomIn, - 'animation.zoomOut': animation_1.ZoomOut, - 'animation.pathIn': animation_1.PathIn, - 'animation.morphing': animation_1.Morphing, - 'animation.growInX': animation_1.GrowInX, - 'animation.growInY': animation_1.GrowInY, - 'interaction.elementHighlight': interaction_1.ElementHighlight, - 'interaction.elementHighlightByX': interaction_1.ElementHighlightByX, - 'interaction.elementHighlightByColor': interaction_1.ElementHighlightByColor, - 'interaction.elementSelect': interaction_1.ElementSelect, - 'interaction.elementSelectByX': interaction_1.ElementSelectByX, - 'interaction.elementSelectByColor': interaction_1.ElementSelectByColor, - 'interaction.fisheye': interaction_1.Fisheye, - 'interaction.chartIndex': interaction_1.ChartIndex, - 'interaction.tooltip': interaction_1.Tooltip, - 'interaction.legendFilter': interaction_1.LegendFilter, - 'interaction.legendHighlight': interaction_1.LegendHighlight, - 'interaction.brushHighlight': interaction_1.BrushHighlight, - 'interaction.brushXHighlight': interaction_1.BrushXHighlight, - 'interaction.brushYHighlight': interaction_1.BrushYHighlight, - 'interaction.brushAxisHighlight': interaction_1.BrushAxisHighlight, - 'interaction.brushFilter': interaction_1.BrushFilter, - 'interaction.brushXFilter': interaction_1.BrushXFilter, - 'interaction.brushYFilter': interaction_1.BrushYFilter, - 'interaction.sliderFilter': interaction_1.SliderFilter, - 'interaction.scrollbarFilter': interaction_1.ScrollbarFilter, - 'interaction.poptip': interaction_1.Poptip, - 'interaction.treemapDrillDown': interaction_1.TreemapDrillDown, - 'interaction.elementPointMove': interaction_1.ElementPointMove, - 'composition.spaceLayer': composition_1.SpaceLayer, - 'composition.spaceFlex': composition_1.SpaceFlex, - 'composition.facetRect': composition_1.FacetRect, - 'composition.repeatMatrix': composition_1.RepeatMatrix, - 'composition.facetCircle': composition_1.FacetCircle, - 'composition.timingKeyframe': composition_1.TimingKeyframe, - 'labelTransform.overlapHide': label_transform_1.OverlapHide, - 'labelTransform.overlapDodgeY': label_transform_1.OverlapDodgeY, - 'labelTransform.overflowHide': label_transform_1.OverflowHide, - 'labelTransform.contrastReverse': label_transform_1.ContrastReverse, - 'labelTransform.exceedAdjust': label_transform_1.ExceedAdjust, - }; -} -exports.corelib = corelib; -//# sourceMappingURL=core.js.map -}, function(modId) { var map = {"../coordinate":1751263815805,"../encode":1751263815816,"../mark":1751263815821,"../palette":1751263816018,"../scale":1751263816021,"../theme":1751263816036,"../component":1751263816043,"../animation":1751263816063,"../interaction":1751263816078,"../composition":1751263816099,"../transform":1751263815823,"../data":1751263816146,"../label-transform":1751263816178}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815805, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Radar = exports.Fisheye = exports.Parallel = exports.getRadialOptions = exports.Radial = exports.getThetaOptions = exports.Theta = exports.Transpose = exports.Helix = exports.getPolarOptions = exports.Polar = exports.Cartesian = void 0; -var cartesian_1 = require("./cartesian"); -Object.defineProperty(exports, "Cartesian", { enumerable: true, get: function () { return cartesian_1.Cartesian; } }); -var polar_1 = require("./polar"); -Object.defineProperty(exports, "Polar", { enumerable: true, get: function () { return polar_1.Polar; } }); -Object.defineProperty(exports, "getPolarOptions", { enumerable: true, get: function () { return polar_1.getPolarOptions; } }); -var helix_1 = require("./helix"); -Object.defineProperty(exports, "Helix", { enumerable: true, get: function () { return helix_1.Helix; } }); -var transpose_1 = require("./transpose"); -Object.defineProperty(exports, "Transpose", { enumerable: true, get: function () { return transpose_1.Transpose; } }); -var theta_1 = require("./theta"); -Object.defineProperty(exports, "Theta", { enumerable: true, get: function () { return theta_1.Theta; } }); -Object.defineProperty(exports, "getThetaOptions", { enumerable: true, get: function () { return theta_1.getThetaOptions; } }); -var radial_1 = require("./radial"); -Object.defineProperty(exports, "Radial", { enumerable: true, get: function () { return radial_1.Radial; } }); -Object.defineProperty(exports, "getRadialOptions", { enumerable: true, get: function () { return radial_1.getRadialOptions; } }); -var parallel_1 = require("./parallel"); -Object.defineProperty(exports, "Parallel", { enumerable: true, get: function () { return parallel_1.Parallel; } }); -var fisheye_1 = require("./fisheye"); -Object.defineProperty(exports, "Fisheye", { enumerable: true, get: function () { return fisheye_1.Fisheye; } }); -var radar_1 = require("./radar"); -Object.defineProperty(exports, "Radar", { enumerable: true, get: function () { return radar_1.Radar; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./cartesian":1751263815806,"./polar":1751263815807,"./helix":1751263815809,"./transpose":1751263815810,"./theta":1751263815811,"./radial":1751263815812,"./parallel":1751263815813,"./fisheye":1751263815814,"./radar":1751263815815}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815806, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Cartesian = void 0; -/** - * Default coordinate transformation for all charts. - */ -const Cartesian = () => [['cartesian']]; -exports.Cartesian = Cartesian; -exports.Cartesian.props = {}; -//# sourceMappingURL=cartesian.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815807, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Polar = exports.getPolarOptions = void 0; -const angle_1 = require("../utils/angle"); -const getPolarOptions = (options = {}) => { - const defaultOptions = { - startAngle: -Math.PI / 2, - endAngle: (Math.PI * 3) / 2, - innerRadius: 0, - outerRadius: 1, - }; - const polarOption = Object.assign(Object.assign({}, defaultOptions), options); - return Object.assign(Object.assign({}, polarOption), (0, angle_1.convertAngles)(polarOption.startAngle, polarOption.endAngle)); -}; -exports.getPolarOptions = getPolarOptions; -/** - * Polar transformation for circular charts using center of canvas as origin. - * @todo Adjust size of canvas by startAngle and endAngle to make chart as big as possible. - */ -const Polar = (options) => { - const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getPolarOptions)(options); - return [ - ['translate', 0, 0.5], - ['reflect.y'], - ['translate', 0, -0.5], - ['polar', startAngle, endAngle, innerRadius, outerRadius], - ]; -}; -exports.Polar = Polar; -exports.Polar.props = {}; -//# sourceMappingURL=polar.js.map -}, function(modId) { var map = {"../utils/angle":1751263815808}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815808, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.convertAngles = exports.toDegree = exports.toRadian = void 0; -function toRadian(degree) { - return (degree * Math.PI) / 180; -} -exports.toRadian = toRadian; -function toDegree(radian) { - return (radian * 180) / Math.PI; -} -exports.toDegree = toDegree; -// convert the angle to the range of 0 to 4*Math.PI -function convertAngles(startAngle, endAngle) { - startAngle = startAngle % (2 * Math.PI); - endAngle = endAngle % (2 * Math.PI); - if (startAngle < 0) { - startAngle = 2 * Math.PI + startAngle; - } - if (endAngle < 0) { - endAngle = 2 * Math.PI + endAngle; - } - if (startAngle >= endAngle) { - endAngle = endAngle + 2 * Math.PI; - } - return { - startAngle, - endAngle, - }; -} -exports.convertAngles = convertAngles; -//# sourceMappingURL=angle.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815809, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Helix = void 0; -/** - * Helix - */ -const Helix = ({ startAngle = 0, endAngle = Math.PI * 6, innerRadius = 0, outerRadius = 1, }) => [ - ['translate', 0.5, 0.5], - ['reflect.y'], - ['translate', -0.5, -0.5], - ['helix', startAngle, endAngle, innerRadius, outerRadius], -]; -exports.Helix = Helix; -exports.Helix.props = {}; -//# sourceMappingURL=helix.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815810, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Transpose = void 0; -/** - * Transpose transformation for transposing chart according to center of canvas. - */ -const Transpose = () => [ - ['transpose'], - ['translate', 0.5, 0.5], - ['reflect.x'], - ['translate', -0.5, -0.5], -]; -exports.Transpose = Transpose; -exports.Transpose.props = { transform: true }; -//# sourceMappingURL=transpose.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815811, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Theta = exports.getThetaOptions = void 0; -const polar_1 = require("./polar"); -const transpose_1 = require("./transpose"); -const getThetaOptions = (options = {}) => { - const defaultOptions = { - startAngle: -Math.PI / 2, - endAngle: (Math.PI * 3) / 2, - innerRadius: 0, - outerRadius: 1, - }; - return Object.assign(Object.assign({}, defaultOptions), options); -}; -exports.getThetaOptions = getThetaOptions; -/** - * Theta = Transpose + Polar. - */ -const Theta = (options) => { - const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getThetaOptions)(options); - return [ - ...(0, transpose_1.Transpose)(), - ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }), - ]; -}; -exports.Theta = Theta; -exports.Theta.props = {}; -//# sourceMappingURL=theta.js.map -}, function(modId) { var map = {"./polar":1751263815807,"./transpose":1751263815810}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815812, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Radial = exports.getRadialOptions = void 0; -const polar_1 = require("./polar"); -const getRadialOptions = (options = {}) => { - const defaultOptions = { - startAngle: -Math.PI / 2, - endAngle: (Math.PI * 3) / 2, - innerRadius: 0, - outerRadius: 1, - }; - return Object.assign(Object.assign({}, defaultOptions), options); -}; -exports.getRadialOptions = getRadialOptions; -/** - * Radial - */ -const Radial = (options) => { - const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getRadialOptions)(options); - return [ - ['transpose'], - ['translate', 0.5, 0.5], - ['reflect'], - ['translate', -0.5, -0.5], - ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }), - ]; -}; -exports.Radial = Radial; -exports.Radial.props = {}; -//# sourceMappingURL=radial.js.map -}, function(modId) { var map = {"./polar":1751263815807}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815813, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Parallel = void 0; -/** - * Parallel coordinate transformations for parallel coordinate. - */ -const Parallel = () => [['parallel', 0, 1, 0, 1]]; -exports.Parallel = Parallel; -exports.Parallel.props = {}; -//# sourceMappingURL=parallel.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815814, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Fisheye = void 0; -/** - * Fisheye - */ -const Fisheye = ({ focusX = 0, focusY = 0, distortionX = 2, distortionY = 2, visual = false, }) => [['fisheye', focusX, focusY, distortionX, distortionY, visual]]; -exports.Fisheye = Fisheye; -exports.Fisheye.props = { transform: true }; -//# sourceMappingURL=fisheye.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815815, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Radar = void 0; -const polar_1 = require("./polar"); -const parallel_1 = require("./parallel"); -/** - * Radar = Parallel + Polar. - */ -const Radar = (options) => { - const { startAngle = -Math.PI / 2, endAngle = (Math.PI * 3) / 2, innerRadius = 0, outerRadius = 1, } = options; - return [ - ...(0, parallel_1.Parallel)(), - ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }), - ]; -}; -exports.Radar = Radar; -exports.Radar.props = {}; -//# sourceMappingURL=radar.js.map -}, function(modId) { var map = {"./polar":1751263815807,"./parallel":1751263815813}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815816, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Column = exports.Field = exports.Transform = exports.Constant = void 0; -var constant_1 = require("./constant"); -Object.defineProperty(exports, "Constant", { enumerable: true, get: function () { return constant_1.Constant; } }); -var transform_1 = require("./transform"); -Object.defineProperty(exports, "Transform", { enumerable: true, get: function () { return transform_1.Transform; } }); -var field_1 = require("./field"); -Object.defineProperty(exports, "Field", { enumerable: true, get: function () { return field_1.Field; } }); -var column_1 = require("./column"); -Object.defineProperty(exports, "Column", { enumerable: true, get: function () { return column_1.Column; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./constant":1751263815817,"./transform":1751263815818,"./field":1751263815819,"./column":1751263815820}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815817, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Constant = void 0; -/** - * Extract a column of data filled with the specified constant. - */ -const Constant = ({ value }) => { - return (data) => data.map(() => value); -}; -exports.Constant = Constant; -exports.Constant.props = {}; -//# sourceMappingURL=constant.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815818, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Transform = void 0; -/** - * Extract a column of data with specified map function from data. - * Each datum in the array is not visual data by default. - * Specifying identity scale for related channel explicitly will treat them as visual data. - */ -const Transform = ({ value }) => { - return (data) => data.map(value); -}; -exports.Transform = Transform; -exports.Transform.props = {}; -//# sourceMappingURL=transform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815819, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Field = void 0; -/** - * Extract a column of data with specified field. - */ -const Field = ({ value }) => { - return (data) => data.map((d) => d[value]); -}; -exports.Field = Field; -exports.Field.props = {}; -//# sourceMappingURL=field.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815820, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Column = void 0; -/** - * Extract a column of data specified in encoding. - */ -const Column = ({ value }) => { - return () => value; -}; -exports.Column = Column; -exports.Column.props = {}; -//# sourceMappingURL=column.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815821, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Liquid = exports.Heatmap = exports.Density = exports.Gauge = exports.WordCloud = exports.Tree = exports.ForceGraph = exports.Shape = exports.Boxplot = exports.Pack = exports.Treemap = exports.Path = exports.Chord = exports.Sankey = exports.RangeY = exports.RangeX = exports.Range = exports.Connector = exports.LineX = exports.LineY = exports.Vector = exports.Box = exports.Polygon = exports.Image = exports.Link = exports.Area = exports.Cell = exports.Text = exports.Point = exports.Line = exports.Rect = exports.Interval = void 0; -var interval_1 = require("./interval"); -Object.defineProperty(exports, "Interval", { enumerable: true, get: function () { return interval_1.Interval; } }); -var rect_1 = require("./rect"); -Object.defineProperty(exports, "Rect", { enumerable: true, get: function () { return rect_1.Rect; } }); -var line_1 = require("./line"); -Object.defineProperty(exports, "Line", { enumerable: true, get: function () { return line_1.Line; } }); -var point_1 = require("./point"); -Object.defineProperty(exports, "Point", { enumerable: true, get: function () { return point_1.Point; } }); -var text_1 = require("./text"); -Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return text_1.Text; } }); -var cell_1 = require("./cell"); -Object.defineProperty(exports, "Cell", { enumerable: true, get: function () { return cell_1.Cell; } }); -var area_1 = require("./area"); -Object.defineProperty(exports, "Area", { enumerable: true, get: function () { return area_1.Area; } }); -var link_1 = require("./link"); -Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return link_1.Link; } }); -var image_1 = require("./image"); -Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return image_1.Image; } }); -var polygon_1 = require("./polygon"); -Object.defineProperty(exports, "Polygon", { enumerable: true, get: function () { return polygon_1.Polygon; } }); -var box_1 = require("./box"); -Object.defineProperty(exports, "Box", { enumerable: true, get: function () { return box_1.Box; } }); -var vector_1 = require("./vector"); -Object.defineProperty(exports, "Vector", { enumerable: true, get: function () { return vector_1.Vector; } }); -var lineY_1 = require("./lineY"); -Object.defineProperty(exports, "LineY", { enumerable: true, get: function () { return lineY_1.LineY; } }); -var lineX_1 = require("./lineX"); -Object.defineProperty(exports, "LineX", { enumerable: true, get: function () { return lineX_1.LineX; } }); -var connector_1 = require("./connector"); -Object.defineProperty(exports, "Connector", { enumerable: true, get: function () { return connector_1.Connector; } }); -var range_1 = require("./range"); -Object.defineProperty(exports, "Range", { enumerable: true, get: function () { return range_1.Range; } }); -var rangeX_1 = require("./rangeX"); -Object.defineProperty(exports, "RangeX", { enumerable: true, get: function () { return rangeX_1.RangeX; } }); -var rangeY_1 = require("./rangeY"); -Object.defineProperty(exports, "RangeY", { enumerable: true, get: function () { return rangeY_1.RangeY; } }); -var sankey_1 = require("./sankey"); -Object.defineProperty(exports, "Sankey", { enumerable: true, get: function () { return sankey_1.Sankey; } }); -var chord_1 = require("./chord"); -Object.defineProperty(exports, "Chord", { enumerable: true, get: function () { return chord_1.Chord; } }); -var path_1 = require("./path"); -Object.defineProperty(exports, "Path", { enumerable: true, get: function () { return path_1.Path; } }); -var treemap_1 = require("./treemap"); -Object.defineProperty(exports, "Treemap", { enumerable: true, get: function () { return treemap_1.Treemap; } }); -var pack_1 = require("./pack"); -Object.defineProperty(exports, "Pack", { enumerable: true, get: function () { return pack_1.Pack; } }); -var boxplot_1 = require("./boxplot"); -Object.defineProperty(exports, "Boxplot", { enumerable: true, get: function () { return boxplot_1.Boxplot; } }); -var shape_1 = require("./shape"); -Object.defineProperty(exports, "Shape", { enumerable: true, get: function () { return shape_1.Shape; } }); -var forceGraph_1 = require("./forceGraph"); -Object.defineProperty(exports, "ForceGraph", { enumerable: true, get: function () { return forceGraph_1.ForceGraph; } }); -var tree_1 = require("./tree"); -Object.defineProperty(exports, "Tree", { enumerable: true, get: function () { return tree_1.Tree; } }); -var wordCloud_1 = require("./wordCloud"); -Object.defineProperty(exports, "WordCloud", { enumerable: true, get: function () { return wordCloud_1.WordCloud; } }); -var gauge_1 = require("./gauge"); -Object.defineProperty(exports, "Gauge", { enumerable: true, get: function () { return gauge_1.Gauge; } }); -var density_1 = require("./density"); -Object.defineProperty(exports, "Density", { enumerable: true, get: function () { return density_1.Density; } }); -var heatmap_1 = require("./heatmap"); -Object.defineProperty(exports, "Heatmap", { enumerable: true, get: function () { return heatmap_1.Heatmap; } }); -var liquid_1 = require("./liquid"); -Object.defineProperty(exports, "Liquid", { enumerable: true, get: function () { return liquid_1.Liquid; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./interval":1751263815822,"./rect":1751263815974,"./line":1751263815975,"./point":1751263815976,"./text":1751263815977,"./cell":1751263815978,"./area":1751263815979,"./link":1751263815980,"./image":1751263815981,"./polygon":1751263815982,"./box":1751263815983,"./vector":1751263815984,"./lineY":1751263815985,"./lineX":1751263815986,"./connector":1751263815987,"./range":1751263815988,"./rangeX":1751263815989,"./rangeY":1751263815990,"./sankey":1751263815991,"./chord":1751263815998,"./path":1751263816003,"./treemap":1751263816004,"./pack":1751263816006,"./boxplot":1751263816007,"./shape":1751263816008,"./forceGraph":1751263816009,"./tree":1751263816010,"./wordCloud":1751263816013,"./gauge":1751263816014,"./density":1751263816015,"./heatmap":1751263816016,"./liquid":1751263816017}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815822, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Interval = void 0; -const transform_1 = require("../transform"); -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -function bandWidth(scale, x) { - return scale.getBandWidth(scale.invert(x)); -} -const shape = { - rect: shape_1.IntervalShape, - hollow: shape_1.IntervalHollow, - funnel: shape_1.IntervalFunnel, - pyramid: shape_1.IntervalPyramid, -}; -/** - * Convert value for each channel to rect shapes. - * p0 p1 - * ┌────┐ - * │ │ - * │ │ - * p3 └────┘ p2 - */ -const Interval = () => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, y1: Y1, series: S, size: SZ } = value; - // Calc width for each interval. - // The scales for x and series channels must be band scale. - const x = scale.x; - const series = scale.series; - const [width] = coordinate.getSize(); - const NSZ = SZ ? SZ.map((d) => +d / width) : null; - const x1x2 = !SZ - ? (x, w, i) => [x, x + w] - : (x, w, i) => { - const mx = x + w / 2; - const s = NSZ[i]; - return [mx - s / 2, mx + s / 2]; - }; - // Calc the points of bounding box for the interval. - // They are start from left-top corner in clock wise order. - const P = Array.from(index, (i) => { - const groupWidth = bandWidth(x, X[i]); - const ratio = series ? bandWidth(series, S === null || S === void 0 ? void 0 : S[i]) : 1; - const width = groupWidth * ratio; - const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth; - const x0 = +X[i] + offset; - const [x1, x2] = x1x2(x0, width, i); - const y1 = +Y[i]; - const y2 = +Y1[i]; - const p1 = [x1, y1]; - const p2 = [x2, y1]; - const p3 = [x2, y2]; - const p4 = [x1, y2]; - return [p1, p2, p3, p4].map((d) => coordinate.map(d)); - }); - return [index, P]; - }; -}; -exports.Interval = Interval; -exports.Interval.props = { - defaultShape: 'rect', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', scale: 'band', required: true }, - { name: 'y', required: true }, - { name: 'series', scale: 'band' }, - { name: 'size' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeZeroY1 }, - { type: transform_1.MaybeZeroX }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()], - interaction: { shareTooltip: true }, -}; -//# sourceMappingURL=interval.js.map -}, function(modId) { var map = {"../transform":1751263815823,"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815823, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Filter = exports.Sample = exports.Bin = exports.BinX = exports.Pack = exports.FlexX = exports.SortY = exports.SortColor = exports.SortX = exports.GroupColor = exports.Group = exports.GroupY = exports.GroupX = exports.SelectY = exports.SelectX = exports.Select = exports.DiffY = exports.SymmetryY = exports.JitterY = exports.JitterX = exports.Jitter = exports.NormalizeY = exports.StackEnter = exports.DodgeX = exports.StackY = exports.MaybeGradient = exports.MaybeTuple = exports.MaybeFunctionAttribute = exports.MaybeVisualPosition = exports.MaybeZeroPadding = exports.MaybeTooltip = exports.MaybeDefaultY = exports.MaybeDefaultX = exports.MaybeIdentityX = exports.MaybeIdentityY = exports.MaybeTupleX = exports.MaybeTupleY = exports.MaybeSeries = exports.MaybeKey = exports.MaybeSize = exports.MaybeZeroZ = exports.MaybeZeroY = exports.MaybeZeroX = exports.MaybeTitle = exports.MaybeStackY = exports.MaybeZeroY1 = void 0; -var maybeZeroY1_1 = require("./maybeZeroY1"); -Object.defineProperty(exports, "MaybeZeroY1", { enumerable: true, get: function () { return maybeZeroY1_1.MaybeZeroY1; } }); -var maybeStackY_1 = require("./maybeStackY"); -Object.defineProperty(exports, "MaybeStackY", { enumerable: true, get: function () { return maybeStackY_1.MaybeStackY; } }); -var maybeTitle_1 = require("./maybeTitle"); -Object.defineProperty(exports, "MaybeTitle", { enumerable: true, get: function () { return maybeTitle_1.MaybeTitle; } }); -var maybeZeroX_1 = require("./maybeZeroX"); -Object.defineProperty(exports, "MaybeZeroX", { enumerable: true, get: function () { return maybeZeroX_1.MaybeZeroX; } }); -var maybeZeroY_1 = require("./maybeZeroY"); -Object.defineProperty(exports, "MaybeZeroY", { enumerable: true, get: function () { return maybeZeroY_1.MaybeZeroY; } }); -var maybeZeroZ_1 = require("./maybeZeroZ"); -Object.defineProperty(exports, "MaybeZeroZ", { enumerable: true, get: function () { return maybeZeroZ_1.MaybeZeroZ; } }); -var maybeSize_1 = require("./maybeSize"); -Object.defineProperty(exports, "MaybeSize", { enumerable: true, get: function () { return maybeSize_1.MaybeSize; } }); -var maybeKey_1 = require("./maybeKey"); -Object.defineProperty(exports, "MaybeKey", { enumerable: true, get: function () { return maybeKey_1.MaybeKey; } }); -var maybeSeries_1 = require("./maybeSeries"); -Object.defineProperty(exports, "MaybeSeries", { enumerable: true, get: function () { return maybeSeries_1.MaybeSeries; } }); -var maybeTupleY_1 = require("./maybeTupleY"); -Object.defineProperty(exports, "MaybeTupleY", { enumerable: true, get: function () { return maybeTupleY_1.MaybeTupleY; } }); -var maybeTupleX_1 = require("./maybeTupleX"); -Object.defineProperty(exports, "MaybeTupleX", { enumerable: true, get: function () { return maybeTupleX_1.MaybeTupleX; } }); -var maybeIdentityY_1 = require("./maybeIdentityY"); -Object.defineProperty(exports, "MaybeIdentityY", { enumerable: true, get: function () { return maybeIdentityY_1.MaybeIdentityY; } }); -var maybeIdentityX_1 = require("./maybeIdentityX"); -Object.defineProperty(exports, "MaybeIdentityX", { enumerable: true, get: function () { return maybeIdentityX_1.MaybeIdentityX; } }); -var maybeDefaultX_1 = require("./maybeDefaultX"); -Object.defineProperty(exports, "MaybeDefaultX", { enumerable: true, get: function () { return maybeDefaultX_1.MaybeDefaultX; } }); -var maybeDefaultY_1 = require("./maybeDefaultY"); -Object.defineProperty(exports, "MaybeDefaultY", { enumerable: true, get: function () { return maybeDefaultY_1.MaybeDefaultY; } }); -var maybeTooltip_1 = require("./maybeTooltip"); -Object.defineProperty(exports, "MaybeTooltip", { enumerable: true, get: function () { return maybeTooltip_1.MaybeTooltip; } }); -var maybeZeroPadding_1 = require("./maybeZeroPadding"); -Object.defineProperty(exports, "MaybeZeroPadding", { enumerable: true, get: function () { return maybeZeroPadding_1.MaybeZeroPadding; } }); -var maybeVisualPosition_1 = require("./maybeVisualPosition"); -Object.defineProperty(exports, "MaybeVisualPosition", { enumerable: true, get: function () { return maybeVisualPosition_1.MaybeVisualPosition; } }); -var maybeFunctionAttribute_1 = require("./maybeFunctionAttribute"); -Object.defineProperty(exports, "MaybeFunctionAttribute", { enumerable: true, get: function () { return maybeFunctionAttribute_1.MaybeFunctionAttribute; } }); -var maybeTuple_1 = require("./maybeTuple"); -Object.defineProperty(exports, "MaybeTuple", { enumerable: true, get: function () { return maybeTuple_1.MaybeTuple; } }); -var maybeGradient_1 = require("./maybeGradient"); -Object.defineProperty(exports, "MaybeGradient", { enumerable: true, get: function () { return maybeGradient_1.MaybeGradient; } }); -var stackY_1 = require("./stackY"); -Object.defineProperty(exports, "StackY", { enumerable: true, get: function () { return stackY_1.StackY; } }); -var dodgeX_1 = require("./dodgeX"); -Object.defineProperty(exports, "DodgeX", { enumerable: true, get: function () { return dodgeX_1.DodgeX; } }); -var stackEnter_1 = require("./stackEnter"); -Object.defineProperty(exports, "StackEnter", { enumerable: true, get: function () { return stackEnter_1.StackEnter; } }); -var normalizeY_1 = require("./normalizeY"); -Object.defineProperty(exports, "NormalizeY", { enumerable: true, get: function () { return normalizeY_1.NormalizeY; } }); -var jitter_1 = require("./jitter"); -Object.defineProperty(exports, "Jitter", { enumerable: true, get: function () { return jitter_1.Jitter; } }); -var jitterX_1 = require("./jitterX"); -Object.defineProperty(exports, "JitterX", { enumerable: true, get: function () { return jitterX_1.JitterX; } }); -var jitterY_1 = require("./jitterY"); -Object.defineProperty(exports, "JitterY", { enumerable: true, get: function () { return jitterY_1.JitterY; } }); -var symmetryY_1 = require("./symmetryY"); -Object.defineProperty(exports, "SymmetryY", { enumerable: true, get: function () { return symmetryY_1.SymmetryY; } }); -var diffY_1 = require("./diffY"); -Object.defineProperty(exports, "DiffY", { enumerable: true, get: function () { return diffY_1.DiffY; } }); -var select_1 = require("./select"); -Object.defineProperty(exports, "Select", { enumerable: true, get: function () { return select_1.Select; } }); -var selectX_1 = require("./selectX"); -Object.defineProperty(exports, "SelectX", { enumerable: true, get: function () { return selectX_1.SelectX; } }); -var selectY_1 = require("./selectY"); -Object.defineProperty(exports, "SelectY", { enumerable: true, get: function () { return selectY_1.SelectY; } }); -var groupX_1 = require("./groupX"); -Object.defineProperty(exports, "GroupX", { enumerable: true, get: function () { return groupX_1.GroupX; } }); -var groupY_1 = require("./groupY"); -Object.defineProperty(exports, "GroupY", { enumerable: true, get: function () { return groupY_1.GroupY; } }); -var group_1 = require("./group"); -Object.defineProperty(exports, "Group", { enumerable: true, get: function () { return group_1.Group; } }); -var groupColor_1 = require("./groupColor"); -Object.defineProperty(exports, "GroupColor", { enumerable: true, get: function () { return groupColor_1.GroupColor; } }); -var sortX_1 = require("./sortX"); -Object.defineProperty(exports, "SortX", { enumerable: true, get: function () { return sortX_1.SortX; } }); -var sortColor_1 = require("./sortColor"); -Object.defineProperty(exports, "SortColor", { enumerable: true, get: function () { return sortColor_1.SortColor; } }); -var sortY_1 = require("./sortY"); -Object.defineProperty(exports, "SortY", { enumerable: true, get: function () { return sortY_1.SortY; } }); -var flexX_1 = require("./flexX"); -Object.defineProperty(exports, "FlexX", { enumerable: true, get: function () { return flexX_1.FlexX; } }); -var pack_1 = require("./pack"); -Object.defineProperty(exports, "Pack", { enumerable: true, get: function () { return pack_1.Pack; } }); -var binX_1 = require("./binX"); -Object.defineProperty(exports, "BinX", { enumerable: true, get: function () { return binX_1.BinX; } }); -var bin_1 = require("./bin"); -Object.defineProperty(exports, "Bin", { enumerable: true, get: function () { return bin_1.Bin; } }); -var sample_1 = require("./sample"); -Object.defineProperty(exports, "Sample", { enumerable: true, get: function () { return sample_1.Sample; } }); -var filter_1 = require("./filter"); -Object.defineProperty(exports, "Filter", { enumerable: true, get: function () { return filter_1.Filter; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./maybeZeroY1":1751263815824,"./maybeStackY":1751263815826,"./maybeTitle":1751263815831,"./maybeZeroX":1751263815833,"./maybeZeroY":1751263815834,"./maybeZeroZ":1751263815835,"./maybeSize":1751263815836,"./maybeKey":1751263815837,"./maybeSeries":1751263815838,"./maybeTupleY":1751263815839,"./maybeTupleX":1751263815840,"./maybeIdentityY":1751263815841,"./maybeIdentityX":1751263815842,"./maybeDefaultX":1751263815843,"./maybeDefaultY":1751263815844,"./maybeTooltip":1751263815845,"./maybeZeroPadding":1751263815846,"./maybeVisualPosition":1751263815847,"./maybeFunctionAttribute":1751263815848,"./maybeTuple":1751263815849,"./maybeGradient":1751263815850,"./stackY":1751263815827,"./dodgeX":1751263815851,"./stackEnter":1751263815852,"./normalizeY":1751263815853,"./jitter":1751263815854,"./jitterX":1751263815855,"./jitterY":1751263815856,"./symmetryY":1751263815857,"./diffY":1751263815858,"./select":1751263815859,"./selectX":1751263815860,"./selectY":1751263815861,"./groupX":1751263815862,"./groupY":1751263815865,"./group":1751263815863,"./groupColor":1751263815866,"./sortX":1751263815867,"./sortColor":1751263815869,"./sortY":1751263815870,"./flexX":1751263815871,"./pack":1751263815872,"./binX":1751263815874,"./bin":1751263815875,"./sample":1751263815876,"./filter":1751263815878}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815824, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeZeroY1 = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add zero constant encode for y1 channel. - */ -const MaybeZeroY1 = () => { - return (I, mark) => { - const { encode } = mark; - const { y1 } = encode; - if (y1 !== undefined) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { y1: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) }, - }), - ]; - }; -}; -exports.MaybeZeroY1 = MaybeZeroY1; -exports.MaybeZeroY1.props = {}; -//# sourceMappingURL=maybeZeroY1.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815825, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isObject = exports.maybeColumnOf = exports.columnOf = exports.constant = exports.nonConstantColumn = exports.visualColumn = exports.inferredColumn = exports.column = void 0; -function column(value, field) { - if (value === null) - return undefined; - return { type: 'column', value, field }; -} -exports.column = column; -function inferredColumn(value, field) { - const c = column(value, field); - return Object.assign(Object.assign({}, c), { inferred: true }); -} -exports.inferredColumn = inferredColumn; -function visualColumn(value, field) { - if (value === null) - return undefined; - return { type: 'column', value, field, visual: true }; -} -exports.visualColumn = visualColumn; -function nonConstantColumn(value, field) { - const c = column(value, field); - return Object.assign(Object.assign({}, c), { constant: false }); -} -exports.nonConstantColumn = nonConstantColumn; -function constant(I, value) { - const array = []; - for (const i of I) - array[i] = value; - return array; -} -exports.constant = constant; -function columnOf(encode, key) { - const channel = encode[key]; - if (!channel) - return [null, null]; - const { value, field = null } = channel; - return [value, field]; -} -exports.columnOf = columnOf; -function maybeColumnOf(encode, ...K) { - for (const key of K) { - if (typeof key === 'string') { - const [KV, fv] = columnOf(encode, key); - if (KV !== null) - return [KV, fv]; - } - else { - return [key, null]; - } - } - return [null, null]; -} -exports.maybeColumnOf = maybeColumnOf; -function isObject(d) { - if (d instanceof Date) - return false; - return typeof d === 'object'; -} -exports.isObject = isObject; -//# sourceMappingURL=helper.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815826, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeStackY = void 0; -const stackY_1 = require("./stackY"); -// Avoid duplicate stackY. -// In most of case only one of stackY and dodgeX is needed. -// So pass statistic with stackY and dodgeX. -function exclude(transform) { - const { type } = transform; - const excludes = ['stackY', 'dodgeX', 'groupX']; - return typeof type === 'string' && excludes.includes(type); -} -/** - * Add zero constant encode for x channel. - * This is useful for interval geometry. - */ -const MaybeStackY = (options) => { - return (I, mark, context) => { - // Skip some transform. - const { encode, transform = [] } = mark; - if (transform.some(exclude)) - return [I, mark]; - // StackY need both x and y channel values. - const { x, y } = encode; - if (x === undefined || y === undefined) - return [I, mark]; - const { series } = options; - const groupBy = series ? ['x', 'series'] : 'x'; - return (0, stackY_1.StackY)({ groupBy })(I, mark, context); - }; -}; -exports.MaybeStackY = MaybeStackY; -exports.MaybeStackY.props = {}; -//# sourceMappingURL=maybeStackY.js.map -}, function(modId) { var map = {"./stackY":1751263815827}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815827, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StackY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -/** - * The stack transform group marks into series by color channel, - * and then produce new y channel for each series by specified order, - * say to form vertical "stacks" by specified channels. - */ -const StackY = (options = {}) => { - const { groupBy = 'x', orderBy = null, reverse = false, y: fromY = 'y', y1: fromY1 = 'y1', series = true, } = options; - return (I, mark) => { - var _a; - const { data, encode, style = {} } = mark; - const [Y, fy] = (0, helper_1.columnOf)(encode, 'y'); - const [Y1, fy1] = (0, helper_1.columnOf)(encode, 'y1'); - const [S] = series - ? (0, helper_1.maybeColumnOf)(encode, 'series', 'color') - : (0, helper_1.columnOf)(encode, 'color'); - // Create groups and apply specified order for each group. - const groups = (0, order_1.createGroups)(groupBy, I, mark); - const createComparator = (_a = (0, order_1.normalizeComparator)(orderBy)) !== null && _a !== void 0 ? _a : (() => null); - const comparator = createComparator(data, Y, S); - if (comparator) - (0, order_1.applyOrder)(groups, comparator); - // Stack y channels to produce new y and y1 channel. - const newY = new Array(I.length); - const newY1 = new Array(I.length); - const TY = new Array(I.length); - const F = []; - const L = []; - for (const G of groups) { - if (reverse) - G.reverse(); - // For range interval with specified y and y1. - const start = Y1 ? +Y1[G[0]] : 0; - // Split positive indices of Y and negative Y. - const PG = []; - const NG = []; - for (const i of G) { - const y = (TY[i] = +Y[i] - start); - if (y < 0) - NG.push(i); - else if (y >= 0) - PG.push(i); - } - // Store the first and last layer. - const FG = PG.length > 0 ? PG : NG; - const LG = NG.length > 0 ? NG : PG; - let i = PG.length - 1; - let j = 0; - // Find the last non-zero index. - while (i > 0 && Y[FG[i]] === 0) - i--; - // Find the first non-zero index. - while (j < LG.length - 1 && Y[LG[j]] === 0) - j++; - F.push(FG[i]); - L.push(LG[j]); - // Stack negative y in reverse order. - let ny = start; - for (const i of NG.reverse()) { - const y = TY[i]; - ny = newY[i] = (newY1[i] = ny) + y; - } - // Stack positive y in input order. - let py = start; - for (const i of PG) { - const y = TY[i]; - if (y > 0) - py = newY[i] = (newY1[i] = py) + y; - else - newY[i] = newY1[i] = py; - } - } - // Only set top radius for the first layer, - // and set bottom radius for the last layer. - const FS = new Set(F); - const LS = new Set(L); - // Choose new y or y1 channel as the new y channel. - const V = fromY === 'y' ? newY : newY1; - const V1 = fromY1 === 'y' ? newY : newY1; - let newEncode; - // mark point will compute the actural Y = (y + y1) / 2 if y1 exists - if (mark.type === 'point') { - newEncode = { - y0: (0, helper_1.inferredColumn)(Y, fy), - y: (0, helper_1.column)(V, fy), - }; - } - else { - newEncode = { - y0: (0, helper_1.inferredColumn)(Y, fy), - y: (0, helper_1.column)(V, fy), - y1: (0, helper_1.column)(V1, fy1), - }; - } - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: Object.assign({}, newEncode), - style: Object.assign({ first: (_, i) => FS.has(i), last: (_, i) => LS.has(i) }, style), - }), - ]; - }; -}; -exports.StackY = StackY; -exports.StackY.props = {}; -//# sourceMappingURL=stackY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815828, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.domainOf = exports.applyOrder = exports.normalizeComparator = exports.createGroups = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../../utils/helper"); -const array_1 = require("../../utils/array"); -const helper_2 = require("./helper"); -function createGroups(groupBy, I, mark) { - const { encode } = mark; - if (groupBy === null) - return [I]; - const G = normalizeGroupBy(groupBy) - .map((k) => { var _a; return [k, (_a = (0, helper_2.columnOf)(encode, k)) === null || _a === void 0 ? void 0 : _a[0]]; }) - .filter(([, column]) => (0, helper_1.defined)(column)); - const key = (i) => G.map(([, V]) => V[i]).join('-'); - return Array.from((0, d3_array_1.group)(I, key).values()); -} -exports.createGroups = createGroups; -function normalizeComparator(order) { - if (Array.isArray(order)) - return createFieldsOrder(order); - if (typeof order === 'function') - return createFunctionOrder(order); - if (order === 'series') - return createSeriesOrder; - if (order === 'value') - return createValueOrder; - if (order === 'sum') - return createSumOrder; - if (order === 'maxIndex') - return createMaxIndexOrder; - return null; -} -exports.normalizeComparator = normalizeComparator; -function applyOrder(groups, comparator) { - for (const group of groups) { - group.sort(comparator); - } -} -exports.applyOrder = applyOrder; -function domainOf(value, scale) { - return (scale === null || scale === void 0 ? void 0 : scale.domain) || Array.from(new Set(value)); -} -exports.domainOf = domainOf; -function normalizeGroupBy(groupBy) { - if (Array.isArray(groupBy)) - return groupBy; - return [groupBy]; -} -function createSeriesOrder(data, Y, S) { - return ascendingComparator((i) => S[i]); -} -function createFunctionOrder(order) { - return (data, Y, S) => { - return ascendingComparator((i) => order(data[i])); - }; -} -function createFieldsOrder(order) { - return (data, Y, S) => { - return (i, j) => order.reduce((eq, f) => (eq !== 0 ? eq : (0, d3_array_1.ascending)(data[i][f], data[j][f])), 0); - }; -} -function createValueOrder(data, Y, S) { - return ascendingComparator((i) => Y[i]); -} -function createSumOrder(data, Y, S) { - const I = (0, array_1.indexOf)(data); - const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries()); - const seriesSum = new Map(groups.map(([k, GI]) => [k, GI.reduce((s, i) => s + +Y[i])])); - return ascendingComparator((i) => seriesSum.get(S[i])); -} -function createMaxIndexOrder(data, Y, S) { - const I = (0, array_1.indexOf)(data); - const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries()); - const seriesMaxIndex = new Map(groups.map(([k, GI]) => [k, (0, d3_array_1.maxIndex)(GI, (i) => Y[i])])); - return ascendingComparator((i) => seriesMaxIndex.get(S[i])); -} -function ascendingComparator(order) { - return (i, j) => (0, d3_array_1.ascending)(order(i), order(j)); -} -//# sourceMappingURL=order.js.map -}, function(modId) { var map = {"../../utils/helper":1751263815829,"../../utils/array":1751263815830,"./helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815829, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deepAssign = exports.isUnset = exports.isStrictObject = exports.maybePercentage = exports.omitPrefixObject = exports.filterPrefixObject = exports.prefixObject = exports.maybeSubObject = exports.subObject = exports.appendTransform = exports.useMemo = exports.random = exports.defined = exports.copyAttributes = exports.error = exports.capitalizeFirst = exports.composeAsync = exports.compose = exports.identity = exports.groupNameOf = exports.seriesOf = exports.dataOf = exports.getViewFromElement = void 0; -const util_1 = require("@antv/util"); -const scale_1 = require("@antv/scale"); -/** - * @description Get element's ancestor view node. - * @param elemenet G2 element. - * @returns Element's ancestor view node. - */ -function getViewFromElement(element) { - var _a; - let current = element; - while (current) { - if (((_a = current.attributes) === null || _a === void 0 ? void 0 : _a.class) === 'view') - return current; - current = current.parentNode; - } - return null; -} -exports.getViewFromElement = getViewFromElement; -/** - * @description Get element's original data. - * @param elemenet G2 element. - * @param elemenet View data, if not provided, will get from element's ancestor view. - * @returns The original data of the element. - */ -function dataOf(element, viewData) { - const view = viewData !== null && viewData !== void 0 ? viewData : getViewFromElement(element).__data__; - const datum = element.__data__; - const { markKey, index, seriesIndex } = datum; - const { markState } = view; - const selectedMark = Array.from(markState.keys()).find((mark) => mark.key === markKey); - if (!selectedMark) - return; - if (seriesIndex) { - return seriesIndex.map((i) => selectedMark.data[i]); - } - return selectedMark.data[index]; -} -exports.dataOf = dataOf; -/** - * @description Get element's series name. - * @param elemenet G2 element. - * @returns The series name of the element. - */ -function seriesOf(elemenet) { - const viewData = getViewFromElement(elemenet).__data__; - const { scale } = viewData; - return groupNameOf(scale, elemenet.__data__); -} -exports.seriesOf = seriesOf; -/** - * Get group name with view's scale and element's datum. - */ -function groupNameOf(scale, datum) { - const { color: scaleColor, series: scaleSeries, facet = false } = scale; - const { color, series } = datum; - const invertAble = (scale) => { - return (scale && - scale.invert && - !(scale instanceof scale_1.Band) && - !(scale instanceof scale_1.Constant)); - }; - // For non constant color channel. - if (invertAble(scaleSeries)) { - const cloned = scaleSeries.clone(); - return cloned.invert(series); - } - if (series && - scaleSeries instanceof scale_1.Band && - scaleSeries.invert(series) !== color && - !facet) { - return scaleSeries.invert(series); - } - if (invertAble(scaleColor)) { - const name = scaleColor.invert(color); - // For threshold scale. - if (Array.isArray(name)) - return null; - return name; - } - return null; -} -exports.groupNameOf = groupNameOf; -function identity(x) { - return x; -} -exports.identity = identity; -/** - * Composes functions from left to right. - */ -function compose(fns) { - return fns.reduce((composed, fn) => (x, ...args) => fn(composed(x, ...args), ...args), identity); -} -exports.compose = compose; -/** - * Composes single-argument async functions from left to right. - */ -function composeAsync(fns) { - return fns.reduce((composed, fn) => (x) => __awaiter(this, void 0, void 0, function* () { - const value = yield composed(x); - return fn(value); - }), identity); -} -exports.composeAsync = composeAsync; -function capitalizeFirst(str) { - return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase()); -} -exports.capitalizeFirst = capitalizeFirst; -function error(message = '') { - throw new Error(message); -} -exports.error = error; -function copyAttributes(target, source) { - const { attributes } = source; - const exclude = new Set(['id', 'className']); - for (const [key, value] of Object.entries(attributes)) { - if (!exclude.has(key)) { - target.attr(key, value); - } - } -} -exports.copyAttributes = copyAttributes; -function defined(x) { - return x !== undefined && x !== null && !Number.isNaN(x); -} -exports.defined = defined; -function random(a, b) { - return a + (b - a) * Math.random(); -} -exports.random = random; -function useMemo(compute) { - const map = new Map(); - return (key) => { - if (map.has(key)) - return map.get(key); - const value = compute(key); - map.set(key, value); - return value; - }; -} -exports.useMemo = useMemo; -function appendTransform(node, transform) { - const { transform: preTransform } = node.style; - const unset = (d) => d === 'none' || d === undefined; - const prefix = unset(preTransform) ? '' : preTransform; - node.style.transform = `${prefix} ${transform}`.trimStart(); -} -exports.appendTransform = appendTransform; -function subObject(obj, prefix) { - return maybeSubObject(obj, prefix) || {}; -} -exports.subObject = subObject; -function maybeSubObject(obj, prefix) { - const entries = Object.entries(obj || {}) - .filter(([key]) => key.startsWith(prefix)) - .map(([key, value]) => [(0, util_1.lowerFirst)(key.replace(prefix, '').trim()), value]) - .filter(([key]) => !!key); - return entries.length === 0 ? null : Object.fromEntries(entries); -} -exports.maybeSubObject = maybeSubObject; -function prefixObject(obj, prefix) { - return Object.fromEntries(Object.entries(obj).map(([key, value]) => { - return [`${prefix}${(0, util_1.upperFirst)(key)}`, value]; - })); -} -exports.prefixObject = prefixObject; -function filterPrefixObject(obj, prefix) { - return Object.fromEntries(Object.entries(obj).filter(([key]) => prefix.find((p) => key.startsWith(p)))); -} -exports.filterPrefixObject = filterPrefixObject; -function omitPrefixObject(obj, ...prefixes) { - return Object.fromEntries(Object.entries(obj).filter(([key]) => prefixes.every((prefix) => !key.startsWith(prefix)))); -} -exports.omitPrefixObject = omitPrefixObject; -function maybePercentage(x, size) { - if (x === undefined) - return null; - if (typeof x === 'number') - return x; - const px = +x.replace('%', ''); - return Number.isNaN(px) ? null : (px / 100) * size; -} -exports.maybePercentage = maybePercentage; -function isStrictObject(d) { - return (typeof d === 'object' && - !(d instanceof Date) && - d !== null && - !Array.isArray(d)); -} -exports.isStrictObject = isStrictObject; -function isUnset(value) { - return value === null || value === false; -} -exports.isUnset = isUnset; -function deepAssign(dist, src, maxLevel = 5, level = 0) { - if (level >= maxLevel) - return; - for (const key of Object.keys(src)) { - const value = src[key]; - if (!(0, util_1.isPlainObject)(value) || !(0, util_1.isPlainObject)(dist[key])) { - dist[key] = value; - } - else { - deepAssign(dist[key], value, maxLevel, level + 1); - } - } - return dist; -} -exports.deepAssign = deepAssign; -//# sourceMappingURL=helper.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815830, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.combine = exports.divide = exports.unique = exports.isFlatArray = exports.lastOf = exports.firstOf = exports.transpose = exports.indexOf = exports.mapObject = void 0; -/** - * Calls a defined callback function on each key:value of a object, - * and returns a object contains the result. - */ -function mapObject(object, callbackfn) { - return Object.entries(object).reduce((obj, [key, value]) => { - obj[key] = callbackfn(value, key, object); - return obj; - }, {}); -} -exports.mapObject = mapObject; -function indexOf(array) { - return array.map((_, i) => i); -} -exports.indexOf = indexOf; -/** - * @example [[1, 2, 3], ['a', 'b', 'c']] => [[1, 'a'], [2, 'b'], [3, 'c']] - */ -function transpose(matrix) { - const row = matrix.length; - const col = matrix[0].length; - // Note: new Array(col).fill(new Array(row)) is not ok!!! - // Because in this case it will fill new Array(col) with the same array: new Array(row). - const transposed = new Array(col).fill(0).map(() => new Array(row)); - for (let i = 0; i < col; i++) { - for (let j = 0; j < row; j++) { - transposed[i][j] = matrix[j][i]; - } - } - return transposed; -} -exports.transpose = transpose; -function firstOf(array) { - return array[0]; -} -exports.firstOf = firstOf; -function lastOf(array) { - return array[array.length - 1]; -} -exports.lastOf = lastOf; -function isFlatArray(array) { - return !array.some(Array.isArray); -} -exports.isFlatArray = isFlatArray; -function unique(array) { - return Array.from(new Set(array)); -} -exports.unique = unique; -function divide(array, callbackfn) { - const result = [[], []]; - array.forEach((item) => { - result[callbackfn(item) ? 0 : 1].push(item); - }); - return result; -} -exports.divide = divide; -function comb(array, len = array.length) { - if (len === 1) - return array.map((item) => [item]); - const result = []; - for (let i = 0; i < array.length; i++) { - const rest = array.slice(i + 1); - const restComb = comb(rest, len - 1); - restComb.forEach((comb) => { - result.push([array[i], ...comb]); - }); - } - return result; -} -/** - * get all combinations of two elements in an array - * @example [1, 2, 3] => [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]] - * @param array - * @returns - */ -function combine(array) { - if (array.length === 1) - return [array]; - const result = []; - for (let i = 1; i <= array.length; i++) { - result.push(...comb(array, i)); - } - return result; -} -exports.combine = combine; -//# sourceMappingURL=array.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815831, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeTitle = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const dateFormat_1 = require("../utils/dateFormat"); -const helper_2 = require("./utils/helper"); -/** - * Infer title channel from x-position channel. - */ -const MaybeTitle = (options = {}) => { - const { channel = 'x' } = options; - return (I, mark) => { - const { encode } = mark; - const { tooltip } = mark; - if ((0, helper_1.isUnset)(tooltip)) - return [I, mark]; - const { title } = tooltip; - if (title !== undefined) - return [I, mark]; - const titles = Object.keys(encode) - .filter((key) => key.startsWith(channel)) - .filter((key) => !encode[key].inferred) - .map((key) => (0, helper_2.columnOf)(encode, key)) - .filter(([T]) => T) - .map((d) => d[0]); - if (titles.length === 0) - return [I, mark]; - const T = []; - for (const i of I) { - T[i] = { - value: titles - .map((t) => t[i] instanceof Date ? (0, dateFormat_1.dynamicFormatDateTime)(t[i]) : t[i]) - .join(', '), - }; - } - return [ - I, - (0, util_1.deepMix)({}, mark, { - tooltip: { - title: T, - }, - }), - ]; - }; -}; -exports.MaybeTitle = MaybeTitle; -exports.MaybeTitle.props = {}; -//# sourceMappingURL=maybeTitle.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/dateFormat":1751263815832,"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815832, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.dynamicFormatDateTime = void 0; -function fillZero(digit) { - if (Math.abs(digit) > 10) - return String(digit); - return digit.toString().padStart(2, '0'); -} -function dynamicFormatDateTime(date) { - const year = date.getFullYear(); - const month = fillZero(date.getMonth() + 1); - const day = fillZero(date.getDate()); - const yyyyMMDD = `${year}-${month}-${day}`; - const hour = date.getHours(); - const minutes = date.getMinutes(); - const seconds = date.getSeconds(); - if (hour || minutes || seconds) - return `${yyyyMMDD} ${fillZero(hour)}:${fillZero(minutes)}:${fillZero(seconds)}`; - return yyyyMMDD; -} -exports.dynamicFormatDateTime = dynamicFormatDateTime; -//# sourceMappingURL=dateFormat.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815833, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeZeroX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add zero constant encode for x channel. - * This is useful for interval geometry. - */ -const MaybeZeroX = () => { - return (I, mark) => { - const { encode } = mark; - const { x } = encode; - if (x !== undefined) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { x: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) }, - scale: { x: { guide: null } }, - }), - ]; - }; -}; -exports.MaybeZeroX = MaybeZeroX; -exports.MaybeZeroX.props = {}; -//# sourceMappingURL=maybeZeroX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815834, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeZeroY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add zero constant encode for y channel. - */ -const MaybeZeroY = () => { - return (I, mark) => { - const { encode } = mark; - const { y } = encode; - if (y !== undefined) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { y: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) }, - scale: { y: { guide: null } }, - }), - ]; - }; -}; -exports.MaybeZeroY = MaybeZeroY; -exports.MaybeZeroY.props = {}; -//# sourceMappingURL=maybeZeroY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815835, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeZeroZ = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add zero constant encode for z channel. - */ -const MaybeZeroZ = () => { - return (I, mark) => { - const { encode } = mark; - const { z } = encode; - if (z !== undefined) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { z: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) }, - scale: { z: { guide: null } }, - }), - ]; - }; -}; -exports.MaybeZeroZ = MaybeZeroZ; -exports.MaybeZeroZ.props = {}; -//# sourceMappingURL=maybeZeroZ.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815836, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeSize = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeSize = () => { - return (I, mark) => { - const { encode } = mark; - const { size } = encode; - if (size !== undefined) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { encode: { size: (0, helper_1.visualColumn)((0, helper_1.constant)(I, 3)) } }), - ]; - }; -}; -exports.MaybeSize = MaybeSize; -exports.MaybeSize.props = {}; -//# sourceMappingURL=maybeSize.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815837, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeKey = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Infer key for every element. - */ -const MaybeKey = () => { - return (I, mark) => { - const { encode } = mark; - const { key } = encode, rest = __rest(encode, ["key"]); - if (key !== undefined) - return [I, mark]; - const values = Object.values(rest).map(({ value }) => value); - const K = I.map((i) => values - .filter(Array.isArray) - .map((V) => V[i]) - .join('-')); - return [I, (0, util_1.deepMix)({}, mark, { encode: { key: (0, helper_1.column)(K) } })]; - }; -}; -exports.MaybeKey = MaybeKey; -exports.MaybeKey.props = {}; -//# sourceMappingURL=maybeKey.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815838, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeSeries = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Assume color channel is series channel. - */ -const MaybeSeries = () => { - return (I, mark) => { - const { encode } = mark; - const { series, color } = encode; - if (series !== undefined || color === undefined) - return [I, mark]; - const [C, fc] = (0, helper_1.columnOf)(encode, 'color'); - return [I, (0, util_1.deepMix)({}, mark, { encode: { series: (0, helper_1.column)(C, fc) } })]; - }; -}; -exports.MaybeSeries = MaybeSeries; -exports.MaybeSeries.props = {}; -//# sourceMappingURL=maybeSeries.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815839, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeTupleY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeTupleY = () => { - return (I, mark) => { - const { data } = mark; - if (!Array.isArray(data) || data.some(helper_1.isObject)) - return [I, mark]; - return [I, (0, util_1.deepMix)({}, mark, { encode: { y: (0, helper_1.column)(data) } })]; - }; -}; -exports.MaybeTupleY = MaybeTupleY; -exports.MaybeTupleY.props = {}; -//# sourceMappingURL=maybeTupleY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815840, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeTupleX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeTupleX = () => { - return (I, mark) => { - const { data } = mark; - if (!Array.isArray(data) || data.some(helper_1.isObject)) - return [I, mark]; - return [I, (0, util_1.deepMix)({}, mark, { encode: { x: (0, helper_1.column)(data) } })]; - }; -}; -exports.MaybeTupleX = MaybeTupleX; -exports.MaybeTupleX.props = {}; -//# sourceMappingURL=maybeTupleX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815841, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeIdentityY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeIdentityY = () => { - return (I, mark) => { - const { encode } = mark; - const { y1 } = encode; - if (y1) - return [I, mark]; - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - return [I, (0, util_1.deepMix)({}, mark, { encode: { y1: (0, helper_1.column)([...Y]) } })]; - }; -}; -exports.MaybeIdentityY = MaybeIdentityY; -exports.MaybeIdentityY.props = {}; -//# sourceMappingURL=maybeIdentityY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815842, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeIdentityX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeIdentityX = () => { - return (I, mark) => { - const { encode } = mark; - const { x1 } = encode; - if (x1) - return [I, mark]; - const [X] = (0, helper_1.columnOf)(encode, 'x'); - return [I, (0, util_1.deepMix)({}, mark, { encode: { x1: (0, helper_1.column)([...X]) } })]; - }; -}; -exports.MaybeIdentityX = MaybeIdentityX; -exports.MaybeIdentityX.props = {}; -//# sourceMappingURL=maybeIdentityX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815843, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeDefaultX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add a default encode for rangeX - * when data is just an array - */ -const MaybeDefaultX = () => { - return (I, mark) => { - const { data } = mark; - if (Array.isArray(data) && - (data.every(Array.isArray) || !data.some(helper_1.isObject))) { - const extractX = (data, index) => Array.isArray(data[0]) - ? data.map((item) => item[index]) - : [data[index]]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { - x: (0, helper_1.column)(extractX(data, 0)), - x1: (0, helper_1.column)(extractX(data, 1)), - }, - }), - ]; - } - return [I, mark]; - }; -}; -exports.MaybeDefaultX = MaybeDefaultX; -exports.MaybeDefaultX.props = {}; -//# sourceMappingURL=maybeDefaultX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815844, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeDefaultY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add a default encode for rangeY - * when data is just an array - */ -const MaybeDefaultY = () => { - return (I, mark) => { - const { data } = mark; - if (Array.isArray(data) && - (data.every(Array.isArray) || !data.some(helper_1.isObject))) { - const extractY = (data, index) => Array.isArray(data[0]) - ? data.map((item) => item[index]) - : [data[index]]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { - y: (0, helper_1.column)(extractY(data, 0)), - y1: (0, helper_1.column)(extractY(data, 1)), - }, - }), - ]; - } - return [I, mark]; - }; -}; -exports.MaybeDefaultY = MaybeDefaultY; -exports.MaybeDefaultY.props = {}; -//# sourceMappingURL=maybeDefaultY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815845, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeTooltip = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -/** - * Infer tooltip channel from specified channel. - */ -const MaybeTooltip = (options) => { - const { channel } = options; - return (I, mark) => { - const { encode, tooltip } = mark; - if ((0, helper_1.isUnset)(tooltip)) - return [I, mark]; - const { items = [] } = tooltip; - if (!items || items.length > 0) - return [I, mark]; - const channels = Array.isArray(channel) ? channel : [channel]; - const newItems = channels.flatMap((channel) => Object.keys(encode) - .filter((key) => key.startsWith(channel)) - .map((key) => { - const { field, value, inferred = false, aggregate } = encode[key]; - if (inferred) - return null; - // Do not show inferred column. - if (aggregate && value) - return { channel: key }; - if (field) - return { field }; - if (value) - return { channel: key }; - return null; - }) - .filter((d) => d !== null)); - return [I, (0, util_1.deepMix)({}, mark, { tooltip: { items: newItems } })]; - }; -}; -exports.MaybeTooltip = MaybeTooltip; -exports.MaybeTooltip.props = {}; -//# sourceMappingURL=maybeTooltip.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815846, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeZeroPadding = void 0; -const util_1 = require("@antv/util"); -/** - * Set padding of x and y scale to zero. - */ -const MaybeZeroPadding = () => { - return (I, mark) => { - return [ - I, - (0, util_1.deepMix)({ scale: { x: { padding: 0 }, y: { padding: 0 } } }, mark), - ]; - }; -}; -exports.MaybeZeroPadding = MaybeZeroPadding; -exports.MaybeZeroPadding.props = {}; -//# sourceMappingURL=maybeZeroPadding.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815847, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeVisualPosition = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Set visual position with style.x and style.y. - * The priority of style.x, style.y is higher than data. - */ -const MaybeVisualPosition = () => { - return (I, mark) => { - const { data, style = {} } = mark, restMark = __rest(mark, ["data", "style"]); - const { x: x0, y: y0 } = style, rest = __rest(style, ["x", "y"]); - if (x0 == undefined || y0 == undefined) - return [I, mark]; - const x = x0 || 0; - const y = y0 || 0; - return [ - [0], - (0, util_1.deepMix)({}, restMark, { - data: [0], - cartesian: true, - encode: { - x: (0, helper_1.column)([x]), - y: (0, helper_1.column)([y]), - }, - scale: { - x: { type: 'identity', independent: true, guide: null }, - y: { type: 'identity', independent: true, guide: null }, // hide axis - }, - style: rest, - }), - ]; - }; -}; -exports.MaybeVisualPosition = MaybeVisualPosition; -exports.MaybeVisualPosition.props = {}; -//# sourceMappingURL=maybeVisualPosition.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815848, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeFunctionAttribute = void 0; -const util_1 = require("@antv/util"); -/** - * Mark functional attribute constant. - */ -const MaybeFunctionAttribute = () => { - return (I, mark) => { - const { style = {} } = mark; - return [ - I, - (0, util_1.deepMix)({}, mark, { - style: Object.assign(Object.assign({}, style), Object.fromEntries(Object.entries(style) - .filter(([, v]) => typeof v === 'function') - .map(([k, v]) => [k, () => v]))), - }), - ]; - }; -}; -exports.MaybeFunctionAttribute = MaybeFunctionAttribute; -exports.MaybeFunctionAttribute.props = {}; -//# sourceMappingURL=maybeFunctionAttribute.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815849, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeTuple = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeTuple = () => { - return (I, mark) => { - const { data } = mark; - if (!Array.isArray(data) || data.some(helper_1.isObject)) - return [I, mark]; - const position = Array.isArray(data[0]) ? data : [data]; - const X = position.map((d) => d[0]); - const Y = position.map((d) => d[1]); - return [I, (0, util_1.deepMix)({}, mark, { encode: { x: (0, helper_1.column)(X), y: (0, helper_1.column)(Y) } })]; - }; -}; -exports.MaybeTuple = MaybeTuple; -exports.MaybeTuple.props = {}; -//# sourceMappingURL=maybeTuple.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815850, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaybeGradient = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -/** - * Add 3 constant encode for size channel. - * This is useful for point geometry. - */ -const MaybeGradient = () => { - return (I, mark) => { - const { style = {}, encode } = mark; - const { series } = encode; - const { gradient } = style; - if (!gradient || series) - return [I, mark]; - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { - series: (0, helper_1.visualColumn)((0, helper_1.constant)(I, undefined)), - }, - }), - ]; - }; -}; -exports.MaybeGradient = MaybeGradient; -exports.MaybeGradient.props = {}; -//# sourceMappingURL=maybeGradient.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815851, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DodgeX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -/** - * The dodge group marks into series by color or series channel, - * and then produce new series channel for each series by specified order, - * say to form horizontal "columns" by specified channels. - */ -const DodgeX = (options = {}) => { - const { groupBy = 'x', reverse = false, orderBy, padding } = options, rest = __rest(options, ["groupBy", "reverse", "orderBy", "padding"]); - return (I, mark) => { - const { data, encode, scale } = mark; - const { series: scaleSeries } = scale; - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - const [S] = (0, helper_1.maybeColumnOf)(encode, 'series', 'color'); - const domainSeries = (0, order_1.domainOf)(S, scaleSeries); - const newMark = (0, util_1.deepMix)({}, mark, { - scale: { - series: { - domain: domainSeries, - paddingInner: padding, - }, - }, - }); - // Create groups and apply specified order for each group. - const groups = (0, order_1.createGroups)(groupBy, I, mark); - const createComparator = (0, order_1.normalizeComparator)(orderBy); - if (!createComparator) { - return [I, (0, util_1.deepMix)(newMark, { encode: { series: (0, helper_1.column)(S) } })]; - } - // Sort and Update series for each mark related to series domain. - const comparator = createComparator(data, Y, S); - if (comparator) - (0, order_1.applyOrder)(groups, comparator); - const newS = new Array(I.length); - for (const G of groups) { - if (reverse) - G.reverse(); - for (let i = 0; i < G.length; i++) { - newS[G[i]] = domainSeries[i]; - } - } - return [ - I, - (0, util_1.deepMix)(newMark, { - encode: { - series: (0, helper_1.column)(orderBy ? newS : S), - }, - }), - ]; - }; -}; -exports.DodgeX = DodgeX; -exports.DodgeX.props = {}; -//# sourceMappingURL=dodgeX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815852, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StackEnter = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./utils/helper"); -/** - * Group marks by channels into groups and stacking their enterDelay - * to make marks show up groups by groups. - * It will update enterDelay channel for each mark by its enterDuration and group. - * @todo Support orderBy. - * @todo Sort among groups(e.g. reverse). - * @todo Stack enter in groups rather than between groups? - * @todo Auto inter this statistic for scaleInY animation in stacked interval? - * @todo All the groups shared the enterDuration? - */ -const StackEnter = (options) => { - const { groupBy = ['x'], reducer = (I, V) => V[I[0]], orderBy = null, reverse = false, duration, } = options; - return (I, mark) => { - const { encode } = mark; - // Extract group information by each specified channel, - // and skip if all values of channels are empty. - const by = Array.isArray(groupBy) ? groupBy : [groupBy]; - const groupEntries = by.map((k) => [k, (0, helper_1.columnOf)(encode, k)[0]]); - if (groupEntries.length === 0) - return [I, mark]; - // Nest group index and flatten them in right order among timeline. - // [[1, 2, 3, 4, 5, 6]] -> - // [[1, 2, 3], [4, 5, 6]] -> - // [[1], [2], [3], [4], [5], [6]] - let groups = [I]; - for (const [, V] of groupEntries) { - const newGroups = []; - for (const I of groups) { - const G = Array.from((0, d3_array_1.group)(I, (i) => V[i]).values()); - // @todo sort by x. - newGroups.push(...G); - } - groups = newGroups; - } - // const {color} = encode; - if (orderBy) { - const [V] = (0, helper_1.columnOf)(encode, orderBy); - if (V) - groups.sort((I, J) => reducer(I, V) - reducer(J, V)); - if (reverse) - groups.reverse(); - } - // Stack delay for each group. - const t = (duration || 3000) / groups.length; - const [ED] = duration - ? [(0, helper_1.constant)(I, t)] // If specified duration, generate enter duration for each. - : (0, helper_1.maybeColumnOf)(encode, 'enterDuration', (0, helper_1.constant)(I, t)); - const [EDL] = (0, helper_1.maybeColumnOf)(encode, 'enterDelay', (0, helper_1.constant)(I, 0)); - const newEnterDelay = new Array(I.length); - for (let i = 0, pd = 0; i < groups.length; i++) { - const I = groups[i]; - const maxDuration = (0, d3_array_1.max)(I, (i) => +ED[i]); - for (const j of I) - newEnterDelay[j] = +EDL[j] + pd; - pd += maxDuration; - } - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { - enterDuration: (0, helper_1.visualColumn)(ED), - enterDelay: (0, helper_1.visualColumn)(newEnterDelay), - }, - }), - ]; - }; -}; -exports.StackEnter = StackEnter; -exports.StackEnter.props = {}; -//# sourceMappingURL=stackEnter.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815853, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NormalizeY = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const helper_2 = require("./utils/helper"); -const order_1 = require("./utils/order"); -function normalizeBasis(basis) { - if (typeof basis === 'function') - return basis; - const registry = { - min: (I, Y) => (0, d3_array_1.min)(I, (i) => Y[+i]), - max: (I, Y) => (0, d3_array_1.max)(I, (i) => Y[+i]), - first: (I, Y) => Y[I[0]], - last: (I, Y) => Y[I[I.length - 1]], - mean: (I, Y) => (0, d3_array_1.mean)(I, (i) => Y[+i]), - median: (I, Y) => (0, d3_array_1.median)(I, (i) => Y[+i]), - sum: (I, Y) => (0, d3_array_1.sum)(I, (i) => Y[+i]), - deviation: (I, Y) => (0, d3_array_1.deviation)(I, (i) => Y[+i]), - }; - return registry[basis] || d3_array_1.max; -} -/** - * Group marks into series by specified channels, and then transform - * each series's value, say to transform them relative to some basis - * to apply a moving average. - */ -const NormalizeY = (options = {}) => { - const { groupBy = 'x', basis = 'max' } = options; - return (I, mark) => { - const { encode, tooltip } = mark; - const { x } = encode, rest = __rest(encode, ["x"]); - // Extract and create new channels starts with y, such as y, y1. - const Yn = Object.entries(rest) - .filter(([k]) => k.startsWith('y')) - .map(([k]) => [k, (0, helper_2.columnOf)(encode, k)[0]]); - const [, Y] = Yn.find(([k]) => k === 'y'); - const newYn = Yn.map(([k]) => [k, new Array(I.length)]); - // Group marks into series by specified keys. - const groups = (0, order_1.createGroups)(groupBy, I, mark); - // Transform y channels for each group based on basis. - const basisFunction = normalizeBasis(basis); - for (const I of groups) { - // Compute basis only base on y. - const basisValue = basisFunction(I, Y); - for (const i of I) { - for (let j = 0; j < Yn.length; j++) { - const [, V] = Yn[j]; - const [, newV] = newYn[j]; - newV[i] = +V[i] / basisValue; - } - } - } - const specifiedTooltip = (0, helper_1.isUnset)(tooltip) || ((tooltip === null || tooltip === void 0 ? void 0 : tooltip.items) && (tooltip === null || tooltip === void 0 ? void 0 : tooltip.items.length) !== 0); - return [ - I, - (0, util_1.deepMix)({}, mark, Object.assign({ encode: Object.fromEntries(newYn.map(([k, v]) => [k, (0, helper_2.column)(v, (0, helper_2.columnOf)(encode, k)[1])])) }, (!specifiedTooltip && - encode.y0 && { - tooltip: { items: [{ channel: 'y0' }] }, - }))), - ]; - }; -}; -exports.NormalizeY = NormalizeY; -exports.NormalizeY.props = {}; -//# sourceMappingURL=normalizeY.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815854, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Jitter = exports.interpolate = exports.rangeOf = void 0; -const scale_1 = require("@antv/scale"); -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -function rangeOf(value, scaleOptions, padding) { - if (value === null) - return [-0.5, 0.5]; - const domain = (0, order_1.domainOf)(value, scaleOptions); - const scale = new scale_1.Band({ domain, range: [0, 1], padding }); - const step = scale.getBandWidth(); - return [-step / 2, step / 2]; -} -exports.rangeOf = rangeOf; -function interpolate(t, a, b) { - return a * (1 - t) + b * t; -} -exports.interpolate = interpolate; -/** - * The jitter transform produce dx and dy channels for marks (especially for point) - * with ordinal x and y dimension, say to make them jitter in their own space. - */ -const Jitter = (options = {}) => { - const { padding = 0, paddingX = padding, paddingY = padding, random = Math.random, } = options; - return (I, mark) => { - const { encode, scale } = mark; - const { x: scaleX, y: scaleY } = scale; - const [X] = (0, helper_1.columnOf)(encode, 'x'); - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - const rangeX = rangeOf(X, scaleX, paddingX); - const rangeY = rangeOf(Y, scaleY, paddingY); - const DY = I.map(() => interpolate(random(), ...rangeY)); - const DX = I.map(() => interpolate(random(), ...rangeX)); - return [ - I, - (0, util_1.deepMix)({ - scale: { - x: { padding: 0.5 }, - y: { padding: 0.5 }, - }, - }, mark, { - encode: { dy: (0, helper_1.column)(DY), dx: (0, helper_1.column)(DX) }, - }), - ]; - }; -}; -exports.Jitter = Jitter; -exports.Jitter.props = {}; -//# sourceMappingURL=jitter.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815855, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JitterX = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const jitter_1 = require("./jitter"); -/** - * The JitterX transform produce dy channels for marks (especially for point) - * with ordinal x and y dimension, say to make them jitter in their own space. - */ -const JitterX = (options = {}) => { - const { padding = 0, random = Math.random } = options; - return (I, mark) => { - const { encode, scale } = mark; - const { x: scaleX } = scale; - const [X] = (0, helper_1.columnOf)(encode, 'x'); - const rangeX = (0, jitter_1.rangeOf)(X, scaleX, padding); - const DX = I.map(() => (0, jitter_1.interpolate)(random(), ...rangeX)); - return [ - I, - (0, util_1.deepMix)({ scale: { x: { padding: 0.5 } } }, mark, { - encode: { dx: (0, helper_1.column)(DX) }, - }), - ]; - }; -}; -exports.JitterX = JitterX; -exports.JitterX.props = {}; -//# sourceMappingURL=jitterX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./jitter":1751263815854}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815856, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JitterY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const jitter_1 = require("./jitter"); -/** - * The JitterY transform produce dy channels for marks (especially for point) - * with ordinal x and y dimension, say to make them jitter in their own space. - */ -const JitterY = (options = {}) => { - const { padding = 0, random = Math.random } = options; - return (I, mark) => { - const { encode, scale } = mark; - const { y: scaleY } = scale; - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - const rangeY = (0, jitter_1.rangeOf)(Y, scaleY, padding); - const DY = I.map(() => (0, jitter_1.interpolate)(random(), ...rangeY)); - return [ - I, - (0, util_1.deepMix)({ scale: { y: { padding: 0.5 } } }, mark, { - encode: { dy: (0, helper_1.column)(DY) }, - }), - ]; - }; -}; -exports.JitterY = JitterY; -exports.JitterY.props = {}; -//# sourceMappingURL=jitterY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./jitter":1751263815854}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815857, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SymmetryY = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -/** - * The SymmetryY transform apply offset for y channels, say to transform - * them to be symmetry. - */ -const SymmetryY = (options = {}) => { - const { groupBy = 'x' } = options; - return (I, mark) => { - const { encode } = mark; - const { x } = encode, rest = __rest(encode, ["x"]); - // Extract and create new channels starts with y, such as y, y1. - const Yn = Object.entries(rest) - .filter(([k]) => k.startsWith('y')) - .map(([k]) => [k, (0, helper_1.columnOf)(encode, k)[0]]); - const newYn = Yn.map(([k]) => [k, new Array(I.length)]); - // Group marks into series by specified keys. - const groups = (0, order_1.createGroups)(groupBy, I, mark); - const MY = new Array(groups.length); - for (let i = 0; i < groups.length; i++) { - const I = groups[i]; - const Y = I.flatMap((i) => Yn.map(([, V]) => +V[i])); - const [minY, maxY] = (0, d3_array_1.extent)(Y); - MY[i] = (minY + maxY) / 2; - } - const maxMiddleY = Math.max(...MY); - for (let m = 0; m < groups.length; m++) { - const offset = maxMiddleY - MY[m]; - const I = groups[m]; - for (const i of I) { - for (let j = 0; j < Yn.length; j++) { - const [, V] = Yn[j]; - const [, newV] = newYn[j]; - newV[i] = +V[i] + offset; - } - } - } - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: Object.fromEntries(newYn.map(([k, v]) => [k, (0, helper_1.column)(v, (0, helper_1.columnOf)(encode, k)[1])])), - }), - ]; - }; -}; -exports.SymmetryY = SymmetryY; -exports.SymmetryY.props = {}; -//# sourceMappingURL=symmetryY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815858, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DiffY = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -/** - * The DiffY transform apply offset for y0 channels. - * Keep y unchanged, set y1 = max(otherY), if y1 > y, remove the data. - */ -const DiffY = (options = {}) => { - const { groupBy = 'x' } = options; - return (I, mark) => { - const { encode } = mark; - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - const [_, fy1] = (0, helper_1.columnOf)(encode, 'y1'); - // Create groups and apply specified order for each group. - const groups = (0, order_1.createGroups)(groupBy, I, mark); - // Only adjust Y1 channel. - const newY1 = new Array(I.length); - for (const G of groups) { - const YG = G.map((i) => +Y[i]); - // Process each series. - for (let idx = 0; idx < G.length; idx++) { - const i = G[idx]; - // Get the max Y of current group with current Y exclude. - const max = Math.max(...YG.filter((_, _i) => _i !== idx)); - // Diff Y value. - newY1[i] = +Y[i] > max ? max : Y[i]; - } - } - return [ - I, - (0, util_1.deepMix)({}, mark, { - encode: { - y1: (0, helper_1.column)(newY1, fy1), - }, - }), - ]; - }; -}; -exports.DiffY = DiffY; -exports.DiffY.props = {}; -//# sourceMappingURL=diffY.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815859, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Select = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./utils/helper"); -const order_1 = require("./utils/order"); -function first(I, V) { - return [I[0]]; -} -function last(I, V) { - const i = I.length - 1; - return [I[i]]; -} -function max(I, V) { - const i = (0, d3_array_1.maxIndex)(I, (i) => V[i]); - return [I[i]]; -} -function min(I, V) { - const i = (0, d3_array_1.minIndex)(I, (i) => V[i]); - return [I[i]]; -} -function normalizeSelector(selector) { - if (typeof selector === 'function') - return selector; - const registry = { first, last, max, min }; - return registry[selector] || first; -} -/** - * The select transform groups marks with specified channels, and - * filter index by specified selector for each series, say to - * pull a single or multiple values out of each series. - */ -const Select = (options = {}) => { - const { groupBy = 'series', channel, selector } = options; - return (I, mark) => { - const { encode } = mark; - const groups = (0, order_1.createGroups)(groupBy, I, mark); - const [V] = (0, helper_1.columnOf)(encode, channel); - const selectFunction = normalizeSelector(selector); - return [groups.flatMap((GI) => selectFunction(GI, V)), mark]; - }; -}; -exports.Select = Select; -exports.Select.props = {}; -//# sourceMappingURL=select.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825,"./utils/order":1751263815828}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815860, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SelectX = void 0; -const select_1 = require("./select"); -/** - * The selectX transform filter index by y channel. - */ -const SelectX = (options = {}) => { - const { selector } = options, rest = __rest(options, ["selector"]); - return (0, select_1.Select)(Object.assign({ channel: 'x', selector }, rest)); -}; -exports.SelectX = SelectX; -exports.SelectX.props = {}; -//# sourceMappingURL=selectX.js.map -}, function(modId) { var map = {"./select":1751263815859}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815861, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SelectY = void 0; -const select_1 = require("./select"); -/** - * The selectY transform filter index by y channel. - */ -const SelectY = (options = {}) => { - const { selector } = options, rest = __rest(options, ["selector"]); - return (0, select_1.Select)(Object.assign({ channel: 'y', selector }, rest)); -}; -exports.SelectY = SelectY; -exports.SelectY.props = {}; -//# sourceMappingURL=selectY.js.map -}, function(modId) { var map = {"./select":1751263815859}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815862, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GroupX = void 0; -const group_1 = require("./group"); -/** - * The GroupX transform group data by x channel, and aggregate. - */ -const GroupX = (options = {}) => { - return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['x', 'color', 'series'] })); -}; -exports.GroupX = GroupX; -exports.GroupX.props = {}; -//# sourceMappingURL=groupX.js.map -}, function(modId) { var map = {"./group":1751263815863}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815863, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Group = void 0; -const order_1 = require("./utils/order"); -const groupN_1 = require("./groupN"); -/** - * The Group transform group data by x and y channels, and aggregate. - */ -const Group = (options = {}) => { - const { channels = ['x', 'y'] } = options, rest = __rest(options, ["channels"]); - const groupBy = (I, mark) => (0, order_1.createGroups)(channels, I, mark); - return (0, groupN_1.GroupN)(Object.assign(Object.assign({}, rest), { groupBy })); -}; -exports.Group = Group; -exports.Group.props = {}; -//# sourceMappingURL=group.js.map -}, function(modId) { var map = {"./utils/order":1751263815828,"./groupN":1751263815864}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815864, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GroupN = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const array_1 = require("../utils/array"); -const helper_1 = require("./utils/helper"); -function builtinFormatter(summary) { - return (d) => (d === null ? summary : `${summary} of ${d}`); -} -function normalizeReducer(reducer) { - if (typeof reducer === 'function') - return [reducer, null]; - const registry = { mean, max, count, first, last, sum, min, median }; - const reducerFunction = registry[reducer]; - if (!reducerFunction) - throw new Error(`Unknown reducer: ${reducer}.`); - return reducerFunction(); -} -function mean() { - const reducer = (I, V) => (0, d3_array_1.mean)(I, (i) => +V[i]); - const formatter = builtinFormatter('mean'); - return [reducer, formatter]; -} -function median() { - const reducer = (I, V) => (0, d3_array_1.median)(I, (i) => +V[i]); - const formatter = builtinFormatter('median'); - return [reducer, formatter]; -} -function max() { - const reducer = (I, V) => (0, d3_array_1.max)(I, (i) => +V[i]); - const formatter = builtinFormatter('max'); - return [reducer, formatter]; -} -function min() { - const reducer = (I, V) => (0, d3_array_1.min)(I, (i) => +V[i]); - const formatter = builtinFormatter('min'); - return [reducer, formatter]; -} -function count() { - const reducer = (I, V) => I.length; - const formatter = builtinFormatter('count'); - return [reducer, formatter]; -} -function sum() { - const reducer = (I, V) => (0, d3_array_1.sum)(I, (i) => +V[i]); - const formatter = builtinFormatter('sum'); - return [reducer, formatter]; -} -function first() { - const reducer = (I, V) => V[I[0]]; - const formatter = builtinFormatter('first'); - return [reducer, formatter]; -} -function last() { - const reducer = (I, V) => V[I[I.length - 1]]; - const formatter = builtinFormatter('last'); - return [reducer, formatter]; -} -/** - * The Group transform group data by x and y channels, and aggregate. - */ -const GroupN = (options = {}) => { - const { groupBy } = options, rest = __rest(options, ["groupBy"]); - return (I, mark) => { - const { data, encode } = mark; - const groups = groupBy(I, mark); - if (!groups) - return [I, mark]; - // Extract field from from channel - // x1 from x, y1 from y, etc,. - const maybeFrom = (field, reducer) => { - if (field) - return field; - const { from } = reducer; - if (!from) - return field; - const [, field1] = (0, helper_1.columnOf)(encode, from); - return field1; - }; - const outputs = Object.entries(rest).map(([channel, reducer]) => { - const [reducerFunction, formatter] = normalizeReducer(reducer); - const [V, field] = (0, helper_1.columnOf)(encode, channel); - const field1 = maybeFrom(field, reducer); - const RV = groups.map((I) => reducerFunction(I, V !== null && V !== void 0 ? V : data)); - return [ - channel, - Object.assign(Object.assign({}, (0, helper_1.nonConstantColumn)(RV, (formatter === null || formatter === void 0 ? void 0 : formatter(field1)) || field1)), { aggregate: true }), - ]; - }); - const reducedColumns = Object.keys(encode).map((key) => { - const [V, fv] = (0, helper_1.columnOf)(encode, key); - const GV = groups.map((I) => V[I[0]]); - return [key, (0, helper_1.column)(GV, fv)]; - }); - const GD = groups.map((I) => data[I[0]]); - const GI = (0, array_1.indexOf)(groups); - return [ - GI, - (0, util_1.deepMix)({}, mark, { - data: GD, - encode: Object.fromEntries([...reducedColumns, ...outputs]), - }), - ]; - }; -}; -exports.GroupN = GroupN; -exports.GroupN.props = {}; -//# sourceMappingURL=groupN.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815865, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GroupY = void 0; -const group_1 = require("./group"); -/** - * The GroupY transform group data by x channel, and aggregate. - */ -const GroupY = (options = {}) => { - return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['y', 'color', 'series'] })); -}; -exports.GroupY = GroupY; -exports.GroupY.props = {}; -//# sourceMappingURL=groupY.js.map -}, function(modId) { var map = {"./group":1751263815863}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815866, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GroupColor = void 0; -const group_1 = require("./group"); -/** - * The GroupColor transform group data by x channel, and aggregate. - */ -const GroupColor = (options = {}) => { - return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['color'] })); -}; -exports.GroupColor = GroupColor; -exports.GroupColor.props = {}; -//# sourceMappingURL=groupColor.js.map -}, function(modId) { var map = {"./group":1751263815863}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815867, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SortX = void 0; -const sort_1 = require("./sort"); -/** - * Sort domain of x scale of mark groups by groups. - */ -const SortX = (options = {}) => { - return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'x' })); -}; -exports.SortX = SortX; -exports.SortX.props = {}; -//# sourceMappingURL=sortX.js.map -}, function(modId) { var map = {"./sort":1751263815868}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815868, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sort = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./utils/helper"); -function createReducer(channel, options, encode) { - const { by = channel, reducer = 'max' } = options; - const [V] = (0, helper_1.columnOf)(encode, by); - if (typeof reducer === 'function') - return (GI) => reducer(GI, V); - if (reducer === 'max') - return (GI) => (0, d3_array_1.max)(GI, (i) => +V[i]); - if (reducer === 'min') - return (GI) => (0, d3_array_1.min)(GI, (i) => +V[i]); - if (reducer === 'sum') - return (GI) => (0, d3_array_1.sum)(GI, (i) => +V[i]); - if (reducer === 'median') - return (GI) => (0, d3_array_1.median)(GI, (i) => +V[i]); - if (reducer === 'mean') - return (GI) => (0, d3_array_1.mean)(GI, (i) => +V[i]); - if (reducer === 'first') - return (GI) => V[GI[0]]; - if (reducer === 'last') - return (GI) => V[GI[GI.length - 1]]; - throw new Error(`Unknown reducer: ${reducer}`); -} -// If domain is specified, only sort data in the domain. -function filterIndex(I, values, specifiedDomain) { - if (!Array.isArray(specifiedDomain)) - return I; - const domain = new Set(specifiedDomain); - return I.filter((i) => domain.has(values[i])); -} -/** - * Sort marks groups by groups. - */ -const Sort = (options = {}) => { - return (I, mark) => { - const { reverse, slice, channel, by, ordinal = true, reducer } = options; - const { encode, scale = {} } = mark; - const domain = scale[channel].domain; - const [V] = (0, helper_1.columnOf)(encode, by !== null && by !== void 0 ? by : channel); - const [T] = (0, helper_1.columnOf)(encode, channel); - const normalizeReducer = createReducer(channel, { by, reducer }, encode); - const SI = filterIndex(I, T, domain); - const sortedDomain = (0, d3_array_1.groupSort)(SI, normalizeReducer, (i) => T[i]); - // when ordinal is true, do not change the index of the data. - const sortedI = !ordinal ? (0, d3_array_1.sort)(I, (i) => V[i]) : I; - if (reverse) { - !ordinal && sortedI.reverse(); - sortedDomain.reverse(); - } - const s = typeof slice === 'number' ? [0, slice] : slice; - const slicedDomain = slice ? sortedDomain.slice(...s) : sortedDomain; - return [ - sortedI, - (0, util_1.deepMix)(mark, { scale: { [channel]: { domain: slicedDomain } } }), - ]; - }; -}; -exports.Sort = Sort; -exports.Sort.props = {}; -//# sourceMappingURL=sort.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815869, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SortColor = void 0; -const sort_1 = require("./sort"); -/** - * Sort domain of x scale of mark groups by groups. - */ -const SortColor = (options = {}) => { - return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'color' })); -}; -exports.SortColor = SortColor; -exports.SortColor.props = {}; -//# sourceMappingURL=sortColor.js.map -}, function(modId) { var map = {"./sort":1751263815868}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815870, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SortY = void 0; -const sort_1 = require("./sort"); -/** - * Sort domain of x scale of mark groups by groups. - */ -const SortY = (options = {}) => { - return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'y' })); -}; -exports.SortY = SortY; -exports.SortY.props = {}; -//# sourceMappingURL=sortY.js.map -}, function(modId) { var map = {"./sort":1751263815868}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815871, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FlexX = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./utils/helper"); -function valueOf(data, field) { - if (typeof field === 'string') - return data.map((d) => d[field]); - return data.map(field); -} -function createReducer(reducer, V) { - if (typeof reducer === 'function') - return (GI) => reducer(GI, V); - if (reducer === 'sum') - return (GI) => (0, d3_array_1.sum)(GI, (i) => +V[i]); - throw new Error(`Unknown reducer: ${reducer}`); -} -/** - * Produce flex options from data for x scale. - */ -const FlexX = (options = {}) => { - const { field, channel = 'y', reducer = 'sum' } = options; - return (I, mark) => { - const { data, encode } = mark; - const [x] = (0, helper_1.columnOf)(encode, 'x'); - const V = field ? valueOf(data, field) : (0, helper_1.columnOf)(encode, channel)[0]; - const reducerFunction = createReducer(reducer, V); - const flex = (0, d3_array_1.rollups)(I, reducerFunction, (i) => x[i]).map((d) => d[1]); - return [I, (0, util_1.deepMix)({}, mark, { scale: { x: { flex } } })]; - }; -}; -exports.FlexX = FlexX; -exports.FlexX.props = {}; -//# sourceMappingURL=flexX.js.map -}, function(modId) { var map = {"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815872, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Pack = void 0; -const util_1 = require("@antv/util"); -const vector_1 = require("../utils/vector"); -function pack(options) { - const { padding = 0, direction = 'col' } = options; - return (P, count, layout) => { - const pcount = P.length; - if (pcount === 0) - return []; - // col * row >= count - // row is close to col * aspect, so - // col * (col * aspect) >= count - const { innerWidth, innerHeight } = layout; - const aspect = innerHeight / innerWidth; - let col = Math.ceil(Math.sqrt(count / aspect)); - // Increase col to avoid total height of packed shape - // being large than height of bbox. - let size = innerWidth / col; - let row = Math.ceil(count / col); - let h0 = row * size; - while (h0 > innerHeight) { - col = col + 1; - size = innerWidth / col; - row = Math.ceil(count / col); - h0 = row * size; - } - // Some offset to increase the space usage. - const space = innerHeight - row * size; - const intervalY = row <= 1 ? 0 : space / (row - 1); - const [offsetX, offsetY] = row <= 1 - ? [ - (innerWidth - pcount * size) / (pcount - 1), - (innerHeight - size) / 2, - ] - : [0, 0]; - return P.map((points, m) => { - const [x, y, width, height] = (0, vector_1.calcBBox)(points); - const i = direction === 'col' ? m % col : Math.floor(m / row); - const j = direction === 'col' ? Math.floor(m / col) : m % row; - const newX = i * size; - const newY = (row - j - 1) * size + space; - const sx = (size - padding) / width; - const sy = (size - padding) / height; - // Translate the shape and mark to make sure the center of - // shape is overlap before and after scale transformation. - const tx = newX - x + offsetX * i + (1 / 2) * padding; - const ty = newY - y - intervalY * j - offsetY + (1 / 2) * padding; - return `translate(${tx}, ${ty}) scale(${sx}, ${sy})`; - }); - }; -} -/** - * Uniform pack to avid overlap. - * @todo Improve or change algorithm to increase space usage. - * @todo Take some special case into account. - */ -const Pack = (options) => { - return (I, mark) => { - return [I, (0, util_1.deepMix)({}, mark, { modifier: pack(options), axis: false })]; - }; -}; -exports.Pack = Pack; -exports.Pack.props = {}; -//# sourceMappingURL=pack.js.map -}, function(modId) { var map = {"../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815873, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.mid = exports.calcBBox = exports.angleBetween = exports.angleWithQuadrant = exports.angle = exports.dist = exports.add = exports.sub = void 0; -function sub([x1, y1], [x2, y2]) { - return [x1 - x2, y1 - y2]; -} -exports.sub = sub; -function add([x1, y1], [x2, y2]) { - return [x1 + x2, y1 + y2]; -} -exports.add = add; -function dist([x0, y0], [x1, y1]) { - return Math.sqrt(Math.pow((x0 - x1), 2) + Math.pow((y0 - y1), 2)); -} -exports.dist = dist; -/** - * Calculate angle of vector [x, y]. - */ -function angle([x, y]) { - return Math.atan2(y, x); -} -exports.angle = angle; -/** - * Calculate angle of [x, y], then + Math.PI / 2. - * Because of the difference between `Geometric coordinate system` and `Visualization coordinate system`. - * @returns - */ -function angleWithQuadrant([x, y]) { - return angle([x, y]) + Math.PI / 2; -} -exports.angleWithQuadrant = angleWithQuadrant; -function angleBetween(v0, v1) { - const a0 = angle(v0); - const a1 = angle(v1); - if (a0 < a1) - return a1 - a0; - return Math.PI * 2 - (a0 - a1); -} -exports.angleBetween = angleBetween; -function calcBBox(points) { - let minX = Infinity; - let maxX = -Infinity; - let minY = Infinity; - let maxY = -Infinity; - for (const [x, y] of points) { - minX = Math.min(x, minX); - maxX = Math.max(x, maxX); - minY = Math.min(y, minY); - maxY = Math.max(y, maxY); - } - const width = maxX - minX; - const height = maxY - minY; - return [minX, minY, width, height]; -} -exports.calcBBox = calcBBox; -/** - * Get the center of two points. - */ -function mid([x1, y1], [x2, y2]) { - return [(x1 + x2) / 2, (y1 + y2) / 2]; -} -exports.mid = mid; -//# sourceMappingURL=vector.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815874, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BinX = void 0; -const bin_1 = require("./bin"); -const BinX = (options = {}) => { - const { thresholds } = options; - return (0, bin_1.Bin)(Object.assign(Object.assign({}, options), { thresholdsX: thresholds, groupChannels: ['color'], binChannels: ['x'] })); -}; -exports.BinX = BinX; -exports.BinX.props = {}; -//# sourceMappingURL=binX.js.map -}, function(modId) { var map = {"./bin":1751263815875}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815875, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Bin = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const groupN_1 = require("./groupN"); -const helper_2 = require("./utils/helper"); -const THRESHOLD = 'thresholds'; -/** - * @see https://github.com/observablehq/plot/blob/main/src/transforms/bin.js - */ -function thresholdAuto(values) { - const [min, max] = (0, d3_array_1.extent)(values); - return Math.min(200, (0, d3_array_1.thresholdScott)(values, min, max)); -} -/** - * The Bin aggregate data. - * @todo More threshold method. - * @todo Performance. - */ -const Bin = (options = {}) => { - const { groupChannels = ['color'], binChannels = ['x', 'y'] } = options, rest = __rest(options, ["groupChannels", "binChannels"]); - const channelIndexKey = {}; - // Group indexes and update channelIndexKey. - const groupBy = (I, mark) => { - const { encode } = mark; - const binValues = binChannels.map((channel) => { - const [V] = (0, helper_2.columnOf)(encode, channel); - return V; - }); - const thresholds = (0, helper_1.subObject)(rest, THRESHOLD); - const DI = I.filter((i) => binValues.every((V) => (0, helper_1.defined)(V[i]))); - // Group indexes by both discrete and quantitative channels. - const groupKeys = [ - // For discrete channels, use value as group key. - ...groupChannels - .map((d) => { - const [V] = (0, helper_2.columnOf)(encode, d); - return V; - }) - .filter(helper_1.defined) - .map((V) => (i) => V[i]), - // For quantitative channels, use extent of bin as group key. - ...binChannels.map((d, i) => { - const V = binValues[i]; - const t = thresholds[d] || thresholdAuto(V); - const bins = (0, d3_array_1.bin)() - .thresholds(t) - .value((i) => +V[i])(DI); - const indexKey = new Map(bins.flatMap((bin) => { - const { x0, x1 } = bin; - const key = `${x0},${x1}`; - return bin.map((i) => [i, key]); - })); - channelIndexKey[d] = indexKey; - return (i) => indexKey.get(i); - }), - ]; - // Group by indexes by channel keys. - const key = (i) => groupKeys.map((key) => key(i)).join('-'); - return Array.from((0, d3_array_1.group)(DI, key).values()); - }; - return (0, groupN_1.GroupN)(Object.assign(Object.assign(Object.assign({}, Object.fromEntries(Object.entries(rest).filter(([k]) => !k.startsWith(THRESHOLD)))), Object.fromEntries(binChannels.flatMap((channel) => { - const start = ([i]) => +channelIndexKey[channel].get(i).split(',')[0]; - const end = ([i]) => +channelIndexKey[channel].get(i).split(',')[1]; - end.from = channel; - return [ - [channel, start], - [`${channel}1`, end], - ]; - }))), { groupBy })); -}; -exports.Bin = Bin; -exports.Bin.props = {}; -//# sourceMappingURL=bin.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./groupN":1751263815864,"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815876, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sample = void 0; -// @ts-ignore medianIndex exist in d3-array@3.2.0, but @types/d3-array Expired. -const d3_array_1 = require("@antv/vendor/d3-array"); -const order_1 = require("./utils/order"); -const helper_1 = require("./utils/helper"); -const lttb_1 = require("./utils/lttb"); -function normalizeSample(strategy) { - if (typeof strategy === 'function') - return strategy; - if (strategy === 'lttb') - return lttb_1.lttb; - const strategies = { - first: (f) => [f[0]], - last: (f) => [f[f.length - 1]], - min: (f, X, Y) => [ - f[(0, d3_array_1.minIndex)(f, (i) => Y[i])], - ], - max: (f, X, Y) => [ - f[(0, d3_array_1.maxIndex)(f, (i) => Y[i])], - ], - median: (f, X, Y) => [ - f[(0, d3_array_1.medianIndex)(f, (i) => Y[i])], - ], - }; - const sampleFunction = strategies[strategy] || strategies.median; - return (I, X, Y, thresholds) => { - // Sepreate group to frames, then sample each frame. - // Keep more data as possible. - const frameSize = Math.max(1, Math.floor(I.length / thresholds)); - const frames = getFrames(I, frameSize); - return frames.flatMap((frame) => sampleFunction(frame, X, Y)); - }; -} -/** - * Split the array into frame with each frameSize. - */ -function getFrames(I, frameSize) { - const size = I.length; - const frames = []; - let i = 0; - while (i < size) { - frames.push(I.slice(i, (i += frameSize))); - } - return frames; -} -/** - * The sample transform groups marks with specified groupBy fields, and - * sample data for each group when data.length >= threshold(default = 2000). - */ -const Sample = (options = {}) => { - const { strategy = 'median', thresholds = 2000, groupBy = ['series', 'color'], } = options; - const sampleFunction = normalizeSample(strategy); - return (I, mark) => { - const { encode } = mark; - const groups = (0, order_1.createGroups)(groupBy, I, mark); - const [X] = (0, helper_1.columnOf)(encode, 'x'); - const [Y] = (0, helper_1.columnOf)(encode, 'y'); - return [ - groups.flatMap((g) => sampleFunction(g, X, Y, thresholds)), - mark, - ]; - }; -}; -exports.Sample = Sample; -exports.Sample.props = {}; -//# sourceMappingURL=sample.js.map -}, function(modId) { var map = {"./utils/order":1751263815828,"./utils/helper":1751263815825,"./utils/lttb":1751263815877}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815877, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.lttb = void 0; -/** - * Sample data with lttb(Largest-Triangle-Three-Buckets) algo (https://github.com/pingec/downsample-lttb). - * Return the sampled index array. - */ -function lttb(I, X, Y, thresholds) { - const length = I.length; - if (thresholds >= length || thresholds === 0) { - return I; - } - const x = (i) => X[I[i]] * 1; - const y = (i) => Y[I[i]] * 1; - const sampled = []; - // Bucket size. Leave room for start and end data points. - const every = (length - 2) / (thresholds - 2); - let a = 0; // Initially a is the first point in the triangle. - let maxArea; - let area; - let nextA; - sampled.push(a); // Always add the first point. - for (let i = 0; i < thresholds - 2; i++) { - // Calculate point average for next bucket (containing c). - let avgX = 0; - let avgY = 0; - let start = Math.floor((i + 1) * every) + 1; - let end = Math.floor((i + 2) * every) + 1; - end = Math.min(end, length); - const size = end - start; - for (; start < end; start++) { - avgX += x(start); - avgY += y(start); - } - avgX /= size; - avgY /= size; - // Get the range for this bucket. - let frameStart = Math.floor((i + 0) * every) + 1; - const frameEnd = Math.floor((i + 1) * every) + 1; - // Point a. - const pointA = [x(a), y(a)]; - maxArea = area = -1; - for (; frameStart < frameEnd; frameStart++) { - // Calculate triangle area over three buckets. - area = - Math.abs((pointA[0] - avgX) * (x(frameStart) - pointA[1]) - - (pointA[0] - y(frameStart)) * (avgY - pointA[0])) * 0.5; - if (area > maxArea) { - maxArea = area; - nextA = frameStart; // Next a is this b. - } - } - sampled.push(nextA); // Pick this point from the bucket. - a = nextA; // This a is the next a (chosen b). - } - sampled.push(length - 1); // Always add last. - return sampled.map((a) => I[a]); -} -exports.lttb = lttb; -//# sourceMappingURL=lttb.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815878, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Filter = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const helper_2 = require("./utils/helper"); -function normalizeValue(value) { - if (typeof value === 'object') - return [value.value, value.ordinal]; - else - return [value, true]; -} -function filterWhenNoElements(mark) { - var _a; - const { encode } = mark; - // keep y-axis - const noElementMark = Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), { y: Object.assign(Object.assign({}, mark.encode.y), { value: [] }) }) }); - const targetField = (_a = encode === null || encode === void 0 ? void 0 : encode.color) === null || _a === void 0 ? void 0 : _a.field; - if (!encode || !targetField) { - return noElementMark; - } - // 获取color的筛选源 - let filterObject; - for (const [key, v] of Object.entries(encode)) { - if ((key === 'x' || key === 'y') && v.field === targetField) { - filterObject = Object.assign(Object.assign({}, filterObject), { [key]: Object.assign(Object.assign({}, v), { value: [] }) }); - } - } - if (!filterObject) { - return noElementMark; - } - return Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), filterObject) }); -} -/** - * The Filter transform filter channels. - */ -const Filter = (options = {}) => { - return (I, mark) => { - const { encode, data } = mark; - const filters = Object.entries(options) - .map(([key, v]) => { - const [V] = (0, helper_2.columnOf)(encode, key); - // Skip empty channel. - if (!V) - return null; - const [value, ordinal = true] = normalizeValue(v); - if (typeof value === 'function') - return (i) => value(V[i]); - if (ordinal) { - const expectedValues = Array.isArray(value) ? value : [value]; - // Skip empty expected values. - if (expectedValues.length === 0) - return null; - return (i) => expectedValues.includes(V[i]); - } - else { - const [start, end] = value; - return (i) => V[i] >= start && V[i] <= end; - } - }) - .filter(helper_1.defined); - // Filter index and channels. - const totalFilter = (i) => filters.every((f) => f(i)); - const FI = I.filter(totalFilter); - const newIndex = FI.map((_, i) => i); - if (filters.length === 0) { - const targetMark = filterWhenNoElements(mark); - return [I, targetMark]; - } - const newEncodes = Object.entries(encode).map(([key, encode]) => { - return [ - key, - Object.assign(Object.assign({}, encode), { value: newIndex - .map((i) => encode.value[FI[i]]) - .filter((v) => v !== undefined) }), - ]; - }); - return [ - newIndex, - (0, util_1.deepMix)({}, mark, { - encode: Object.fromEntries(newEncodes), - // Filter data for tooltip item. - data: FI.map((i) => data[i]), - }), - ]; - }; -}; -exports.Filter = Filter; -exports.Filter.props = {}; -//# sourceMappingURL=filter.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils/helper":1751263815825}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815879, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BoxShape = exports.PolygonRibbon = exports.PolygonShape = exports.ImageShape = exports.LinkArc = exports.LinkVHV = exports.LinkSmooth = exports.LinkShape = exports.AreaHV = exports.AreaVH = exports.AreaHVH = exports.AreaSmooth = exports.AreaShape = exports.TextTag = exports.TextBadge = exports.TextShape = exports.VectorShape = exports.PointCircle = exports.PointTriangleDown = exports.PointTriangle = exports.PointTick = exports.PointSquare = exports.PointShape = exports.PointPlus = exports.PointLine = exports.PointHyphen = exports.PointHexagon = exports.PointDiamond = exports.PointCross = exports.PointBowtie = exports.PointHollowCircle = exports.PointHollowTriangleDown = exports.PointHollowTriangle = exports.PointHollowSquare = exports.PointHollow = exports.PointHollowHexagon = exports.PointHollowDiamond = exports.PointHollowBowtie = exports.LineTrail = exports.LineHVH = exports.LineVH = exports.LineHV = exports.LineSmooth = exports.LineShape = exports.CellHollow = exports.CellShape = exports.IntervalPyramid = exports.IntervalFunnel = exports.IntervalHollow = exports.IntervalShape = void 0; -exports.GaugeRound = exports.LiquidShape = exports.ShapeShape = exports.RectHollow = exports.RectShape = exports.RangeShape = exports.HeatmapShape = exports.DensityShape = exports.PathHollow = exports.PathShape = exports.LabelShape = exports.ConnectorShape = exports.LineXY = exports.BoxViolin = void 0; -var rect_1 = require("./interval/rect"); -Object.defineProperty(exports, "IntervalShape", { enumerable: true, get: function () { return rect_1.Rect; } }); -var hollow_1 = require("./interval/hollow"); -Object.defineProperty(exports, "IntervalHollow", { enumerable: true, get: function () { return hollow_1.Hollow; } }); -var funnel_1 = require("./interval/funnel"); -Object.defineProperty(exports, "IntervalFunnel", { enumerable: true, get: function () { return funnel_1.Funnel; } }); -var pyramid_1 = require("./interval/pyramid"); -Object.defineProperty(exports, "IntervalPyramid", { enumerable: true, get: function () { return pyramid_1.Pyramid; } }); -var rect_2 = require("./interval/rect"); -Object.defineProperty(exports, "CellShape", { enumerable: true, get: function () { return rect_2.Rect; } }); -var hollow_2 = require("./interval/hollow"); -Object.defineProperty(exports, "CellHollow", { enumerable: true, get: function () { return hollow_2.Hollow; } }); -var line_1 = require("./line/line"); -Object.defineProperty(exports, "LineShape", { enumerable: true, get: function () { return line_1.Line; } }); -var smooth_1 = require("./line/smooth"); -Object.defineProperty(exports, "LineSmooth", { enumerable: true, get: function () { return smooth_1.Smooth; } }); -var hv_1 = require("./line/hv"); -Object.defineProperty(exports, "LineHV", { enumerable: true, get: function () { return hv_1.HV; } }); -var vh_1 = require("./line/vh"); -Object.defineProperty(exports, "LineVH", { enumerable: true, get: function () { return vh_1.VH; } }); -var hvh_1 = require("./line/hvh"); -Object.defineProperty(exports, "LineHVH", { enumerable: true, get: function () { return hvh_1.HVH; } }); -var trail_1 = require("./line/trail"); -Object.defineProperty(exports, "LineTrail", { enumerable: true, get: function () { return trail_1.Trail; } }); -var hollowBowtie_1 = require("./point/hollowBowtie"); -Object.defineProperty(exports, "PointHollowBowtie", { enumerable: true, get: function () { return hollowBowtie_1.HollowBowtie; } }); -var hollowDiamond_1 = require("./point/hollowDiamond"); -Object.defineProperty(exports, "PointHollowDiamond", { enumerable: true, get: function () { return hollowDiamond_1.HollowDiamond; } }); -var hollowHexagon_1 = require("./point/hollowHexagon"); -Object.defineProperty(exports, "PointHollowHexagon", { enumerable: true, get: function () { return hollowHexagon_1.HollowHexagon; } }); -var hollow_3 = require("./point/hollow"); -Object.defineProperty(exports, "PointHollow", { enumerable: true, get: function () { return hollow_3.HollowPoint; } }); -var hollowSquare_1 = require("./point/hollowSquare"); -Object.defineProperty(exports, "PointHollowSquare", { enumerable: true, get: function () { return hollowSquare_1.HollowSquare; } }); -var hollowTriangle_1 = require("./point/hollowTriangle"); -Object.defineProperty(exports, "PointHollowTriangle", { enumerable: true, get: function () { return hollowTriangle_1.HollowTriangle; } }); -var hollowTriangleDown_1 = require("./point/hollowTriangleDown"); -Object.defineProperty(exports, "PointHollowTriangleDown", { enumerable: true, get: function () { return hollowTriangleDown_1.HollowTriangleDown; } }); -var hollowCircle_1 = require("./point/hollowCircle"); -Object.defineProperty(exports, "PointHollowCircle", { enumerable: true, get: function () { return hollowCircle_1.HollowCircle; } }); -var bowtie_1 = require("./point/bowtie"); -Object.defineProperty(exports, "PointBowtie", { enumerable: true, get: function () { return bowtie_1.Bowtie; } }); -var cross_1 = require("./point/cross"); -Object.defineProperty(exports, "PointCross", { enumerable: true, get: function () { return cross_1.Cross; } }); -var diamond_1 = require("./point/diamond"); -Object.defineProperty(exports, "PointDiamond", { enumerable: true, get: function () { return diamond_1.Diamond; } }); -var hexagon_1 = require("./point/hexagon"); -Object.defineProperty(exports, "PointHexagon", { enumerable: true, get: function () { return hexagon_1.Hexagon; } }); -var hyphen_1 = require("./point/hyphen"); -Object.defineProperty(exports, "PointHyphen", { enumerable: true, get: function () { return hyphen_1.Hyphen; } }); -var line_2 = require("./point/line"); -Object.defineProperty(exports, "PointLine", { enumerable: true, get: function () { return line_2.Line; } }); -var plus_1 = require("./point/plus"); -Object.defineProperty(exports, "PointPlus", { enumerable: true, get: function () { return plus_1.Plus; } }); -var point_1 = require("./point/point"); -Object.defineProperty(exports, "PointShape", { enumerable: true, get: function () { return point_1.Point; } }); -var square_1 = require("./point/square"); -Object.defineProperty(exports, "PointSquare", { enumerable: true, get: function () { return square_1.Square; } }); -var tick_1 = require("./point/tick"); -Object.defineProperty(exports, "PointTick", { enumerable: true, get: function () { return tick_1.Tick; } }); -var triangle_1 = require("./point/triangle"); -Object.defineProperty(exports, "PointTriangle", { enumerable: true, get: function () { return triangle_1.Triangle; } }); -var triangleDown_1 = require("./point/triangleDown"); -Object.defineProperty(exports, "PointTriangleDown", { enumerable: true, get: function () { return triangleDown_1.TriangleDown; } }); -var circle_1 = require("./point/circle"); -Object.defineProperty(exports, "PointCircle", { enumerable: true, get: function () { return circle_1.Circle; } }); -var vector_1 = require("./vector/vector"); -Object.defineProperty(exports, "VectorShape", { enumerable: true, get: function () { return vector_1.Vector; } }); -var text_1 = require("./text/text"); -Object.defineProperty(exports, "TextShape", { enumerable: true, get: function () { return text_1.Text; } }); -var badge_1 = require("./text/badge"); -Object.defineProperty(exports, "TextBadge", { enumerable: true, get: function () { return badge_1.Badge; } }); -var tag_1 = require("./text/tag"); -Object.defineProperty(exports, "TextTag", { enumerable: true, get: function () { return tag_1.Tag; } }); -var area_1 = require("./area/area"); -Object.defineProperty(exports, "AreaShape", { enumerable: true, get: function () { return area_1.Area; } }); -var smooth_2 = require("./area/smooth"); -Object.defineProperty(exports, "AreaSmooth", { enumerable: true, get: function () { return smooth_2.Smooth; } }); -var hvh_2 = require("./area/hvh"); -Object.defineProperty(exports, "AreaHVH", { enumerable: true, get: function () { return hvh_2.HVH; } }); -var vh_2 = require("./area/vh"); -Object.defineProperty(exports, "AreaVH", { enumerable: true, get: function () { return vh_2.VH; } }); -var hv_2 = require("./area/hv"); -Object.defineProperty(exports, "AreaHV", { enumerable: true, get: function () { return hv_2.HV; } }); -var link_1 = require("./link/link"); -Object.defineProperty(exports, "LinkShape", { enumerable: true, get: function () { return link_1.Link; } }); -var smooth_3 = require("./link/smooth"); -Object.defineProperty(exports, "LinkSmooth", { enumerable: true, get: function () { return smooth_3.Smooth; } }); -var vhv_1 = require("./link/vhv"); -Object.defineProperty(exports, "LinkVHV", { enumerable: true, get: function () { return vhv_1.VHV; } }); -var arc_1 = require("./link/arc"); -Object.defineProperty(exports, "LinkArc", { enumerable: true, get: function () { return arc_1.Arc; } }); -var image_1 = require("./image/image"); -Object.defineProperty(exports, "ImageShape", { enumerable: true, get: function () { return image_1.Image; } }); -var polygon_1 = require("./polygon/polygon"); -Object.defineProperty(exports, "PolygonShape", { enumerable: true, get: function () { return polygon_1.Polygon; } }); -var ribbon_1 = require("./polygon/ribbon"); -Object.defineProperty(exports, "PolygonRibbon", { enumerable: true, get: function () { return ribbon_1.Ribbon; } }); -var box_1 = require("./box/box"); -Object.defineProperty(exports, "BoxShape", { enumerable: true, get: function () { return box_1.Box; } }); -var violin_1 = require("./box/violin"); -Object.defineProperty(exports, "BoxViolin", { enumerable: true, get: function () { return violin_1.Violin; } }); -var line_3 = require("./lineXY/line"); -Object.defineProperty(exports, "LineXY", { enumerable: true, get: function () { return line_3.Line; } }); -var connector_1 = require("./connector/connector"); -Object.defineProperty(exports, "ConnectorShape", { enumerable: true, get: function () { return connector_1.Connector; } }); -var label_1 = require("./label/label"); -Object.defineProperty(exports, "LabelShape", { enumerable: true, get: function () { return label_1.Label; } }); -var path_1 = require("./path/path"); -Object.defineProperty(exports, "PathShape", { enumerable: true, get: function () { return path_1.Path; } }); -var hollow_4 = require("./path/hollow"); -Object.defineProperty(exports, "PathHollow", { enumerable: true, get: function () { return hollow_4.Hollow; } }); -var density_1 = require("./density/density"); -Object.defineProperty(exports, "DensityShape", { enumerable: true, get: function () { return density_1.Density; } }); -var heatmap_1 = require("./heatmap/heatmap"); -Object.defineProperty(exports, "HeatmapShape", { enumerable: true, get: function () { return heatmap_1.Heatmap; } }); -var rect_3 = require("./interval/rect"); -Object.defineProperty(exports, "RangeShape", { enumerable: true, get: function () { return rect_3.Rect; } }); -var rect_4 = require("./interval/rect"); -Object.defineProperty(exports, "RectShape", { enumerable: true, get: function () { return rect_4.Rect; } }); -var hollow_5 = require("./interval/hollow"); -Object.defineProperty(exports, "RectHollow", { enumerable: true, get: function () { return hollow_5.Hollow; } }); -var shape_1 = require("./shape/shape"); -Object.defineProperty(exports, "ShapeShape", { enumerable: true, get: function () { return shape_1.Shape; } }); -var liquid_1 = require("./liquid/liquid"); -Object.defineProperty(exports, "LiquidShape", { enumerable: true, get: function () { return liquid_1.Liquid; } }); -var round_1 = require("./gauge/round"); -Object.defineProperty(exports, "GaugeRound", { enumerable: true, get: function () { return round_1.Round; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./interval/rect":1751263815880,"./interval/hollow":1751263815886,"./interval/funnel":1751263815887,"./interval/pyramid":1751263815888,"./line/line":1751263815889,"./line/smooth":1751263815892,"./line/hv":1751263815893,"./line/vh":1751263815894,"./line/hvh":1751263815895,"./line/trail":1751263815896,"./point/hollowBowtie":1751263815897,"./point/hollowDiamond":1751263815901,"./point/hollowHexagon":1751263815902,"./point/hollow":1751263815903,"./point/hollowSquare":1751263815904,"./point/hollowTriangle":1751263815905,"./point/hollowTriangleDown":1751263815906,"./point/hollowCircle":1751263815907,"./point/bowtie":1751263815909,"./point/cross":1751263815910,"./point/diamond":1751263815911,"./point/hexagon":1751263815912,"./point/hyphen":1751263815913,"./point/line":1751263815914,"./point/plus":1751263815915,"./point/point":1751263815916,"./point/square":1751263815917,"./point/tick":1751263815918,"./point/triangle":1751263815919,"./point/triangleDown":1751263815920,"./point/circle":1751263815908,"./vector/vector":1751263815921,"./text/text":1751263815922,"./text/badge":1751263815924,"./text/tag":1751263815925,"./area/area":1751263815926,"./area/smooth":1751263815928,"./area/hvh":1751263815929,"./area/vh":1751263815930,"./area/hv":1751263815931,"./link/link":1751263815932,"./link/smooth":1751263815933,"./link/vhv":1751263815934,"./link/arc":1751263815935,"./image/image":1751263815936,"./polygon/polygon":1751263815938,"./polygon/ribbon":1751263815939,"./box/box":1751263815940,"./box/violin":1751263815941,"./lineXY/line":1751263815942,"./connector/connector":1751263815943,"./label/label":1751263815944,"./path/path":1751263815961,"./path/hollow":1751263815963,"./density/density":1751263815964,"./heatmap/heatmap":1751263815965,"./shape/shape":1751263815969,"./liquid/liquid":1751263815970,"./gauge/round":1751263815973}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815880, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Rect = void 0; -const color_1 = require("./color"); -/** - * Render rect in different coordinate and using color channel for stroke and fill attribute. - * The stroke attribute is valid with specified lineWidth attribute which defaults to zero. - */ -const Rect = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill' }, options), context); -}; -exports.Rect = Rect; -exports.Rect.props = Object.assign(Object.assign({}, color_1.Color.props), { defaultMarker: 'square' }); -//# sourceMappingURL=rect.js.map -}, function(modId) { var map = {"./color":1751263815881}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815881, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Color = exports.rect = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const selection_1 = require("../../utils/selection"); -const vector_1 = require("../../utils/vector"); -const number_1 = require("../../utils/number"); -const utils_1 = require("../utils"); -// Render rect in different coordinate. -function rect(document, points, value, coordinate, style = {}) { - const { inset = 0, radius = 0, insetLeft = inset, insetTop = inset, insetRight = inset, insetBottom = inset, radiusBottomLeft = radius, radiusBottomRight = radius, radiusTopLeft = radius, radiusTopRight = radius, minWidth = -Infinity, maxWidth = Infinity, minHeight = -Infinity } = style, rest = __rest(style, ["inset", "radius", "insetLeft", "insetTop", "insetRight", "insetBottom", "radiusBottomLeft", "radiusBottomRight", "radiusTopLeft", "radiusTopRight", "minWidth", "maxWidth", "minHeight"]); - if (!(0, coordinate_1.isPolar)(coordinate) && !(0, coordinate_1.isHelix)(coordinate)) { - const tpShape = !!(0, coordinate_1.isTranspose)(coordinate); - const [p0, , p2] = tpShape ? (0, utils_1.reorder)(points) : points; - const [x, y] = p0; - const [width, height] = (0, vector_1.sub)(p2, p0); - // Deal with width or height is negative. - const absX = width > 0 ? x : x + width; - const absY = height > 0 ? y : y + height; - const absWidth = Math.abs(width); - const absHeight = Math.abs(height); - const finalX = absX + insetLeft; - const finalY = absY + insetTop; - const finalWidth = absWidth - (insetLeft + insetRight); - const finalHeight = absHeight - (insetTop + insetBottom); - const clampWidth = tpShape - ? (0, number_1.clamp)(finalWidth, minHeight, Infinity) - : (0, number_1.clamp)(finalWidth, minWidth, maxWidth); - const clampHeight = tpShape - ? (0, number_1.clamp)(finalHeight, minWidth, maxWidth) - : (0, number_1.clamp)(finalHeight, minHeight, Infinity); - const clampX = tpShape ? finalX : finalX - (clampWidth - finalWidth) / 2; - const clampY = tpShape - ? finalY - (clampHeight - finalHeight) / 2 - : finalY - (clampHeight - finalHeight); - return (0, selection_1.select)(document.createElement('rect', {})) - .style('x', clampX) - .style('y', clampY) - .style('width', clampWidth) - .style('height', clampHeight) - .style('radius', [ - radiusTopLeft, - radiusTopRight, - radiusBottomRight, - radiusBottomLeft, - ]) - .call(utils_1.applyStyle, rest) - .node(); - } - // Render path in polar coordinate. - const { y, y1 } = value; - const center = coordinate.getCenter(); - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]); - const path = (0, d3_shape_1.arc)() - .cornerRadius(radius) - .padAngle((inset * Math.PI) / 180); - return (0, selection_1.select)(document.createElement('path', {})) - .style('d', path(arcObject)) - .style('transform', `translate(${center[0]}, ${center[1]})`) - .style('radius', radius) - .style('inset', inset) - .call(utils_1.applyStyle, rest) - .node(); -} -exports.rect = rect; -/** - * Render rect in different coordinate. - * Calc arc path based on control points directly rather startAngle, endAngle, innerRadius, - * outerRadius. This is not accurate and will cause bug when the range of y scale is [1, 0] - * for cell geometry. - */ -const Color = (options, context) => { - // Render border only when colorAttribute is stroke. - const { colorAttribute, opacityAttribute = 'fill', first = true, last = true } = options, style = __rest(options, ["colorAttribute", "opacityAttribute", "first", "last"]); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor, radius: defaultRadius = 0 } = defaults, restDefaults = __rest(defaults, ["color", "radius"]); - const defaultLineWidth = restDefaults.lineWidth || 1; - const { stroke, radius = defaultRadius, radiusTopLeft = radius, radiusTopRight = radius, radiusBottomRight = radius, radiusBottomLeft = radius, innerRadius = 0, innerRadiusTopLeft = innerRadius, innerRadiusTopRight = innerRadius, innerRadiusBottomRight = innerRadius, innerRadiusBottomLeft = innerRadius, lineWidth = colorAttribute === 'stroke' || stroke ? defaultLineWidth : 0, inset = 0, insetLeft = inset, insetRight = inset, insetBottom = inset, insetTop = inset, minWidth, maxWidth, minHeight } = style, rest = __rest(style, ["stroke", "radius", "radiusTopLeft", "radiusTopRight", "radiusBottomRight", "radiusBottomLeft", "innerRadius", "innerRadiusTopLeft", "innerRadiusTopRight", "innerRadiusBottomRight", "innerRadiusBottomLeft", "lineWidth", "inset", "insetLeft", "insetRight", "insetBottom", "insetTop", "minWidth", "maxWidth", "minHeight"]); - const { color = defaultColor, opacity } = value; - // Extended style, which is not supported by native g shape, - // should apply at first. - const standardDirRadius = [ - first ? radiusTopLeft : innerRadiusTopLeft, - first ? radiusTopRight : innerRadiusTopRight, - last ? radiusBottomRight : innerRadiusBottomRight, - last ? radiusBottomLeft : innerRadiusBottomLeft, - ]; - const standardDir = [ - 'radiusTopLeft', - 'radiusTopRight', - 'radiusBottomRight', - 'radiusBottomLeft', - ]; - // Transpose: rotate it clockwise by 90. - if ((0, coordinate_1.isTranspose)(coordinate)) { - standardDir.push(standardDir.shift()); - } - const extendedStyle = Object.assign(Object.assign({ radius }, Object.fromEntries(standardDir.map((d, i) => [d, standardDirRadius[i]]))), { inset, - insetLeft, - insetRight, - insetBottom, - insetTop, - minWidth, - maxWidth, - minHeight }); - return ((0, selection_1.select)(rect(document, points, value, coordinate, extendedStyle)) - .call(utils_1.applyStyle, restDefaults) - .style('fill', 'transparent') - .style(colorAttribute, color) - .style((0, utils_1.toOpacityKey)(options), opacity) - .style('lineWidth', lineWidth) - .style('stroke', stroke === undefined ? color : stroke) - // shape.style has higher priority. - .call(utils_1.applyStyle, rest) - .node()); - }; -}; -exports.Color = Color; -// @todo Should Shape have default animations using for ordinal scale? -exports.Color.props = { - defaultEnterAnimation: 'scaleInY', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=color.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/selection":1751263815883,"../../utils/vector":1751263815873,"../../utils/number":1751263815884,"../utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815882, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getTransformOptions = exports.angleOf = exports.radiusOf = exports.getRadius = exports.isNonCartesian = exports.isTheta = exports.isCircular = exports.isRadar = exports.isFisheye = exports.isParallel = exports.isHelix = exports.isRadial = exports.isPolar = exports.isTranspose = void 0; -function isTranspose(coordinate) { - const { transformations } = coordinate.getOptions(); - const transposes = transformations - .map(([type]) => type) - .filter((type) => type === 'transpose'); - return transposes.length % 2 !== 0; -} -exports.isTranspose = isTranspose; -function isPolar(coordinate) { - const { transformations } = coordinate.getOptions(); - return transformations.some(([type]) => type === 'polar'); -} -exports.isPolar = isPolar; -function isRadial(coordinate) { - const { transformations } = coordinate.getOptions(); - return ( - // distinguish radial from theta. - transformations.some(([type]) => type === 'reflect') && - transformations.some(([type]) => type.startsWith('transpose'))); -} -exports.isRadial = isRadial; -function isHelix(coordinate) { - const { transformations } = coordinate.getOptions(); - return transformations.some(([type]) => type === 'helix'); -} -exports.isHelix = isHelix; -function isParallel(coordinate) { - const { transformations } = coordinate.getOptions(); - return transformations.some(([type]) => type === 'parallel'); -} -exports.isParallel = isParallel; -function isFisheye(coordinate) { - const { transformations } = coordinate.getOptions(); - return transformations.some(([type]) => type === 'fisheye'); -} -exports.isFisheye = isFisheye; -function isRadar(coordinate) { - return isParallel(coordinate) && isPolar(coordinate); -} -exports.isRadar = isRadar; -function isCircular(coordinate) { - return isHelix(coordinate) || isPolar(coordinate); -} -exports.isCircular = isCircular; -function isTheta(coordinate) { - return isPolar(coordinate) && isTranspose(coordinate); -} -exports.isTheta = isTheta; -function isNonCartesian(coordinate) { - return (isPolar(coordinate) || - isParallel(coordinate) || - isRadial(coordinate) || - isTheta(coordinate)); -} -exports.isNonCartesian = isNonCartesian; -function getRadius(coordinate) { - if (isCircular(coordinate)) { - const [width, height] = coordinate.getSize(); - const polar = coordinate - .getOptions() - .transformations.find((t) => t[0] === 'polar'); - // coordinate.size * outerRadius. - if (polar) - return (Math.max(width, height) / 2) * polar[4]; - } - return 0; -} -exports.getRadius = getRadius; -function radiusOf(coordinate) { - const { transformations } = coordinate.getOptions(); - const [, , , innerRadius, outerRadius] = transformations.find((d) => d[0] === 'polar'); - return [+innerRadius, +outerRadius]; -} -exports.radiusOf = radiusOf; -function angleOf(coordinate, isRadius = true) { - const { transformations } = coordinate.getOptions(); - const [, startAngle, endAngle] = transformations.find((d) => d[0] === 'polar'); - return isRadius - ? [(+startAngle * 180) / Math.PI, (+endAngle * 180) / Math.PI] - : [startAngle, endAngle]; -} -exports.angleOf = angleOf; -function getTransformOptions(coordinate, type) { - const { transformations } = coordinate.getOptions(); - const [, ...args] = transformations.find((d) => d[0] === type); - return args; -} -exports.getTransformOptions = getTransformOptions; -//# sourceMappingURL=coordinate.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815883, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Selection = exports.select = void 0; -const g_1 = require("@antv/g"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("./helper"); -function select(node) { - return new Selection([node], null, node, node.ownerDocument); -} -exports.select = select; -/** - * A simple implementation of d3-selection for @antv/g. - * It has the core features of d3-selection and extended ability. - * Every methods of selection returns new selection if elements - * are mutated(e.g. append, remove), otherwise return the selection itself(e.g. attr, style). - * @see https://github.com/d3/d3-selection - * @see https://github.com/antvis/g - * @todo Nested selections. - * @todo More useful functor. - */ -class Selection { - constructor(elements = null, data = null, parent = null, document = null, selections = [ - null, - null, - null, - null, - null, - ], transitions = [], updateElements = []) { - this._elements = Array.from(elements); - this._data = data; - this._parent = parent; - this._document = document; - this._enter = selections[0]; - this._update = selections[1]; - this._exit = selections[2]; - this._merge = selections[3]; - this._split = selections[4]; - this._transitions = transitions; - this._facetElements = updateElements; - } - selectAll(selector) { - const elements = typeof selector === 'string' - ? this._parent.querySelectorAll(selector) - : selector; - return new Selection(elements, null, this._elements[0], this._document); - } - selectFacetAll(selector) { - const elements = typeof selector === 'string' - ? this._parent.querySelectorAll(selector) - : selector; - return new Selection(this._elements, null, this._parent, this._document, undefined, undefined, elements); - } - /** - * @todo Replace with querySelector which has bug now. - */ - select(selector) { - const element = typeof selector === 'string' - ? this._parent.querySelectorAll(selector)[0] || null - : selector; - return new Selection([element], null, element, this._document); - } - append(node) { - const callback = typeof node === 'function' ? node : () => this.createElement(node); - const elements = []; - if (this._data !== null) { - // For empty selection, append new element to parent. - // Each element is bind with datum. - for (let i = 0; i < this._data.length; i++) { - const d = this._data[i]; - const [datum, from] = Array.isArray(d) ? d : [d, null]; - const newElement = callback(datum, i); - newElement.__data__ = datum; - if (from !== null) - newElement.__fromElements__ = from; - this._parent.appendChild(newElement); - elements.push(newElement); - } - return new Selection(elements, null, this._parent, this._document); - } - else { - // For non-empty selection, append new element to - // selected element and return new selection. - for (let i = 0; i < this._elements.length; i++) { - const element = this._elements[i]; - const datum = element.__data__; - const newElement = callback(datum, i); - element.appendChild(newElement); - elements.push(newElement); - } - return new Selection(elements, null, elements[0], this._document); - } - } - maybeAppend(id, node, className) { - const element = this._elements[0]; - const child = element.getElementById(id); - if (child) { - return new Selection([child], null, this._parent, this._document); - } - const newChild = typeof node === 'string' ? this.createElement(node) : node(); - newChild.id = id; - if (className) - newChild.className = className; - element.appendChild(newChild); - return new Selection([newChild], null, this._parent, this._document); - } - /** - * Bind data to elements, and produce three selection: - * Enter: Selection with empty elements and data to be bind to elements. - * Update: Selection with elements to be updated. - * Exit: Selection with elements to be removed. - */ - data(data, id = (d) => d, groupId = () => null) { - // An Array of new data. - const enter = []; - // An Array of elements to be updated. - const update = []; - // A Set of elements to be removed. - const exit = new Set(this._elements); - // An Array of data to be merged into one element. - const merge = []; - // A Set of elements to be split into multiple datum. - const split = new Set(); - // A Map from key to each element. - const keyElement = new Map(this._elements.map((d, i) => [id(d.__data__, i), d])); - // A Map from key to exist element. The Update Selection - // can get element from this map, this is for diff among - // facets. - const keyUpdateElement = new Map(this._facetElements.map((d, i) => [id(d.__data__, i), d])); - // A Map from groupKey to a group of elements. - const groupKeyElements = (0, d3_array_1.group)(this._elements, (d) => groupId(d.__data__)); - // Diff data with selection(elements with data). - // !!! Note - // The switch is strictly ordered, not not change the order of them. - for (let i = 0; i < data.length; i++) { - const datum = data[i]; - const key = id(datum, i); - const groupKey = groupId(datum, i); - // Append element to update selection if incoming data has - // exactly the same key with elements. - if (keyElement.has(key)) { - const element = keyElement.get(key); - element.__data__ = datum; - element.__facet__ = false; - update.push(element); - exit.delete(element); - keyElement.delete(key); - // Append element to update selection if incoming data has - // exactly the same key with updateElements. - } - else if (keyUpdateElement.has(key)) { - const element = keyUpdateElement.get(key); - element.__data__ = datum; - // Flag this element should update its parentNode. - element.__facet__ = true; - update.push(element); - keyUpdateElement.delete(key); - // Append datum to merge selection if existed elements has - // its key as groupKey. - } - else if (groupKeyElements.has(key)) { - const group = groupKeyElements.get(key); - merge.push([datum, group]); - for (const element of group) - exit.delete(element); - groupKeyElements.delete(key); - // Append element to split selection if incoming data has - // groupKey as its key, and bind to datum for it. - } - else if (keyElement.has(groupKey)) { - const element = keyElement.get(groupKey); - if (element.__toData__) - element.__toData__.push(datum); - else - element.__toData__ = [datum]; - split.add(element); - exit.delete(element); - } - else { - // @todo Data with non-unique key. - enter.push(datum); - } - } - // Create new selection with enter, update and exit. - const S = [ - new Selection([], enter, this._parent, this._document), - new Selection(update, null, this._parent, this._document), - new Selection(exit, null, this._parent, this._document), - new Selection([], merge, this._parent, this._document), - new Selection(split, null, this._parent, this._document), - ]; - return new Selection(this._elements, null, this._parent, this._document, S); - } - merge(other) { - const elements = [...this._elements, ...other._elements]; - const transitions = [...this._transitions, ...other._transitions]; - return new Selection(elements, null, this._parent, this._document, undefined, transitions); - } - createElement(type) { - if (this._document) { - return this._document.createElement(type, {}); - } - const Ctor = Selection.registry[type]; - if (Ctor) - return new Ctor(); - return (0, helper_1.error)(`Unknown node type: ${type}`); - } - /** - * Apply callback for each selection(enter, update, exit) - * and merge them into one selection. - */ - join(enter = (d) => d, update = (d) => d, exit = (d) => d.remove(), merge = (d) => d, split = (d) => d.remove()) { - const newEnter = enter(this._enter); - const newUpdate = update(this._update); - const newExit = exit(this._exit); - const newMerge = merge(this._merge); - const newSplit = split(this._split); - return newUpdate - .merge(newEnter) - .merge(newExit) - .merge(newMerge) - .merge(newSplit); - } - remove() { - // Remove node immediately if there is no transition, - // otherwise wait until transition finished. - for (let i = 0; i < this._elements.length; i++) { - const transition = this._transitions[i]; - if (transition) { - const T = Array.isArray(transition) ? transition : [transition]; - Promise.all(T.map((d) => d.finished)).then(() => { - const element = this._elements[i]; - element.remove(); - }); - } - else { - const element = this._elements[i]; - element.remove(); - } - } - return new Selection([], null, this._parent, this._document, undefined, this._transitions); - } - each(callback) { - for (let i = 0; i < this._elements.length; i++) { - const element = this._elements[i]; - const datum = element.__data__; - callback(datum, i, element); - } - return this; - } - attr(key, value) { - const callback = typeof value !== 'function' ? () => value : value; - return this.each(function (d, i, element) { - if (value !== undefined) - element[key] = callback(d, i, element); - }); - } - style(key, value) { - const callback = typeof value !== 'function' ? () => value : value; - return this.each(function (d, i, element) { - if (value !== undefined) - element.style[key] = callback(d, i, element); - }); - } - transition(value) { - const callback = typeof value !== 'function' ? () => value : value; - const { _transitions: T } = this; - return this.each(function (d, i, element) { - T[i] = callback(d, i, element); - }); - } - on(event, handler) { - this.each(function (d, i, element) { - element.addEventListener(event, handler); - }); - return this; - } - call(callback, ...args) { - callback(this, ...args); - return this; - } - node() { - return this._elements[0]; - } - nodes() { - return this._elements; - } - transitions() { - return this._transitions; - } - parent() { - return this._parent; - } -} -exports.Selection = Selection; -Selection.registry = { - g: g_1.Group, - rect: g_1.Rect, - circle: g_1.Circle, - path: g_1.Path, - text: g_1.Text, - ellipse: g_1.Ellipse, - image: g_1.Image, - line: g_1.Line, - polygon: g_1.Polygon, - polyline: g_1.Polyline, - html: g_1.HTML, -}; -//# sourceMappingURL=selection.js.map -}, function(modId) { var map = {"./helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815884, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.prettyNumber = exports.clamp = void 0; -/** - * Clamp number within the inclusive range within the lower and upper bounds. - */ -function clamp(v, lower, upper) { - return Math.max(lower, Math.min(v, upper)); -} -exports.clamp = clamp; -/** - * Precision conversion - */ -function prettyNumber(n, precision = 10) { - if (typeof n !== 'number') - return n; - return Math.abs(n) < 1e-15 ? n : parseFloat(n.toFixed(precision)); -} -exports.prettyNumber = prettyNumber; -//# sourceMappingURL=number.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815885, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getOrigin = exports.getTransform = exports.toOpacityKey = exports.getConnectStyle = exports.getArcObject = exports.reorder = exports.computeGradient = exports.appendArc = exports.arrowPoints = exports.appendPolygon = exports.applyStyle = void 0; -const scale_1 = require("@antv/scale"); -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const array_1 = require("../utils/array"); -const coordinate_1 = require("../utils/coordinate"); -const vector_1 = require("../utils/vector"); -function applyStyle(selection, style) { - for (const [key, value] of Object.entries(style)) { - selection.style(key, value); - } -} -exports.applyStyle = applyStyle; -/** - * Draw polygon path with points. - * @param path - * @param points - */ -function appendPolygon(path, points) { - points.forEach((p, idx) => idx === 0 ? path.moveTo(p[0], p[1]) : path.lineTo(p[0], p[1])); - path.closePath(); - return path; -} -exports.appendPolygon = appendPolygon; -/** - * Draw arrow between `from` and `to`. - * @param from - * @param to - * @returns - */ -function arrowPoints(from, to, options) { - const { arrowSize } = options; - const size = typeof arrowSize === 'string' - ? (+parseFloat(arrowSize) / 100) * (0, vector_1.dist)(from, to) - : arrowSize; - // TODO Use config from style. - // Default arrow rotate is 30°. - const arrowAngle = Math.PI / 6; - const angle = Math.atan2(to[1] - from[1], to[0] - from[0]); - const arrowAngle1 = Math.PI / 2 - angle - arrowAngle; - const arrow1 = [ - to[0] - size * Math.sin(arrowAngle1), - to[1] - size * Math.cos(arrowAngle1), - ]; - const arrowAngle2 = angle - arrowAngle; - const arrow2 = [ - to[0] - size * Math.cos(arrowAngle2), - to[1] - size * Math.sin(arrowAngle2), - ]; - return [arrow1, arrow2]; -} -exports.arrowPoints = arrowPoints; -/** - * Draw arc by from -> to, with center and radius. - * @param path - * @param from - * @param to - * @param center - * @param radius - */ -function appendArc(path, from, to, center, radius) { - const startAngle = (0, vector_1.angle)((0, vector_1.sub)(center, from)) + Math.PI; - const endAngle = (0, vector_1.angle)((0, vector_1.sub)(center, to)) + Math.PI; - path.arc(center[0], center[1], radius, startAngle, endAngle, endAngle - startAngle < 0); - return path; -} -exports.appendArc = appendArc; -/** - * @todo Fix wrong key point. - */ -function computeGradient(C, X, Y, from = 'y', mode = 'between', tpShape = false) { - // The angles of gradients rendering are varies when 'from' and 'tpShape' are different. - const getTheta = (from, tpShape) => { - if (from === 'y' || from === true) { - if (tpShape) { - return 180; - } - else { - return 90; - } - } - else { - if (tpShape) { - return 90; - } - else { - return 0; - } - } - }; - const P = from === 'y' || from === true ? Y : X; - const theta = getTheta(from, tpShape); - const I = (0, array_1.indexOf)(P); - const [min, max] = (0, d3_array_1.extent)(I, (i) => P[i]); - // This need to improve for non-uniform distributed colors. - const p = new scale_1.Linear({ - domain: [min, max], - range: [0, 100], - }); - const percentage = (i) => (0, util_1.isNumber)(P[i]) && !Number.isNaN(P[i]) ? p.map(P[i]) : 0; - const gradientMode = { - // Interpolate the colors for this segment. - between: (i) => `${C[i]} ${percentage(i)}%`, - // Use the color of the start point as the color for this segment. - start: (i) => i === 0 - ? `${C[i]} ${percentage(i)}%` - : `${C[i - 1]} ${percentage(i)}%, ${C[i]} ${percentage(i)}%`, - // Use the color of the end point as the color for this segment. - end: (i) => i === C.length - 1 - ? `${C[i]} ${percentage(i)}%` - : `${C[i]} ${percentage(i)}%, ${C[i + 1]} ${percentage(i)}%`, - }; - const gradient = I.sort((a, b) => percentage(a) - percentage(b)) - .map(gradientMode[mode] || gradientMode['between']) - .join(','); - return `linear-gradient(${theta}deg, ${gradient})`; -} -exports.computeGradient = computeGradient; -function reorder(points) { - const [p0, p1, p2, p3] = points; - return [p3, p0, p1, p2]; -} -exports.reorder = reorder; -function getArcObject(coordinate, points, Y) { - const [p0, p1, , p3] = (0, coordinate_1.isTranspose)(coordinate) ? reorder(points) : points; - const [y, y1] = Y; - const center = coordinate.getCenter(); - const a1 = (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(p0, center)); - const a2 = (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(p1, center)); - // There are two situations that a2 === a1: - // 1. a1 - a2 = 0 - // 2. |a1 - a2| = Math.PI * 2 - // Distinguish them by y and y1: - const a3 = a2 === a1 && y !== y1 ? a2 + Math.PI * 2 : a2; - return { - startAngle: a1, - endAngle: a3 - a1 >= 0 ? a3 : Math.PI * 2 + a3, - innerRadius: (0, vector_1.dist)(p3, center), - outerRadius: (0, vector_1.dist)(p0, center), - }; -} -exports.getArcObject = getArcObject; -/** - * Pick connectStyle from style. - * @param style - */ -function getConnectStyle(style) { - const PREFIX = 'connect'; - return Object.fromEntries(Object.entries(style) - .filter(([key]) => key.startsWith(PREFIX)) - .map(([key, value]) => [ - (0, util_1.lowerFirst)(key.replace(PREFIX, '').trim()), - value, - ]) - .filter(([key]) => key !== undefined)); -} -exports.getConnectStyle = getConnectStyle; -function toOpacityKey(options) { - const { colorAttribute, opacityAttribute = colorAttribute } = options; - return `${opacityAttribute}Opacity`; -} -exports.toOpacityKey = toOpacityKey; -function getTransform(coordinate, value) { - if (!(0, coordinate_1.isPolar)(coordinate)) - return ''; - const center = coordinate.getCenter(); - const { transform: suffix } = value; - return `translate(${center[0]}, ${center[1]}) ${suffix || ''}`; -} -exports.getTransform = getTransform; -function getOrigin(points) { - if (points.length === 1) - return points[0]; - const [[x0, y0, z0 = 0], [x2, y2, z2 = 0]] = points; - return [(x0 + x2) / 2, (y0 + y2) / 2, (z0 + z2) / 2]; -} -exports.getOrigin = getOrigin; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"../utils/coordinate":1751263815882,"../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815886, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hollow = void 0; -const color_1 = require("./color"); -/** - * Render rect in different coordinate and using color channel for stroke attribute. - */ -const Hollow = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke' }, options), context); -}; -exports.Hollow = Hollow; -exports.Hollow.props = Object.assign(Object.assign({}, color_1.Color.props), { defaultMarker: 'hollowSquare' }); -//# sourceMappingURL=hollow.js.map -}, function(modId) { var map = {"./color":1751263815881}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815887, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Funnel = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../utils"); -/** - * Adjust and return the new `points`. - */ -function getFunnelPoints(points, nextPoints, coordinate) { - const [p0, p1, p2, p3] = points; - if ((0, coordinate_1.isTranspose)(coordinate)) { - const newP1 = [nextPoints ? nextPoints[0][0] : p1[0], p1[1]]; - const newP2 = [nextPoints ? nextPoints[3][0] : p2[0], p2[1]]; - return [p0, newP1, newP2, p3]; - } - const newP1 = [p1[0], nextPoints ? nextPoints[0][1] : p1[1]]; - const newP2 = [p2[0], nextPoints ? nextPoints[3][1] : p2[1]]; - return [p0, newP1, newP2, p3]; -} -/** - * Render funnel in different coordinate and using color channel for stroke and fill attribute. - */ -const Funnel = (options, context) => { - const { adjustPoints = getFunnelPoints } = options, style = __rest(options, ["adjustPoints"]); - const { coordinate, document } = context; - return (points, value, defaults, point2d) => { - const { index } = value; - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const nextPoints = point2d[index + 1]; - const funnelPoints = adjustPoints(points, nextPoints, coordinate); - const tpShape = !!(0, coordinate_1.isTranspose)(coordinate); - const [p0, p1, p2, p3] = tpShape ? (0, utils_1.reorder)(funnelPoints) : funnelPoints; - const { color = defaultColor, opacity } = value; - const b = (0, d3_shape_1.line)().curve(d3_shape_1.curveLinearClosed)([p0, p1, p2, p3]); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', b) - .style('fill', color) - .style('fillOpacity', opacity) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Funnel = Funnel; -exports.Funnel.props = { - defaultMarker: 'square', -}; -//# sourceMappingURL=funnel.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/selection":1751263815883,"../utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815888, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Pyramid = void 0; -const coordinate_1 = require("../../utils/coordinate"); -const funnel_1 = require("./funnel"); -/** - * Adjust and return the new `points`. - */ -function getPyramidPoints(points, nextPoints, coordinate) { - const [p0, p1, p2, p3] = points; - if ((0, coordinate_1.isTranspose)(coordinate)) { - const newP1 = [ - nextPoints ? nextPoints[0][0] : (p1[0] + p2[0]) / 2, - p1[1], - ]; - const newP2 = [ - nextPoints ? nextPoints[3][0] : (p1[0] + p2[0]) / 2, - p2[1], - ]; - return [p0, newP1, newP2, p3]; - } - const newP1 = [ - p1[0], - nextPoints ? nextPoints[0][1] : (p1[1] + p2[1]) / 2, - ]; - const newP2 = [ - p2[0], - nextPoints ? nextPoints[3][1] : (p1[1] + p2[1]) / 2, - ]; - return [p0, newP1, newP2, p3]; -} -/** - * Render pyramid in different coordinate and using color channel for stroke and fill attribute. - */ -const Pyramid = (options, context) => { - return (0, funnel_1.Funnel)(Object.assign({ adjustPoints: getPyramidPoints }, options), context); -}; -exports.Pyramid = Pyramid; -exports.Pyramid.props = { - defaultMarker: 'square', -}; -//# sourceMappingURL=pyramid.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"./funnel":1751263815887}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815889, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Line = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const curve_1 = require("./curve"); -const Line = (options, context) => { - const { coordinate } = context; - return (...params) => { - const curve = (0, coordinate_1.isPolar)(coordinate) ? d3_shape_1.curveLinearClosed : d3_shape_1.curveLinear; - return (0, curve_1.Curve)(Object.assign({ curve }, options), context)(...params); - }; -}; -exports.Line = Line; -exports.Line.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'line' }); -//# sourceMappingURL=line.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815890, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Curve = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../utils"); -const createElement_1 = require("../../utils/createElement"); -const helper_1 = require("../../utils/helper"); -const vector_1 = require("../../utils/vector"); -const DoublePath = (0, createElement_1.createElement)((g) => { - const { d1, d2, style1, style2 } = g.attributes; - const document = g.ownerDocument; - (0, selection_1.select)(g) - .maybeAppend('line', () => document.createElement('path', {})) - .style('d', d1) - .call(utils_1.applyStyle, style1); - (0, selection_1.select)(g) - .maybeAppend('line1', () => document.createElement('path', {})) - .style('d', d2) - .call(utils_1.applyStyle, style2); -}); -/** - * Given a points sequence, split it into an array of defined points - * and an array of undefined segments. - * - * Input - [[1, 2], [3, 4], [null, null], [null, null], [5, 6], [null, null], [7, 8]] - * Output - * - [[1, 2], [3, 4], [5, 6], [7, 8]] - * - [ - * [[3, 4], [5, 6]], - * [[5, 6], [7, 8]] - * ] - */ -function segmentation(points, defined) { - const definedPoints = []; - const segments = []; - let m = false; // Is in a undefined sequence. - let dp = null; // The previous defined point. - for (const p of points) { - // If current point is a undefined point, - // enter a undefined sequence. - if (!defined(p[0]) || !defined(p[1])) - m = true; - else { - definedPoints.push(p); - // If current point is a defined point, - // and is in a undefined sequence, save - // the two closest defined points as this - // undefined sequence and exit it. - if (m) { - m = false; - segments.push([dp, p]); - } - // Update the previous defined point. - dp = p; - } - } - return [definedPoints, segments]; -} -const Curve = (options, context) => { - const { curve, gradient = false, - // The color for each segment. - gradientColor = 'between', defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, ["curve", "gradient", "gradientColor", "defined", "connect"]); - const { coordinate, document } = context; - return (P, value, defaults) => { - // Compute styles. - const { color: defaultColor, lineWidth: defaultSize } = defaults, rest = __rest(defaults, ["color", "lineWidth"]); - const { color = defaultColor, size = defaultSize, seriesColor: sc, seriesX: sx, seriesY: sy, } = value; - const transform = (0, utils_1.getTransform)(coordinate, value); - const tpShape = (0, coordinate_1.isTranspose)(coordinate); - const stroke = gradient && sc - ? (0, utils_1.computeGradient)(sc, sx, sy, gradient, gradientColor, tpShape) - : color; - const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, rest), (stroke && { stroke })), (size && { lineWidth: size })), (transform && { transform })), style); - // Compute points and segments. - let linePath; - if ((0, coordinate_1.isPolar)(coordinate)) { - const center = coordinate.getCenter(); - linePath = (points) => (0, d3_shape_1.lineRadial)() - .angle((_, idx) => (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(points[idx], center))) - .radius((_, idx) => (0, vector_1.dist)(points[idx], center)) - .defined(([x, y]) => defined(x) && defined(y)) - .curve(curve)(points); - } - else { - linePath = (0, d3_shape_1.line)() - .x((d) => d[0]) - .y((d) => d[1]) - .defined(([x, y]) => defined(x) && defined(y)) - .curve(curve); - } - const [DP, MS] = segmentation(P, defined); - const connectStyle = (0, helper_1.subObject)(finalStyle, 'connect'); - const missing = !!MS.length; - // Draw one path of connected defined points. - if (!missing || (connectNulls && !Object.keys(connectStyle).length)) { - return (0, selection_1.select)(document.createElement('path', {})) - .style('d', linePath(DP) || []) - .call(utils_1.applyStyle, finalStyle) - .node(); - } - // Draw one path of unconnected defined points. - if (missing && !connectNulls) { - return (0, selection_1.select)(document.createElement('path', {})) - .style('d', linePath(P)) - .call(utils_1.applyStyle, finalStyle) - .node(); - } - // Draw two path. - // One for unconnected defined points. - // One for connected segments. - const connectPath = (segments) => segments.map(linePath).join(','); - return (0, selection_1.select)(new DoublePath()) - .style('style1', Object.assign(Object.assign({}, finalStyle), connectStyle)) - .style('style2', finalStyle) - .style('d1', connectPath(MS)) - .style('d2', linePath(P)) - .node(); - }; -}; -exports.Curve = Curve; -exports.Curve.props = { - defaultMarker: 'smooth', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=curve.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/selection":1751263815883,"../utils":1751263815885,"../../utils/createElement":1751263815891,"../../utils/helper":1751263815829,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815891, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createElement = void 0; -const g_1 = require("@antv/g"); -function createElement(descriptor) { - const render = typeof descriptor === 'function' ? descriptor : descriptor.render; - return class extends g_1.CustomElement { - connectedCallback() { - this.draw(); - } - attributeChangedCallback() { - this.draw(); - } - draw() { - render(this); - } - }; -} -exports.createElement = createElement; -//# sourceMappingURL=createElement.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815892, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Smooth = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const curve_1 = require("./curve"); -const Smooth = (options, context) => { - const rest = __rest(options, []); - const { coordinate } = context; - return (...params) => { - const curve = (0, coordinate_1.isPolar)(coordinate) - ? d3_shape_1.curveCatmullRomClosed - : (0, coordinate_1.isTranspose)(coordinate) - ? d3_shape_1.curveMonotoneY - : d3_shape_1.curveMonotoneX; - return (0, curve_1.Curve)(Object.assign({ curve }, rest), context)(...params); - }; -}; -exports.Smooth = Smooth; -exports.Smooth.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'smooth' }); -//# sourceMappingURL=smooth.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815893, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HV = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const HV = (options, context) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepAfter }, options), context); -}; -exports.HV = HV; -exports.HV.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hv' }); -//# sourceMappingURL=hv.js.map -}, function(modId) { var map = {"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815894, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VH = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const VH = (options, context) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepBefore }, options), context); -}; -exports.VH = VH; -exports.VH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'vh' }); -//# sourceMappingURL=vh.js.map -}, function(modId) { var map = {"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815895, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HVH = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const HVH = (options, context) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStep }, options), context); -}; -exports.HVH = HVH; -exports.HVH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hvh' }); -//# sourceMappingURL=hvh.js.map -}, function(modId) { var map = {"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815896, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Trail = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../utils"); -const vector_1 = require("../../utils/vector"); -const helper_1 = require("../../utils/helper"); -const curve_1 = require("./curve"); -/** - * - * x9-x0---------x1-x2 - * / |r1 |r2 \ - *x8---p0---------p1---x3 - * \ r4| | r3 / - * x7-x6--------x5-x4 - */ -function stroke(path, p0, p1, s0, s1) { - const v = (0, vector_1.sub)(p1, p0); - const a = (0, vector_1.angle)(v); - const a1 = a + Math.PI / 2; - const r1 = [(s0 / 2) * Math.cos(a1), (s0 / 2) * Math.sin(a1)]; - const r2 = [(s1 / 2) * Math.cos(a1), (s1 / 2) * Math.sin(a1)]; - const r3 = [(s1 / 2) * Math.cos(a), (s1 / 2) * Math.sin(a)]; - const r4 = [(s0 / 2) * Math.cos(a), (s0 / 2) * Math.sin(a)]; - const x0 = (0, vector_1.add)(p0, r1); - const x1 = (0, vector_1.add)(p1, r2); - const x2 = (0, vector_1.add)(x1, r3); - const x3 = (0, vector_1.add)(p1, r3); - const x4 = (0, vector_1.sub)(x3, r2); - const x5 = (0, vector_1.sub)(p1, r2); - const x6 = (0, vector_1.sub)(p0, r1); - const x7 = (0, vector_1.sub)(x6, r4); - const x8 = (0, vector_1.sub)(p0, r4); - const x9 = (0, vector_1.sub)(x0, r4); - path.moveTo(...x0); - path.lineTo(...x1); - path.arcTo(...x2, ...x3, s1 / 2); - path.arcTo(...x4, ...x5, s1 / 2); - path.lineTo(...x6); - path.arcTo(...x7, ...x8, s0 / 2); - path.arcTo(...x9, ...x0, s0 / 2); - path.closePath(); -} -// @todo Support connect and connectStyle. -const Trail = (options, context) => { - const { document } = context; - return (P, value, defaults) => { - const { seriesSize, color } = value; - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const path = (0, d3_path_1.path)(); - for (let i = 0; i < P.length - 1; i++) { - const p0 = P[i]; - const p1 = P[i + 1]; - const s0 = seriesSize[i]; - const s1 = seriesSize[i + 1]; - if ([...p0, ...p1].every(helper_1.defined)) - stroke(path, p0, p1, s0, s1); - } - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('fill', color || defaultColor) - .style('d', path.toString()) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Trail = Trail; -exports.Trail.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'line' }); -//# sourceMappingURL=trail.js.map -}, function(modId) { var map = {"../../utils/selection":1751263815883,"../utils":1751263815885,"../../utils/vector":1751263815873,"../../utils/helper":1751263815829,"./curve":1751263815890}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815897, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowBowtie = void 0; -const color_1 = require("./color"); -/** - * ▷◁ - */ -const HollowBowtie = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'bowtie' }, options), context); -}; -exports.HollowBowtie = HollowBowtie; -exports.HollowBowtie.props = Object.assign({ defaultMarker: 'hollowBowtie' }, color_1.Color.props); -//# sourceMappingURL=hollowBowtie.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815898, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Color = exports.getRadius = void 0; -const coordinate_1 = require("../../utils/coordinate"); -const marker_1 = require("../../utils/marker"); -const selection_1 = require("../../utils/selection"); -const string_1 = require("../../utils/string"); -const utils_1 = require("../utils"); -function getRadius(mode, points, value, coordinate) { - if (points.length === 1) - return undefined; - const { size } = value; - if (mode === 'fixed') - return size; - if (mode === 'normal' || (0, coordinate_1.isFisheye)(coordinate)) { - const [[x0, y0], [x2, y2]] = points; - const a = Math.abs((x2 - x0) / 2); - const b = Math.abs((y2 - y0) / 2); - return Math.max(0, (a + b) / 2); - } - return size; -} -exports.getRadius = getRadius; -/** - * Render point in different coordinate. - */ -const Color = (options, context) => { - // Render border only when colorAttribute is stroke. - const { colorAttribute, symbol, mode = 'auto' } = options, style = __rest(options, ["colorAttribute", "symbol", "mode"]); - const path = marker_1.Symbols.get((0, string_1.camelCase)(symbol)) || marker_1.Symbols.get('point'); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { lineWidth, color: defaultColor } = defaults; - const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth; - const { color = defaultColor, transform, opacity } = value; - const [cx, cy] = (0, utils_1.getOrigin)(points); - const r = getRadius(mode, points, value, coordinate); - const finalRadius = r || style.r || defaults.r; - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, defaults) - .style('fill', 'transparent') - .style('d', path(cx, cy, finalRadius)) - .style('lineWidth', finalLineWidth) - .style('transform', transform) - .style('transformOrigin', `${cx - finalRadius} ${cy - finalRadius}`) - .style('stroke', color) - .style((0, utils_1.toOpacityKey)(options), opacity) - .style(colorAttribute, color) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Color = Color; -exports.Color.props = { - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=color.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/marker":1751263815899,"../../utils/selection":1751263815883,"../../utils/string":1751263815900,"../utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815899, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.unregisterSymbol = exports.registerSymbol = exports.useMarker = exports.Symbols = void 0; -const g_1 = require("@antv/g"); -const point = (x, y, r) => { - return [ - ['M', x - r, y], - ['A', r, r, 0, 1, 0, x + r, y], - ['A', r, r, 0, 1, 0, x - r, y], - ['Z'], - ]; -}; -point.style = ['fill']; -const hollowPoint = point.bind(undefined); -hollowPoint.style = ['stroke', 'lineWidth']; -const square = (x, y, r) => { - return [ - ['M', x - r, y - r], - ['L', x + r, y - r], - ['L', x + r, y + r], - ['L', x - r, y + r], - ['Z'], - ]; -}; -square.style = ['fill']; -const rect = square.bind(undefined); -rect.style = ['fill']; -const hollowSquare = square.bind(undefined); -hollowSquare.style = ['stroke', 'lineWidth']; -const diamond = (x, y, r) => { - const hr = r * 0.618; - return [ - ['M', x - hr, y], - ['L', x, y - r], - ['L', x + hr, y], - ['L', x, y + r], - ['Z'], - ]; -}; -diamond.style = ['fill']; -const hollowDiamond = diamond.bind(undefined); -hollowDiamond.style = ['stroke', 'lineWidth']; -const triangle = (x, y, r) => { - const diffY = r * Math.sin((1 / 3) * Math.PI); - return [ - ['M', x - r, y + diffY], - ['L', x, y - diffY], - ['L', x + r, y + diffY], - ['Z'], - ]; -}; -triangle.style = ['fill']; -const hollowTriangle = triangle.bind(undefined); -hollowTriangle.style = ['stroke', 'lineWidth']; -const triangleDown = (x, y, r) => { - const diffY = r * Math.sin((1 / 3) * Math.PI); - return [ - ['M', x - r, y - diffY], - ['L', x + r, y - diffY], - ['L', x, y + diffY], - ['Z'], - ]; -}; -triangleDown.style = ['fill']; -const hollowTriangleDown = triangleDown.bind(undefined); -hollowTriangleDown.style = ['stroke', 'lineWidth']; -const hexagon = (x, y, r) => { - const diffX = (r / 2) * Math.sqrt(3); - return [ - ['M', x, y - r], - ['L', x + diffX, y - r / 2], - ['L', x + diffX, y + r / 2], - ['L', x, y + r], - ['L', x - diffX, y + r / 2], - ['L', x - diffX, y - r / 2], - ['Z'], - ]; -}; -hexagon.style = ['fill']; -const hollowHexagon = hexagon.bind(undefined); -hollowHexagon.style = ['stroke', 'lineWidth']; -const bowtie = (x, y, r) => { - const diffY = r - 1.5; - return [ - ['M', x - r, y - diffY], - ['L', x + r, y + diffY], - ['L', x + r, y - diffY], - ['L', x - r, y + diffY], - ['Z'], - ]; -}; -bowtie.style = ['fill']; -const hollowBowtie = bowtie.bind(undefined); -hollowBowtie.style = ['stroke', 'lineWidth']; -const line = (x, y, r) => { - return [ - ['M', x, y + r], - ['L', x, y - r], - ]; -}; -line.style = ['stroke', 'lineWidth']; -const cross = (x, y, r) => { - return [ - ['M', x - r, y - r], - ['L', x + r, y + r], - ['M', x + r, y - r], - ['L', x - r, y + r], - ]; -}; -cross.style = ['stroke', 'lineWidth']; -const tick = (x, y, r) => { - return [ - ['M', x - r / 2, y - r], - ['L', x + r / 2, y - r], - ['M', x, y - r], - ['L', x, y + r], - ['M', x - r / 2, y + r], - ['L', x + r / 2, y + r], - ]; -}; -tick.style = ['stroke', 'lineWidth']; -const plus = (x, y, r) => { - return [ - ['M', x - r, y], - ['L', x + r, y], - ['M', x, y - r], - ['L', x, y + r], - ]; -}; -plus.style = ['stroke', 'lineWidth']; -const hyphen = (x, y, r) => { - return [ - ['M', x - r, y], - ['L', x + r, y], - ]; -}; -hyphen.style = ['stroke', 'lineWidth']; -const dot = (x, y, r) => { - return [ - ['M', x - r, y], - ['L', x + r, y], - ]; -}; -dot.style = ['stroke', 'lineWidth']; -const dash = dot.bind(undefined); -dash.style = ['stroke', 'lineWidth']; -const smooth = (x, y, r) => { - return [ - ['M', x - r, y], - ['A', r / 2, r / 2, 0, 1, 1, x, y], - ['A', r / 2, r / 2, 0, 1, 0, x + r, y], - ]; -}; -smooth.style = ['stroke', 'lineWidth']; -const hv = (x, y, r) => { - return [ - ['M', x - r - 1, y - 2.5], - ['L', x, y - 2.5], - ['L', x, y + 2.5], - ['L', x + r + 1, y + 2.5], - ]; -}; -hv.style = ['stroke', 'lineWidth']; -const vh = (x, y, r) => { - return [ - ['M', x - r - 1, y + 2.5], - ['L', x, y + 2.5], - ['L', x, y - 2.5], - ['L', x + r + 1, y - 2.5], - ]; -}; -vh.style = ['stroke', 'lineWidth']; -const hvh = (x, y, r) => { - return [ - ['M', x - (r + 1), y + 2.5], - ['L', x - r / 2, y + 2.5], - ['L', x - r / 2, y - 2.5], - ['L', x + r / 2, y - 2.5], - ['L', x + r / 2, y + 2.5], - ['L', x + r + 1, y + 2.5], - ]; -}; -hvh.style = ['stroke', 'lineWidth']; -const vhv = (x, y, r) => { - return [ - ['M', x - 5, y + 2.5], - ['L', x - 5, y], - ['L', x, y], - ['L', x, y - 3], - ['L', x, y + 3], - ['L', x + 6.5, y + 3], - ]; -}; -vhv.style = ['stroke', 'lineWidth']; -exports.Symbols = new Map([ - ['bowtie', bowtie], - ['cross', cross], - ['dash', dash], - ['diamond', diamond], - ['dot', dot], - ['hexagon', hexagon], - ['hollowBowtie', hollowBowtie], - ['hollowDiamond', hollowDiamond], - ['hollowHexagon', hollowHexagon], - ['hollowPoint', hollowPoint], - ['hollowSquare', hollowSquare], - ['hollowTriangle', hollowTriangle], - ['hollowTriangleDown', hollowTriangleDown], - ['hv', hv], - ['hvh', hvh], - ['hyphen', hyphen], - ['line', line], - ['plus', plus], - ['point', point], - ['rect', rect], - ['smooth', smooth], - ['square', square], - ['tick', tick], - ['triangleDown', triangleDown], - ['triangle', triangle], - ['vh', vh], - ['vhv', vhv], -]); -function useMarker(type, _a) { - var { d, fill, lineWidth, path, stroke, color } = _a, style = __rest(_a, ["d", "fill", "lineWidth", "path", "stroke", "color"]); - const symbol = exports.Symbols.get(type) || exports.Symbols.get('point'); - return (...args) => { - const path = new g_1.Path({ - style: Object.assign(Object.assign({}, style), { d: symbol(...args), stroke: symbol.style.includes('stroke') ? color || stroke : '', fill: symbol.style.includes('fill') ? color || fill : '', lineWidth: symbol.style.includes('lineWidth') - ? lineWidth || lineWidth || 2 - : 0 }), - }); - return path; - }; -} -exports.useMarker = useMarker; -function registerSymbol(type, marker) { - exports.Symbols.set(type, marker); -} -exports.registerSymbol = registerSymbol; -function unregisterSymbol(type) { - exports.Symbols.delete(type); -} -exports.unregisterSymbol = unregisterSymbol; -//# sourceMappingURL=marker.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815900, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.kebabCase = exports.camelCase = void 0; -/** - * camelCase('foo-bar'); - * // => 'fooBar' - * @param s - */ -function camelCase(s) { - return s.replace(/-(\w)/g, function (_, letter) { - return letter.toUpperCase(); - }); -} -exports.camelCase = camelCase; -/** - * kebabCase('fooBar'); - * // => 'foo-bar' - * @param s - */ -function kebabCase(s) { - return s.replace(/([A-Z])/g, '-$1').toLowerCase(); -} -exports.kebabCase = kebabCase; -//# sourceMappingURL=string.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815901, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowDiamond = void 0; -const color_1 = require("./color"); -/** - * ◇ - */ -const HollowDiamond = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'diamond' }, options), context); -}; -exports.HollowDiamond = HollowDiamond; -exports.HollowDiamond.props = Object.assign({ defaultMarker: 'hollowDiamond' }, color_1.Color.props); -//# sourceMappingURL=hollowDiamond.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815902, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowHexagon = void 0; -const color_1 = require("./color"); -/** - * ⬡ - */ -const HollowHexagon = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'hexagon' }, options), context); -}; -exports.HollowHexagon = HollowHexagon; -exports.HollowHexagon.props = Object.assign({ defaultMarker: 'hollowHexagon' }, color_1.Color.props); -//# sourceMappingURL=hollowHexagon.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815903, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowPoint = void 0; -const color_1 = require("./color"); -/** - * ○ - */ -const HollowPoint = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'point' }, options), context); -}; -exports.HollowPoint = HollowPoint; -exports.HollowPoint.props = Object.assign({ defaultMarker: 'hollowPoint' }, color_1.Color.props); -//# sourceMappingURL=hollow.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815904, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowSquare = void 0; -const color_1 = require("./color"); -/** - * □ - */ -const HollowSquare = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'square' }, options), context); -}; -exports.HollowSquare = HollowSquare; -exports.HollowSquare.props = Object.assign({ defaultMarker: 'hollowSquare' }, color_1.Color.props); -//# sourceMappingURL=hollowSquare.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815905, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowTriangle = void 0; -const color_1 = require("./color"); -/** - * △ - */ -const HollowTriangle = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle' }, options), context); -}; -exports.HollowTriangle = HollowTriangle; -exports.HollowTriangle.props = Object.assign({ defaultMarker: 'hollowTriangle' }, color_1.Color.props); -//# sourceMappingURL=hollowTriangle.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815906, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowTriangleDown = void 0; -const color_1 = require("./color"); -/** - * ▽ - */ -const HollowTriangleDown = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle-down' }, options), context); -}; -exports.HollowTriangleDown = HollowTriangleDown; -exports.HollowTriangleDown.props = Object.assign({ defaultMarker: 'hollowTriangleDown' }, color_1.Color.props); -//# sourceMappingURL=hollowTriangleDown.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815907, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HollowCircle = void 0; -const circle_1 = require("./circle"); -/** - * ○ - */ -const HollowCircle = (options, context) => { - return (0, circle_1.BaseCircle)(Object.assign({ colorAttribute: 'stroke' }, options), context); -}; -exports.HollowCircle = HollowCircle; -exports.HollowCircle.props = Object.assign({ defaultMarker: 'hollowPoint' }, circle_1.Circle.props); -//# sourceMappingURL=hollowCircle.js.map -}, function(modId) { var map = {"./circle":1751263815908}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815908, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Circle = exports.BaseCircle = void 0; -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../utils"); -const color_1 = require("./color"); -/** - * Render point in different coordinate. - */ -const BaseCircle = (options, context) => { - // Render border only when colorAttribute is stroke. - const { colorAttribute, mode = 'auto' } = options, style = __rest(options, ["colorAttribute", "mode"]); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { lineWidth, color: defaultColor } = defaults; - const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth; - const { color = defaultColor, transform, opacity } = value; - const [cx, cy] = (0, utils_1.getOrigin)(points); - const r = (0, color_1.getRadius)(mode, points, value, coordinate); - const finalRadius = r || style.r || defaults.r; - return (0, selection_1.select)(document.createElement('circle', {})) - .call(utils_1.applyStyle, defaults) - .style('fill', 'transparent') - .style('cx', cx) - .style('cy', cy) - .style('r', finalRadius) - .style('lineWidth', finalLineWidth) - .style('transform', transform) - .style('transformOrigin', `${cx} ${cy}`) - .style('stroke', color) - .style((0, utils_1.toOpacityKey)(options), opacity) - .style(colorAttribute, color) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.BaseCircle = BaseCircle; -/** - * ● - */ -const Circle = (options, context) => { - return (0, exports.BaseCircle)(Object.assign({ colorAttribute: 'fill' }, options), context); -}; -exports.Circle = Circle; -exports.Circle.props = { - defaultMarker: 'circle', - defaultEnterAnimation: 'fadeIn', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=circle.js.map -}, function(modId) { var map = {"../../utils/selection":1751263815883,"../utils":1751263815885,"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815909, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Bowtie = void 0; -const color_1 = require("./color"); -/** - * ▶◀ - */ -const Bowtie = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'bowtie' }, options), context); -}; -exports.Bowtie = Bowtie; -exports.Bowtie.props = Object.assign({ defaultMarker: 'bowtie' }, color_1.Color.props); -//# sourceMappingURL=bowtie.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815910, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Cross = void 0; -const color_1 = require("./color"); -/** - * ✕ - */ -const Cross = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'cross' }, options), context); -}; -exports.Cross = Cross; -exports.Cross.props = Object.assign({ defaultMarker: 'cross' }, color_1.Color.props); -//# sourceMappingURL=cross.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815911, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Diamond = void 0; -const color_1 = require("./color"); -/** - * ◆ - */ -const Diamond = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'diamond' }, options), context); -}; -exports.Diamond = Diamond; -exports.Diamond.props = Object.assign({ defaultMarker: 'diamond' }, color_1.Color.props); -//# sourceMappingURL=diamond.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815912, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hexagon = void 0; -const color_1 = require("./color"); -/** - * ⭓ - */ -const Hexagon = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'hexagon' }, options), context); -}; -exports.Hexagon = Hexagon; -exports.Hexagon.props = Object.assign({ defaultMarker: 'hexagon' }, color_1.Color.props); -//# sourceMappingURL=hexagon.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815913, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hyphen = void 0; -const color_1 = require("./color"); -/** - * - - */ -const Hyphen = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'hyphen' }, options), context); -}; -exports.Hyphen = Hyphen; -exports.Hyphen.props = Object.assign({ defaultMarker: 'hyphen' }, color_1.Color.props); -//# sourceMappingURL=hyphen.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815914, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Line = void 0; -const color_1 = require("./color"); -/** - * | - */ -const Line = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'line' }, options), context); -}; -exports.Line = Line; -exports.Line.props = Object.assign({ defaultMarker: 'line' }, color_1.Color.props); -//# sourceMappingURL=line.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815915, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Plus = void 0; -const color_1 = require("./color"); -/** - * + - */ -const Plus = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'plus' }, options), context); -}; -exports.Plus = Plus; -exports.Plus.props = Object.assign({ defaultMarker: 'plus' }, color_1.Color.props); -//# sourceMappingURL=plus.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815916, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Point = void 0; -const color_1 = require("./color"); -/** - * ● - */ -const Point = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'point' }, options), context); -}; -exports.Point = Point; -exports.Point.props = Object.assign({ defaultMarker: 'point' }, color_1.Color.props); -//# sourceMappingURL=point.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815917, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Square = void 0; -const color_1 = require("./color"); -/** - * ■ - */ -const Square = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'square' }, options), context); -}; -exports.Square = Square; -exports.Square.props = Object.assign({ defaultMarker: 'square' }, color_1.Color.props); -//# sourceMappingURL=square.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815918, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tick = void 0; -const color_1 = require("./color"); -/** - * 工 - */ -const Tick = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'tick' }, options), context); -}; -exports.Tick = Tick; -exports.Tick.props = Object.assign({ defaultMarker: 'tick' }, color_1.Color.props); -//# sourceMappingURL=tick.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815919, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Triangle = void 0; -const color_1 = require("./color"); -/** - * ▲ - */ -const Triangle = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'triangle' }, options), context); -}; -exports.Triangle = Triangle; -exports.Triangle.props = Object.assign({ defaultMarker: 'triangle' }, color_1.Color.props); -//# sourceMappingURL=triangle.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815920, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TriangleDown = void 0; -const color_1 = require("./color"); -/** - * ▼ - */ -const TriangleDown = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'triangle-down' }, options), context); -}; -exports.TriangleDown = TriangleDown; -exports.TriangleDown.props = Object.assign({ defaultMarker: 'triangleDown' }, color_1.Color.props); -//# sourceMappingURL=triangleDown.js.map -}, function(modId) { var map = {"./color":1751263815898}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815921, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Vector = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -/** - * Connect 2 points with a single line with arrow. - * -----> - */ -const Vector = (options, context) => { - const { arrow = true, arrowSize = '40%' } = options, style = __rest(options, ["arrow", "arrowSize"]); - const { document } = context; - return (points, value, defaults) => { - const { defaultColor } = defaults, rest = __rest(defaults, ["defaultColor"]); - const { color = defaultColor, transform } = value; - const [from, to] = points; - // Draw line - const path = (0, d3_path_1.path)(); - path.moveTo(...from); - path.lineTo(...to); - // Draw 2 arrows. - if (arrow) { - // Calculate arrow end point. - const [arrow1, arrow2] = (0, utils_1.arrowPoints)(from, to, { arrowSize }); - path.moveTo(...arrow1); - path.lineTo(...to); - path.lineTo(...arrow2); - } - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Vector = Vector; -exports.Vector.props = { - defaultMarker: 'line', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=vector.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815922, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Text = void 0; -const utils_1 = require("../../shape/utils"); -const selection_1 = require("../../utils/selection"); -const advance_1 = require("./advance"); -/** - * @todo autoRotate when in polar coordinate - */ -const Text = (options, context) => { - const { coordinate } = context; - return (points, value, defaults) => { - const { color, text = '', fontSize, rotate = 0, transform = '' } = value; - const textStyle = { - text: String(text), - stroke: color, - fill: color, - fontSize, - }; - const [[x0, y0]] = points; - return (0, selection_1.select)(new advance_1.Advance()) - .style('x', x0) - .style('y', y0) - .call(utils_1.applyStyle, defaults) - .style('transform', `${transform}rotate(${+rotate})`) - .style('coordCenter', coordinate.getCenter()) - .call(utils_1.applyStyle, textStyle) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Text = Text; -exports.Text.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=text.js.map -}, function(modId) { var map = {"../../shape/utils":1751263815885,"../../utils/selection":1751263815883,"./advance":1751263815923}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815923, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Advance = void 0; -const util_1 = require("@antv/util"); -const component_1 = require("@antv/component"); -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const createElement_1 = require("../../utils/createElement"); -const utils_1 = require("../utils"); -const helper_1 = require("../../utils/helper"); -const selection_1 = require("../../utils/selection"); -const vector_1 = require("../../utils/vector"); -function getConnectorPoint(shape) { - const { min: [x0, y0], max: [x1, y1], } = shape.getLocalBounds(); - let x = 0; - let y = 0; - if (x0 > 0) - x = x0; - if (x1 < 0) - x = x1; - if (y0 > 0) - y = y0; - if (y1 < 0) - y = y1; - return [x, y]; -} -function inferBackgroundBounds(textShape, padding = []) { - const [top = 0, right = 0, bottom = top, left = right] = padding; - const container = textShape.parentNode; - const angle = container.getEulerAngles(); - container.setEulerAngles(0); - const { min, halfExtents } = textShape.getLocalBounds(); - const [x, y] = min; - const [hw, hh] = halfExtents; - container.setEulerAngles(angle); - return { - x: x - left, - y: y - top, - width: hw * 2 + left + right, - height: hh * 2 + top + bottom, - }; -} -const cos = (p0, p1, p2) => { - const a = (0, vector_1.dist)(p0, p1); - const b = (0, vector_1.dist)(p1, p2); - const c = (0, vector_1.dist)(p2, p0); - return (Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2)) / (2 * a * b); -}; -// A path from element to label. -// Adapted drawLabelLine from https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/spider.ts -function inferConnectorPath(shape, end, control, coordCenter, left = true, top = true) { - const path = (points) => (0, d3_shape_1.line)()(points); - if (!end[0] && !end[1]) - return path([getConnectorPoint(shape), end]); - if (!control.length) - return path([[0, 0], end]); - const [inflection, start] = control; - const p1 = [...start]; - const p2 = [...inflection]; - // Label has been adjusted, so add offset to the label. - if (start[0] !== inflection[0]) { - const offset = left ? -4 : 4; - p1[1] = start[1]; - // For the label in the first quadrant. - if (top && !left) { - p1[0] = Math.max(inflection[0], start[0] - offset); - if (start[1] < inflection[1]) { - p2[1] = p1[1]; - } - else { - p2[1] = inflection[1]; - p2[0] = Math.max(p2[0], p1[0] - offset); - } - } - // For the label in the second quadrant. - if (!top && !left) { - p1[0] = Math.max(inflection[0], start[0] - offset); - if (start[1] > inflection[1]) { - p2[1] = p1[1]; - } - else { - p2[1] = inflection[1]; - p2[0] = Math.max(p2[0], p1[0] - offset); - } - } - // For the label in the third quadrant. - if (!top && left) { - p1[0] = Math.min(inflection[0], start[0] - offset); - if (start[1] > inflection[1]) { - p2[1] = p1[1]; - } - else { - p2[1] = inflection[1]; - p2[0] = Math.min(p2[0], p1[0] - offset); - } - } - // For the label in the fourth quadrant. - if (top && left) { - p1[0] = Math.min(inflection[0], start[0] - offset); - if (start[1] < inflection[1]) { - p2[1] = p1[1]; - } - else { - p2[1] = inflection[1]; - p2[0] = Math.min(p2[0], p1[0] - offset); - } - } - } - return path([start, p1, p2, inflection, end]); -} -exports.Advance = (0, createElement_1.createElement)((g) => { - const _a = g.attributes, { className, - // Do not pass className - class: _c, transform, rotate, labelTransform, labelTransformOrigin, x, y, x0 = x, y0 = y, text, background, connector, startMarker, endMarker, coordCenter, innerHTML } = _a, rest = __rest(_a, ["className", "class", "transform", "rotate", "labelTransform", "labelTransformOrigin", "x", "y", "x0", "y0", "text", "background", "connector", "startMarker", "endMarker", "coordCenter", "innerHTML"]); - g.style.transform = `translate(${x}, ${y})`; - // Position is invalid, do not render the UI, - // or clear previous elements. - if ([x, y, x0, y0].some((v) => !(0, util_1.isNumber)(v))) { - g.children.forEach((d) => d.remove()); - return; - } - const _b = (0, helper_1.subObject)(rest, 'background'), { padding } = _b, backgroundStyle = __rest(_b, ["padding"]); - const _d = (0, helper_1.subObject)(rest, 'connector'), { points: controlPoints = [] } = _d, connectorStyle = __rest(_d, ["points"]); - let textShape; - if (innerHTML) { - textShape = (0, selection_1.select)(g) - .maybeAppend('html', 'html', className) - .style('zIndex', 0) - .style('innerHTML', innerHTML) - .call(utils_1.applyStyle, Object.assign({ transform: labelTransform, transformOrigin: labelTransformOrigin }, rest)) - .node(); - } - else { - textShape = (0, selection_1.select)(g) - .maybeAppend('text', 'text') - .style('zIndex', 0) - .style('text', text) - .call(utils_1.applyStyle, Object.assign({ textBaseline: 'middle', transform: labelTransform, transformOrigin: labelTransformOrigin }, rest)) - .node(); - } - const rect = (0, selection_1.select)(g) - .maybeAppend('background', 'rect') - .style('zIndex', -1) - .call(utils_1.applyStyle, inferBackgroundBounds(textShape, padding)) - .call(utils_1.applyStyle, background ? backgroundStyle : {}) - .node(); - const left = +x0 < coordCenter[0]; - const top = +y0 < coordCenter[1]; - const end = [+x0 - +x, +y0 - +y]; - const connectorPath = inferConnectorPath(rect, end, controlPoints, coordCenter, left, top); - const markerStart = startMarker && - new component_1.Marker({ - id: 'startMarker', - style: Object.assign({ x: 0, y: 0 }, (0, helper_1.subObject)(rest, 'startMarker')), - }); - const markerEnd = endMarker && - new component_1.Marker({ - id: 'endMarker', - style: Object.assign({ x: 0, y: 0 }, (0, helper_1.subObject)(rest, 'endMarker')), - }); - (0, selection_1.select)(g) - .maybeAppend('connector', 'path') - .style('zIndex', 0) - .style('d', connectorPath) - .style('markerStart', markerStart) - .style('markerEnd', markerEnd) - .call(utils_1.applyStyle, connector ? connectorStyle : {}); -}); -//# sourceMappingURL=advance.js.map -}, function(modId) { var map = {"../../utils/createElement":1751263815891,"../utils":1751263815885,"../../utils/helper":1751263815829,"../../utils/selection":1751263815883,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815924, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Badge = void 0; -const component_1 = require("@antv/component"); -const createElement_1 = require("../../utils/createElement"); -const helper_1 = require("../../utils/helper"); -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../../shape/utils"); -/** - * Get the path to draw a built-in badge, which is like a balloon. - */ -function getPath(r) { - const offset = r / Math.sqrt(2); - const dy = r * Math.sqrt(2); - const [p0x, p0y] = [-offset, offset - dy]; - const [p1x, p1y] = [0, 0]; - const [p2x, p2y] = [offset, offset - dy]; - return [ - ['M', p0x, p0y], - ['A', r, r, 0, 1, 1, p2x, p2y], - ['L', p1x, p1y], - ['Z'], - ]; -} -function inferTextPosition(shape) { - const { min, max } = shape.getLocalBounds(); - return [(min[0] + max[0]) * 0.5, (min[1] + max[1]) * 0.5]; -} -const BadgeShape = (0, createElement_1.createElement)((g) => { - const _a = g.attributes, { class: className, x: x0, y: y0, transform } = _a, rest = __rest(_a, ["class", "x", "y", "transform"]); - const markerStyle = (0, helper_1.subObject)(rest, 'marker'); - const { size = 24 } = markerStyle; - const symbol = () => getPath(size / 2); - const bgShape = (0, selection_1.select)(g) - .maybeAppend('marker', () => new component_1.Marker({})) - .call((selection) => selection.node().update(Object.assign({ symbol }, markerStyle))) - .node(); - const [x, y] = inferTextPosition(bgShape); - (0, selection_1.select)(g) - .maybeAppend('text', 'text') - .style('x', x) - .style('y', y) - .call(utils_1.applyStyle, rest); -}); -const Badge = (options, context) => { - const style = __rest(options, []); - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, text = '' } = value; - const textStyle = { - text: String(text), - stroke: color, - fill: color, - }; - const [[x0, y0]] = points; - return (0, selection_1.select)(new BadgeShape()) - .call(utils_1.applyStyle, rest) - .style('transform', `translate(${x0},${y0})`) - .call(utils_1.applyStyle, textStyle) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Badge = Badge; -exports.Badge.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=badge.js.map -}, function(modId) { var map = {"../../utils/createElement":1751263815891,"../../utils/helper":1751263815829,"../../utils/selection":1751263815883,"../../shape/utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815925, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tag = void 0; -const g_1 = require("@antv/g"); -const utils_1 = require("../../shape/utils"); -const selection_1 = require("../../utils/selection"); -/** - * @todo autoRotate when in polar coordinate - * Tag shape for Text mark, used in wordCloud plot. - */ -const Tag = (options, context) => { - const { coordinate } = context; - return (points, value, defaults) => { - const { color, text = '', fontSize, rotate = 0, transform = '' } = value; - const textStyle = { - text: String(text), - stroke: color, - fill: color, - fontSize, - textAlign: 'center', - textBaseline: 'middle', - }; - const [[x0, y0]] = points; - const n = (0, selection_1.select)(new g_1.Text()) - .style('x', x0) - .style('y', y0) - .call(utils_1.applyStyle, defaults) - .style('transformOrigin', 'center center') - .style('transform', `${transform}rotate(${rotate}deg)`) - .style('coordCenter', coordinate.getCenter()) - .call(utils_1.applyStyle, textStyle) - .call(utils_1.applyStyle, options) - .node(); - return n; - }; -}; -exports.Tag = Tag; -exports.Tag.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=tag.js.map -}, function(modId) { var map = {"../../shape/utils":1751263815885,"../../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815926, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Area = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const curve_1 = require("./curve"); -const Area = (options, context) => { - const { coordinate } = context; - return (...params) => { - const curve = (0, coordinate_1.isPolar)(coordinate) ? d3_shape_1.curveLinearClosed : d3_shape_1.curveLinear; - return (0, curve_1.Curve)(Object.assign({ curve: curve }, options), context)(...params); - }; -}; -exports.Area = Area; -exports.Area.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'square' }); -//# sourceMappingURL=area.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"./curve":1751263815927}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815927, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Curve = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -const utils_1 = require("../utils"); -const helper_1 = require("../../utils/helper"); -const createElement_1 = require("../../utils/createElement"); -/** - * Given a points sequence, split it into an array of defined points - * and an array of undefined segments. - * - * Input - [p0, p1, p2, p3, p4, p5], p1 ~ p2 is `Y1`, p3 ~ p5 is `Y0`. - * Output - When all of Y1 & Y0 is defined, move into defined points, or else undefined segments. - */ -function segmentation(points, defined) { - const definedPointsY1 = []; - const definedPointsY0 = []; - const segments = []; - let m = false; // Is in a undefined sequence. - let dp = null; // The previous defined point. - const mid = points.length / 2; - for (let i = 0; i < mid; i++) { - const y1 = points[i]; - const y0 = points[i + mid]; - // If current point is a undefined point, - // enter a undefined sequence. - if ([...y1, ...y0].some((v) => !defined(v))) - m = true; - else { - definedPointsY1.push(y1); - definedPointsY0.push(y0); - // If current point is a defined point, - // and is in a undefined sequence, save - // the two closest defined points as this - // undefined sequence and exit it. - if (m && dp) { - m = false; - const [dpy1, dpy0] = dp; - segments.push([dpy1, y1, dpy0, y0]); - } - // Update the previous defined point. - dp = [y1, y0]; - } - } - return [definedPointsY1.concat(definedPointsY0), segments]; -} -const DoubleArea = (0, createElement_1.createElement)((g) => { - const { areaPath, connectPath, areaStyle, connectStyle } = g.attributes; - const document = g.ownerDocument; - (0, selection_1.select)(g) - .maybeAppend('connect-path', () => document.createElement('path', {})) - .style('d', connectPath) - .call(utils_1.applyStyle, connectStyle); - (0, selection_1.select)(g) - .maybeAppend('area-path', () => document.createElement('path', {})) - .style('d', areaPath) - .call(utils_1.applyStyle, areaStyle); -}); -const Curve = (options, context) => { - const { curve, gradient = false, defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, ["curve", "gradient", "defined", "connect"]); - const { coordinate, document } = context; - return (P, value, defaults) => { - const { color: defaultColor } = defaults; - const { color = defaultColor, seriesColor: sc, seriesX: sx, seriesY: sy, } = value; - const tpShape = (0, coordinate_1.isTranspose)(coordinate); - const transform = (0, utils_1.getTransform)(coordinate, value); - const fill = gradient && sc - ? (0, utils_1.computeGradient)(sc, sx, sy, gradient, undefined, tpShape) - : color; - const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), { stroke: fill, fill: fill }), (transform && { transform })), style); - const [DP, MS] = segmentation(P, defined); - const connectStyle = (0, helper_1.subObject)(finalStyle, 'connect'); - const missing = !!MS.length; - const getPathNode = (path) => { - return (0, selection_1.select)(document.createElement('path', {})) - .style('d', path || '') - .call(utils_1.applyStyle, finalStyle) - .node(); - }; - if (!(0, coordinate_1.isPolar)(coordinate)) { - /** - * Draw area shape by points. - */ - const areaPath = (points) => { - const Y1 = points.slice(0, points.length / 2); - const Y0 = points.slice(points.length / 2); - return tpShape - ? (0, d3_shape_1.area)() - .y((_, idx) => Y1[idx][1]) - .x1((_, idx) => Y1[idx][0]) - .x0((_, idx) => Y0[idx][0]) - .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined)) - .curve(curve)(Y1) - : (0, d3_shape_1.area)() - .x((_, idx) => Y1[idx][0]) - .y1((_, idx) => Y1[idx][1]) - .y0((_, idx) => Y0[idx][1]) - .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined)) - .curve(curve)(Y1); - }; - // Draw one area of connected defined points. - if (!missing || (connectNulls && !Object.keys(connectStyle).length)) { - return getPathNode(areaPath(DP)); - } - // Draw one area of unconnected defined points. - if (missing && !connectNulls) { - return getPathNode(areaPath(P)); - } - // Draw two area. - // One for unconnected defined points. - // One for connected segments. - return (0, selection_1.select)(new DoubleArea()) - .style('areaStyle', finalStyle) - .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style)) - .style('areaPath', areaPath(P)) - .style('connectPath', MS.map(areaPath).join('')) - .node(); - } - else { - /** - * Draw areaRadial shape by points. - */ - const areaRadialPath = (points) => { - const center = coordinate.getCenter(); - const Y1 = points.slice(0, points.length / 2); - const Y0 = points.slice(points.length / 2); - return (0, d3_shape_1.areaRadial)() - .angle((_, idx) => (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(Y1[idx], center))) - .outerRadius((_, idx) => (0, vector_1.dist)(Y1[idx], center)) - .innerRadius((_, idx) => (0, vector_1.dist)(Y0[idx], center)) - .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined)) - .curve(curve)(Y0); - }; - // Draw one area of connected defined points. - if (!missing || (connectNulls && !Object.keys(connectStyle).length)) { - return getPathNode(areaRadialPath(DP)); - } - // Draw one area of unconnected defined points. - if (missing && !connectNulls) { - return getPathNode(areaRadialPath(P)); - } - // Draw two area. - // One for unconnected defined points. - // One for connected segments. - return (0, selection_1.select)(new DoubleArea()) - .style('areaStyle', finalStyle) - .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style)) - .style('areaPath', areaRadialPath(P)) - .style('connectPath', MS.map(areaRadialPath).join('')) - .node(); - } - }; -}; -exports.Curve = Curve; -exports.Curve.props = { - defaultMarker: 'smooth', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=curve.js.map -}, function(modId) { var map = {"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873,"../utils":1751263815885,"../../utils/helper":1751263815829,"../../utils/createElement":1751263815891}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815928, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Smooth = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const curve_1 = require("./curve"); -const Smooth = (options, context) => { - const rest = __rest(options, []); - const { coordinate } = context; - return (...params) => { - const curve = (0, coordinate_1.isPolar)(coordinate) - ? d3_shape_1.curveCatmullRomClosed - : (0, coordinate_1.isTranspose)(coordinate) - ? d3_shape_1.curveMonotoneY - : d3_shape_1.curveMonotoneX; - return (0, curve_1.Curve)(Object.assign({ curve }, rest), context)(...params); - }; -}; -exports.Smooth = Smooth; -exports.Smooth.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'smooth' }); -//# sourceMappingURL=smooth.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"./curve":1751263815927}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815929, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HVH = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const HVH = (options, context) => { - return (...params) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStep }, options), context)(...params); - }; -}; -exports.HVH = HVH; -exports.HVH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hvh' }); -//# sourceMappingURL=hvh.js.map -}, function(modId) { var map = {"./curve":1751263815927}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815930, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VH = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const VH = (options, context) => { - return (...params) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepBefore }, options), context)(...params); - }; -}; -exports.VH = VH; -exports.VH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'vh' }); -//# sourceMappingURL=vh.js.map -}, function(modId) { var map = {"./curve":1751263815927}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815931, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HV = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const curve_1 = require("./curve"); -const HV = (options, context) => { - return (...params) => { - return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepAfter }, options), context)(...params); - }; -}; -exports.HV = HV; -exports.HV.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hv' }); -//# sourceMappingURL=hv.js.map -}, function(modId) { var map = {"./curve":1751263815927}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815932, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Link = void 0; -const vector_1 = require("../../shape/vector/vector"); -/** - * Connect 2 points with a single line with arrow. - * -----> - */ -const Link = (options, context) => { - const { arrow = false } = options; - return (...params) => { - return (0, vector_1.Vector)(Object.assign(Object.assign({}, options), { arrow }), context)(...params); - }; -}; -exports.Link = Link; -exports.Link.props = { - defaultMarker: 'line', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=link.js.map -}, function(modId) { var map = {"../../shape/vector/vector":1751263815921}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815933, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Smooth = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -/** - * Connect 2 points with a smooth line, used in tree. - */ -const Smooth = (options, context) => { - const style = __rest(options, []); - const { document } = context; - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, transform } = value; - const [from, to] = points; - const path = (0, d3_path_1.path)(); - path.moveTo(from[0], from[1]); - path.bezierCurveTo(from[0] / 2 + to[0] / 2, from[1], from[0] / 2 + to[0] / 2, to[1], to[0], to[1]); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Smooth = Smooth; -exports.Smooth.props = { - defaultMarker: 'smooth', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=smooth.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815934, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VHV = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -/** - * Get vhv path in different coordinate. - */ -function getVHVPath(from, to, coordinate, ratio) { - const path = (0, d3_path_1.path)(); - if ((0, coordinate_1.isPolar)(coordinate)) { - const center = coordinate.getCenter(); - const a = (0, vector_1.dist)(from, center); - const b = (0, vector_1.dist)(to, center); - const radius = (b - a) * ratio + a; - path.moveTo(from[0], from[1]); - (0, utils_1.appendArc)(path, from, to, center, radius); - path.lineTo(to[0], to[1]); - return path; - } - if ((0, coordinate_1.isTranspose)(coordinate)) { - path.moveTo(from[0], from[1]); - // VHV in x. - path.lineTo(from[0] + (to[0] - from[0]) * ratio, from[1]); - path.lineTo(from[0] + (to[0] - from[0]) * ratio, to[1]); - path.lineTo(to[0], to[1]); - return path; - } - path.moveTo(from[0], from[1]); - // VHV in y. - path.lineTo(from[0], from[1] + (to[1] - from[1]) * ratio); - path.lineTo(to[0], from[1] + (to[1] - from[1]) * ratio); - path.lineTo(to[0], to[1]); - return path; -} -/** - * Connect 2 points with a VHV line, used in tree. - */ -const VHV = (options, context) => { - const { cornerRatio = 1 / 3 } = options, style = __rest(options, ["cornerRatio"]); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { defaultColor } = defaults, rest = __rest(defaults, ["defaultColor"]); - const { color = defaultColor, transform } = value; - const [from, to] = points; - const path = getVHVPath(from, to, coordinate, cornerRatio); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.VHV = VHV; -exports.VHV.props = { - defaultMarker: 'vhv', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=vhv.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815935, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Arc = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -/** - * Connect points for 2 points: - * - In rect, draw half circle. - * - In polar, draw quadratic curve. - */ -const Arc = (options, context) => { - const style = __rest(options, []); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, transform } = value; - const [from, to] = points; - const path = (0, d3_path_1.path)(); - path.moveTo(from[0], from[1]); - if ((0, coordinate_1.isPolar)(coordinate)) { - const center = coordinate.getCenter(); - path.quadraticCurveTo(center[0], center[1], to[0], to[1]); - } - else { - const center = (0, vector_1.mid)(from, to); - const raduis = (0, vector_1.dist)(from, to) / 2; - (0, utils_1.appendArc)(path, from, to, center, raduis); - } - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Arc = Arc; -exports.Arc.props = { - defaultMarker: 'smooth', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=arc.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815936, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Image = void 0; -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const utils_2 = require("../../mark/utils"); -const Image = (options, context) => { - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, src = '', size = 32, transform = '' } = value; - let { width = size, height = size } = options; - const [[x0, y0]] = points; - // Support percentage width, height. - const [w, h] = coordinate.getSize(); - width = typeof width === 'string' ? (0, utils_2.p)(width) * w : width; - height = typeof height === 'string' ? (0, utils_2.p)(height) * h : height; - const x = x0 - Number(width) / 2; - const y = y0 - Number(height) / 2; - return (0, selection_1.select)(document.createElement('image', {})) - .call(utils_1.applyStyle, rest) - .style('x', x) - .style('y', y) - .style('src', src) - .style('stroke', color) - .style('transform', transform) - .call(utils_1.applyStyle, options) - .style('width', width) - .style('height', height) - .node(); - }; -}; -exports.Image = Image; -exports.Image.props = { - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=image.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../mark/utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815937, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.initializeData = exports.valueof = exports.field = exports.visualMark = exports.p = exports.createBandOffset = exports.bandWidth = exports.basePostInference = exports.basePreInference = exports.baseAnnotationChannels = exports.tooltipXd = exports.tooltip1d = exports.tooltip2d = exports.tooltip3d = exports.baseGeometryChannels = exports.baseChannels = void 0; -const transform_1 = require("../transform"); -function baseChannels(options = {}) { - const { shapes } = options; - return [ - { name: 'color' }, - { name: 'opacity' }, - { name: 'shape', range: shapes }, - { name: 'enterType' }, - { name: 'enterDelay', scaleKey: 'enter' }, - { name: 'enterDuration', scaleKey: 'enter' }, - { name: 'enterEasing' }, - { name: 'key', scale: 'identity' }, - { name: 'groupKey', scale: 'identity' }, - { name: 'label', scale: 'identity' }, - ]; -} -exports.baseChannels = baseChannels; -function baseGeometryChannels(options = {}) { - return [...baseChannels(options), { name: 'title', scale: 'identity' }]; -} -exports.baseGeometryChannels = baseGeometryChannels; -function tooltip3d() { - return [ - { type: transform_1.MaybeTitle, channel: 'color' }, - { type: transform_1.MaybeTooltip, channel: ['x', 'y', 'z'] }, - ]; -} -exports.tooltip3d = tooltip3d; -function tooltip2d() { - return [ - { type: transform_1.MaybeTitle, channel: 'color' }, - { type: transform_1.MaybeTooltip, channel: ['x', 'y'] }, - ]; -} -exports.tooltip2d = tooltip2d; -function tooltip1d() { - return [ - { type: transform_1.MaybeTitle, channel: 'x' }, - { type: transform_1.MaybeTooltip, channel: ['y'] }, - ]; -} -exports.tooltip1d = tooltip1d; -function tooltipXd() { - return [ - { type: transform_1.MaybeTitle, channel: 'color' }, - { type: transform_1.MaybeTooltip, channel: ['position'] }, - ]; -} -exports.tooltipXd = tooltipXd; -function baseAnnotationChannels(options = {}) { - return baseChannels(options); -} -exports.baseAnnotationChannels = baseAnnotationChannels; -function basePreInference() { - return [{ type: transform_1.MaybeKey }]; -} -exports.basePreInference = basePreInference; -function basePostInference() { - return []; -} -exports.basePostInference = basePostInference; -function bandWidth(scale, x) { - return scale.getBandWidth(scale.invert(x)); -} -exports.bandWidth = bandWidth; -function createBandOffset(scale, value, options = {}) { - const { x: X, y: Y, series: S } = value; - const { x, y, series } = scale; - const { style: { bandOffset = series ? 0 : 0.5, bandOffsetX = bandOffset, bandOffsetY = bandOffset, } = {}, } = options; - const isBandX = !!(x === null || x === void 0 ? void 0 : x.getBandWidth); - const isBandY = !!(y === null || y === void 0 ? void 0 : y.getBandWidth); - const isSeries = !!(series === null || series === void 0 ? void 0 : series.getBandWidth); - if (!isBandX && !isBandY) - return (d) => d; - return (d, i) => { - const widthX = isBandX ? bandWidth(x, X[i]) : 0; - const widthY = isBandY ? bandWidth(y, Y[i]) : 0; - const f = () => (bandWidth(series, S[i]) / 2 + +S[i]) * widthX; - const offset = isSeries && S ? f() : 0; - const [x0, y0] = d; - return [x0 + bandOffsetX * widthX + offset, y0 + bandOffsetY * widthY]; - }; -} -exports.createBandOffset = createBandOffset; -function p(d) { - return parseFloat(d) / 100; -} -exports.p = p; -function visualMark(index, scale, value, coordinate) { - const { x: X, y: Y } = value; - const { innerWidth, innerHeight } = coordinate.getOptions(); - const P = Array.from(index, (i) => { - const x0 = X[i]; - const y0 = Y[i]; - const x = typeof x0 === 'string' ? p(x0) * innerWidth : +x0; - const y = typeof y0 === 'string' ? p(y0) * innerHeight : +y0; - return [[x, y]]; - }); - return [index, P]; -} -exports.visualMark = visualMark; -function field(encode) { - return typeof encode === 'function' ? encode : (d) => d[encode]; -} -exports.field = field; -function valueof(data, encode) { - return Array.from(data, field(encode)); -} -exports.valueof = valueof; -function initializeData(data, encode) { - const { source = (d) => d.source, target = (d) => d.target, value = (d) => d.value, } = encode; - const { links, nodes } = data; - const LS = valueof(links, source); - const LT = valueof(links, target); - const LV = valueof(links, value); - return { - links: links.map((_, i) => ({ - target: LT[i], - source: LS[i], - value: LV[i], - })), - nodes: nodes || Array.from(new Set([...LS, ...LT]), (key) => ({ key })), - }; -} -exports.initializeData = initializeData; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {"../transform":1751263815823}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815938, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Polygon = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const coordinate_1 = require("../../utils/coordinate"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const vector_1 = require("../../utils/vector"); -function getPolygonPath(points, coordinate) { - const path = (0, d3_path_1.path)(); - // In polar, draw arc. - if ((0, coordinate_1.isPolar)(coordinate)) { - const center = coordinate.getCenter(); - const closedPoints = [...points, points[0]]; - // Calculate dist array for cache. - const dists = closedPoints.map((p) => (0, vector_1.dist)(p, center)); - closedPoints.forEach((curr, idx) => { - if (idx === 0) { - path.moveTo(curr[0], curr[1]); - return; - } - const currDist = dists[idx]; - const prev = points[idx - 1]; - const prevDist = dists[idx - 1]; - // When radius is equal, draw 2 point with arc. - // todo: choose a minimum value. - if (prevDist !== undefined && Math.abs(currDist - prevDist) < 1e-10) { - (0, utils_1.appendArc)(path, prev, curr, center, currDist); - } - else { - path.lineTo(curr[0], curr[1]); - } - }); - path.closePath(); - return path; - } - // In rect, draw polygon. - return (0, utils_1.appendPolygon)(path, points); -} -const Polygon = (options, context) => { - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, transform } = value; - const path = getPolygonPath(points, coordinate); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color) - .style('fill', color) - .style('transform', transform) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Polygon = Polygon; -exports.Polygon.props = { - defaultMarker: 'square', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=polygon.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815939, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Ribbon = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -function getRibbonPath(points, coordinate) { - const [p0, p1, p2, p3] = points; - const path = (0, d3_path_1.path)(); - // In polar, draw shape only for Chord. - if ((0, coordinate_1.isPolar)(coordinate)) { - const center = coordinate.getCenter(); - const radius = (0, vector_1.dist)(center, p0); - path.moveTo(p0[0], p0[1]); - // p0 -> p2 - path.quadraticCurveTo(center[0], center[1], p2[0], p2[1]); - // p2 -> p3 - (0, utils_1.appendArc)(path, p2, p3, center, radius); - // p3 -> p1 - path.quadraticCurveTo(center[0], center[1], p1[0], p1[1]); - // p1 -> p0 - (0, utils_1.appendArc)(path, p1, p0, center, radius); - path.closePath(); - return path; - } - // In Rect, draw shape for Sankey. - path.moveTo(p0[0], p0[1]); - path.bezierCurveTo(p0[0] / 2 + p2[0] / 2, p0[1], p0[0] / 2 + p2[0] / 2, p2[1], p2[0], p2[1]); - path.lineTo(p3[0], p3[1]); - path.bezierCurveTo(p3[0] / 2 + p1[0] / 2, p3[1], p3[0] / 2 + p1[0] / 2, p1[1], p1[0], p1[1]); - path.lineTo(p0[0], p0[1]); - path.closePath(); - return path; -} -/** - * Connect points for 4 points: - * - In rect, draw ribbon used in Sankey. - * - In polar, draw arc used in Chord. - */ -const Ribbon = (options, context) => { - const style = __rest(options, []); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor, transform } = value; - const path = getRibbonPath(points, coordinate); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('fill', color || defaultColor) - .style('stroke', color || defaultColor) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Ribbon = Ribbon; -exports.Ribbon.props = { - defaultMarker: 'square', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=ribbon.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815940, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Box = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -function getPath(points, coordinate) { - const path = (0, d3_path_1.path)(); - if (!(0, coordinate_1.isPolar)(coordinate)) { - path.moveTo(...points[0]); - path.lineTo(...points[1]); - path.moveTo(...points[2]); - path.lineTo(...points[3]); - path.moveTo(...points[4]); - path.lineTo(...points[5]); - path.lineTo(...points[6]); - path.lineTo(...points[7]); - path.closePath(); - path.moveTo(...points[8]); - path.lineTo(...points[9]); - path.moveTo(...points[10]); - path.lineTo(...points[11]); - path.moveTo(...points[12]); - path.lineTo(...points[13]); - } - else { - // In polar coordinate. - const center = coordinate.getCenter(); - const [x, y] = center; - const startAngle = (0, vector_1.angle)((0, vector_1.sub)(points[0], center)); - const endAngle = (0, vector_1.angle)((0, vector_1.sub)(points[1], center)); - const radiusHigh = (0, vector_1.dist)(center, points[2]); - const radiusQ3 = (0, vector_1.dist)(center, points[3]); - const radiusMedian = (0, vector_1.dist)(center, points[8]); - const radiusQ1 = (0, vector_1.dist)(center, points[10]); - const radiusLow = (0, vector_1.dist)(center, points[11]); - path.moveTo(...points[0]); - path.arc(x, y, radiusHigh, startAngle, endAngle); - path.arc(x, y, radiusHigh, endAngle, startAngle, true); - path.moveTo(...points[2]); - path.lineTo(...points[3]); - path.moveTo(...points[4]); - path.arc(x, y, radiusQ3, startAngle, endAngle); // 4 -> 5 - path.lineTo(...points[6]); // 5 -> 6 - path.arc(x, y, radiusQ1, endAngle, startAngle, true); // 6 -> 7 - path.closePath(); - path.moveTo(...points[8]); - path.arc(x, y, radiusMedian, startAngle, endAngle); // 8 -> 9 - path.arc(x, y, radiusMedian, endAngle, startAngle, true); // 9 -> 8 - path.moveTo(...points[10]); - path.lineTo(...points[11]); - path.moveTo(...points[12]); - path.arc(x, y, radiusLow, startAngle, endAngle); // 12 -> 13 - path.arc(x, y, radiusLow, endAngle, startAngle, true); // 13 -> 12 - } - return path; -} -const Box = (options, context) => { - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color, transform } = value; - const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, ["color", "fill", "stroke"]); - const path = getPath(points, coordinate); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', stroke) - .style('fill', color || fill) - .style('transform', transform) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Box = Box; -exports.Box.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=box.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815941, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Violin = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const coordinate_1 = require("../../utils/coordinate"); -const vector_1 = require("../../utils/vector"); -function getPath(p, coordinate, size = 4) { - const path = (0, d3_path_1.path)(); - if (!(0, coordinate_1.isPolar)(coordinate)) { - path.moveTo(...p[2]); - path.lineTo(...p[3]); - path.lineTo(p[3][0] - size, p[3][1]); - path.lineTo(p[10][0] - size, p[10][1]); - path.lineTo(p[10][0] + size, p[10][1]); - path.lineTo(p[3][0] + size, p[3][1]); - path.lineTo(...p[3]); - path.closePath(); - path.moveTo(...p[10]); - path.lineTo(...p[11]); - path.moveTo(p[3][0] + size / 2, p[8][1]); - path.arc(p[3][0], p[8][1], size / 2, 0, Math.PI * 2); - path.closePath(); - return path; - } - const center = coordinate.getCenter(); - const [x, y] = center; - const radiusQ3 = (0, vector_1.dist)(center, p[3]); - const radiusMedian = (0, vector_1.dist)(center, p[8]); - const radiusQ1 = (0, vector_1.dist)(center, p[10]); - const middleAngle = (0, vector_1.angle)((0, vector_1.sub)(p[2], center)); - const rectAngle = Math.asin(size / radiusMedian); - const startAngle = middleAngle - rectAngle; - const endAngle = middleAngle + rectAngle; - path.moveTo(...p[2]); - path.lineTo(...p[3]); - path.moveTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y); - path.arc(x, y, radiusQ3, startAngle, endAngle); - path.lineTo(Math.cos(endAngle) * radiusQ1 + x, Math.sin(endAngle) * radiusQ1 + y); - path.arc(x, y, radiusQ1, endAngle, startAngle, true); - path.lineTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y); - path.closePath(); - path.moveTo(...p[10]); - path.lineTo(...p[11]); - const a = (startAngle + endAngle) / 2; - path.moveTo(Math.cos(a) * (radiusMedian + size / 2) + x, Math.sin(a) * (radiusMedian + size / 2) + y); - path.arc(Math.cos(a) * radiusMedian + x, Math.sin(a) * radiusMedian + y, size / 2, a, Math.PI * 2 + a); - path.closePath(); - return path; -} -const Violin = (options, context) => { - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color, transform } = value; - // TODO: how to setting it by size channel. - const size = 4; - const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, ["color", "fill", "stroke"]); - const path = getPath(points, coordinate, size); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', stroke) - .style('fill', color || fill) - .style('transform', transform) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Violin = Violin; -exports.Violin.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=violin.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"../../utils/coordinate":1751263815882,"../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815942, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Line = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const selection_1 = require("../../utils/selection"); -const vector_1 = require("../../utils/vector"); -const helper_1 = require("../../utils/helper"); -const utils_1 = require("../utils"); -function getArrowMarker(document, arrowSize, arrowStyle) { - const arrowMarker = document.createElement('path', { - style: Object.assign({ d: `M ${arrowSize},${arrowSize} L -${arrowSize},0 L ${arrowSize},-${arrowSize} L 0,0 Z`, transformOrigin: 'center' }, arrowStyle), - }); - return arrowMarker; -} -function getPath(points, coordinate) { - if (!(0, coordinate_1.isPolar)(coordinate)) - return (0, d3_shape_1.line)() - .x((d) => d[0]) - .y((d) => d[1])(points); - const center = coordinate.getCenter(); - return (0, d3_shape_1.arc)()({ - startAngle: 0, - endAngle: Math.PI * 2, - outerRadius: (0, vector_1.dist)(points[0], center), - innerRadius: (0, vector_1.dist)(points[1], center), - }); -} -function getTransform(coordinate, transform) { - if (!(0, coordinate_1.isPolar)(coordinate)) - return transform; - const [cx, cy] = coordinate.getCenter(); - return `translate(${cx}, ${cy}) ${transform || ''}`; -} -const Line = (options, context) => { - const { arrow, arrowSize = 4 } = options, style = __rest(options, ["arrow", "arrowSize"]); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor, lineWidth } = defaults, shapeTheme = __rest(defaults, ["color", "lineWidth"]); - const { color = defaultColor, size = lineWidth } = value; - const arrowMarker = arrow - ? getArrowMarker(document, arrowSize, Object.assign({ fill: style.stroke || color, stroke: style.stroke || color }, (0, helper_1.subObject)(style, 'arrow'))) - : null; - const path = getPath(points, coordinate); - const transform = getTransform(coordinate, value.transform); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, shapeTheme) - .style('d', path) - .style('stroke', color) - .style('lineWidth', size) - .style('transform', transform) - .style('markerEnd', arrowMarker) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Line = Line; -exports.Line.props = { - defaultMarker: 'line', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=line.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/selection":1751263815883,"../../utils/vector":1751263815873,"../../utils/helper":1751263815829,"../utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815943, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connector = void 0; -const g_1 = require("@antv/g"); -const component_1 = require("@antv/component"); -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const coordinate_1 = require("../../utils/coordinate"); -const helper_1 = require("../../utils/helper"); -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../utils"); -function inferSymbol(x, y, r) { - return [['M', x, y], ['L', x + 2 * r, y - r], ['L', x + 2 * r, y + r], ['Z']]; -} -/** - * @todo support polar later. - */ -function inferConnectorPath(points) { - return (0, d3_shape_1.line)() - .x((d) => d[0]) - .y((d) => d[1])(points); -} -function getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 = 0) { - const [[x0, y0], [x1, y1]] = points; - if ((0, coordinate_1.isTranspose)(coordinate)) { - const X0 = x0 + sourceOffsetY; - const X1 = x1 + targetOffsetY; - const X = X0 + length1; - const Y0 = y0 + sourceOffsetX; - const Y1 = y1 + targetOffsetX; - return [ - [X0, Y0], - [X, Y0], - [X, Y1], - [X1, Y1], - ]; - } - const Y0 = y0 - sourceOffsetY; - const Y1 = y1 - targetOffsetY; - const Y = Y0 - length1; - const X0 = x0 - sourceOffsetX; - const X1 = x1 - targetOffsetX; - return [ - [X0, Y0], - [X0, Y], - [X1, Y], - [X1, Y1], - ]; -} -const Connector = (options, context) => { - const { offsetX = 0, sourceOffsetX = offsetX, targetOffsetX = offsetX, offsetY = 0, sourceOffsetY = offsetY, targetOffsetY = offsetY, connectLength1: length1, endMarker = true } = options, style = __rest(options, ["offsetX", "sourceOffsetX", "targetOffsetX", "offsetY", "sourceOffsetY", "targetOffsetY", "connectLength1", "endMarker"]); - const { coordinate } = context; - return (points, value, defaults) => { - const { color: defaultColor, connectLength1 } = defaults, rest = __rest(defaults, ["color", "connectLength1"]); - const { color, transform } = value; - const P = getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 !== null && length1 !== void 0 ? length1 : connectLength1); - const makerStyle = (0, helper_1.subObject)(Object.assign(Object.assign({}, style), defaults), 'endMarker'); - return (0, selection_1.select)(new g_1.Path()) - .call(utils_1.applyStyle, rest) - .style('d', inferConnectorPath(P)) - .style('stroke', color || defaultColor) - .style('transform', transform) - .style('markerEnd', endMarker - ? new component_1.Marker({ - className: 'marker', - style: Object.assign(Object.assign({}, makerStyle), { symbol: inferSymbol }), - }) - : null) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Connector = Connector; -exports.Connector.props = { - defaultMarker: 'line', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=connector.js.map -}, function(modId) { var map = {"../../utils/coordinate":1751263815882,"../../utils/helper":1751263815829,"../../utils/selection":1751263815883,"../utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815944, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Label = void 0; -const selection_1 = require("../../utils/selection"); -const utils_1 = require("../../shape/utils"); -const coordinate_1 = require("../../utils/coordinate"); -const string_1 = require("../../utils/string"); -const advance_1 = require("../text/advance"); -const PositionProcessor = __importStar(require("./position")); -function inferPosition(position, coordinate) { - if (position !== undefined) - return position; - if ((0, coordinate_1.isCircular)(coordinate)) - return 'inside'; - if ((0, coordinate_1.isTranspose)(coordinate)) - return 'right'; - return 'top'; -} -function getDefaultStyle(points, value, coordinate, theme, options, labels) { - // For non-series mark, calc position for label based on - // position and the bounds of shape. - const { position } = value; - const { render } = options; - const p = inferPosition(position, coordinate); - const labelType = render - ? 'htmlLabel' - : p === 'inside' - ? 'innerLabel' - : 'label'; - const t = theme[labelType]; - const v = Object.assign({}, t, value); - const processor = PositionProcessor[(0, string_1.camelCase)(p)]; - if (!processor) { - throw new Error(`Unknown position: ${p}`); - } - return Object.assign(Object.assign({}, t), processor(p, points, v, coordinate, options, labels)); -} -/** - * Render normal label for each mark. - * @todo Support position option: middle... - */ -const Label = (options, context) => { - const { coordinate, theme } = context; - const { render } = options; - return (points, value, style, labels) => { - const { text, x, y, transform: specifiedTS = '', transformOrigin, className = '' } = value, overrideStyle = __rest(value, ["text", "x", "y", "transform", "transformOrigin", "className"]); - const _a = getDefaultStyle(points, value, coordinate, theme, options, labels), { rotate = 0, transform = '' } = _a, defaultStyle = __rest(_a, ["rotate", "transform"]); - return (0, selection_1.select)(new advance_1.Advance()) - .call(utils_1.applyStyle, defaultStyle) - .style('text', `${text}`) - .style('className', `${className} g2-label`) - .style('innerHTML', render ? render(text, value.datum, value.index) : undefined) - .style('labelTransform', `${transform} rotate(${+rotate}) ${specifiedTS}`.trim()) - .style('labelTransformOrigin', transformOrigin) - .style('coordCenter', coordinate.getCenter()) - .call(utils_1.applyStyle, overrideStyle) - .node(); - }; -}; -exports.Label = Label; -exports.Label.props = { - defaultMarker: 'point', -}; -//# sourceMappingURL=label.js.map -}, function(modId) { var map = {"../../utils/selection":1751263815883,"../../shape/utils":1751263815885,"../../utils/coordinate":1751263815882,"../../utils/string":1751263815900,"../text/advance":1751263815923,"./position":1751263815945}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815945, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.topRight = exports.topLeft = exports.top = exports.surround = exports.spider = exports.right = exports.outside = exports.left = exports.inside = exports.bottomRight = exports.bottomLeft = exports.bottom = exports.area = void 0; -var area_1 = require("./area"); -Object.defineProperty(exports, "area", { enumerable: true, get: function () { return area_1.area; } }); -var bottom_1 = require("./bottom"); -Object.defineProperty(exports, "bottom", { enumerable: true, get: function () { return bottom_1.bottom; } }); -var bottomLeft_1 = require("./bottomLeft"); -Object.defineProperty(exports, "bottomLeft", { enumerable: true, get: function () { return bottomLeft_1.bottomLeft; } }); -var bottomRight_1 = require("./bottomRight"); -Object.defineProperty(exports, "bottomRight", { enumerable: true, get: function () { return bottomRight_1.bottomRight; } }); -var inside_1 = require("./inside"); -Object.defineProperty(exports, "inside", { enumerable: true, get: function () { return inside_1.inside; } }); -var left_1 = require("./left"); -Object.defineProperty(exports, "left", { enumerable: true, get: function () { return left_1.left; } }); -var outside_1 = require("./outside"); -Object.defineProperty(exports, "outside", { enumerable: true, get: function () { return outside_1.outside; } }); -var right_1 = require("./right"); -Object.defineProperty(exports, "right", { enumerable: true, get: function () { return right_1.right; } }); -var spider_1 = require("./spider"); -Object.defineProperty(exports, "spider", { enumerable: true, get: function () { return spider_1.spider; } }); -var surround_1 = require("./surround"); -Object.defineProperty(exports, "surround", { enumerable: true, get: function () { return surround_1.surround; } }); -var top_1 = require("./top"); -Object.defineProperty(exports, "top", { enumerable: true, get: function () { return top_1.top; } }); -var topLeft_1 = require("./topLeft"); -Object.defineProperty(exports, "topLeft", { enumerable: true, get: function () { return topLeft_1.topLeft; } }); -var topRight_1 = require("./topRight"); -Object.defineProperty(exports, "topRight", { enumerable: true, get: function () { return topRight_1.topRight; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./area":1751263815946,"./bottom":1751263815947,"./bottomLeft":1751263815949,"./bottomRight":1751263815950,"./inside":1751263815951,"./left":1751263815952,"./outside":1751263815953,"./right":1751263815954,"./spider":1751263815955,"./surround":1751263815957,"./top":1751263815958,"./topLeft":1751263815959,"./topRight":1751263815960}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815946, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.area = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const vector_1 = require("../../../utils/vector"); -/** - * Only for Area label. - */ -function area(position, points, value, coordinate) { - const l = points.length / 2; - const Y1 = points.slice(0, l); - const Y0 = points.slice(l); - // Get the maximal space for label. - let idx = (0, d3_array_1.maxIndex)(Y1, (p, i) => Math.abs(p[1] - Y0[i][1])); - // Do not show label at first and last. - idx = Math.max(Math.min(idx, l - 2), 1); - const mid = (i) => [Y1[i][0], (Y1[i][1] + Y0[i][1]) / 2]; - const point = mid(idx); - const prev = mid(idx - 1); - const next = mid(idx + 1); - // todo: G rotate only support deg. - const rotate = ((0, vector_1.angle)((0, vector_1.sub)(next, prev)) / Math.PI) * 180; - return { - x: point[0], - y: point[1], - transform: `rotate(${rotate})`, - textAlign: 'center', - textBaseline: 'middle', - }; -} -exports.area = area; -//# sourceMappingURL=area.js.map -}, function(modId) { var map = {"../../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815947, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.bottom = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "bottom", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=bottom.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815948, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getDefaultStyle = exports.inferIdentityStyle = exports.inferRotation = exports.pointOfArc = exports.inferRadialStyle = exports.inferNonCircularStyle = void 0; -const utils_1 = require("../../../shape/utils"); -const coordinate_1 = require("../../../utils/coordinate"); -const helper_1 = require("../../../utils/helper"); -const vector_1 = require("../../../utils/vector"); -function inferNonCircularStyle(position, points, value, coordinate) { - const { bounds } = value; - const [[x0, y0], [x1, y1]] = bounds; - const w = x1 - x0; - const h = y1 - y0; - const xy = (options) => { - const { x: ox, y: oy } = options; - const px = (0, helper_1.maybePercentage)(value.x, w); - const py = (0, helper_1.maybePercentage)(value.y, h); - return Object.assign(Object.assign({}, options), { x: (px || ox) + x0, y: (py || oy) + y0 }); - }; - // 4 direction. - if (position === 'left') - return xy({ x: 0, y: h / 2, textAlign: 'start', textBaseline: 'middle' }); - if (position === 'right') - return xy({ x: w, y: h / 2, textAlign: 'end', textBaseline: 'middle' }); - if (position === 'top') - return xy({ x: w / 2, y: 0, textAlign: 'center', textBaseline: 'top' }); - if (position === 'bottom') - return xy({ x: w / 2, y: h, textAlign: 'center', textBaseline: 'bottom' }); - // 4 corner position. - if (position === 'top-left') - return xy({ x: 0, y: 0, textAlign: 'start', textBaseline: 'top' }); - if (position === 'top-right') - return xy({ x: w, y: 0, textAlign: 'end', textBaseline: 'top' }); - if (position === 'bottom-left') - return xy({ x: 0, y: h, textAlign: 'start', textBaseline: 'bottom' }); - if (position === 'bottom-right') - return xy({ x: w, y: h, textAlign: 'end', textBaseline: 'bottom' }); - // default return 'inside' - return xy({ - x: w / 2, - y: h / 2, - textAlign: 'center', - textBaseline: 'middle', - }); -} -exports.inferNonCircularStyle = inferNonCircularStyle; -function inferRadialStyle(position, points, value, coordinate) { - const { y, y1, autoRotate, rotateToAlignArc } = value; - const center = coordinate.getCenter(); - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]); - const { innerRadius, outerRadius, startAngle, endAngle } = arcObject; - const angle = position === 'inside' ? (startAngle + endAngle) / 2 : endAngle; - const rotate = inferRotation(angle, autoRotate, rotateToAlignArc); - const point = (() => { - const [p0, p1] = points; - const radius = innerRadius + (outerRadius - innerRadius) * 0.5; - const [x, y] = position === 'inside' ? pointOfArc(center, angle, radius) : (0, vector_1.mid)(p0, p1); - return { x, y }; - })(); - return Object.assign(Object.assign({}, point), { textAlign: position === 'inside' ? 'center' : 'start', textBaseline: 'middle', rotate }); -} -exports.inferRadialStyle = inferRadialStyle; -function pointOfArc(center, angle, radius) { - return [ - center[0] + Math.sin(angle) * radius, - center[1] - Math.cos(angle) * radius, - ]; -} -exports.pointOfArc = pointOfArc; -function inferRotation(angle, autoRotate, rotateToAlignArc) { - if (!autoRotate) - return 0; - const append = rotateToAlignArc ? 0 : Math.sin(angle) < 0 ? 90 : -90; - return (angle / Math.PI) * 180 + append; -} -exports.inferRotation = inferRotation; -function inferInnerCircularStyle(position, points, value, coordinate) { - const { y, y1, autoRotate, rotateToAlignArc, radius: radiusRatio = 0.5, offset = 0, } = value; - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]); - const { startAngle, endAngle } = arcObject; - const center = coordinate.getCenter(); - const angle = (startAngle + endAngle) / 2; - const rotate = inferRotation(angle, autoRotate, rotateToAlignArc); - const textStyle = { textAlign: 'center', textBaseline: 'middle', rotate }; - const { innerRadius, outerRadius } = arcObject; - const r0 = innerRadius + (outerRadius - innerRadius) * radiusRatio; - const r1 = r0 + offset; - const [x0, y0] = pointOfArc(center, angle, r1); - return Object.assign({ x: x0, y: y0 }, textStyle); -} -// Set to null will not be set with default value as below. -// const { x = 0 } = options; -function maybeUndefined(d) { - return d === undefined ? null : d; -} -function inferIdentityStyle(position, points, value, coordinate) { - const { bounds } = value; - const [p] = bounds; - return { - x: maybeUndefined(p[0]), - y: maybeUndefined(p[1]), - }; -} -exports.inferIdentityStyle = inferIdentityStyle; -function getDefaultStyle(position, points, value, coordinate) { - const { bounds } = value; - // When bounds.length = 1 - // For series mark, such as line and area. - // The bounds for text is defined with only one point. - // Use this point as the label position. - if (bounds.length === 1) { - return inferIdentityStyle(position, points, value, coordinate); - } - const inferDefaultStyle = (0, coordinate_1.isRadial)(coordinate) - ? inferRadialStyle - : (0, coordinate_1.isCircular)(coordinate) - ? inferInnerCircularStyle - : inferNonCircularStyle; - return inferDefaultStyle(position, points, value, coordinate); -} -exports.getDefaultStyle = getDefaultStyle; -//# sourceMappingURL=default.js.map -}, function(modId) { var map = {"../../../shape/utils":1751263815885,"../../../utils/coordinate":1751263815882,"../../../utils/helper":1751263815829,"../../../utils/vector":1751263815873}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815949, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.bottomLeft = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "bottomLeft", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=bottomLeft.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815950, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.bottomRight = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "bottomRight", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=bottomRight.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815951, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.inside = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "inside", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=inside.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815952, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.left = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "left", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=left.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815953, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.outside = exports.inferOutsideCircularStyle = exports.angleOf = exports.radiusOf = exports.linePoints = void 0; -const utils_1 = require("../../../shape/utils"); -const coordinate_1 = require("../../../utils/coordinate"); -const default_1 = require("./default"); -function linePoints(center, angle, radius, radius1, offsetX) { - const [x0, y0] = (0, default_1.pointOfArc)(center, angle, radius); - const [x1, y1] = (0, default_1.pointOfArc)(center, angle, radius1); - const sign = Math.sin(angle) > 0 ? 1 : -1; - return [ - [x0, y0], - [x1, y1], - [x1 + sign * offsetX, y1], - ]; -} -exports.linePoints = linePoints; -function radiusOf(points, value, coordinate) { - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [value.y, value.y1]); - const { innerRadius, outerRadius } = arcObject; - return innerRadius + (outerRadius - innerRadius); -} -exports.radiusOf = radiusOf; -function angleOf(points, value, coordinate) { - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [value.y, value.y1]); - const { startAngle, endAngle } = arcObject; - return (startAngle + endAngle) / 2; -} -exports.angleOf = angleOf; -function inferOutsideCircularStyle(position, points, value, coordinate) { - const { autoRotate, rotateToAlignArc, offset = 0, connector = true, connectorLength = offset, connectorLength2 = 0, connectorDistance = 0, } = value; - const center = coordinate.getCenter(); - const angle = angleOf(points, value, coordinate); - const sign = Math.sin(angle) > 0 ? 1 : -1; - const rotate = (0, default_1.inferRotation)(angle, autoRotate, rotateToAlignArc); - const textStyle = { - textAlign: sign > 0 || (0, coordinate_1.isRadial)(coordinate) ? 'start' : 'end', - textBaseline: 'middle', - rotate, - }; - const radius = radiusOf(points, value, coordinate); - const radius1 = radius + (connector ? connectorLength : offset); - const [[x0, y0], [x1, y1], [x2, y2]] = linePoints(center, angle, radius, radius1, connector ? connectorLength2 : 0); - const dx = connector ? +connectorDistance * sign : 0; - const x = x2 + dx; - const y = y2; - const connectorStyle = { - connector, - connectorPoints: [ - [x1 - x, y1 - y], - [x2 - x, y2 - y], - ], - }; - return Object.assign(Object.assign({ x0, - y0, x: x2 + dx, y: y2 }, textStyle), connectorStyle); -} -exports.inferOutsideCircularStyle = inferOutsideCircularStyle; -function outside(position, points, value, coordinate) { - const { bounds } = value; - // When bounds.length = 1 - // For series mark, such as line and area. - // The bounds for text is defined with only one point. - // Use this point as the label position. - if (bounds.length === 1) { - return (0, default_1.inferIdentityStyle)(position, points, value, coordinate); - } - const inferDefaultStyle = (0, coordinate_1.isRadial)(coordinate) - ? default_1.inferRadialStyle - : (0, coordinate_1.isCircular)(coordinate) - ? inferOutsideCircularStyle - : default_1.inferNonCircularStyle; - return inferDefaultStyle(position, points, value, coordinate); -} -exports.outside = outside; -//# sourceMappingURL=outside.js.map -}, function(modId) { var map = {"../../../shape/utils":1751263815885,"../../../utils/coordinate":1751263815882,"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815954, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.right = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "right", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=right.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815955, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.spider = void 0; -const coordinate_1 = require("../../../utils/coordinate"); -const outside_1 = require("./outside"); -const utils_1 = require("./utils"); -const styleByPoints = new WeakMap(); -function compute(points, value, coordinate) { - const { connectorLength, connectorLength2, connectorDistance } = value; - const style = __rest((0, outside_1.inferOutsideCircularStyle)('outside', points, value, coordinate), []); - const center = coordinate.getCenter(); - const radius = (0, outside_1.radiusOf)(points, value, coordinate); - const angle = (0, outside_1.angleOf)(points, value, coordinate); - const radius1 = radius + connectorLength + connectorLength2; - const sign = Math.sin(angle) > 0 ? 1 : -1; - const newX = center[0] + (radius1 + +connectorDistance) * sign; - const { x: originX } = style; - const dx = newX - originX; - style.x += dx; - style.connectorPoints[0][0] -= dx; - return style; -} -/** - * Spider label transform only suitable for the labels in polar coordinate, - * labels should distinguish coordinate type. - */ -function spider(position, points, value, coordinate, options, labels) { - if (!(0, coordinate_1.isCircular)(coordinate)) - return {}; - if (styleByPoints.has(points)) - return styleByPoints.get(points); - const computed = labels.map((points) => compute(points, value, coordinate)); - const { width, height } = coordinate.getOptions(); - const left = computed.filter((d) => d.x < width / 2); - const right = computed.filter((d) => d.x >= width / 2); - const extendedOptions = Object.assign(Object.assign({}, options), { height }); - (0, utils_1.hideAndDodgeY)(left, extendedOptions); - (0, utils_1.hideAndDodgeY)(right, extendedOptions); - computed.forEach((style, i) => styleByPoints.set(labels[i], style)); - return styleByPoints.get(points); -} -exports.spider = spider; -//# sourceMappingURL=spider.js.map -}, function(modId) { var map = {"../../../utils/coordinate":1751263815882,"./outside":1751263815953,"./utils":1751263815956}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815956, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hideAndDodgeY = exports.dodgeY = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -// Optimize antiCollision from: https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/util.ts -function dodgeY(labels, options = {}) { - const { labelHeight = 14, height } = options; - // Sort labels by y and init boxes (one box for each label) - const sortedLabels = (0, d3_array_1.sort)(labels, (d) => d.y); - const n = sortedLabels.length; - const boxes = new Array(n); - for (let i = 0; i < n; i++) { - const label = sortedLabels[i]; - const { y } = label; - boxes[i] = { y, y1: y + labelHeight, labels: [y] }; - } - // Merge boxes until no overlapping boxes or only one box left. - // All the boxes should start higher than 0, but maybe higher than height. - let overlap = true; - while (overlap) { - overlap = false; - // Scan backward because boxes maybe deleted. - for (let i = boxes.length - 1; i > 0; i--) { - const box = boxes[i]; - const preBox = boxes[i - 1]; - if (preBox.y1 > box.y) { - overlap = true; - preBox.labels.push(...box.labels); - boxes.splice(i, 1); - // Compute new y1 to contain the current box. - preBox.y1 += box.y1 - box.y; - // Make sure the new box is in the range of [0, height]. - const newHeight = preBox.y1 - preBox.y; - preBox.y1 = Math.max(Math.min(preBox.y1, height), newHeight); - preBox.y = preBox.y1 - newHeight; - } - } - } - let i = 0; - for (const box of boxes) { - const { y, labels } = box; - let prevY = y - labelHeight; - for (const curY of labels) { - const label = sortedLabels[i++]; - const expectedY = prevY + labelHeight; - const dy = expectedY - curY; - label.connectorPoints[0][1] -= dy; - label.y = prevY + labelHeight; - prevY += labelHeight; - } - } -} -exports.dodgeY = dodgeY; -function hideAndDodgeY(unsorted, options) { - const labels = (0, d3_array_1.sort)(unsorted, (d) => d.y); - const { height, labelHeight = 14 } = options; - const maxCount = Math.ceil(height / labelHeight); - if (labels.length <= maxCount) - return dodgeY(labels, options); - const filtered = []; - for (let i = 0; i < labels.length; i++) { - // Hide labels out of range. - if (i < labels.length - maxCount) { - labels[i].opacity = 0; - labels[i].connector = false; - } - else - filtered.push(labels[i]); - } - dodgeY(filtered, options); -} -exports.hideAndDodgeY = hideAndDodgeY; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815957, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.surround = void 0; -const coordinate_1 = require("../../../utils/coordinate"); -const vector_1 = require("../../../utils/vector"); -const default_1 = require("./default"); -const outside_1 = require("./outside"); -/** - * Surround label transform is used to make labels surround circular. - */ -function surround(position, points, value, coordinate) { - if (!(0, coordinate_1.isCircular)(coordinate)) - return {}; - const { connectorLength, connectorLength2, connectorDistance } = value; - const style = __rest((0, outside_1.inferOutsideCircularStyle)('outside', points, value, coordinate), []); - const { x0, y0 } = style; - const center = coordinate.getCenter(); - const radius = (0, coordinate_1.getRadius)(coordinate); - const radius1 = radius + connectorLength; - const angle = (0, vector_1.angleWithQuadrant)([x0 - center[0], y0 - center[1]]); - const sign = Math.sin(angle) > 0 ? 1 : -1; - const [newX, newY] = (0, default_1.pointOfArc)(center, angle, radius1); - style.x = newX + (connectorLength2 + connectorDistance) * sign; - style.y = newY; - return style; -} -exports.surround = surround; -//# sourceMappingURL=surround.js.map -}, function(modId) { var map = {"../../../utils/coordinate":1751263815882,"../../../utils/vector":1751263815873,"./default":1751263815948,"./outside":1751263815953}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815958, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.top = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "top", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=top.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815959, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.topLeft = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "topLeft", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=topLeft.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815960, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.topRight = void 0; -var default_1 = require("./default"); -Object.defineProperty(exports, "topRight", { enumerable: true, get: function () { return default_1.getDefaultStyle; } }); -//# sourceMappingURL=topRight.js.map -}, function(modId) { var map = {"./default":1751263815948}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815961, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Path = void 0; -const color_1 = require("./color"); -/** - * A filled path. - */ -const Path = (options, context) => { - return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill' }, options), context); -}; -exports.Path = Path; -exports.Path.props = { - defaultMarker: 'hvh', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=path.js.map -}, function(modId) { var map = {"./color":1751263815962}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815962, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Color = void 0; -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -/** - * Draw a filled or hollow path. - */ -const Color = (options, context) => { - const { arrow, colorAttribute } = options, style = __rest(options, ["arrow", "colorAttribute"]); - const { coordinate, document } = context; - return (points, value, defaults) => { - const { color: defaultColor, stroke } = defaults, rest = __rest(defaults, ["color", "stroke"]); - const { d, color = defaultColor } = value; - const [width, height] = coordinate.getSize(); - return ((0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - // Path support string, function with parameter { width, height }. - .style('d', typeof d === 'function' ? d({ width, height }) : d) - .style(colorAttribute, color) - .call(utils_1.applyStyle, style) - .node()); - }; -}; -exports.Color = Color; -exports.Color.props = { - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=color.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815963, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hollow = void 0; -const color_1 = require("./color"); -/** - * A hollow path. - */ -const Hollow = (options, context) => { - return (0, color_1.Color)(Object.assign({ fill: 'none', colorAttribute: 'stroke' }, options), context); -}; -exports.Hollow = Hollow; -exports.Hollow.props = { - defaultMarker: 'hvh', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=hollow.js.map -}, function(modId) { var map = {"./color":1751263815962}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815964, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Density = void 0; -const d3_path_1 = require("@antv/vendor/d3-path"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -/** - * Draw density shape. - */ -const Density = (options, context) => { - const { document } = context; - return (points, value, defaults) => { - const { transform } = value; - const { color: defaultColor } = defaults, rest = __rest(defaults, ["color"]); - const { color = defaultColor } = value; - const [first, ...p] = points; - // todo smooth, hollow - const path = (0, d3_path_1.path)(); - path.moveTo(...first); - p.forEach(([x, y]) => { - path.lineTo(x, y); - }); - path.closePath(); - return (0, selection_1.select)(document.createElement('path', {})) - .call(utils_1.applyStyle, rest) - .style('d', path.toString()) - .style('stroke', color || defaultColor) // Always has stroke color. - .style('fill', color || defaultColor) - .style('fillOpacity', 0.4) - .style('transform', transform) - .call(utils_1.applyStyle, options) - .node(); - }; -}; -exports.Density = Density; -exports.Density.props = { - defaultMarker: 'square', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=density.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815965, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Heatmap = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const utils_1 = require("../utils"); -const selection_1 = require("../../utils/selection"); -const renderer_1 = require("./renderer"); -function deleteKey(obj, fn) { - return Object.keys(obj).reduce((r, k) => { - const v = obj[k]; - if (!fn(v, k)) - r[k] = v; - return r; - }, {}); -} -const Heatmap = (options, context) => { - const { gradient, opacity, maxOpacity, minOpacity, blur, useGradientOpacity } = options, style = __rest(options, ["gradient", "opacity", "maxOpacity", "minOpacity", "blur", "useGradientOpacity"]); - const { coordinate, createCanvas, document } = context; - return (points, value, defaults) => { - const { transform } = value; - const [width, height] = coordinate.getSize(); - const data = points.map((p) => ({ - x: p[0], - y: p[1], - value: p[2], - radius: p[3], - })); - const min = (0, d3_array_1.min)(points, (p) => p[2]); - const max = (0, d3_array_1.max)(points, (p) => p[2]); - const options = { - gradient, - opacity, - minOpacity, - maxOpacity, - blur, - useGradientOpacity, - }; - const ctx = width && height - ? (0, renderer_1.HeatmapRenderer)(width, height, min, max, data, deleteKey(options, (v) => v === undefined), createCanvas) - : { canvas: null }; - return (0, selection_1.select)(document.createElement('image', {})) - .call(utils_1.applyStyle, defaults) - .style('x', 0) - .style('y', 0) - .style('width', width) - .style('height', height) - .style('src', ctx.canvas.toDataURL()) - .style('transform', transform) - .call(utils_1.applyStyle, style) - .node(); - }; -}; -exports.Heatmap = Heatmap; -exports.Heatmap.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=heatmap.js.map -}, function(modId) { var map = {"../utils":1751263815885,"../../utils/selection":1751263815883,"./renderer":1751263815966}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815966, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HeatmapRenderer = void 0; -const lru_1 = require("../../../utils/lru"); -const gradient_1 = require("./gradient"); -function newCanvas(createCanvas, width, height) { - const c = createCanvas ? createCanvas() : document.createElement('canvas'); - c.width = width; - c.height = height; - return c; -} -/** - * Get a point with template. - * @param radius - * @param blurFactor - * @returns - */ -const getPointTemplate = (0, lru_1.lru)((radius, blurFactor, createCanvas) => { - const tplCanvas = newCanvas(createCanvas, radius * 2, radius * 2); - const tplCtx = tplCanvas.getContext('2d'); - const x = radius; - const y = radius; - if (blurFactor === 1) { - tplCtx.beginPath(); - tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false); - tplCtx.fillStyle = 'rgba(0,0,0,1)'; - tplCtx.fill(); - } - else { - const gradient = tplCtx.createRadialGradient(x, y, radius * blurFactor, x, y, radius); - gradient.addColorStop(0, 'rgba(0,0,0,1)'); - gradient.addColorStop(1, 'rgba(0,0,0,0)'); - tplCtx.fillStyle = gradient; - tplCtx.fillRect(0, 0, 2 * radius, 2 * radius); - } - return tplCanvas; -}, (radius) => `${radius}`); -/** - * Get a color palette with len = 256 base on gradient. - * @param gradientConfig - * @returns - */ -function getColorPalette(gradientConfig, createCanvas) { - const paletteCanvas = newCanvas(createCanvas, 256, 1); - const paletteCtx = paletteCanvas.getContext('2d'); - const gradient = paletteCtx.createLinearGradient(0, 0, 256, 1); - (0, gradient_1.parseGradient)(gradientConfig).forEach(([r, c]) => { - gradient.addColorStop(r, c); - }); - paletteCtx.fillStyle = gradient; - paletteCtx.fillRect(0, 0, 256, 1); - return paletteCtx.getImageData(0, 0, 256, 1).data; -} -/** - * Draw all circle with alpha. - */ -function drawAlpha(shadowCtx, min, max, data, options, createCanvas) { - const { blur } = options; - let len = data.length; - while (len--) { - const { x, y, value: v, radius } = data[len]; - // Ff value is bigger than max, use max as value. - const value = Math.min(v, max); - const rectX = x - radius; - const rectY = y - radius; - const tpl = getPointTemplate(radius, 1 - blur, createCanvas); - // Value from minimum / value range, => [0, 1]. - const templateAlpha = (value - min) / (max - min); - // Small values are not visible because globalAlpha < .001 cannot be read from imageData. - shadowCtx.globalAlpha = Math.max(templateAlpha, 0.001); - shadowCtx.drawImage(tpl, rectX, rectY); - } - return shadowCtx; -} -function colorize(shadowCtx, maxWidth, maxHeight, palette, options) { - const { minOpacity, opacity, maxOpacity, useGradientOpacity } = options; - const x = 0; - const y = 0; - const width = maxWidth; - const height = maxHeight; - const img = shadowCtx.getImageData(x, y, width, height); - const imgData = img.data; - const len = imgData.length; - for (let i = 3; i < len; i += 4) { - const alpha = imgData[i]; - const offset = alpha * 4; - if (!offset) { - continue; - } - // Should be in [min, max], min >= 0. - const finalAlpha = opacity || Math.max(0, Math.min(maxOpacity, Math.max(minOpacity, alpha))); - // Update rgba. - imgData[i - 3] = palette[offset]; - imgData[i - 2] = palette[offset + 1]; - imgData[i - 1] = palette[offset + 2]; - imgData[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha; - } - return img; -} -/** - * Render a heatmap with canvas. - * See [heatmap.js](https://github.com/pa7/heatmap.js/blob/master/src/renderer/canvas2d.js). - */ -function HeatmapRenderer(width, height, min, max, data, options, createCanvas) { - const opts = Object.assign({ blur: 0.85, minOpacity: 0, opacity: 0.6, maxOpacity: 1, gradient: [ - [0.25, 'rgb(0,0,255)'], - [0.55, 'rgb(0,255,0)'], - [0.85, 'yellow'], - [1.0, 'rgb(255,0,0)'], - ] }, options); - opts.minOpacity *= 255; - opts.opacity *= 255; - opts.maxOpacity *= 255; - const shadowCanvas = newCanvas(createCanvas, width, height); - const shadowCtx = shadowCanvas.getContext('2d'); - const palette = getColorPalette(opts.gradient, createCanvas); - shadowCtx.clearRect(0, 0, width, height); - drawAlpha(shadowCtx, min, max, data, opts, createCanvas); - const img = colorize(shadowCtx, width, height, palette, opts); - const canvas = newCanvas(createCanvas, width, height); - const ctx = canvas.getContext('2d'); - ctx.putImageData(img, 0, 0); - return ctx; -} -exports.HeatmapRenderer = HeatmapRenderer; -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"../../../utils/lru":1751263815967,"./gradient":1751263815968}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815967, function(require, module, exports) { - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.lru = void 0; -const flru_1 = __importDefault(require("flru")); -const cache = (0, flru_1.default)(3); -/** - * A decorator to return new function with LRU cache. - */ -function lru(fn, keyFn = (...args) => `${args[0]}`, maxSize = 16) { - const cache = (0, flru_1.default)(maxSize); - return (...args) => { - const key = keyFn(...args); - let v = cache.get(key); - if (cache.has(key)) - return cache.get(key); - v = fn(...args); - cache.set(key, v); - return v; - }; -} -exports.lru = lru; -//# sourceMappingURL=lru.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815968, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseGradient = void 0; -/** - * Parse heatmap gradient. - */ -function parseGradient(gradient) { - if (typeof gradient === 'string') { - return gradient.split(' ').map((stop) => { - const [r, c] = stop.split(':'); - return [+r, c]; - }); - } - return gradient; -} -exports.parseGradient = parseGradient; -//# sourceMappingURL=gradient.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815969, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Shape = void 0; -/** - * Draw a custom shape. - */ -const Shape = (options, context) => { - const { render } = options, rest = __rest(options, ["render"]); - return (points) => { - const [[x0, y0]] = points; - return render(Object.assign(Object.assign({}, rest), { x: x0, y: y0 }), context); - }; -}; -exports.Shape = Shape; -exports.Shape.props = { - defaultMarker: 'point', - defaultEnterAnimation: 'fadeIn', - defaultUpdateAnimation: 'morphing', - defaultExitAnimation: 'fadeOut', -}; -//# sourceMappingURL=shape.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815970, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Liquid = void 0; -const util_1 = require("@antv/util"); -const wave_1 = require("./wave"); -const shapes_1 = require("./shapes"); -const getLiquidShape = (shape = 'circle') => shapes_1.LiquidShapesPath[shape] || shapes_1.LiquidShapesPath.circle; -const Liquid = (options, context) => { - if (!context) - return; - const { coordinate } = context; - const { liquidOptions, styleOptions } = options; - const { liquidShape, percent } = liquidOptions; - const { background: backgroundStyle, outline = {}, wave = {} } = styleOptions, attr = __rest(styleOptions, ["background", "outline", "wave"]); - const { border = 2, distance = 0 } = outline, outlineStyle = __rest(outline, ["border", "distance"]); - const { length = 192, count = 3 } = wave; - return (points, cfg, defaultAttr) => { - const { document } = context.canvas; - const { color, fillOpacity } = defaultAttr; - const attrs = Object.assign(Object.assign({ fill: color }, defaultAttr), attr); - const g = document.createElement('g', {}); - // Center x/y. - const [centerX, centerY] = coordinate.getCenter(); - // [width,height]. - const size = coordinate.getSize(); - const radius = Math.min(...size) / 2; - // 1、Gets the path of the overall shape. - const buildPath = (0, util_1.isFunction)(liquidShape) - ? liquidShape - : getLiquidShape(liquidShape); - const shapePath = buildPath(centerX, centerY, radius, ...size); - // 2、Background create. - if (Object.keys(backgroundStyle).length) { - const backgroundShape = document.createElement('path', { - style: Object.assign({ d: shapePath, fill: '#fff' }, backgroundStyle), - }); - g.appendChild(backgroundShape); - } - // Percent > 0 Mapping water waves. - if (percent > 0) { - // 3. Clip create. - const clipShape = document.createElement('path', { - style: { - d: shapePath, - }, - }); - g.appendChild(clipShape); - g.style.clipPath = clipShape; - // 4. Wave create. - (0, wave_1.addWave)(centerX, centerY, 1 - percent, count, attrs, g, clipShape.getBBox().y, radius * 2, length, true, document); - } - // 5. Draw distance. - const distanceShape = document.createElement('path', { - style: { - d: shapePath, - fill: 'transparent', - lineWidth: border + 2 * distance, - stroke: '#fff', - }, - }); - // 6. Draw border. - const borderShape = document.createElement('path', { - style: Object.assign(Object.assign(Object.assign({ d: shapePath, stroke: color, strokeOpacity: fillOpacity, lineWidth: border }, attrs), outlineStyle), { fill: 'transparent' }), - }); - g.appendChild(distanceShape); - g.appendChild(borderShape); - return g; - }; -}; -exports.Liquid = Liquid; -exports.Liquid.props = {}; -//# sourceMappingURL=liquid.js.map -}, function(modId) { var map = {"./wave":1751263815971,"./shapes":1751263815972}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815971, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.addWave = void 0; -const DURATION = 5000; -/** - * A function of linear mapping. - * @param min - * @param max - * @param factor - */ -function lerp(min, max, factor) { - return min + (max - min) * factor; -} -/** - * Using Bessel curve to simulate sine wave. - * Using Bezier curves to fit sine wave. - * There is 4 control points for each curve of wave, - * which is at 1/4 wave length of the sine wave. - * - * The control points for a wave from (a) to (d) are a-b-c-d: - * c *----* d - * b * - * | - * ... a * .................. - * - * Whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1). - * - * @param x x position of the left-most point (a). - * @param stage 0-3, stating which part of the wave it is. - * @param waveLength wave length of the sine wave. - * @param amplitude wave amplitude. - * @return Sinusoidal segment curve. - */ -function getWaterWavePositions(x, stage, waveLength, amplitude) { - if (stage === 0) { - return [ - [x + ((1 / 2) * waveLength) / Math.PI / 2, amplitude / 2], - [x + ((1 / 2) * waveLength) / Math.PI, amplitude], - [x + waveLength / 4, amplitude], - ]; - } - if (stage === 1) { - return [ - [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), amplitude], - [ - x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), - amplitude / 2, - ], - [x + waveLength / 4, 0], - ]; - } - if (stage === 2) { - return [ - [x + ((1 / 2) * waveLength) / Math.PI / 2, -amplitude / 2], - [x + ((1 / 2) * waveLength) / Math.PI, -amplitude], - [x + waveLength / 4, -amplitude], - ]; - } - return [ - [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), -amplitude], - [ - x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), - -amplitude / 2, - ], - [x + waveLength / 4, 0], - ]; -} -/** - * Get wave path. - * @param radius - * @param waterLevel water level - * @param waveLength wave length - * @param phase - * @param amplitude - * @param cx center x - * @param cy center y - * @return path path - */ -function getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) { - const curves = Math.ceil(((2 * radius) / waveLength) * 4) * 4; - const path = []; - let _phase = phase; - // Map phase to [-Math.PI * 2, 0]. - while (_phase < -Math.PI * 2) { - _phase += Math.PI * 2; - } - while (_phase > 0) { - _phase -= Math.PI * 2; - } - _phase = (_phase / Math.PI / 2) * waveLength; - const left = cx - radius + _phase - radius * 2; - /** - * Top-left corner as start point. - * - * Draws this point. - * | - * \|/ - * ~~~~~~~~ - * | | - * +------+ - */ - path.push(['M', left, waterLevel]); - /** - * Top wave. - * - * ~~~~~~~~ <- Draws this sine wave. - * | | - * +------+ - */ - let waveRight = 0; - for (let c = 0; c < curves; ++c) { - const stage = c % 4; - const pos = getWaterWavePositions((c * waveLength) / 4, stage, waveLength, amplitude); - path.push([ - 'C', - pos[0][0] + left, - -pos[0][1] + waterLevel, - pos[1][0] + left, - -pos[1][1] + waterLevel, - pos[2][0] + left, - -pos[2][1] + waterLevel, - ]); - if (c === curves - 1) { - waveRight = pos[2][0]; - } - } - /** - * Top-right corner. - * - * ~~~~~~~~ - * 3. Draws this line. -> | | <- 1. Draws this line. - * +------+ - * ^ - * | - * 2. Draws this line. - */ - path.push(['L', waveRight + left, cy + radius]); - path.push(['L', left, cy + radius]); - path.push(['Z']); - return path; -} -/** - * Add wave. - * @param x center x - * @param y center y - * @param level wave level 0~1 - * @param waveCount wave count - * @param waveAttrs style - * @param group g - * @param minY Minimum height - * @param radius radius - * @param waveLength wave length - * @param animation animation config - * @param document - */ -function addWave(x, y, level, waveCount, waveAttrs, group, minY, radius, waveLength, animation, document) { - // Box property Color width height. - const { fill, fillOpacity, opacity } = waveAttrs; - // Number of cyclic waveCount. - for (let idx = 0; idx < waveCount; idx++) { - const factor = waveCount <= 1 ? 1 : idx / (waveCount - 1); - const path = getWaterWavePath(radius, minY + radius * level, waveLength, 0, - // Amplitude height. - radius / 40, x, y); - // Create wave path. - const wave = document.createElement('path', { - style: { - d: path, - fill, - opacity: lerp(0.2, 0.9, factor) * Number(opacity || fillOpacity), - }, - }); - group.appendChild(wave); - try { - if (animation === false) - return; - const keyframes = [ - { - transform: 'translate(0, 0)', - }, - { - transform: `translate(${waveLength * 2}, 0)`, - }, - ]; - wave.animate(keyframes, { - duration: lerp(0.5 * DURATION, DURATION, factor) * 2, - iterations: Infinity, - }); - } - catch (e) { - console.warn('off-screen group animate error!'); - } - } -} -exports.addWave = addWave; -//# sourceMappingURL=wave.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815972, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LiquidShapesPath = void 0; -/** - * @param x center x - * @param y center y - * @param radius - */ -function circle(x, y, r) { - return ` - M ${x} ${y - r} - a ${r} ${r} 0 1 0 0 ${r * 2} - a ${r} ${r} 0 1 0 0 ${-r * 2} - Z - `; -} -/** - * @param x center x - * @param y center y - * @param radius - */ -function rect(x, y, r) { - const GOLDEN_SECTION_RATIO = 0.618; - const w = r * GOLDEN_SECTION_RATIO; - return ` - M ${x - w} ${y - r} - L ${x + w} ${y - r} - L ${x + w} ${y + r} - L ${x - w} ${y + r} - Z - `; -} -/** - * @param x center x - * @param y center y - * @param radius - */ -function diamond(x, y, r) { - return ` - M ${x} ${y - r} - L ${x + r} ${y} - L ${x} ${y + r} - L ${x - r} ${y} - Z - `; -} -/** - * @param x center x - * @param y center y - * @param radius - */ -function triangle(x, y, r) { - return ` - M ${x} ${y - r} - L ${x + r} ${y + r} - L ${x - r} ${y + r} - Z - `; -} -/** - * @param x center x - * @param y center y - * @param radius - */ -function pin(x, y, radius) { - const w = (radius * 4) / 3; - const h = Math.max(w, radius * 2); - const r = w / 2; - // Attrs of the upper circle. - const cx = x; - const cy = r + y - h / 2; - const theta = Math.asin(r / ((h - r) * 0.85)); - const dy = Math.sin(theta) * r; - const dx = Math.cos(theta) * r; - // The start point of the path. - const x0 = cx - dx; - const y0 = cy + dy; - // Control point. - const cpX = x; - const cpY = cy + r / Math.sin(theta); - return ` - M ${x0} ${y0} - A ${r} ${r} 0 1 1 ${x0 + dx * 2} ${y0} - Q ${cpX} ${cpY} ${x} ${y + h / 2} - Q ${cpX} ${cpY} ${x0} ${y0} - Z - `; -} -exports.LiquidShapesPath = { - pin, - rect, - circle, - diamond, - triangle, -}; -//# sourceMappingURL=shapes.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815973, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Round = void 0; -const util_1 = require("@antv/util"); -// Get point1 point2 radius. -const getR = (point1, point2) => { - return (Math.sqrt(Math.pow(point1[0] - point2[0], 2) + Math.pow(point1[1] - point2[1], 2)) / 2); -}; -// Gauge round. -const Round = (options, context) => { - if (!context) - return; - const { coordinate } = context; - if (!(coordinate === null || coordinate === void 0 ? void 0 : coordinate.getCenter)) - return; - // Get coordinate center point. - const center = coordinate.getCenter(); - return (points, cfg, defaultCfg) => { - const { document } = context.canvas; - const { color, index } = cfg; - const g = document.createElement('g', {}); - const minR = getR(points[0], points[1]); - const maxR = getR(points[0], center) * 2; - /** - * MinR small circle radius, maxR big circle radius. - * Draw four arcs. - * Style lineWidth and stroke for the time being inset. - */ - const roundPath = document.createElement('path', { - style: Object.assign(Object.assign(Object.assign({ d: [ - ['M', ...points[0]], - ['A', minR, minR, 0, 1, 0, ...points[1]], - ['A', maxR + minR * 2, maxR + minR * 2, 0, 0, 0, ...points[2]], - ['A', minR, minR, 0, 1, index === 0 ? 0 : 1, ...points[3]], - ['A', maxR, maxR, 0, 0, 1, ...points[0]], - ['Z'], - ] }, defaultCfg), (0, util_1.omit)(options, ['shape', 'last', 'first'])), { fill: color || defaultCfg.color }), - }); - g.appendChild(roundPath); - return g; - }; -}; -exports.Round = Round; -//# sourceMappingURL=round.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815974, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Rect = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - rect: shape_1.RectShape, - hollow: shape_1.RectHollow, -}; -const Rect = () => { - return (index, scale, value, coordinate) => { - const { x: X, x1: X1, y: Y, y1: Y1 } = value; - const P = Array.from(index, (i) => { - const p1 = [+X[i], +Y[i]]; - const p2 = [+X1[i], +Y[i]]; - const p3 = [+X1[i], +Y1[i]]; - const p4 = [+X[i], +Y1[i]]; - return [p1, p2, p3, p4].map((d) => coordinate.map(d)); - }); - return [index, P]; - }; -}; -exports.Rect = Rect; -exports.Rect.props = { - defaultShape: 'rect', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeZeroY1 }], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()], - interaction: { - shareTooltip: true, - }, -}; -//# sourceMappingURL=rect.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815975, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Line = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const coordinate_1 = require("../utils/coordinate"); -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - line: shape_1.LineShape, - smooth: shape_1.LineSmooth, - hv: shape_1.LineHV, - vh: shape_1.LineVH, - hvh: shape_1.LineHVH, - trail: shape_1.LineTrail, -}; -const line = (index, scale, value, coordinate) => { - var _a, _b; - const { series: S, x: X, y: Y } = value; - const { x, y } = scale; - // Because x and y channel is not strictly required in Line.props, - // it should throw error with empty x or y channels. - if (X === undefined || Y === undefined) { - throw new Error('Missing encode for x or y channel.'); - } - // Group data into series. - // There is only one series without specified series encode. - const series = S ? Array.from((0, d3_array_1.group)(index, (i) => S[i]).values()) : [index]; - const I = series.map((group) => group[0]).filter((i) => i !== undefined); - // A group of data corresponds to one line. - const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2; - const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2; - const P = Array.from(series, (I) => { - return I.map((i) => coordinate.map([+X[i] + xoffset, +Y[i] + yoffset])); - }); - return [I, P, series]; -}; -const parallel = (index, scale, value, coordinate) => { - // Extract all value for position[number] channels. - const PV = Object.entries(value) - .filter(([key]) => key.startsWith('position')) - .map(([, value]) => value); - // Because position channel is not strictly required in Line.props, - // it should throw error with empty position values. - if (PV.length === 0) { - throw new Error('Missing encode for position channel.'); - } - // Close the loop for radar(= parallel + polar) coordinate. - if ((0, coordinate_1.isPolar)(coordinate)) - PV.push(PV[0]); - // One data corresponds to one line. - const P = Array.from(index, (i) => { - // Transform high dimension vector to a list of two-dimension vectors. - // [a, b, c] -> [d, e, f, g, h, i] - const vector = PV.map((pv) => +pv[i]); - const vectors = coordinate.map(vector); - // Two-dimension vectors are stored in a flat array, so extract them. - // [d, e, f, g, h, i] -> [d, e], [f, g], [h, i] - const points = []; - for (let i = 0; i < vectors.length; i += 2) { - points.push([vectors[i], vectors[i + 1]]); - } - return points; - }); - return [index, P]; -}; -/** - * Convert value for each channel to line shapes. - */ -const Line = () => { - return (index, scale, value, coordinate) => { - const mark = (0, coordinate_1.isParallel)(coordinate) ? parallel : line; - return mark(index, scale, value, coordinate); - }; -}; -exports.Line = Line; -exports.Line.props = { - defaultShape: 'line', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x' }, - { name: 'y' }, - { name: 'position', independent: true }, - { name: 'size' }, - { name: 'series', scale: 'band' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - // !!!Note This order is very important. - { type: transform_1.MaybeGradient }, - { type: transform_1.MaybeSeries }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)(), ...(0, utils_1.tooltipXd)()], - interaction: { - shareTooltip: true, - seriesTooltip: true, - crosshairs: true, - }, -}; -//# sourceMappingURL=line.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815976, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Point = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - hollow: shape_1.PointHollow, - hollowDiamond: shape_1.PointHollowDiamond, - hollowHexagon: shape_1.PointHollowHexagon, - hollowSquare: shape_1.PointHollowSquare, - hollowTriangleDown: shape_1.PointHollowTriangleDown, - hollowTriangle: shape_1.PointHollowTriangle, - hollowBowtie: shape_1.PointHollowBowtie, - hollowCircle: shape_1.PointHollowCircle, - point: shape_1.PointShape, - plus: shape_1.PointPlus, - diamond: shape_1.PointDiamond, - square: shape_1.PointSquare, - triangle: shape_1.PointTriangle, - hexagon: shape_1.PointHexagon, - cross: shape_1.PointCross, - bowtie: shape_1.PointBowtie, - hyphen: shape_1.PointHyphen, - line: shape_1.PointLine, - tick: shape_1.PointTick, - triangleDown: shape_1.PointTriangleDown, - circle: shape_1.PointCircle, -}; -/** - * Convert value for each channel to point shapes. - * Calc the bbox of each point based on x, y and r. - * This is for allowing their radius can be affected by coordinate(e.g. fisheye). - */ -const Point = (options) => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, x1: X1, y1: Y1, size: S, dx: DX, dy: DY } = value; - const [width, height] = coordinate.getSize(); - const offset = (0, utils_1.createBandOffset)(scale, value, options); - const xy = (i) => { - const dx = +((DX === null || DX === void 0 ? void 0 : DX[i]) || 0); - const dy = +((DY === null || DY === void 0 ? void 0 : DY[i]) || 0); - const x = X1 ? (+X[i] + +X1[i]) / 2 : +X[i]; - const y = Y1 ? (+Y[i] + +Y1[i]) / 2 : +Y[i]; - const cx = x + dx; - const cy = y + dy; - return [cx, cy]; - }; - const P = S - ? Array.from(index, (i) => { - const [cx, cy] = xy(i); - const r = +S[i]; - const a = r / width; - const b = r / height; - const p1 = [cx - a, cy - b]; - const p2 = [cx + a, cy + b]; - return [ - coordinate.map(offset(p1, i)), - coordinate.map(offset(p2, i)), - ]; - }) - : Array.from(index, (i) => [coordinate.map(offset(xy(i), i))]); - return [index, P]; - }; -}; -exports.Point = Point; -exports.Point.props = { - defaultShape: 'hollow', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'series', scale: 'band' }, - { name: 'size', quantitative: 'sqrt' }, - { name: 'dx', scale: 'identity' }, - { name: 'dy', scale: 'identity' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeZeroX }, - { type: transform_1.MaybeZeroY }, - ], - postInference: [...(0, utils_1.basePostInference)(), { type: transform_1.MaybeSize }, ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=point.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815977, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Text = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - text: shape_1.TextShape, - badge: shape_1.TextBadge, - tag: shape_1.TextTag, -}; -const Text = (options) => { - const { cartesian = false } = options; - if (cartesian) - return utils_1.visualMark; - return ((index, scale, value, coordinate) => { - const { x: X, y: Y } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, options); - const P = Array.from(index, (i) => { - const p = [+X[i], +Y[i]]; - return [coordinate.map(offset(p, i))]; - }); - return [index, P]; - }); -}; -exports.Text = Text; -exports.Text.props = { - defaultShape: 'text', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'text', scale: 'identity' }, - { name: 'fontSize', scale: 'identity' }, - { name: 'rotate', scale: 'identity' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeTuple }, - { type: transform_1.MaybeVisualPosition }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=text.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815978, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Cell = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - cell: shape_1.CellShape, - hollow: shape_1.CellHollow, -}; -/** - * Convert value for each channel to Cell shapes. - * Calc the bbox of each Cell based on x, y and r. - * This is for allowing their radius can be affected by coordinate(e.g. fisheye). - */ -const Cell = () => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y } = value; - const x = scale.x; - const y = scale.y; - const P = Array.from(index, (i) => { - const width = x.getBandWidth(x.invert(+X[i])); - const height = y.getBandWidth(y.invert(+Y[i])); - const x1 = +X[i]; - const y1 = +Y[i]; - const p1 = [x1, y1]; - const p2 = [x1 + width, y1]; - const p3 = [x1 + width, y1 + height]; - const p4 = [x1, y1 + height]; - return [p1, p2, p3, p4].map((d) => coordinate.map(d)); - }); - return [index, P]; - }; -}; -exports.Cell = Cell; -exports.Cell.props = { - defaultShape: 'cell', - defaultLabelShape: 'label', - shape, - composite: false, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true, scale: 'band' }, - { name: 'y', required: true, scale: 'band' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeZeroX }, - { type: transform_1.MaybeZeroY }, - { type: transform_1.MaybeZeroPadding }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=cell.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815979, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Area = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - area: shape_1.AreaShape, - smooth: shape_1.AreaSmooth, - hvh: shape_1.AreaHVH, - vh: shape_1.AreaVH, - hv: shape_1.AreaHV, -}; -/* - * Convert value for each channel to area shapes. - * - * ▲ - * │ - * │ y2 - * │ - * │ y1 xxxxxxxxxxxxx - * │ xxxx x - * │ xxx x - * │ xxx x - * │ y0 xxx x - * │ xxxxxxx x - * │ x x - * │ xx x - * │ x x - * │ x x - * │ x x - * │ x x - * │ x x - * │ x x - * │ x x - * ────┼─────────x───────────────────────────────x──────────────► - * │ y3 y4 y5 - */ -const Area = () => { - return (index, scale, value, coordinate) => { - var _a, _b; - const { x: X, y: Y, y1: Y1, series: S } = value; - const { x, y } = scale; - // Group data by series field. - const series = S ? Array.from((0, d3_array_1.group)(index, (i) => S[i]).values()) : [index]; - const I = series.map((group) => group[0]).filter((i) => i !== undefined); - // A group of data corresponds to one area. - const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2; - const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2; - const P = Array.from(series, (SI) => { - const l = SI.length; - const points = new Array(l * 2); - for (let idx = 0; idx < SI.length; idx++) { - const i = SI[idx]; - points[idx] = coordinate.map([+X[i] + xoffset, +Y[i] + yoffset]); // y1 - points[l + idx] = coordinate.map([+X[i] + xoffset, +Y1[i] + yoffset]); // y0 - } - return points; - }); - return [I, P, series]; - }; -}; -exports.Area = Area; -exports.Area.props = { - defaultShape: 'area', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'size' }, - { name: 'series', scale: 'band' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeSeries }, - { type: transform_1.MaybeZeroY1 }, - { type: transform_1.MaybeZeroPadding }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()], - interaction: { - shareTooltip: true, - seriesTooltip: true, - crosshairs: true, - }, -}; -//# sourceMappingURL=area.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815980, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Link = void 0; -const transform_1 = require("../transform"); -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const shape = { - link: shape_1.LinkShape, - arc: shape_1.LinkArc, - smooth: shape_1.LinkSmooth, - vhv: shape_1.LinkVHV, -}; -/** - * Connect `start` to `end` with single line. - */ -const Link = (options) => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, x1: X1 = X, y1: Y1 = Y } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, options); - const P = index.map((i) => [ - coordinate.map(offset([+X[i], +Y[i]], i)), - coordinate.map(offset([+X1[i], +Y1[i]], i)), - ]); - return [index, P]; - }; -}; -exports.Link = Link; -exports.Link.props = { - defaultShape: 'link', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeIdentityY }, - { type: transform_1.MaybeIdentityX }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=link.js.map -}, function(modId) { var map = {"../transform":1751263815823,"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815981, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Image = void 0; -const transform_1 = require("../transform"); -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const shape = { - image: shape_1.ImageShape, -}; -const Image = (options) => { - const { cartesian } = options; - if (cartesian) - return utils_1.visualMark; - return (index, scale, value, coordinate) => { - const { x: X, y: Y } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, options); - const P = Array.from(index, (i) => { - const p = [+X[i], +Y[i]]; - return [coordinate.map(offset(p, i))]; - }); - return [index, P]; - }; -}; -exports.Image = Image; -exports.Image.props = { - defaultShape: 'image', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'src', scale: 'identity' }, - { name: 'size' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeTuple }, - { type: transform_1.MaybeVisualPosition }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=image.js.map -}, function(modId) { var map = {"../transform":1751263815823,"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815982, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Polygon = void 0; -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const shape = { - polygon: shape_1.PolygonShape, - ribbon: shape_1.PolygonRibbon, -}; -/** - * Convert value for each channel to polygon shapes. - */ -const Polygon = () => { - return (index, scale, value, coordinate) => { - const Xn = Object.entries(value) - .filter(([key]) => key.startsWith('x')) - .map(([, value]) => value); - const Yn = Object.entries(value) - .filter(([key]) => key.startsWith('y')) - .map(([, value]) => value); - const P = index.map((i) => { - const Pn = []; - for (let j = 0; j < Xn.length; j++) { - const x = Xn[j][i]; - if (x === undefined) - break; - const y = Yn[j][i]; - Pn.push(coordinate.map([+x, +y])); - } - return Pn; - }); - return [index, P]; - }; -}; -exports.Polygon = Polygon; -exports.Polygon.props = { - defaultShape: 'polygon', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)()], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=polygon.js.map -}, function(modId) { var map = {"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815983, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Box = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - box: shape_1.BoxShape, - violin: shape_1.BoxViolin, -}; -/** - * Convert value for each channel to box shapes. - * - * p0 p2 p1 - * ──────────┬────────── - * │ - * │ - * │ - * │ - * │ - * │ - * │ p3 - * p4 ┌─────────┴──────────┐ p5 - * │ │ - * │ │ - * p8 ├────────────────────┤ p9 - * │ │ - * │ p10 │ - * p7 └─────────┬──────────┘ p6 - * │ - * │ - * │ - * │ - * │ - * │ - * │ - * │ - * ───────────┴─────────── - * p12 p11 p13 - */ -const Box = () => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, y1: Y1, y2: Y2, y3: Y3, y4: Y4, series: S } = value; - // Calc width for each box. - // The scales for x and series channels must be band scale. - const xScale = scale.x; - const series = scale.series; - const P = Array.from(index, (i) => { - const groupWidth = xScale.getBandWidth(xScale.invert(+X[i])); - const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1; - const width = groupWidth * ratio; - const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth; - const x = +X[i] + offset + width / 2; - const [low, q1, median, q3, high] = [ - +Y[i], - +Y1[i], - +Y2[i], - +Y3[i], - +Y4[i], - ]; - const P13 = [ - [x - width / 2, high], - [x + width / 2, high], - [x, high], - [x, q3], - [x - width / 2, q3], - [x + width / 2, q3], - [x + width / 2, q1], - [x - width / 2, q1], - [x - width / 2, median], - [x + width / 2, median], - [x, q1], - [x, low], - [x - width / 2, low], - [x + width / 2, low], - ]; - return P13.map((d) => coordinate.map(d)); - }); - return [index, P]; - }; -}; -exports.Box = Box; -exports.Box.props = { - defaultShape: 'box', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', scale: 'band', required: true }, - { name: 'y', required: true }, - { name: 'series', scale: 'band' }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeZeroX }], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()], - interaction: { - shareTooltip: true, - }, -}; -//# sourceMappingURL=box.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815984, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Vector = void 0; -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const shape = { - vector: shape_1.VectorShape, -}; -/** - * Convert value for each channel to start, end. - * The angle starts from the X axis(right direction). - */ -const Vector = () => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, size: S, rotate: R } = value; - const [width, height] = coordinate.getSize(); - const P = index.map((i) => { - const angle = (+R[i] / 180) * Math.PI; - const s = +S[i]; - const a = s / width; - const b = s / height; - const vx = a * Math.cos(angle); - const vy = -b * Math.sin(angle); - return [ - coordinate.map([+X[i] - vx / 2, +Y[i] - vy / 2]), - coordinate.map([+X[i] + vx / 2, +Y[i] + vy / 2]), - ]; - }); - return [index, P]; - }; -}; -exports.Vector = Vector; -exports.Vector.props = { - defaultShape: 'vector', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'rotate', required: true, scale: 'identity' }, - { name: 'size', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)()], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=vector.js.map -}, function(modId) { var map = {"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815985, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LineY = void 0; -const util_1 = require("@antv/util"); -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - line: shape_1.LineXY, -}; -const LineY = (options) => { - return (index, scale, value, coordinate) => { - const { y: Y } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, (0, util_1.deepMix)({ style: { bandOffset: 0 } }, options)); - const P = Array.from(index, (i) => { - const p1 = [0, Y[i]]; - const p2 = [1, Y[i]]; - return [p1, p2].map((d) => coordinate.map(offset(d, i))); - }); - return [index, P]; - }; -}; -exports.LineY = LineY; -exports.LineY.props = { - defaultShape: 'line', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeTupleY }], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=lineY.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815986, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LineX = void 0; -const util_1 = require("@antv/util"); -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - line: shape_1.LineXY, -}; -const LineX = (options) => { - return (index, scale, value, coordinate) => { - const { x: X } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, (0, util_1.deepMix)({ style: { bandOffset: 0 } }, options)); - const P = Array.from(index, (i) => { - const p1 = [X[i], 1]; - const p2 = [X[i], 0]; - return [p1, p2].map((d) => coordinate.map(offset(d, i))); - }); - return [index, P]; - }; -}; -exports.LineX = LineX; -exports.LineX.props = { - defaultShape: 'line', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeTupleX }], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=lineX.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815987, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connector = void 0; -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const link_1 = require("./link"); -const shape = { - connector: shape_1.ConnectorShape, -}; -const Connector = (...args) => { - return (0, link_1.Link)(...args); -}; -exports.Connector = Connector; -exports.Connector.props = { - defaultShape: 'connector', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)()], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=connector.js.map -}, function(modId) { var map = {"../shape":1751263815879,"./utils":1751263815937,"./link":1751263815980}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815988, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Range = exports.AbstractRange = void 0; -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -function extend(channel, extended, value, scale) { - if (extended) - return () => [0, 1]; - const { [channel]: C, [`${channel}1`]: C1 } = value; - return (i) => { - var _a; - const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, scale.invert(+C1[i]))) || 0; - return [C[i], C1[i] + offset]; - }; -} -function AbstractRange(options = {}) { - const { extendX = false, extendY = false } = options; - return (index, scale, value, coordinate) => { - const x = extend('x', extendX, value, scale.x); - const y = extend('y', extendY, value, scale.y); - const P = Array.from(index, (i) => { - const [x1, x2] = x(i); - const [y1, y2] = y(i); - const p1 = [x1, y1]; - const p2 = [x2, y1]; - const p3 = [x2, y2]; - const p4 = [x1, y2]; - return [p1, p2, p3, p4].map((d) => coordinate.map(d)); - }); - return [index, P]; - }; -} -exports.AbstractRange = AbstractRange; -const shape = { range: shape_1.RangeShape }; -const Range = () => { - return AbstractRange(); -}; -exports.Range = Range; -exports.Range.props = { - defaultShape: 'range', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)()], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=range.js.map -}, function(modId) { var map = {"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815989, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RangeX = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const range_1 = require("./range"); -const shape = { - range: shape_1.RangeShape, -}; -const RangeX = () => { - return (0, range_1.AbstractRange)({ extendY: true }); -}; -exports.RangeX = RangeX; -exports.RangeX.props = { - defaultShape: 'range', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeDefaultX }], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=rangeX.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937,"./range":1751263815988}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815990, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RangeY = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const range_1 = require("./range"); -const shape = { - range: shape_1.RangeShape, -}; -const RangeY = () => { - return (0, range_1.AbstractRange)({ extendX: true }); -}; -exports.RangeY = RangeY; -exports.RangeY.props = { - defaultShape: 'range', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }), - { name: 'y', required: true }, - ], - preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeDefaultY }], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=rangeY.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937,"./range":1751263815988}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815991, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sankey = void 0; -const util_1 = require("@antv/util"); -const sankey_1 = require("../data/sankey"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const utils_1 = require("./utils"); -const DEFAULT_LAYOUT_OPTIONS = { - nodeId: (d) => d.key, - nodeWidth: 0.02, - nodePadding: 0.02, -}; -const DEFAULT_NODE_OPTIONS = { - type: 'polygon', - axis: false, - legend: false, - encode: { - shape: 'polygon', - x: 'x', - y: 'y', - }, - scale: { - x: { type: 'identity' }, - y: { type: 'identity' }, - }, - style: { - stroke: '#000', - }, -}; -const DEFAULT_LINK_OPTIONS = { - type: 'polygon', - axis: false, - legend: false, - encode: { - shape: 'ribbon', - x: 'x', - y: 'y', - }, - style: { - fillOpacity: 0.5, - stroke: undefined, - }, -}; -const DEFAULT_LABEL_OPTIONS = { - textAlign: (d) => (d.x[0] < 0.5 ? 'start' : 'end'), - position: (d) => (d.x[0] < 0.5 ? 'right' : 'left'), - fontSize: 10, -}; -/** - * @todo Add interaction - * @todo Add source-link color mode - */ -const Sankey = (options) => { - const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, interaction, } = options; - // Initialize data, generating nodes by link if is not specified. - const { links, nodes } = (0, utils_1.initializeData)(data, encode); - // Extract encode for node and link. - const nodeEncode = (0, helper_1.subObject)(encode, 'node'); - const linkEncode = (0, helper_1.subObject)(encode, 'link'); - const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode; - // Transform data, using nodeKey as nodeId. - const { links: linkData, nodes: nodeData } = (0, sankey_1.Sankey)(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { nodeId: (0, utils_1.field)(nodeKey) }), layout))({ links, nodes }); - // Extract label style and apply defaults. - const _a = (0, helper_1.subObject)(style, 'label'), { text = nodeKey, spacing = 5 } = _a, labelStyle = __rest(_a, ["text", "spacing"]); - const key1 = (0, utils_1.field)(nodeKey); - const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', { - title: key1, - items: [{ field: 'value' }], - }, true); - const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', { - title: '', - items: [ - (d) => ({ name: 'source', value: key1(d.source) }), - (d) => ({ name: 'target', value: key1(d.target) }), - ], - }); - return [ - (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, { - data: nodeData, - encode: Object.assign(Object.assign({}, nodeEncode), { color }), - scale, - style: (0, helper_1.subObject)(style, 'node'), - labels: [ - Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text, dx: (d) => (d.x[0] < 0.5 ? spacing : -spacing) }), labelStyle), - ...nodeLabels, - ], - tooltip: nodeTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'node'), - axis: false, - interaction, - }), - (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, { - data: linkData, - encode: linkEncode, - labels: linkLabels, - style: Object.assign({ fill: linkEncode.color ? undefined : '#aaa', lineWidth: 0 }, (0, helper_1.subObject)(style, 'link')), - tooltip: linkTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'link'), - interaction, - }), - ]; -}; -exports.Sankey = Sankey; -exports.Sankey.props = {}; -//# sourceMappingURL=sankey.js.map -}, function(modId) { var map = {"../data/sankey":1751263815992,"../utils/helper":1751263815829,"../utils/mark":1751263815997,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815992, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sankey = void 0; -const d3_sankey_1 = require("./utils/d3-sankey"); -const DEFAULT_OPTIONS = { - nodeAlign: 'justify', - nodeWidth: 0.008, - nodePadding: 0.03, - nodes: (graph) => graph.nodes, - links: (graph) => graph.links, - nodeSort: undefined, - linkSort: undefined, - iterations: 6, -}; -const ALIGN_METHOD = { - left: d3_sankey_1.left, - right: d3_sankey_1.right, - center: d3_sankey_1.center, - justify: d3_sankey_1.justify, -}; -function getNodeAlignFunction(nodeAlign) { - const type = typeof nodeAlign; - if (type === 'string') - return ALIGN_METHOD[nodeAlign] || d3_sankey_1.justify; - if (type === 'function') - return nodeAlign; - return d3_sankey_1.justify; -} -/** - * Compute the node and edge position, return a graph representing the Sankey layout. All will be normalized to [[0, 0], [1, 1]] - * Required graph data (nodes, edges) - */ -const Sankey = (options) => { - return (data) => { - const { nodeId, nodeSort, nodeAlign, nodeWidth, nodePadding, nodeDepth, nodes: nodeNodes, links: nodeLinks, linkSort, iterations, } = Object.assign({}, DEFAULT_OPTIONS, options); - const sankeyProcessor = (0, d3_sankey_1.sankey)() - .nodeSort(nodeSort) - .linkSort(linkSort) - .links(nodeLinks) - .nodes(nodeNodes) - .nodeWidth(nodeWidth) - .nodePadding(nodePadding) - .nodeDepth(nodeDepth) - .nodeAlign(getNodeAlignFunction(nodeAlign)) - .iterations(iterations) - .extent([ - [0, 0], - [1, 1], - ]); - if (typeof nodeId === 'function') { - sankeyProcessor.nodeId(nodeId); - } - const layoutData = sankeyProcessor(data); - const { nodes: N, links: L } = layoutData; - const nodes = N.map((node) => { - const { x0, x1, y0, y1 } = node; - /* points - * 3---2 - * | | - * 0---1 - */ - return Object.assign(Object.assign({}, node), { x: [x0, x1, x1, x0], y: [y0, y0, y1, y1] }); - }); - const links = L.map((edge) => { - const { source, target } = edge; - const sx = source.x1; - const tx = target.x0; - const offset = edge.width / 2; - return Object.assign(Object.assign({}, edge), { x: [sx, sx, tx, tx], y: [ - edge.y0 + offset, - edge.y0 - offset, - edge.y1 + offset, - edge.y1 - offset, - ] }); - }); - return { nodes, links }; - }; -}; -exports.Sankey = Sankey; -exports.Sankey.props = {}; -//# sourceMappingURL=sankey.js.map -}, function(modId) { var map = {"./utils/d3-sankey":1751263815993}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815993, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.sankey = exports.justify = exports.right = exports.left = exports.center = void 0; -/** - * Sankey layout, fork from https://github.com/d3/d3-sankey/tree/master/src (todo, optimize algorithm) - * - * Major changes: - * - * 1. modify some set and map traverse - * 2. fix some error caused by [empty] array - * 3. support `nodeDepth` through align method - */ -const sankey_1 = require("./sankey"); -Object.defineProperty(exports, "sankey", { enumerable: true, get: function () { return sankey_1.Sankey; } }); -var align_1 = require("./align"); -Object.defineProperty(exports, "center", { enumerable: true, get: function () { return align_1.center; } }); -Object.defineProperty(exports, "left", { enumerable: true, get: function () { return align_1.left; } }); -Object.defineProperty(exports, "right", { enumerable: true, get: function () { return align_1.right; } }); -Object.defineProperty(exports, "justify", { enumerable: true, get: function () { return align_1.justify; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./sankey":1751263815994,"./align":1751263815995}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815994, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sankey = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const align_1 = require("./align"); -const constant_1 = require("./constant"); -function ascendingSourceBreadth(a, b) { - return ascendingBreadth(a.source, b.source) || a.index - b.index; -} -function ascendingTargetBreadth(a, b) { - return ascendingBreadth(a.target, b.target) || a.index - b.index; -} -function ascendingBreadth(a, b) { - return a.y0 - b.y0; -} -function value(d) { - return d.value; -} -function defaultId(d) { - return d.index; -} -function defaultNodes(graph) { - return graph.nodes; -} -function defaultLinks(graph) { - return graph.links; -} -function find(nodeById, id) { - const node = nodeById.get(id); - if (!node) - throw new Error('missing: ' + id); - return node; -} -function computeLinkBreadths({ nodes }) { - for (const node of nodes) { - let y0 = node.y0; - let y1 = y0; - for (const link of node.sourceLinks) { - link.y0 = y0 + link.width / 2; - y0 += link.width; - } - for (const link of node.targetLinks) { - link.y1 = y1 + link.width / 2; - y1 += link.width; - } - } -} -function Sankey() { - let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent - let dx = 24; // nodeWidth - let dy = 8, py; // nodePadding - let id = defaultId; - let align = align_1.justify; - let depth; - let sort; - let linkSort; - let nodes = defaultNodes; - let links = defaultLinks; - let iterations = 6; - function sankey(arg) { - const graph = { - nodes: nodes(arg), - links: links(arg), - }; - computeNodeLinks(graph); - computeNodeValues(graph); - computeNodeDepths(graph); - computeNodeHeights(graph); - computeNodeBreadths(graph); - computeLinkBreadths(graph); - return graph; - } - sankey.update = function (graph) { - computeLinkBreadths(graph); - return graph; - }; - sankey.nodeId = function (_) { - return arguments.length - ? ((id = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey) - : id; - }; - sankey.nodeAlign = function (_) { - return arguments.length - ? ((align = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey) - : align; - }; - sankey.nodeDepth = function (_) { - return arguments.length - ? ((depth = typeof _ === 'function' ? _ : _), sankey) - : depth; - }; - sankey.nodeSort = function (_) { - return arguments.length ? ((sort = _), sankey) : sort; - }; - sankey.nodeWidth = function (_) { - return arguments.length ? ((dx = +_), sankey) : dx; - }; - sankey.nodePadding = function (_) { - return arguments.length ? ((dy = py = +_), sankey) : dy; - }; - sankey.nodes = function (_) { - return arguments.length - ? ((nodes = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey) - : nodes; - }; - sankey.links = function (_) { - return arguments.length - ? ((links = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey) - : links; - }; - sankey.linkSort = function (_) { - return arguments.length ? ((linkSort = _), sankey) : linkSort; - }; - sankey.size = function (_) { - return arguments.length - ? ((x0 = y0 = 0), (x1 = +_[0]), (y1 = +_[1]), sankey) - : [x1 - x0, y1 - y0]; - }; - sankey.extent = function (_) { - return arguments.length - ? ((x0 = +_[0][0]), - (x1 = +_[1][0]), - (y0 = +_[0][1]), - (y1 = +_[1][1]), - sankey) - : [ - [x0, y0], - [x1, y1], - ]; - }; - sankey.iterations = function (_) { - return arguments.length ? ((iterations = +_), sankey) : iterations; - }; - function computeNodeLinks({ nodes, links }) { - nodes.forEach((node, idx) => { - node.index = idx; - node.sourceLinks = []; - node.targetLinks = []; - }); - const nodeById = new Map(nodes.map((d) => [id(d), d])); - links.forEach((link, idx) => { - link.index = idx; - let { source, target } = link; - if (typeof source !== 'object') - source = link.source = find(nodeById, source); - if (typeof target !== 'object') - target = link.target = find(nodeById, target); - source.sourceLinks.push(link); - target.targetLinks.push(link); - }); - if (linkSort != null) { - for (const { sourceLinks, targetLinks } of nodes) { - sourceLinks.sort(linkSort); - targetLinks.sort(linkSort); - } - } - } - function computeNodeValues({ nodes }) { - for (const node of nodes) { - node.value = - node.fixedValue === undefined - ? Math.max((0, d3_array_1.sum)(node.sourceLinks, value), (0, d3_array_1.sum)(node.targetLinks, value)) - : node.fixedValue; - } - } - function computeNodeDepths({ nodes }) { - const n = nodes.length; - let current = new Set(nodes); - let next = new Set(); - let x = 0; - while (current.size) { - current.forEach((node) => { - node.depth = x; - for (const { target } of node.sourceLinks) { - next.add(target); - } - }); - if (++x > n) - throw new Error('circular link'); - current = next; - next = new Set(); - } - // 如果配置了 depth,则设置自定义 depth - if (depth) { - const maxDepth = Math.max((0, d3_array_1.max)(nodes, (d) => d.depth) + 1, 0); - let node; - for (let i = 0; i < nodes.length; i++) { - node = nodes[i]; - node.depth = depth.call(null, node, maxDepth); - } - } - } - function computeNodeHeights({ nodes }) { - const n = nodes.length; - let current = new Set(nodes); - let next = new Set(); - let x = 0; - while (current.size) { - current.forEach((node) => { - node.height = x; - for (const { source } of node.targetLinks) { - next.add(source); - } - }); - if (++x > n) - throw new Error('circular link'); - current = next; - next = new Set(); - } - } - function computeNodeLayers({ nodes }) { - const x = Math.max((0, d3_array_1.max)(nodes, (d) => d.depth) + 1, 0); - const kx = (x1 - x0 - dx) / (x - 1); - const columns = new Array(x).fill(0).map(() => []); - for (const node of nodes) { - const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))); - node.layer = i; - node.x0 = x0 + i * kx; - node.x1 = node.x0 + dx; - if (columns[i]) - columns[i].push(node); - else - columns[i] = [node]; - } - if (sort) - for (const column of columns) { - column.sort(sort); - } - return columns; - } - function initializeNodeBreadths(columns) { - const ky = (0, d3_array_1.min)(columns, (c) => (y1 - y0 - (c.length - 1) * py) / (0, d3_array_1.sum)(c, value)); - for (const nodes of columns) { - let y = y0; - for (const node of nodes) { - node.y0 = y; - node.y1 = y + node.value * ky; - y = node.y1 + py; - for (const link of node.sourceLinks) { - link.width = link.value * ky; - } - } - y = (y1 - y + py) / (nodes.length + 1); - for (let i = 0; i < nodes.length; ++i) { - const node = nodes[i]; - node.y0 += y * (i + 1); - node.y1 += y * (i + 1); - } - reorderLinks(nodes); - } - } - function computeNodeBreadths(graph) { - const columns = computeNodeLayers(graph); - py = Math.min(dy, (y1 - y0) / ((0, d3_array_1.max)(columns, (c) => c.length) - 1)); - initializeNodeBreadths(columns); - for (let i = 0; i < iterations; ++i) { - const alpha = Math.pow(0.99, i); - const beta = Math.max(1 - alpha, (i + 1) / iterations); - relaxRightToLeft(columns, alpha, beta); - relaxLeftToRight(columns, alpha, beta); - } - } - // Reposition each node based on its incoming (target) links. - function relaxLeftToRight(columns, alpha, beta) { - for (let i = 1, n = columns.length; i < n; ++i) { - const column = columns[i]; - for (const target of column) { - let y = 0; - let w = 0; - for (const { source, value } of target.targetLinks) { - const v = value * (target.layer - source.layer); - y += targetTop(source, target) * v; - w += v; - } - if (!(w > 0)) - continue; - const dy = (y / w - target.y0) * alpha; - target.y0 += dy; - target.y1 += dy; - reorderNodeLinks(target); - } - if (sort === undefined) - column.sort(ascendingBreadth); - if (column.length) - resolveCollisions(column, beta); - } - } - // Reposition each node based on its outgoing (source) links. - function relaxRightToLeft(columns, alpha, beta) { - for (let n = columns.length, i = n - 2; i >= 0; --i) { - const column = columns[i]; - for (const source of column) { - let y = 0; - let w = 0; - for (const { target, value } of source.sourceLinks) { - const v = value * (target.layer - source.layer); - y += sourceTop(source, target) * v; - w += v; - } - if (!(w > 0)) - continue; - const dy = (y / w - source.y0) * alpha; - source.y0 += dy; - source.y1 += dy; - reorderNodeLinks(source); - } - if (sort === undefined) - column.sort(ascendingBreadth); - if (column.length) - resolveCollisions(column, beta); - } - } - function resolveCollisions(nodes, alpha) { - const i = nodes.length >> 1; - const subject = nodes[i]; - resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha); - resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha); - resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha); - resolveCollisionsTopToBottom(nodes, y0, 0, alpha); - } - // Push any overlapping nodes down. - function resolveCollisionsTopToBottom(nodes, y, i, alpha) { - for (; i < nodes.length; ++i) { - const node = nodes[i]; - const dy = (y - node.y0) * alpha; - if (dy > 1e-6) - (node.y0 += dy), (node.y1 += dy); - y = node.y1 + py; - } - } - // Push any overlapping nodes up. - function resolveCollisionsBottomToTop(nodes, y, i, alpha) { - for (; i >= 0; --i) { - const node = nodes[i]; - const dy = (node.y1 - y) * alpha; - if (dy > 1e-6) - (node.y0 -= dy), (node.y1 -= dy); - y = node.y0 - py; - } - } - function reorderNodeLinks({ sourceLinks, targetLinks }) { - if (linkSort === undefined) { - for (const { source: { sourceLinks }, } of targetLinks) { - sourceLinks.sort(ascendingTargetBreadth); - } - for (const { target: { targetLinks }, } of sourceLinks) { - targetLinks.sort(ascendingSourceBreadth); - } - } - } - function reorderLinks(nodes) { - if (linkSort === undefined) { - for (const { sourceLinks, targetLinks } of nodes) { - sourceLinks.sort(ascendingTargetBreadth); - targetLinks.sort(ascendingSourceBreadth); - } - } - } - // Returns the target.y0 that would produce an ideal link from source to target. - function targetTop(source, target) { - let y = source.y0 - ((source.sourceLinks.length - 1) * py) / 2; - for (const { target: node, width } of source.sourceLinks) { - if (node === target) - break; - y += width + py; - } - for (const { source: node, width } of target.targetLinks) { - if (node === source) - break; - y -= width; - } - return y; - } - // Returns the source.y0 that would produce an ideal link from source to target. - function sourceTop(source, target) { - let y = target.y0 - ((target.targetLinks.length - 1) * py) / 2; - for (const { source: node, width } of target.targetLinks) { - if (node === source) - break; - y += width + py; - } - for (const { target: node, width } of source.sourceLinks) { - if (node === target) - break; - y -= width; - } - return y; - } - return sankey; -} -exports.Sankey = Sankey; -//# sourceMappingURL=sankey.js.map -}, function(modId) { var map = {"./align":1751263815995,"./constant":1751263815996}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815995, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.center = exports.justify = exports.right = exports.left = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -function targetDepth(d) { - return d.target.depth; -} -function left(node) { - return node.depth; -} -exports.left = left; -function right(node, n) { - return n - 1 - node.height; -} -exports.right = right; -function justify(node, n) { - return node.sourceLinks.length ? node.depth : n - 1; -} -exports.justify = justify; -function center(node) { - return node.targetLinks.length - ? node.depth - : node.sourceLinks.length - ? (0, d3_array_1.min)(node.sourceLinks, targetDepth) - 1 - : 0; -} -exports.center = center; -//# sourceMappingURL=align.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815996, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.constant = void 0; -function constant(x) { - return function () { - return x; - }; -} -exports.constant = constant; -//# sourceMappingURL=constant.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815997, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.maybeAnimation = exports.isFullTooltip = exports.maybeTooltip = exports.subTooltip = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("./helper"); -function subTooltip(tooltip, name, defaults = {}, main = false) { - if ((0, helper_1.isUnset)(tooltip)) - return tooltip; - if (Array.isArray(tooltip) && main) - return tooltip; - const sub = (0, helper_1.subObject)(tooltip, name); - return (0, util_1.deepMix)(defaults, sub); -} -exports.subTooltip = subTooltip; -function maybeTooltip(tooltip, defaults = {}) { - if ((0, helper_1.isUnset)(tooltip)) - return tooltip; - if (Array.isArray(tooltip)) - return tooltip; - if (!isFullTooltip(tooltip)) - return tooltip; - return (0, util_1.deepMix)(defaults, tooltip); -} -exports.maybeTooltip = maybeTooltip; -function isFullTooltip(tooltip) { - if (Object.keys(tooltip).length === 0) - return true; - const { title, items } = tooltip; - return title !== undefined || items !== undefined; -} -exports.isFullTooltip = isFullTooltip; -function maybeAnimation(animate, sub) { - return typeof animate === 'object' ? (0, helper_1.subObject)(animate, sub) : animate; -} -exports.maybeAnimation = maybeAnimation; -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {"./helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815998, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Chord = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const arc_1 = require("../data/arc"); -const utils_1 = require("./utils"); -const DEFAULT_LAYOUT_OPTIONS = { - y: 0, - thickness: 0.05, - marginRatio: 0.1, - id: (node) => node.key, - source: (edge) => edge.source, - target: (edge) => edge.target, - sourceWeight: (edge) => edge.value || 1, - targetWeight: (edge) => edge.value || 1, - sortBy: null, // optional, id | weight | frequency | {function} -}; -const DEFAULT_NODE_OPTIONS = { - type: 'polygon', - axis: false, - legend: false, - encode: { - shape: 'polygon', - x: 'x', - y: 'y', - }, - scale: { - x: { type: 'identity' }, - y: { type: 'identity' }, - }, - style: { - opacity: 1, - fillOpacity: 1, - lineWidth: 1, - }, -}; -const DEFAULT_LINK_OPTIONS = { - type: 'polygon', - axis: false, - legend: false, - encode: { - shape: 'ribbon', - x: 'x', - y: 'y', - }, - style: { - opacity: 0.5, - lineWidth: 1, - }, -}; -const DEFAULT_LABEL_OPTIONS = { - position: 'outside', - fontSize: 10, -}; -const Chord = (options, context) => { - const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options; - // Initialize data, generating nodes by link if is not specified. - const { nodes, links } = (0, utils_1.initializeData)(data, encode); - // Extract encode for node and link. - const nodeEncode = (0, helper_1.subObject)(encode, 'node'); - const linkEncode = (0, helper_1.subObject)(encode, 'link'); - const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode; - const { linkEncodeColor = (d) => d.source } = linkEncode; - const { nodeWidthRatio = DEFAULT_LAYOUT_OPTIONS.thickness, nodePaddingRatio = DEFAULT_LAYOUT_OPTIONS.marginRatio } = layout, restLayout = __rest(layout, ["nodeWidthRatio", "nodePaddingRatio"]); - const { nodes: nodeData, edges: linkData } = (0, arc_1.Arc)(Object.assign(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { id: (0, utils_1.field)(nodeKey), thickness: nodeWidthRatio, marginRatio: nodePaddingRatio }), restLayout), { weight: true }))({ nodes, edges: links }); - // Extract label style and apply defaults. - const _a = (0, helper_1.subObject)(style, 'label'), { text = nodeKey } = _a, labelStyle = __rest(_a, ["text"]); - const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', { - title: '', - items: [(d) => ({ name: d.key, value: d.value })], - }, true); - const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', { - title: '', - items: [(d) => ({ name: `${d.source} -> ${d.target}`, value: d.value })], - }); - const { height, width } = context; - const minimumLen = Math.min(height, width); - return [ - (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, { - data: linkData, - encode: Object.assign(Object.assign({}, linkEncode), { color: linkEncodeColor }), - labels: linkLabels, - style: Object.assign({ fill: linkEncodeColor ? undefined : '#aaa' }, (0, helper_1.subObject)(style, 'link')), - tooltip: linkTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'link'), - }), - (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, { - data: nodeData, - encode: Object.assign(Object.assign({}, nodeEncode), { color }), - scale, - style: (0, helper_1.subObject)(style, 'node'), - coordinate: { - type: 'polar', - // Leave enough rendering space for the label. - outerRadius: (minimumLen - 20) / minimumLen, - startAngle: -Math.PI * 2, - endAngle: 0, - }, - labels: [ - Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text }), labelStyle), - ...nodeLabels, - ], - tooltip: nodeTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'node'), - axis: false, - }), - ]; -}; -exports.Chord = Chord; -exports.Chord.props = {}; -//# sourceMappingURL=chord.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/mark":1751263815997,"../data/arc":1751263815999,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263815999, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Arc = void 0; -const arc_1 = require("../data/utils/arc"); -/** - * For arc diagram(edge with weight) or chord diagram(with weight) - */ -const Arc = (options) => { - return (data) => { - return (0, arc_1.Arc)(options)(data); - }; -}; -exports.Arc = Arc; -exports.Arc.props = {}; -//# sourceMappingURL=arc.js.map -}, function(modId) { var map = {"../data/utils/arc":1751263816000}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816000, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Arc = void 0; -var arc_1 = require("./arc"); -Object.defineProperty(exports, "Arc", { enumerable: true, get: function () { return arc_1.Arc; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./arc":1751263816001}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816001, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Arc = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../../../utils/helper"); -const SortMethods = __importStar(require("./sort")); -const DEFAULT_OPTIONS = { - y: 0, - thickness: 0.05, - weight: false, - marginRatio: 0.1, - id: (node) => node.id, - source: (edge) => edge.source, - target: (edge) => edge.target, - sourceWeight: (edge) => edge.value || 1, - targetWeight: (edge) => edge.value || 1, - sortBy: null, -}; -/** - * Layout for Arc / Chord diagram with d3 style. - */ -function Arc(options) { - const { y, thickness, weight, marginRatio, id, source, target, sourceWeight, targetWeight, sortBy, } = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options); - function arc(data) { - // Clone first. - const nodes = data.nodes.map((n) => (Object.assign({}, n))); - const edges = data.edges.map((n) => (Object.assign({}, n))); - // Keep reference in below functions. - preprocess(nodes, edges); - sortNodes(nodes, edges); - layoutNodes(nodes, edges); - layoutEdges(nodes, edges); - return { nodes, edges }; - } - /** - * Calculate id, value, frequency for node, and source,target for edge. - */ - function preprocess(nodes, edges) { - edges.forEach((edge) => { - edge.source = source(edge); - edge.target = target(edge); - edge.sourceWeight = sourceWeight(edge); - edge.targetWeight = targetWeight(edge); - }); - // Group edges by source, target. - const edgesBySource = (0, d3_array_1.group)(edges, (e) => e.source); - const edgesByTarget = (0, d3_array_1.group)(edges, (e) => e.target); - nodes.forEach((node) => { - node.id = id(node); - const sources = edgesBySource.has(node.id) - ? edgesBySource.get(node.id) - : []; - const targets = edgesByTarget.has(node.id) - ? edgesByTarget.get(node.id) - : []; - node.frequency = sources.length + targets.length; - node.value = - (0, d3_array_1.sum)(sources, (d) => d.sourceWeight) + - (0, d3_array_1.sum)(targets, (d) => d.targetWeight); - }); - return { nodes, edges }; - } - function sortNodes(nodes, edges) { - const method = typeof sortBy === 'function' ? sortBy : SortMethods[sortBy]; - if (method) { - nodes.sort(method); - } - } - function layoutNodes(nodes, edges) { - const size = nodes.length; - if (!size) { - throw (0, helper_1.error)("Invalid nodes: it's empty!"); - } - // No weight. - if (!weight) { - const deltaX = 1 / size; - nodes.forEach((node, i) => { - node.x = (i + 0.5) * deltaX; - node.y = y; - }); - return { nodes, edges }; - } - // todo: marginRatio should be in [0, 1) - // todo: thickness shoule be in (0, 1) - const margin = marginRatio / (2 * size); - const total = nodes.reduce((prev, node) => (prev += node.value), 0); - nodes.reduce((deltaX, node) => { - node.weight = node.value / total; - node.width = node.weight * (1 - marginRatio); - node.height = thickness; - /* points - * 3---2 - * | | - * 0---1 - */ - const minX = margin + deltaX; - const maxX = minX + node.width; - const minY = y - thickness / 2; - const maxY = minY + thickness; - node.x = [minX, maxX, maxX, minX]; - node.y = [minY, minY, maxY, maxY]; - // Return next deltaX. - return deltaX + node.width + 2 * margin; - }, 0); - return { - nodes, - edges, - }; - } - /** - * Get edge layout information from nodes, and save into edge object. - */ - function layoutEdges(nodes, edges) { - const nodesMap = new Map(nodes.map((d) => [d.id, d])); - if (!weight) { - edges.forEach((edge) => { - const sourceId = source(edge); - const targetId = target(edge); - const sourceNode = nodesMap.get(sourceId); - const targetNode = nodesMap.get(targetId); - // Edge's layout information is Equal with node. - if (sourceNode && targetNode) { - edge.x = [sourceNode.x, targetNode.x]; - edge.y = [sourceNode.y, targetNode.y]; - } - }); - return { nodes, edges }; - } - // Initial edge.x, edge.y. - edges.forEach((edge) => { - edge.x = [0, 0, 0, 0]; - edge.y = [y, y, y, y]; - }); - // Group edges by source, target. - const edgesBySource = (0, d3_array_1.group)(edges, (e) => e.source); - const edgesByTarget = (0, d3_array_1.group)(edges, (e) => e.target); - // When weight = true, we need to calculation the bbox of edge start/end. - nodes.forEach((node) => { - const { edges, width, x, y, value, id } = node; - const sourceEdges = edgesBySource.get(id) || []; - const targetEdges = edgesByTarget.get(id) || []; - let offset = 0; - /* points - * 0----------2 - * | | - * 1----------3 - */ - sourceEdges.map((edge) => { - const w = (edge.sourceWeight / value) * width; - edge.x[0] = x[0] + offset; - edge.x[1] = x[0] + offset + w; - offset += w; - }); - targetEdges.forEach((edge) => { - const w = (edge.targetWeight / value) * width; - edge.x[3] = x[0] + offset; - edge.x[2] = x[0] + offset + w; - offset += w; - }); - }); - } - return arc; -} -exports.Arc = Arc; -//# sourceMappingURL=arc.js.map -}, function(modId) { var map = {"../../../utils/helper":1751263815829,"./sort":1751263816002}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816002, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.name = exports.id = exports.frequency = exports.weight = void 0; -function weight(a, b) { - return b.value - a.value; -} -exports.weight = weight; -function frequency(a, b) { - return b.frequency - a.frequency; -} -exports.frequency = frequency; -function id(a, b) { - return `${a.id}`.localeCompare(`${b.id}`); -} -exports.id = id; -function name(a, b) { - return `${a.name}`.localeCompare(`${b.name}`); -} -exports.name = name; -//# sourceMappingURL=sort.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816003, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Path = void 0; -const shape_1 = require("../shape"); -const utils_1 = require("./utils"); -const shape = { - path: shape_1.PathShape, - hollow: shape_1.PathHollow, -}; -/** - * Draw a path. - */ -const Path = (options) => { - return (index, scale, value, coordinate) => { - // The points is meaning less for path mark, - // because the position of path shapes specified - // by the d option. So set [0, 0] for render pipeline. - return [index, index.map(() => [[0, 0]])]; - }; -}; -exports.Path = Path; -exports.Path.props = { - defaultShape: 'path', - defaultLabelShape: 'label', - shape, - composite: false, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'd', scale: 'identity' }, - ], - preInference: [...(0, utils_1.basePreInference)()], - postInference: [...(0, utils_1.basePostInference)()], -}; -//# sourceMappingURL=path.js.map -}, function(modId) { var map = {"../shape":1751263815879,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816004, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Treemap = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const treeDataTransform_1 = require("../utils/treeDataTransform"); -// Defaults -const GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({ - tile: 'treemapSquarify', - ratio: 0.5 * (1 + Math.sqrt(5)), - size: [width, height], - round: false, - ignoreParentValue: true, - padding: 0, - paddingInner: 0, - paddingOuter: 0, - paddingTop: 0, - paddingRight: 0, - paddingBottom: 0, - paddingLeft: 0, - sort: (a, b) => b.value - a.value, - layer: 0, -}); -const GET_DEFAULT_OPTIONS = (width, height) => ({ - type: 'rect', - axis: false, - encode: { - x: 'x', - y: 'y', - key: 'id', - color: (d) => d.path[1], - }, - scale: { - x: { domain: [0, width], range: [0, 1] }, - y: { domain: [0, height], range: [0, 1] }, - }, - style: { - stroke: '#fff', - }, - state: { - active: { opacity: 0.6 }, - inactive: { opacity: 1 }, - }, -}); -const DEFAULT_LABEL_OPTIONS = { - fontSize: 10, - text: (d) => (0, util_1.last)(d.path), - position: 'inside', - fill: '#000', - textOverflow: 'clip', - wordWrap: true, - maxLines: 1, - wordWrapWidth: (d) => d.x1 - d.x0, - isTreemapLabel: true, -}; -const DEFAULT_TOOLTIP_OPTIONS = { - title: (d) => { var _a, _b; return (_b = (_a = d.path) === null || _a === void 0 ? void 0 : _a.join) === null || _b === void 0 ? void 0 : _b.call(_a, '.'); }, - items: [{ field: 'value' }], -}; -const DEFAULT_TOOLTIP_OPTIONS_DRILL = { - title: (d) => (0, util_1.last)(d.path), - items: [{ field: 'value' }], -}; -const Treemap = (options, context) => { - const { width, height, options: markOptions } = context; - const { data, encode = {}, scale, style = {}, layout = {}, labels = [], tooltip = {} } = options, resOptions = __rest(options, ["data", "encode", "scale", "style", "layout", "labels", "tooltip"]); - const treemapDrillDown = (0, util_1.get)(markOptions, [ - 'interaction', - 'treemapDrillDown', - ]); - // Layout - const layoutOptions = (0, util_1.deepMix)({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout, { - layer: treemapDrillDown - ? (d) => { - return d.depth === 1; - } - : layout.layer, - }); - // Data - const [transformedData, transformedDataAll] = (0, treeDataTransform_1.treeDataTransform)(data, layoutOptions, encode); - // Label - const labelStyle = (0, helper_1.subObject)(style, 'label'); - return (0, util_1.deepMix)({}, GET_DEFAULT_OPTIONS(width, height), Object.assign(Object.assign({ data: transformedData, scale, - style, labels: [ - Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle), (treemapDrillDown && { cursor: 'pointer' })), - ...labels, - ] }, resOptions), { encode, tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false }), treemapDrillDown - ? { - interaction: Object.assign(Object.assign({}, resOptions.interaction), { treemapDrillDown: treemapDrillDown - ? Object.assign(Object.assign({}, treemapDrillDown), { originData: transformedDataAll, layout: layoutOptions }) : undefined }), - encode: Object.assign({ color: (d) => (0, util_1.last)(d.path) }, encode), - tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS_DRILL), - } - : {}); -}; -exports.Treemap = Treemap; -exports.Treemap.props = {}; -//# sourceMappingURL=treemap.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/mark":1751263815997,"../utils/treeDataTransform":1751263816005}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816005, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.treeDataTransform = void 0; -const util_1 = require("@antv/util"); -const d3_hierarchy_1 = require("@antv/vendor/d3-hierarchy"); -const utils_1 = require("../mark/utils"); -/** - * @description Path need when the data is a flat json structure, - * and the tree object structure do not need. - */ -function generateHierarchyRoot(data, path) { - if (Array.isArray(data)) { - return typeof path === 'function' - ? (0, d3_hierarchy_1.stratify)().path(path)(data) - : (0, d3_hierarchy_1.stratify)()(data); - } - return (0, d3_hierarchy_1.hierarchy)(data); -} -function addObjectDataPath(root, path = [root.data.name]) { - // @ts-ignore - root.id = root.id || root.data.name; - root.path = path; - if (root.children) { - root.children.forEach((item) => { - // @ts-ignore - item.id = `${root.id}/${item.data.name}`; - item.path = [...path, item.data.name]; - addObjectDataPath(item, item.path); - }); - } -} -function addArrayDataPath(root) { - const name = (0, util_1.get)(root, ['data', 'name']); - if (name.replaceAll) { - root.path = name.replaceAll('.', '/').split('/'); - } - if (root.children) { - root.children.forEach((item) => { - addArrayDataPath(item); - }); - } -} -function getTileMethod(tile, ratio) { - const tiles = { - treemapBinary: d3_hierarchy_1.treemapBinary, - treemapDice: d3_hierarchy_1.treemapDice, - treemapSlice: d3_hierarchy_1.treemapSlice, - treemapSliceDice: d3_hierarchy_1.treemapSliceDice, - treemapSquarify: d3_hierarchy_1.treemapSquarify, - treemapResquarify: d3_hierarchy_1.treemapResquarify, - }; - const tileMethod = tile === 'treemapSquarify' ? tiles[tile].ratio(ratio) : tiles[tile]; - if (!tileMethod) { - throw new TypeError('Invalid tile method!'); - } - return tileMethod; -} -function treeDataTransform(data, layout, encode) { - const { value } = encode; - const tileMethod = getTileMethod(layout.tile, layout.ratio); - const root = generateHierarchyRoot(data, layout.path); - if ((0, util_1.isArray)(data)) { - addArrayDataPath(root); - } - else { - addObjectDataPath(root); - } - // Calculate the value and sort. - value - ? root - .sum((d) => layout.ignoreParentValue && d.children - ? 0 - : (0, utils_1.field)(value)(d)) - .sort(layout.sort) - : root.count(); - (0, d3_hierarchy_1.treemap)() - .tile(tileMethod) - // @ts-ignore - .size(layout.size) - .round(layout.round) - .paddingInner(layout.paddingInner) - .paddingOuter(layout.paddingOuter) - .paddingTop(layout.paddingTop) - .paddingRight(layout.paddingRight) - .paddingBottom(layout.paddingBottom) - .paddingLeft(layout.paddingLeft)(root); - const nodes = root.descendants().map((d) => Object.assign(d, { - id: d.id.replace(/^\//, ''), - x: [d.x0, d.x1], - y: [d.y0, d.y1], - })); - const filterData = nodes.filter(typeof layout.layer === 'function' - ? layout.layer - : (d) => d.height === layout.layer); - return [filterData, nodes]; -} -exports.treeDataTransform = treeDataTransform; -//# sourceMappingURL=treeDataTransform.js.map -}, function(modId) { var map = {"../mark/utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816006, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Pack = void 0; -const util_1 = require("@antv/util"); -const d3_hierarchy_1 = require("@antv/vendor/d3-hierarchy"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const utils_1 = require("./utils"); -const GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({ - size: [width, height], - padding: 0, - sort: (a, b) => b.value - a.value, -}); -const GET_DEFAULT_OPTIONS = (width, height, encode) => ({ - type: 'point', - axis: false, - legend: false, - scale: { - x: { domain: [0, width] }, - y: { domain: [0, height] }, - size: { type: 'identity' }, - }, - encode: { - x: 'x', - y: 'y', - size: 'r', - shape: 'point', - }, - style: { - fill: !encode.color ? (d) => (d.height === 0 ? '#ddd' : '#fff') : undefined, - stroke: !encode.color ? (d) => (d.height === 0 ? '' : '#000') : undefined, - }, -}); -const DEFAULT_LABEL_OPTIONS = { - text: '', - position: 'inside', - textOverflow: 'clip', - wordWrap: true, - maxLines: 1, - wordWrapWidth: (d) => d.r * 2, -}; -const DEFAULT_TOOLTIP_OPTIONS = { - title: (d) => d.data.name, - items: [{ field: 'value' }], -}; -const dataTransform = (data, layout, encode) => { - const { value } = encode; - const root = (0, util_1.isArray)(data) - ? (0, d3_hierarchy_1.stratify)().path(layout.path)(data) - : (0, d3_hierarchy_1.hierarchy)(data); - value ? root.sum((d) => (0, utils_1.field)(value)(d)).sort(layout.sort) : root.count(); - // @ts-ignore - (0, d3_hierarchy_1.pack)().size(layout.size).padding(layout.padding)(root); - return root.descendants(); -}; -const Pack = (markOptions, context) => { - const { width, height } = context; - const { data, encode = {}, scale = {}, style = {}, layout = {}, labels = [], tooltip = {} } = markOptions, resOptions = __rest(markOptions, ["data", "encode", "scale", "style", "layout", "labels", "tooltip"]); - const DEFAULT_OPTIONS = GET_DEFAULT_OPTIONS(width, height, encode); - const transformedData = dataTransform(data, (0, util_1.deepMix)({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout), (0, util_1.deepMix)({}, DEFAULT_OPTIONS['encode'], encode)); - const labelStyle = (0, helper_1.subObject)(style, 'label'); - return (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign(Object.assign({ data: transformedData, encode, - scale, - style, labels: [ - Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle), - ...labels, - ] }, resOptions), { tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false })); -}; -exports.Pack = Pack; -exports.Pack.props = {}; -//# sourceMappingURL=pack.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/mark":1751263815997,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816007, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Boxplot = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -function min(I, V) { - return (0, d3_array_1.min)(I, (i) => V[i]); -} -function max(I, V) { - return (0, d3_array_1.max)(I, (i) => V[i]); -} -function lower(I, V) { - const lo = q1(I, V) * 2.5 - q3(I, V) * 1.5; - return (0, d3_array_1.min)(I, (i) => (V[i] >= lo ? V[i] : NaN)); -} -function q1(I, V) { - return (0, d3_array_1.quantile)(I, 0.25, (i) => V[i]); -} -function q2(I, V) { - return (0, d3_array_1.quantile)(I, 0.5, (i) => V[i]); -} -function q3(I, V) { - return (0, d3_array_1.quantile)(I, 0.75, (i) => V[i]); -} -function upper(I, V) { - const hi = q3(I, V) * 2.5 - q1(I, V) * 1.5; - return (0, d3_array_1.max)(I, (i) => (V[i] <= hi ? V[i] : NaN)); -} -/** - * Group marks by x and reserve outlier indexes. - */ -function OutlierY() { - return (I, mark) => { - const { encode } = mark; - const { y, x } = encode; - const { value: V } = y; - const { value: X } = x; - const GI = Array.from((0, d3_array_1.group)(I, (i) => X[+i]).values()); - const FI = GI.flatMap((I) => { - const lo = lower(I, V); - const hi = upper(I, V); - return I.filter((i) => V[i] < lo || V[i] > hi); - }); - return [FI, mark]; - }; -} -const Boxplot = (options) => { - const { data, encode, style = {}, tooltip = {}, transform, animate } = options, rest = __rest(options, ["data", "encode", "style", "tooltip", "transform", "animate"]); - const { point = true } = style, restStyle = __rest(style, ["point"]); - const { y } = encode; - const encodeY = { y, y1: y, y2: y, y3: y, y4: y }; - const qy = { y1: q1, y2: q2, y3: q3 }; - // Tooltips. - const boxTooltip = (0, mark_1.subTooltip)(tooltip, 'box', { - items: [ - { channel: 'y', name: 'min' }, - { channel: 'y1', name: 'q1' }, - { channel: 'y2', name: 'q2' }, - { channel: 'y3', name: 'q3' }, - { channel: 'y4', name: 'max' }, - ], - }, true); - const pointTooltip = (0, mark_1.subTooltip)(tooltip, 'point', { - title: { channel: 'x' }, - items: [{ name: 'outlier', channel: 'y' }], - }); - // Only show min and max instead of lower and upper. - // Only draw a box. - if (!point) { - return Object.assign({ type: 'box', data: data, transform: [ - Object.assign(Object.assign({ type: 'groupX', y: min }, qy), { y4: max }), - ], encode: Object.assign(Object.assign({}, encode), encodeY), style: restStyle, tooltip: boxTooltip }, rest); - } - const boxStyle = (0, helper_1.subObject)(restStyle, 'box'); - const pointStyle = (0, helper_1.subObject)(restStyle, 'point'); - return [ - Object.assign({ type: 'box', data: data, transform: [ - Object.assign(Object.assign({ type: 'groupX', y: lower }, qy), { y4: upper }), - ], encode: Object.assign(Object.assign({}, encode), encodeY), style: boxStyle, tooltip: boxTooltip, animate: (0, mark_1.maybeAnimation)(animate, 'box') }, rest), - // Draw outliers. - { - type: 'point', - data: data, - transform: [{ type: OutlierY }], - encode, - style: Object.assign({}, pointStyle), - tooltip: pointTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'point'), - }, - ]; -}; -exports.Boxplot = Boxplot; -exports.Boxplot.props = {}; -//# sourceMappingURL=boxplot.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/mark":1751263815997}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816008, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Shape = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - shape: shape_1.ShapeShape, -}; -/** - * @todo Unify with text, image and point. - */ -const Shape = (options) => { - const { cartesian } = options; - if (cartesian) - return utils_1.visualMark; - return (index, scale, value, coordinate) => { - const { x: X, y: Y } = value; - const offset = (0, utils_1.createBandOffset)(scale, value, options); - const P = Array.from(index, (i) => { - const p = [+X[i], +Y[i]]; - return [coordinate.map(offset(p, i))]; - }); - return [index, P]; - }; -}; -exports.Shape = Shape; -exports.Shape.props = { - defaultShape: 'shape', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - { name: 'x', required: true }, - { name: 'y', required: true }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeTuple }, - { type: transform_1.MaybeVisualPosition }, - { type: transform_1.MaybeFunctionAttribute }, - ], -}; -//# sourceMappingURL=shape.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816009, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ForceGraph = void 0; -const d3_force_1 = require("@antv/vendor/d3-force"); -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const utils_1 = require("./utils"); -const DEFAULT_LAYOUT_OPTIONS = { - joint: true, -}; -const DEFAULT_LINK_OPTIONS = { - type: 'link', - axis: false, - legend: false, - encode: { - x: [(d) => d.source.x, (d) => d.target.x], - y: [(d) => d.source.y, (d) => d.target.y], - }, - style: { - stroke: '#999', - strokeOpacity: 0.6, - }, -}; -const DEFAULT_NODE_OPTIONS = { - type: 'point', - axis: false, - legend: false, - encode: { - x: 'x', - y: 'y', - size: 5, - color: 'group', - shape: 'point', - }, - style: { - stroke: '#fff', - }, -}; -const DEFAULT_LABEL_OPTIONS = { - text: '', -}; -function dataTransform(data, layout, encode) { - const { nodes, links } = data; - const { joint, nodeStrength, linkStrength } = layout; - const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = encode; - const nodeForce = (0, d3_force_1.forceManyBody)(); - const linkForce = (0, d3_force_1.forceLink)(links).id((0, utils_1.field)(linkKey)); - typeof nodeStrength === 'function' && nodeForce.strength(nodeStrength); - typeof linkStrength === 'function' && linkForce.strength(linkStrength); - const simulation = (0, d3_force_1.forceSimulation)(nodes) - .force('link', linkForce) - .force('charge', nodeForce); - joint - ? simulation.force('center', (0, d3_force_1.forceCenter)()) - : simulation.force('x', (0, d3_force_1.forceX)()).force('y', (0, d3_force_1.forceY)()); - simulation.stop(); - const n = Math.ceil(Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay())); - for (let i = 0; i < n; i++) - simulation.tick(); - return { - nodesData: nodes, - linksData: links, - }; -} -const ForceGraph = (options) => { - const { data, encode: e = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options; - const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = e, restEncode = __rest(e, ["nodeKey", "linkKey"]); - const encode = Object.assign({ nodeKey, linkKey }, restEncode); - const nodeEncode = (0, helper_1.subObject)(encode, 'node'); - const linkEncode = (0, helper_1.subObject)(encode, 'link'); - const { links, nodes } = (0, utils_1.initializeData)(data, encode); - const { nodesData, linksData } = dataTransform({ links, nodes }, (0, util_1.deepMix)({}, DEFAULT_LAYOUT_OPTIONS, layout), encode); - const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', { - items: [ - (d) => ({ name: 'source', value: (0, utils_1.field)(linkKey)(d.source) }), - (d) => ({ name: 'target', value: (0, utils_1.field)(linkKey)(d.target) }), - ], - }); - const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', { - items: [(d) => ({ name: 'key', value: (0, utils_1.field)(nodeKey)(d) })], - }, true); - return [ - (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, { - data: linksData, - encode: linkEncode, - labels: linkLabels, - style: (0, helper_1.subObject)(style, 'link'), - tooltip: linkTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'link'), - }), - (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, { - data: nodesData, - encode: Object.assign({}, nodeEncode), - scale, - style: (0, helper_1.subObject)(style, 'node'), - tooltip: nodeTooltip, - labels: [ - Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), (0, helper_1.subObject)(style, 'label')), - ...nodeLabels, - ], - animate: (0, mark_1.maybeAnimation)(animate, 'link'), - }), - ]; -}; -exports.ForceGraph = ForceGraph; -exports.ForceGraph.props = {}; -//# sourceMappingURL=forceGraph.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/mark":1751263815997,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816010, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tree = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const tree_1 = require("../data/tree"); -const mark_1 = require("../utils/mark"); -const DEFAULT_LAYOUT_OPTIONS = { - sortBy: (a, b) => b.value - a.value, -}; -const DEFAULT_NODE_OPTIONS = { - axis: false, - legend: false, - type: 'point', - encode: { - x: 'x', - y: 'y', - size: 2, - shape: 'point', - }, -}; -const DEFAULT_LINK_OPTIONS = { - type: 'link', - encode: { - x: 'x', - y: 'y', - shape: 'smooth', - }, -}; -const DEFAULT_LABEL_OPTIONS = { - text: '', - fontSize: 10, -}; -const Tree = (options) => { - const { data, encode = {}, scale = {}, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options; - const valueEncode = encode === null || encode === void 0 ? void 0 : encode.value; - const { nodes, edges } = (0, tree_1.Tree)(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), layout), { field: valueEncode }))(data); - const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', { - title: 'name', - items: ['value'], - }, true); - const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', { - title: '', - items: [ - (d) => ({ name: 'source', value: d.source.name }), - (d) => ({ name: 'target', value: d.target.name }), - ], - }); - return [ - (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, { - data: edges, - encode: (0, helper_1.subObject)(encode, 'link'), - scale: (0, helper_1.subObject)(scale, 'link'), - labels: linkLabels, - style: Object.assign({ stroke: '#999' }, (0, helper_1.subObject)(style, 'link')), - tooltip: linkTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'link'), - }), - (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, { - data: nodes, - scale: (0, helper_1.subObject)(scale, 'node'), - encode: (0, helper_1.subObject)(encode, 'node'), - labels: [ - Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), (0, helper_1.subObject)(style, 'label')), - ...nodeLabels, - ], - style: Object.assign({}, (0, helper_1.subObject)(style, 'node')), - tooltip: nodeTooltip, - animate: (0, mark_1.maybeAnimation)(animate, 'node'), - }), - ]; -}; -exports.Tree = Tree; -exports.Tree.props = {}; -//# sourceMappingURL=tree.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../data/tree":1751263816011,"../utils/mark":1751263815997}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816011, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tree = void 0; -const d3_hierarchy_1 = require("@antv/vendor/d3-hierarchy"); -const cluster_1 = require("./cluster"); -const Tree = (options) => { - return (0, cluster_1.hierarchyFunction)(d3_hierarchy_1.tree)(options); -}; -exports.Tree = Tree; -exports.Tree.props = {}; -//# sourceMappingURL=tree.js.map -}, function(modId) { var map = {"./cluster":1751263816012}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816012, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Cluster = exports.hierarchyFunction = void 0; -const d3_hierarchy_1 = require("@antv/vendor/d3-hierarchy"); -const hierarchyFunction = (layoutFunction) => (options) => { - return (data) => { - const { field = 'value', nodeSize, separation, sortBy, as = ['x', 'y'], } = options; - const [x, y] = as; - // Process root data. - const root = (0, d3_hierarchy_1.hierarchy)(data, (d) => d.children) - .sum((d) => d[field]) - .sort(sortBy); - // Layout - const c = layoutFunction(); - c.size([1, 1]); - if (nodeSize) - c.nodeSize(nodeSize); - if (separation) - c.separation(separation); - c(root); - const nodes = []; - root.each((node) => { - node[x] = node.x; - node[y] = node.y; - node.name = node.data.name; - nodes.push(node); - }); - const edges = root.links(); - edges.forEach((edge) => { - edge[x] = [edge.source[x], edge.target[x]]; - edge[y] = [edge.source[y], edge.target[y]]; - }); - return { nodes, edges }; - }; -}; -exports.hierarchyFunction = hierarchyFunction; -const Cluster = (options) => { - return (0, exports.hierarchyFunction)(d3_hierarchy_1.cluster)(options); -}; -exports.Cluster = Cluster; -exports.Cluster.props = {}; -//# sourceMappingURL=cluster.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816013, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WordCloud = void 0; -const util_1 = require("@antv/util"); -function initializeData(data, encode) { - const { text = 'text', value = 'value' } = encode; - return data.map((d) => (Object.assign(Object.assign({}, d), { text: d[text], value: d[value] }))); -} -const GET_DEFAULT_OPTIONS = () => ({ - axis: false, - type: 'text', - encode: { - x: 'x', - y: 'y', - text: 'text', - rotate: 'rotate', - fontSize: 'size', - shape: 'tag', - }, - scale: { - x: { range: [0, 1] }, - y: { range: [0, 1] }, - }, - style: { - fontFamily: (d) => d.fontFamily, - }, - tooltip: { - items: [ - (datum) => ({ - name: datum.text, - value: datum.value, - }), - ], - }, -}); -const WordCloud = (options, context) => __awaiter(void 0, void 0, void 0, function* () { - const { width, height } = context; - const { data, encode = {}, scale, style = {}, layout = {} } = options, resOptions = __rest(options, ["data", "encode", "scale", "style", "layout"]); - const initializedData = initializeData(data, encode); - return (0, util_1.deepMix)({}, GET_DEFAULT_OPTIONS(), Object.assign(Object.assign({ data: { - value: initializedData, - transform: [ - Object.assign({ type: 'wordCloud', size: [width, height] }, layout), - ], - }, encode, - scale, - style }, resOptions), { axis: false })); -}); -exports.WordCloud = WordCloud; -exports.WordCloud.props = {}; -//# sourceMappingURL=wordCloud.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816014, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Gauge = void 0; -const util_1 = require("@antv/util"); -const g_1 = require("@antv/g"); -const helper_1 = require("../utils/helper"); -const coordinate_1 = require("../utils/coordinate"); -const coordinate_2 = require("../coordinate"); -const utils_1 = require("../shape/utils"); -const selection_1 = require("../utils/selection"); -const shape_1 = require("../shape"); -const indicatorShape = (options, context) => { - const { shape, radius } = options, style = __rest(options, ["shape", "radius"]); - const pointerStyle = (0, helper_1.subObject)(style, 'pointer'); - const pinStyle = (0, helper_1.subObject)(style, 'pin'); - const { shape: pointerShape } = pointerStyle, resPointerStyle = __rest(pointerStyle, ["shape"]); - const { shape: pinShape } = pinStyle, resPinStyle = __rest(pinStyle, ["shape"]); - const { coordinate, theme } = context; - return (points, value) => { - // Invert points. - const invertedPoints = points.map((p) => coordinate.invert(p)); - // Get new coordinate. - const [startAngle, endAngle, innerRadius] = (0, coordinate_1.getTransformOptions)(coordinate, 'polar'); - const newCoordinate = coordinate.clone(); - const { color: stroke } = value; - const newTransformations = (0, coordinate_2.Radial)({ - startAngle, - endAngle, - innerRadius, - outerRadius: radius, - }); - newTransformations.push(['cartesian']); - newCoordinate.update({ - transformations: newTransformations, - }); - const newPoints = invertedPoints.map((p) => newCoordinate.map(p)); - const [x, y] = (0, utils_1.getOrigin)(newPoints); - const [cx, cy] = coordinate.getCenter(); - const pointerAttrs = Object.assign(Object.assign({ x1: x, y1: y, x2: cx, y2: cy, stroke }, resPointerStyle), style); - const pinAttrs = Object.assign(Object.assign({ cx, - cy, - stroke }, resPinStyle), style); - const indicatorGroup = (0, selection_1.select)(new g_1.Group()); - if (!(0, helper_1.isUnset)(pointerShape)) { - typeof pointerShape === 'function' - ? indicatorGroup.append(() => pointerShape(newPoints, value, newCoordinate, theme)) - : indicatorGroup.append('line').call(utils_1.applyStyle, pointerAttrs).node(); - } - if (!(0, helper_1.isUnset)(pinShape)) { - typeof pinShape === 'function' - ? indicatorGroup.append(() => pinShape(newPoints, value, newCoordinate, theme)) - : indicatorGroup.append('circle').call(utils_1.applyStyle, pinAttrs).node(); - } - return indicatorGroup.node(); - }; -}; -const DEFAULT_OPTIONS = { - coordinate: { - type: 'radial', - innerRadius: 0.9, - outerRadius: 1, - startAngle: (-11 / 10) * Math.PI, - endAngle: (1 / 10) * Math.PI, - }, - axis: { - x: false, - }, - legend: false, - tooltip: false, - encode: { - x: 'x', - y: 'y', - color: 'color', - }, - scale: { - color: { - range: ['#30BF78', '#D0D0D0'], - }, - }, -}; -const DEFAULT_INDICATOR_OPTIONS = { - style: { - shape: indicatorShape, - lineWidth: 4, - pointerLineCap: 'round', - pinR: 10, - pinFill: '#fff', - radius: 0.6, - }, -}; -const DEFAULT_TEXT_OPTIONS = { - type: 'text', - style: { - x: '50%', - y: '60%', - textAlign: 'center', - textBaseline: 'middle', - fontSize: 20, - fontWeight: 800, - fill: '#888', - }, - tooltip: false, -}; -function getGaugeData(data) { - if ((0, util_1.isNumber)(data)) { - // Percent range [0, 1]. - const percent = Math.max(0, Math.min(data, 1)); - return { - percent, - target: percent, - total: 1, - }; - } - return data; -} -function dataTransform(data, scale) { - const { name = 'score', target, total, percent, thresholds = [], } = getGaugeData(data); - const _target = percent || target; - const _total = percent ? 1 : total; - const newScale = Object.assign({ y: { - domain: [0, _total], - } }, scale); - if (!thresholds.length) { - return { - targetData: [{ x: name, y: _target, color: 'target' }], - totalData: [ - { x: name, y: _target, color: 'target' }, - { x: name, y: _total - _target, color: 'total' }, - ], - target: _target, - total: _total, - scale: newScale, - }; - } - return { - targetData: [{ x: name, y: _target, color: 'target' }], - totalData: thresholds.map((d, i) => ({ - x: name, - y: i >= 1 ? d - thresholds[i - 1] : d, - color: i, - })), - target: _target, - total: _total, - scale: newScale, - }; -} -function getTextContent(textStyle, { target, total }) { - const { content } = textStyle; - return content ? content(target, total) : target.toString(); -} -const Gauge = (options) => { - const { data = {}, scale = {}, style = {}, animate = {}, transform = [] } = options, resOptions = __rest(options, ["data", "scale", "style", "animate", "transform"]); - const { targetData, totalData, target, total, scale: newScale, } = dataTransform(data, scale); - const _a = (0, helper_1.subObject)(style, 'text'), { tooltip } = _a, textStyle = __rest(_a, ["tooltip"]); - // pointer + pin - const indicatorStyle = (0, helper_1.filterPrefixObject)(style, ['pointer', 'pin']); - const arcStyle = (0, helper_1.subObject)(style, 'arc'); - const shape = arcStyle.shape; - return [ - (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', transform: [{ type: 'stackY' }], data: totalData, scale: newScale, style: shape === 'round' ? Object.assign(Object.assign({}, arcStyle), { shape: shape_1.GaugeRound }) : arcStyle, animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'arc') : animate }, resOptions)), - (0, util_1.deepMix)({}, DEFAULT_OPTIONS, DEFAULT_INDICATOR_OPTIONS, Object.assign({ type: 'point', data: targetData, scale: newScale, style: indicatorStyle, animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'indicator') : animate }, resOptions)), - (0, util_1.deepMix)({}, DEFAULT_TEXT_OPTIONS, { - style: Object.assign({ text: getTextContent(textStyle, { target, total }) }, textStyle), - tooltip, - animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'text') : animate, - }), - ]; -}; -exports.Gauge = Gauge; -exports.Gauge.props = {}; -//# sourceMappingURL=gauge.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/coordinate":1751263815882,"../coordinate":1751263815805,"../shape/utils":1751263815885,"../utils/selection":1751263815883,"../shape":1751263815879}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816015, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Density = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - density: shape_1.DensityShape, -}; -const Density = () => { - return (index, scale, value, coordinate) => { - const { x: X, series: S } = value; - const Yn = Object.entries(value) - .filter(([key]) => key.startsWith('y')) - .map(([, value]) => value); - const SZn = Object.entries(value) - .filter(([key]) => key.startsWith('size')) - .map(([, value]) => value); - // Because x and y channel is not strictly required in Line.props, - // it should throw error with empty x or y channels. - if (X === undefined || Yn === undefined || SZn === undefined) { - throw new Error('Missing encode for x or y or size channel.'); - } - // Calc width for each box. - // The scales for x and series channels must be band scale. - const xScale = scale.x; - const series = scale.series; - const P = Array.from(index, (i) => { - const groupWidth = xScale.getBandWidth(xScale.invert(+X[i])); - const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1; - const width = groupWidth * ratio; - const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth; - const x = +X[i] + offset + width / 2; - const PN = [ - ...Yn.map((_, idx) => [x + +SZn[idx][i] / index.length, +Yn[idx][i]]), - ...Yn.map((_, idx) => [ - x - +SZn[idx][i] / index.length, - +Yn[idx][i], - ]).reverse(), // left - ]; - return PN.map((p) => coordinate.map(p)); - }); - return [index, P]; - }; -}; -exports.Density = Density; -exports.Density.props = { - defaultShape: 'density', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', scale: 'band', required: true }, - { name: 'y', required: true }, - { name: 'size', required: true }, - { name: 'series', scale: 'band' }, - { name: 'size', required: true, scale: 'identity' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeZeroY1 }, - { type: transform_1.MaybeZeroX }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()], - interaction: { shareTooltip: true }, -}; -//# sourceMappingURL=density.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816016, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Heatmap = void 0; -const shape_1 = require("../shape"); -const transform_1 = require("../transform"); -const utils_1 = require("./utils"); -const shape = { - heatmap: shape_1.HeatmapShape, -}; -/** - * Draw heatmap with gradient. - */ -const Heatmap = (options) => { - return (index, scale, value, coordinate) => { - const { x: X, y: Y, size: S, color: C } = value; - const P = Array.from(index, (i) => { - // Default size = 40. - const r = S ? +S[i] : 40; - // Warning: x, y, value, radius. - return [...coordinate.map([+X[i], +Y[i]]), C[i], r]; - }); - return [[0], [P]]; - }; -}; -exports.Heatmap = Heatmap; -exports.Heatmap.props = { - defaultShape: 'heatmap', - defaultLabelShape: 'label', - composite: false, - shape, - channels: [ - ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }), - { name: 'x', required: true }, - { name: 'y', required: true }, - { name: 'color', scale: 'identity', required: true }, - { name: 'size' }, - ], - preInference: [ - ...(0, utils_1.basePreInference)(), - { type: transform_1.MaybeZeroX }, - { type: transform_1.MaybeZeroY }, - ], - postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()], -}; -//# sourceMappingURL=heatmap.js.map -}, function(modId) { var map = {"../shape":1751263815879,"../transform":1751263815823,"./utils":1751263815937}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816017, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Liquid = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const number_1 = require("../utils/number"); -const shape_1 = require("../shape"); -const DEFAULT_OPTIONS = { - axis: { - x: false, - y: false, - }, - legend: false, - tooltip: false, - encode: { - x: 'type', - y: 'percent', - }, - scale: { - y: { - domain: [0, 1], - }, - }, - style: { - shape: shape_1.LiquidShape, - }, - animate: { - enter: { - type: 'fadeIn', - }, - }, -}; -const DEFAULT_TEXT_OPTIONS = { - type: 'text', - style: { - x: '50%', - y: '50%', - textAlign: 'center', - textBaseline: 'middle', - fontSize: 20, - fontWeight: 800, - fill: '#888', - }, - animate: { - enter: { - type: 'fadeIn', - }, - }, -}; -const Liquid = (options) => { - const { data = {}, style = {}, animate } = options, resOptions = __rest(options, ["data", "style", "animate"]); - // Compatible with old data structures: { percent: number } and percent >= 0. - const percent = Math.max(0, (0, util_1.isNumber)(data) ? data : data === null || data === void 0 ? void 0 : data.percent); - const newData = [{ percent, type: 'liquid' }]; - const contentStyle = Object.assign(Object.assign({}, (0, helper_1.subObject)(style, 'text')), (0, helper_1.subObject)(style, 'content')); - const outline = (0, helper_1.subObject)(style, 'outline'); - const wave = (0, helper_1.subObject)(style, 'wave'); - const background = (0, helper_1.subObject)(style, 'background'); - return [ - (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', data: newData, style: { - liquidOptions: { - percent, - liquidShape: style === null || style === void 0 ? void 0 : style.shape, - }, - styleOptions: Object.assign(Object.assign({}, style), { outline, - wave, - background }), - }, animate }, resOptions)), - (0, util_1.deepMix)({}, DEFAULT_TEXT_OPTIONS, { - style: Object.assign({ text: `${(0, number_1.prettyNumber)(percent * 100)} %` }, contentStyle), - animate, - }), - ]; -}; -exports.Liquid = Liquid; -exports.Liquid.props = {}; -//# sourceMappingURL=liquid.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/number":1751263815884,"../shape":1751263815879}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816018, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Category20 = exports.Category10 = void 0; -var category10_1 = require("./category10"); -Object.defineProperty(exports, "Category10", { enumerable: true, get: function () { return category10_1.Category10; } }); -var category20_1 = require("./category20"); -Object.defineProperty(exports, "Category20", { enumerable: true, get: function () { return category20_1.Category20; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./category10":1751263816019,"./category20":1751263816020}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816019, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Category10 = void 0; -/** - * Classic palette of AntV for ordinal data with 10 colors. - */ -const Category10 = () => { - return [ - '#5B8FF9', - '#5AD8A6', - '#5D7092', - '#F6BD16', - '#6F5EF9', - '#6DC8EC', - '#945FB9', - '#FF9845', - '#1E9493', - '#FF99C3', - ]; -}; -exports.Category10 = Category10; -exports.Category10.props = {}; -//# sourceMappingURL=category10.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816020, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Category20 = void 0; -/** - * Classic palette of AntV for ordinal data with 20 colors. - */ -const Category20 = () => { - return [ - '#5B8FF9', - '#CDDDFD', - '#5AD8A6', - '#CDF3E4', - '#5D7092', - '#CED4DE', - '#F6BD16', - '#FCEBB9', - '#6F5EF9', - '#D3CEFD', - '#6DC8EC', - '#D3EEF9', - '#945FB9', - '#DECFEA', - '#FF9845', - '#FFE0C7', - '#1E9493', - '#BBDEDE', - '#FF99C3', - '#FFE0ED', - ]; -}; -exports.Category20 = Category20; -exports.Category20.props = {}; -//# sourceMappingURL=category20.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816021, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Constant = exports.Sequential = exports.Sqrt = exports.Quantize = exports.Quantile = exports.Threshold = exports.Pow = exports.Log = exports.Time = exports.Point = exports.Identity = exports.Ordinal = exports.Linear = exports.Band = void 0; -var band_1 = require("./band"); -Object.defineProperty(exports, "Band", { enumerable: true, get: function () { return band_1.Band; } }); -var linear_1 = require("./linear"); -Object.defineProperty(exports, "Linear", { enumerable: true, get: function () { return linear_1.Linear; } }); -var ordinal_1 = require("./ordinal"); -Object.defineProperty(exports, "Ordinal", { enumerable: true, get: function () { return ordinal_1.Ordinal; } }); -var identity_1 = require("./identity"); -Object.defineProperty(exports, "Identity", { enumerable: true, get: function () { return identity_1.Identity; } }); -var point_1 = require("./point"); -Object.defineProperty(exports, "Point", { enumerable: true, get: function () { return point_1.Point; } }); -var time_1 = require("./time"); -Object.defineProperty(exports, "Time", { enumerable: true, get: function () { return time_1.Time; } }); -var log_1 = require("./log"); -Object.defineProperty(exports, "Log", { enumerable: true, get: function () { return log_1.Log; } }); -var pow_1 = require("./pow"); -Object.defineProperty(exports, "Pow", { enumerable: true, get: function () { return pow_1.Pow; } }); -var threshold_1 = require("./threshold"); -Object.defineProperty(exports, "Threshold", { enumerable: true, get: function () { return threshold_1.Threshold; } }); -var quantile_1 = require("./quantile"); -Object.defineProperty(exports, "Quantile", { enumerable: true, get: function () { return quantile_1.Quantile; } }); -var quantize_1 = require("./quantize"); -Object.defineProperty(exports, "Quantize", { enumerable: true, get: function () { return quantize_1.Quantize; } }); -var sqrt_1 = require("./sqrt"); -Object.defineProperty(exports, "Sqrt", { enumerable: true, get: function () { return sqrt_1.Sqrt; } }); -var sequential_1 = require("./sequential"); -Object.defineProperty(exports, "Sequential", { enumerable: true, get: function () { return sequential_1.Sequential; } }); -var constant_1 = require("./constant"); -Object.defineProperty(exports, "Constant", { enumerable: true, get: function () { return constant_1.Constant; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./band":1751263816022,"./linear":1751263816023,"./ordinal":1751263816024,"./identity":1751263816025,"./point":1751263816026,"./time":1751263816027,"./log":1751263816028,"./pow":1751263816029,"./threshold":1751263816030,"./quantile":1751263816031,"./quantize":1751263816032,"./sqrt":1751263816033,"./sequential":1751263816034,"./constant":1751263816035}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816022, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Band = void 0; -const scale_1 = require("@antv/scale"); -const Band = (options) => { - return new scale_1.Band(options); -}; -exports.Band = Band; -exports.Band.props = {}; -//# sourceMappingURL=band.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816023, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Linear = void 0; -const scale_1 = require("@antv/scale"); -const Linear = (options) => { - return new scale_1.Linear(options); -}; -exports.Linear = Linear; -exports.Linear.props = {}; -//# sourceMappingURL=linear.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816024, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Ordinal = void 0; -const scale_1 = require("@antv/scale"); -const Ordinal = (options) => { - return new scale_1.Ordinal(options); -}; -exports.Ordinal = Ordinal; -exports.Ordinal.props = {}; -//# sourceMappingURL=ordinal.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816025, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Identity = void 0; -const scale_1 = require("@antv/scale"); -const Identity = (options) => { - return new scale_1.Identity(options); -}; -exports.Identity = Identity; -exports.Identity.props = {}; -//# sourceMappingURL=identity.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816026, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Point = void 0; -const scale_1 = require("@antv/scale"); -const Point = (options) => { - return new scale_1.Point(options); -}; -exports.Point = Point; -exports.Point.props = {}; -//# sourceMappingURL=point.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816027, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Time = void 0; -const scale_1 = require("@antv/scale"); -const Time = (options) => { - return new scale_1.Time(options); -}; -exports.Time = Time; -exports.Time.props = {}; -//# sourceMappingURL=time.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816028, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Log = void 0; -const scale_1 = require("@antv/scale"); -const Log = (options) => { - return new scale_1.Log(options); -}; -exports.Log = Log; -exports.Log.props = {}; -//# sourceMappingURL=log.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816029, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Pow = void 0; -const scale_1 = require("@antv/scale"); -const Pow = (options) => { - return new scale_1.Pow(options); -}; -exports.Pow = Pow; -exports.Pow.props = {}; -//# sourceMappingURL=pow.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816030, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Threshold = void 0; -const scale_1 = require("@antv/scale"); -const Threshold = (options) => { - return new scale_1.Threshold(options); -}; -exports.Threshold = Threshold; -exports.Threshold.props = {}; -//# sourceMappingURL=threshold.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816031, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Quantile = void 0; -const scale_1 = require("@antv/scale"); -const Quantile = (options) => { - return new scale_1.Quantile(options); -}; -exports.Quantile = Quantile; -exports.Quantile.props = {}; -//# sourceMappingURL=quantile.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816032, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Quantize = void 0; -const scale_1 = require("@antv/scale"); -const Quantize = (options) => { - return new scale_1.Quantize(options); -}; -exports.Quantize = Quantize; -exports.Quantize.props = {}; -//# sourceMappingURL=quantize.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816033, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sqrt = void 0; -const scale_1 = require("@antv/scale"); -const Sqrt = (options) => { - return new scale_1.Sqrt(options); -}; -exports.Sqrt = Sqrt; -exports.Sqrt.props = {}; -//# sourceMappingURL=sqrt.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816034, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sequential = void 0; -const scale_1 = require("@antv/scale"); -const Sequential = (options) => { - return new scale_1.Sequential(options); -}; -exports.Sequential = Sequential; -exports.Sequential.props = {}; -//# sourceMappingURL=sequential.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816035, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Constant = void 0; -const scale_1 = require("@antv/scale"); -const Constant = (options) => { - return new scale_1.Constant(options); -}; -exports.Constant = Constant; -exports.Constant.props = {}; -//# sourceMappingURL=constant.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816036, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Dark = exports.Light = exports.Academy = exports.ClassicDark = exports.Classic = void 0; -var classic_1 = require("./classic"); -Object.defineProperty(exports, "Classic", { enumerable: true, get: function () { return classic_1.Classic; } }); -var classicDark_1 = require("./classicDark"); -Object.defineProperty(exports, "ClassicDark", { enumerable: true, get: function () { return classicDark_1.ClassicDark; } }); -var academy_1 = require("./academy"); -Object.defineProperty(exports, "Academy", { enumerable: true, get: function () { return academy_1.Academy; } }); -var light_1 = require("./light"); -Object.defineProperty(exports, "Light", { enumerable: true, get: function () { return light_1.Light; } }); -var dark_1 = require("./dark"); -Object.defineProperty(exports, "Dark", { enumerable: true, get: function () { return dark_1.Dark; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./classic":1751263816037,"./classicDark":1751263816040,"./academy":1751263816042,"./light":1751263816038,"./dark":1751263816041}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816037, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Classic = void 0; -const util_1 = require("@antv/util"); -const light_1 = require("./light"); -/** - * Default theme. - */ -const Classic = (options) => { - return (0, util_1.deepMix)({}, (0, light_1.Light)(), { - category10: 'category10', - category20: 'category20', - }, options); -}; -exports.Classic = Classic; -exports.Classic.props = {}; -//# sourceMappingURL=classic.js.map -}, function(modId) { var map = {"./light":1751263816038}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816038, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Light = exports.tokens = void 0; -const util_1 = require("@antv/util"); -const create_1 = require("./create"); -exports.tokens = { - colorBlack: '#1D2129', - colorWhite: '#ffffff', - colorStroke: '#416180', - colorDefault: '#1783FF', - colorBackground: 'transparent', - category10: [ - '#1783FF', - '#00C9C9', - '#F0884D', - '#D580FF', - '#7863FF', - '#60C42D', - '#BD8F24', - '#FF80CA', - '#2491B3', - '#17C76F', - ], - category20: [ - '#1783FF', - '#00C9C9', - '#F0884D', - '#D580FF', - '#7863FF', - '#60C42D', - '#BD8F24', - '#FF80CA', - '#2491B3', - '#17C76F', - '#AABA01', - '#BC7CFC', - '#237CBC', - '#2DE379', - '#CE8032', - '#FF7AF4', - '#545FD3', - '#AFE410', - '#D8C608', - '#FFA1E0', - ], - padding1: 8, - padding2: 12, - padding3: 20, - alpha90: 0.9, - alpha65: 0.65, - alpha45: 0.45, - alpha25: 0.25, - alpha10: 0.1, -}; -const defaults = (0, create_1.create)(exports.tokens); -/** - * Default theme. - */ -const Light = (options) => { - return (0, util_1.deepMix)({}, defaults, options); -}; -exports.Light = Light; -exports.Light.props = {}; -//# sourceMappingURL=light.js.map -}, function(modId) { var map = {"./create":1751263816039}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816039, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.create = void 0; -function create({ colorDefault, colorBlack, colorWhite, colorStroke, colorBackground, padding1, padding2, padding3, alpha90, alpha65, alpha45, alpha25, alpha10, category10, category20, sizeDefault = 1, padding = 'auto', margin = 16, }) { - return { - padding, - margin, - size: sizeDefault, - color: colorDefault, - category10, - category20, - enter: { - duration: 300, - fill: 'both', - delay: 0, - }, - update: { - duration: 300, - fill: 'both', - delay: 0, - }, - exit: { - duration: 300, - fill: 'both', - delay: 0, - }, - view: { - viewFill: colorBackground, - plotFill: 'transparent', - mainFill: 'transparent', - contentFill: 'transparent', - }, - line: { - line: { - fill: '', - strokeOpacity: 1, - lineWidth: 1, - lineCap: 'round', - }, - }, - point: { - point: { - r: 3, - fillOpacity: 0.95, - lineWidth: 0, - }, - hollow: { - r: 3, - strokeOpacity: 0.95, - lineWidth: 1, - }, - plus: { - r: 3, - strokeOpacity: 0.95, - lineWidth: 3, - }, - diamond: { - r: 3, - strokeOpacity: 0.95, - lineWidth: 1, - }, - }, - interval: { - rect: { - fillOpacity: 0.95, - }, - hollow: { - fill: '', - strokeOpacity: 1, - lineWidth: 2, - }, - }, - area: { - area: { - fillOpacity: 0.85, - lineWidth: 0, - }, - }, - polygon: { - polygon: { - fillOpacity: 0.95, - }, - }, - cell: { - cell: { - fillOpacity: 0.95, - }, - hollow: { - fill: '', - strokeOpacity: 1, - lineWidth: 2, - }, - }, - rect: { - rect: { - fillOpacity: 0.95, - }, - hollow: { - fill: '', - strokeOpacity: 1, - lineWidth: 2, - }, - }, - link: { - link: { - fill: '', - strokeOpacity: 1, - }, - }, - vector: { - vector: { - fillOpacity: 1, - }, - }, - box: { - box: { - fillOpacity: 0.95, - stroke: colorBlack, - lineWidth: 1, - }, - }, - text: { - text: { - fill: '#1D2129', - fontSize: 12, - lineWidth: 0, - connectorStroke: colorStroke, - connectorStrokeOpacity: 0.45, - connectorLineWidth: 1, - backgroundFill: colorStroke, - backgroundFillOpacity: 0.15, - backgroundPadding: [2, 4], - startMarkerSymbol: 'circle', - startMarkerSize: 4, - endMarkerSymbol: 'circle', - endMarkerSize: 4, - }, - badge: { - fill: '#1D2129', - fillOpacity: 0.65, - lineWidth: 0, - fontSize: 10, - textAlign: 'center', - textBaseline: 'middle', - markerFill: colorStroke, - markerFillOpacity: 0.25, - markerStrokeOpacity: 0, - }, - }, - lineX: { - line: { - stroke: colorStroke, - strokeOpacity: 0.45, - lineWidth: 1, - }, - }, - lineY: { - line: { - stroke: colorStroke, - strokeOpacity: 0.45, - lineWidth: 1, - }, - }, - rangeX: { - range: { - fill: colorStroke, - fillOpacity: 0.15, - lineWidth: 0, - }, - }, - rangeY: { - range: { - fill: colorStroke, - fillOpacity: 0.15, - lineWidth: 0, - }, - }, - connector: { - connector: { - stroke: colorStroke, - strokeOpacity: 0.45, - lineWidth: 1, - connectLength1: 12, - endMarker: true, - endMarkerSize: 6, - endMarkerFill: colorStroke, - endMarkerFillOpacity: 0.95, - }, - }, - axis: { - arrow: false, - gridLineDash: [3, 4], - gridLineWidth: 0.5, - gridStroke: colorBlack, - gridStrokeOpacity: alpha10, - labelAlign: 'horizontal', - labelFill: colorBlack, - labelOpacity: alpha45, - labelFontSize: 12, - labelFontWeight: 'normal', - labelSpacing: padding1, - line: false, - lineLineWidth: 0.5, - lineStroke: colorBlack, - lineStrokeOpacity: alpha45, - tickLength: 4, - tickLineWidth: 1, - tickStroke: colorBlack, - tickOpacity: alpha45, - titleFill: colorBlack, - titleOpacity: alpha90, - titleFontSize: 12, - titleFontWeight: 'normal', - titleSpacing: 12, - titleTransformOrigin: 'center', - lineArrowOffset: 6, - lineArrowSize: 6, - }, - axisTop: { - gridDirection: 'positive', - labelDirection: 'negative', - tickDirection: 'negative', - titlePosition: 'top', - titleSpacing: 12, - labelSpacing: 4, - titleTextBaseline: 'middle', - }, - axisBottom: { - gridDirection: 'negative', - labelDirection: 'positive', - tickDirection: 'positive', - titlePosition: 'bottom', - titleSpacing: 12, - labelSpacing: 4, - titleTextBaseline: 'bottom', - titleTransform: 'translate(0, 8)', - }, - axisLeft: { - gridDirection: 'positive', - labelDirection: 'negative', - labelSpacing: 4, - tickDirection: 'negative', - titlePosition: 'left', - titleSpacing: 12, - titleTextBaseline: 'middle', - titleDirection: 'vertical', - titleTransform: 'rotate(-90) translate(0, -8)', - titleTransformOrigin: 'center', - }, - axisRight: { - gridDirection: 'negative', - labelDirection: 'positive', - labelSpacing: 4, - tickDirection: 'positive', - titlePosition: 'right', - titleSpacing: 12, - titleTextBaseline: 'top', - titleDirection: 'vertical', - titleTransformOrigin: 'center', - }, - axisLinear: { - girdClosed: true, - gridConnect: 'arc', - gridDirection: 'negative', - gridType: 'surround', - titlePosition: 'top', - titleSpacing: 0, - }, - axisArc: { - title: false, - titlePosition: 'inner', - line: false, - tick: true, - labelSpacing: 4, - }, - axisRadar: { - girdClosed: true, - gridStrokeOpacity: 0.3, - gridType: 'surround', - tick: false, - titlePosition: 'start', - }, - legendCategory: { - backgroundFill: 'transparent', - itemBackgroundFill: 'transparent', - itemLabelFill: colorBlack, - itemLabelFillOpacity: alpha90, - itemLabelFontSize: 12, - itemLabelFontWeight: 'normal', - itemMarkerFillOpacity: 1, - itemMarkerSize: 8, - itemSpacing: [padding1, padding1], - itemValueFill: colorBlack, - itemValueFillOpacity: 0.65, - itemValueFontSize: 12, - itemValueFontWeight: 'normal', - navButtonFill: colorBlack, - navButtonFillOpacity: 0.65, - navPageNumFill: colorBlack, - navPageNumFillOpacity: 0.45, - navPageNumFontSize: 12, - padding: 8, - title: false, - titleFill: colorBlack, - titleFillOpacity: 0.65, - titleFontSize: 12, - titleFontWeight: 'normal', - titleSpacing: 4, - tickStroke: colorBlack, - tickStrokeOpacity: 0.25, - rowPadding: padding1, - colPadding: padding2, - maxRows: 3, - maxCols: 3, - }, - legendContinuous: { - handleHeight: 12, - handleLabelFill: colorBlack, - handleLabelFillOpacity: alpha45, - handleLabelFontSize: 12, - handleLabelFontWeight: 'normal', - handleMarkerFill: colorBlack, - handleMarkerFillOpacity: 0.6, - handleMarkerLineWidth: 1, - handleMarkerStroke: colorBlack, - handleMarkerStrokeOpacity: 0.25, - handleWidth: 10, - labelFill: colorBlack, - labelFillOpacity: alpha45, - labelFontSize: 12, - labelFontWeight: 'normal', - labelSpacing: 3, - tick: true, - tickLength: 12, - ribbonSize: 12, - ribbonFill: '#aaa', - handle: true, - handleLabel: false, - handleShape: 'slider', - handleIconSize: 12 / 1.8, - indicator: false, - titleFontSize: 12, - titleSpacing: 4, - titleFontWeight: 'normal', - titleFillOpacity: alpha90, - tickStroke: colorBlack, - tickStrokeOpacity: alpha45, - }, - label: { - fill: colorBlack, - fillOpacity: 0.65, - fontSize: 12, - fontWeight: 'normal', - stroke: undefined, - offset: 12, - connectorStroke: colorBlack, - connectorStrokeOpacity: 0.45, - connectorLineWidth: 1, - connectorLength: 12, - connectorLength2: 8, - connectorDistance: 4, - }, - innerLabel: { - fill: colorWhite, - fontSize: 12, - fillOpacity: 0.85, - fontWeight: 'normal', - stroke: undefined, - offset: 0, - }, - htmlLabel: { - fontSize: 12, - opacity: 0.65, - color: colorBlack, - fontWeight: 'normal', - }, - slider: { - trackSize: 16, - trackFill: colorStroke, - trackFillOpacity: 1, - selectionFill: colorDefault, - selectionFillOpacity: 0.15, - handleIconSize: 10, - handleIconFill: '#f7f7f7', - handleIconFillOpacity: 1, - handleIconStroke: colorBlack, - handleIconStrokeOpacity: 0.25, - handleIconLineWidth: 1, - handleIconRadius: 2, - handleLabelFill: colorBlack, - handleLabelFillOpacity: 0.45, - handleLabelFontSize: 12, - handleLabelFontWeight: 'normal', - }, - scrollbar: { - padding: [0, 0, 0, 0], - trackSize: 6, - isRound: true, - slidable: true, - scrollable: true, - trackFill: '#e5e5e5', - trackFillOpacity: 0, - thumbFill: '#000', - thumbFillOpacity: 0.15, - thumbHighlightedFillOpacity: 0.2, - }, - title: { - spacing: 8, - titleFill: colorBlack, - titleFillOpacity: alpha90, - titleFontSize: 16, - titleFontWeight: 'bold', - titleTextBaseline: 'top', - subtitleFill: colorBlack, - subtitleFillOpacity: alpha65, - subtitleFontSize: 12, - subtitleFontWeight: 'normal', - subtitleTextBaseline: 'top', - }, - tooltip: { - css: { - '.g2-tooltip': { - 'font-family': 'sans-serif', - }, - }, - }, - }; -} -exports.create = create; -//# sourceMappingURL=create.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816040, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ClassicDark = void 0; -const dark_1 = require("./dark"); -/** - * Dark theme. - */ -const ClassicDark = (options) => { - return Object.assign({}, (0, dark_1.Dark)(), { - category10: 'category10', - category20: 'category20', - }, options); -}; -exports.ClassicDark = ClassicDark; -exports.ClassicDark.props = {}; -//# sourceMappingURL=classicDark.js.map -}, function(modId) { var map = {"./dark":1751263816041}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816041, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Dark = exports.tokens = void 0; -const util_1 = require("@antv/util"); -const create_1 = require("./create"); -exports.tokens = { - colorBlack: '#fff', - colorWhite: '#000', - colorStroke: '#416180', - colorDefault: '#1783FF', - colorBackground: 'transparent', - category10: [ - '#1783FF', - '#00C9C9', - '#F0884D', - '#D580FF', - '#7863FF', - '#60C42D', - '#BD8F24', - '#FF80CA', - '#2491B3', - '#17C76F', - ], - category20: [ - '#1783FF', - '#00C9C9', - '#F0884D', - '#D580FF', - '#7863FF', - '#60C42D', - '#BD8F24', - '#FF80CA', - '#2491B3', - '#17C76F', - '#AABA01', - '#BC7CFC', - '#237CBC', - '#2DE379', - '#CE8032', - '#FF7AF4', - '#545FD3', - '#AFE410', - '#D8C608', - '#FFA1E0', - ], - padding1: 8, - padding2: 12, - padding3: 20, - alpha90: 0.9, - alpha65: 0.65, - alpha45: 0.45, - alpha25: 0.25, - alpha10: 0.25, -}; -const defaults = (0, create_1.create)(exports.tokens); -const Dark = (options) => { - return (0, util_1.deepMix)({}, defaults, { - tooltip: { - crosshairsStroke: '#fff', - crosshairsLineWidth: 1, - crosshairsStrokeOpacity: 0.25, - css: { - '.g2-tooltip': { - background: '#1f1f1f', - opacity: 0.95, - }, - '.g2-tooltip-title': { - color: '#A6A6A6', - }, - '.g2-tooltip-list-item-name-label': { - color: '#A6A6A6', - }, - '.g2-tooltip-list-item-value': { - color: '#A6A6A6', - }, - }, - }, - }, options); -}; -exports.Dark = Dark; -//# sourceMappingURL=dark.js.map -}, function(modId) { var map = {"./create":1751263816039}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816042, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Academy = exports.tokens = void 0; -const util_1 = require("@antv/util"); -const create_1 = require("./create"); -exports.tokens = { - colorBlack: '#000', - colorWhite: '#fff', - colorStroke: '#888', - colorDefault: '#4e79a7', - colorBackground: 'transparent', - category10: [ - '#4e79a7', - '#f28e2c', - '#e15759', - '#76b7b2', - '#59a14f', - '#edc949', - '#af7aa1', - '#ff9da7', - '#9c755f', - '#bab0ab', - ], - category20: [ - '#4e79a7', - '#f28e2c', - '#e15759', - '#76b7b2', - '#59a14f', - '#edc949', - '#af7aa1', - '#ff9da7', - '#9c755f', - '#bab0ab', - ], - padding1: 8, - padding2: 12, - padding3: 20, - alpha90: 0.9, - alpha65: 0.65, - alpha45: 0.45, - alpha25: 0.25, - alpha10: 0.1, -}; -const defaults = (0, create_1.create)(exports.tokens); -const Academy = (options) => { - return (0, util_1.deepMix)({}, defaults, { - text: { text: { fontSize: 10 } }, - axis: { - gridLineDash: [0, 0], - gridLineWidth: 1, - gridStroke: '#ddd', - gridStrokeOpacity: 1, - labelOpacity: 1, - labelStrokeOpacity: 1, - labelFontSize: 10, - line: true, - lineLineWidth: 1, - lineStroke: '#888', - lineStrokeOpacity: 1, - tickLength: 5, - tickStrokeOpacity: 1, - titleOpacity: 1, - titleStrokeOpacity: 1, - titleFillOpacity: 1, - titleFontSize: 11, - titleFontWeight: 'bold', - }, - axisLeft: { - gridFilter: (_, i) => i !== 0, - }, - axisRight: { - gridFilter: (_, i) => i !== 0, - }, - legendCategory: { - itemLabelFillOpacity: 1, - itemLabelFontSize: 10, - itemValueFillOpacity: 1, - itemValueFontSize: 10, - titleFillOpacity: 1, - titleFontSize: 11, - titleFontWeight: 'bold', - }, - legendContinuous: { - handleLabelFontSize: 10, - labelFillOpacity: 0.45, - labelFontSize: 10, - }, - label: { - fontSize: 10, - }, - innerLabel: { - fontSize: 10, - }, - htmlLabel: { - fontSize: 10, - }, - slider: { - handleLabelFontSize: 10, - trackFillOpacity: 0.05, - }, - }, options); -}; -exports.Academy = Academy; -exports.Academy.props = {}; -//# sourceMappingURL=academy.js.map -}, function(modId) { var map = {"./create":1751263816039}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816043, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Legends = exports.ScrollbarY = exports.ScrollbarX = exports.SliderY = exports.SliderX = exports.TitleComponent = exports.LegendContinuousSize = exports.LegendContinuousBlockSize = exports.LegendContinuousBlock = exports.LegendContinuous = exports.LegendCategory = exports.AxisRadar = exports.AxisY = exports.AxisX = exports.AxisArc = exports.AxisLinear = void 0; -var axis_1 = require("./axis"); -Object.defineProperty(exports, "AxisLinear", { enumerable: true, get: function () { return axis_1.LinearAxis; } }); -Object.defineProperty(exports, "AxisArc", { enumerable: true, get: function () { return axis_1.ArcAxis; } }); -var axisX_1 = require("./axisX"); -Object.defineProperty(exports, "AxisX", { enumerable: true, get: function () { return axisX_1.AxisX; } }); -var axisY_1 = require("./axisY"); -Object.defineProperty(exports, "AxisY", { enumerable: true, get: function () { return axisY_1.AxisY; } }); -var axisRadar_1 = require("./axisRadar"); -Object.defineProperty(exports, "AxisRadar", { enumerable: true, get: function () { return axisRadar_1.AxisRadar; } }); -var legendCategory_1 = require("./legendCategory"); -Object.defineProperty(exports, "LegendCategory", { enumerable: true, get: function () { return legendCategory_1.LegendCategory; } }); -var legendContinuous_1 = require("./legendContinuous"); -Object.defineProperty(exports, "LegendContinuous", { enumerable: true, get: function () { return legendContinuous_1.LegendContinuous; } }); -var legendContinuousBlock_1 = require("./legendContinuousBlock"); -Object.defineProperty(exports, "LegendContinuousBlock", { enumerable: true, get: function () { return legendContinuousBlock_1.LegendContinuousBlock; } }); -var legendContinuousBlockSize_1 = require("./legendContinuousBlockSize"); -Object.defineProperty(exports, "LegendContinuousBlockSize", { enumerable: true, get: function () { return legendContinuousBlockSize_1.LegendContinuousBlockSize; } }); -var legendContinuousSize_1 = require("./legendContinuousSize"); -Object.defineProperty(exports, "LegendContinuousSize", { enumerable: true, get: function () { return legendContinuousSize_1.LegendContinuousSize; } }); -var title_1 = require("./title"); -Object.defineProperty(exports, "TitleComponent", { enumerable: true, get: function () { return title_1.TitleComponent; } }); -var sliderX_1 = require("./sliderX"); -Object.defineProperty(exports, "SliderX", { enumerable: true, get: function () { return sliderX_1.SliderX; } }); -var sliderY_1 = require("./sliderY"); -Object.defineProperty(exports, "SliderY", { enumerable: true, get: function () { return sliderY_1.SliderY; } }); -var scrollbarX_1 = require("./scrollbarX"); -Object.defineProperty(exports, "ScrollbarX", { enumerable: true, get: function () { return scrollbarX_1.ScrollbarX; } }); -var scrollbarY_1 = require("./scrollbarY"); -Object.defineProperty(exports, "ScrollbarY", { enumerable: true, get: function () { return scrollbarY_1.ScrollbarY; } }); -var legends_1 = require("./legends"); -Object.defineProperty(exports, "Legends", { enumerable: true, get: function () { return legends_1.Legends; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./axis":1751263816044,"./axisX":1751263816046,"./axisY":1751263816047,"./axisRadar":1751263816048,"./legendCategory":1751263816049,"./legendContinuous":1751263816050,"./legendContinuousBlock":1751263816051,"./legendContinuousBlockSize":1751263816052,"./legendContinuousSize":1751263816053,"./title":1751263816054,"./sliderX":1751263816055,"./sliderY":1751263816058,"./scrollbarX":1751263816059,"./scrollbarY":1751263816061,"./legends":1751263816062}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816044, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ArcAxis = exports.LinearAxis = exports.rotateAxis = void 0; -const component_1 = require("@antv/component"); -const scale_1 = require("@antv/scale"); -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const coordinate_1 = require("../utils/coordinate"); -const number_1 = require("../utils/number"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -function rotateAxis(axis, options) { - const { eulerAngles, origin } = options; - if (origin) { - axis.setOrigin(origin); - } - if (eulerAngles) { - axis.rotate(eulerAngles[0], eulerAngles[1], eulerAngles[2]); - } -} -exports.rotateAxis = rotateAxis; -function sizeOf(coordinate) { - // @ts-ignore - const { innerWidth, innerHeight, depth } = coordinate.getOptions(); - return [innerWidth, innerHeight, depth]; -} -function createFisheye(position, coordinate) { - const { width, height } = coordinate.getOptions(); - return (tick) => { - if (!(0, coordinate_1.isFisheye)(coordinate)) - return tick; - const tickPoint = position === 'bottom' ? [tick, 1] : [0, tick]; - const vector = coordinate.map(tickPoint); - if (position === 'bottom') { - const v = vector[0]; - const x = new scale_1.Linear({ - domain: [0, width], - range: [0, 1], - }); - return x.map(v); - } - else if (position === 'left') { - const v = vector[1]; - const x = new scale_1.Linear({ - domain: [0, height], - range: [0, 1], - }); - return x.map(v); - } - return tick; - }; -} -function ticksOf(scale, domain, tickMethod) { - if (scale.getTicks) - return scale.getTicks(); - if (!tickMethod) - return domain; - const [min, max] = (0, d3_array_1.extent)(domain, (d) => +d); - const { tickCount } = scale.getOptions(); - return tickMethod(min, max, tickCount); -} -// Set inset for axis. -function createInset(position, coordinate) { - if ((0, coordinate_1.isPolar)(coordinate)) - return (d) => d; - const options = coordinate.getOptions(); - const { innerWidth, innerHeight, insetTop, insetBottom, insetLeft, insetRight, } = options; - const [start, end, size] = position === 'left' || position === 'right' - ? [insetTop, insetBottom, innerHeight] - : [insetLeft, insetRight, innerWidth]; - const x = new scale_1.Linear({ - domain: [0, 1], - range: [start / size, 1 - end / size], - }); - return (i) => x.map(i); -} -/** - * Calc ticks based on scale and coordinate. - */ -function getData(scale, domain, tickCount, defaultTickFormatter, tickFilter, tickMethod, position, coordinate) { - var _a; - if (tickCount !== undefined || tickMethod !== undefined) { - scale.update(Object.assign(Object.assign({}, (tickCount && { tickCount })), (tickMethod && { tickMethod }))); - } - const ticks = ticksOf(scale, domain, tickMethod); - const filteredTicks = tickFilter ? ticks.filter(tickFilter) : ticks; - const toString = (d) => d instanceof Date - ? String(d) - : typeof d === 'object' && !!d - ? d - : String(d); - const labelFormatter = defaultTickFormatter || ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || toString; - const applyInset = createInset(position, coordinate); - const applyFisheye = createFisheye(position, coordinate); - const isHorizontal = (position) => ['top', 'bottom', 'center', 'outer'].includes(position); - const isVertical = (position) => ['left', 'right'].includes(position); - // @todo GUI should consider the overlap problem for the first - // and label of arc axis. - if ((0, coordinate_1.isPolar)(coordinate) || (0, coordinate_1.isTranspose)(coordinate)) { - return filteredTicks.map((d, i, array) => { - var _a, _b; - const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0; - const tick = applyInset(scale.map(d) + offset); - const shouldReverse = ((0, coordinate_1.isRadial)(coordinate) && position === 'center') || - ((0, coordinate_1.isTranspose)(coordinate) && - ((_b = scale.getTicks) === null || _b === void 0 ? void 0 : _b.call(scale)) && - isHorizontal(position)) || - ((0, coordinate_1.isTranspose)(coordinate) && isVertical(position)); - return { - value: shouldReverse ? 1 - tick : tick, - label: toString(labelFormatter((0, number_1.prettyNumber)(d), i, array)), - id: String(i), - }; - }); - } - return filteredTicks.map((d, i, array) => { - var _a; - const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0; - const tick = applyFisheye(applyInset(scale.map(d) + offset)); - const shouldReverse = isVertical(position); - return { - value: shouldReverse ? 1 - tick : tick, - label: toString(labelFormatter((0, number_1.prettyNumber)(d), i, array)), - id: String(i), - }; - }); -} -function inferGridLength(position, coordinate, plane = 'xy') { - const [width, height, depth] = sizeOf(coordinate); - if (plane === 'xy') { - if (position.includes('bottom') || position.includes('top')) - return height; - return width; - } - else if (plane === 'xz') { - if (position.includes('bottom') || position.includes('top')) - return depth; - return width; - } - else { - if (position.includes('bottom') || position.includes('top')) - return height; - return depth; - } -} -function inferLabelOverlap(transform = [], style) { - if (transform.length > 0) - return transform; - const { labelAutoRotate, labelAutoHide, labelAutoEllipsis, labelAutoWrap } = style; - const finalTransforms = []; - const addToTransforms = (overlap, state) => { - if (state) { - finalTransforms.push(Object.assign(Object.assign({}, overlap), state)); - } - }; - addToTransforms({ - type: 'rotate', - optionalAngles: [0, 15, 30, 45, 60, 90], - }, labelAutoRotate); - addToTransforms({ type: 'ellipsis', minLength: 20 }, labelAutoEllipsis); - addToTransforms({ type: 'hide' }, labelAutoHide); - addToTransforms({ type: 'wrap', wordWrapWidth: 100, maxLines: 3, recoveryWhenFail: true }, labelAutoWrap); - return finalTransforms; -} -function inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate) { - const { x, y, width, height } = bbox; - const center = [x + width / 2, y + height / 2]; - const radius = Math.min(width, height) / 2; - const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate); - const [w, h] = sizeOf(coordinate); - const r = Math.min(w, h) / 2; - const common = { - center, - radius, - startAngle, - endAngle, - gridLength: (outerRadius - innerRadius) * r, - }; - if (position === 'inner') { - // @ts-ignore - const { insetLeft, insetTop } = coordinate.getOptions(); - return Object.assign(Object.assign({}, common), { center: [center[0] - insetLeft, center[1] - insetTop], labelAlign: 'perpendicular', labelDirection: 'positive', tickDirection: 'positive', gridDirection: 'negative' }); - } - // arc outer - return Object.assign(Object.assign({}, common), { labelAlign: 'parallel', labelDirection: 'negative', tickDirection: 'negative', gridDirection: 'positive' }); -} -function inferGrid(value, coordinate, scale) { - if ((0, coordinate_1.isTheta)(coordinate) || (0, coordinate_1.isParallel)(coordinate)) - return false; - // Display axis grid for non-discrete values. - return value === undefined ? !!scale.getTicks : value; -} -function infer3DAxisLinearOverrideStyle(coordinate) { - // @ts-ignore - const { depth } = coordinate.getOptions(); - return depth - ? { - tickIsBillboard: true, - lineIsBillboard: true, - labelIsBillboard: true, - titleIsBillboard: true, - gridIsBillboard: true, - } - : {}; -} -function inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale) { - const { x, y, width, height } = bbox; - if (position === 'bottom') { - return { startPos: [x, y], endPos: [x + width, y] }; - } - if (position === 'left') { - return { startPos: [x + width, y + height], endPos: [x + width, y] }; - } - if (position === 'right') { - return { startPos: [x, y + height], endPos: [x, y] }; - } - if (position === 'top') { - return { startPos: [x, y + height], endPos: [x + width, y + height] }; - } - // linear axis, maybe in parallel, polar, radial or radar systems. - if (position === 'center') { - // axisY - if (orientation === 'vertical') { - return { - startPos: [x, y], - endPos: [x, y + height], - }; - } - // axisX - else if (orientation === 'horizontal') { - return { - startPos: [x, y], - endPos: [x + width, y], - }; - } - // axis with rotate - else if (typeof orientation === 'number') { - const [cx, cy] = coordinate.getCenter(); - const [innerRadius, outerRadius] = (0, coordinate_1.radiusOf)(coordinate); - const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate); - const r = Math.min(width, height) / 2; - // @ts-ignore - const { insetLeft, insetTop } = coordinate.getOptions(); - const innerR = innerRadius * r; - const outerR = outerRadius * r; - const [actualCx, actualCy] = [cx + x - insetLeft, cy + y - insetTop]; - const [cos, sin] = [Math.cos(orientation), Math.sin(orientation)]; - const startPos = [ - actualCx + outerR * cos, - actualCy + outerR * sin, - ]; - const endPos = [ - actualCx + innerR * cos, - actualCy + innerR * sin, - ]; - const getAxisXDomainLength = () => { - const { domain } = xScale.getOptions(); - return domain.length; - }; - const controllAngleCount = (0, coordinate_1.isPolar)(coordinate) && xScale ? getAxisXDomainLength() : 3; - return { - startPos, - endPos, - gridClosed: Math.abs(endAngle - startAngle - 360) < 1e-6, - gridCenter: [actualCx, actualCy], - gridControlAngles: new Array(controllAngleCount) - .fill(0) - .map((d, i, arr) => ((endAngle - startAngle) / controllAngleCount) * i), - }; - } - } - // position is inner or outer for arc axis won't be here - return {}; -} -const ArcAxisComponent = (options) => { - const { order, size, position, orientation, labelFormatter, tickFilter, tickCount, tickMethod, important = {}, style = {}, indexBBox, title, grid = false } = options, rest = __rest(options, ["order", "size", "position", "orientation", "labelFormatter", "tickFilter", "tickCount", "tickMethod", "important", "style", "indexBBox", "title", "grid"]); - return ({ scales: [scale], value, coordinate, theme }) => { - const { bbox } = value; - const { domain } = scale.getOptions(); - const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate); - // Bind computed bbox if exists. - const labels = indexBBox - ? data.map((d, i) => { - const bbox = indexBBox.get(i); - if (!bbox) - return d; - // bbox: [label, bbox] - // Make than indexBBox can match current label. - if (bbox[0] !== d.label) - return d; - return Object.assign(Object.assign({}, d), { bbox: bbox[1] }); - }) - : data; - const [innerRadius, outerRadius] = (0, coordinate_1.radiusOf)(coordinate); - const defaultStyle = inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate); - const { axis: axisTheme, axisArc = {} } = theme; - const finalStyle = (0, utils_1.adaptor)((0, util_1.deepMix)({}, axisTheme, axisArc, defaultStyle, Object.assign(Object.assign({ type: 'arc', data: labels, titleText: (0, utils_1.titleContent)(title), grid }, rest), important))); - return new component_1.Axis({ - // @fixme transform is not valid for arcAxis. - // @ts-ignore - style: (0, util_1.omit)(finalStyle, ['transform']), - }); - }; -}; -function inferThemeStyle(scale, coordinate, theme, direction, position, orientation) { - const baseStyle = theme.axis; - const positionStyle = ['top', 'right', 'bottom', 'left'].includes(position) - ? theme[`axis${(0, helper_1.capitalizeFirst)(position)}`] - : theme.axisLinear; - const channel = scale.getOptions().name; - const channelStyle = theme[`axis${(0, util_1.upperFirst)(channel)}`] || {}; - return Object.assign({}, baseStyle, positionStyle, channelStyle); -} -function inferDefaultStyle(scale, coordinate, theme, direction, position, orientation) { - const themeStyle = inferThemeStyle(scale, coordinate, theme, direction, position, orientation); - if (position === 'center') { - return Object.assign(Object.assign(Object.assign(Object.assign({}, themeStyle), { labelDirection: direction === 'right' ? 'negative' : 'positive' }), (direction === 'center' - ? { labelTransform: 'translate(50%,0)' } - : null)), { tickDirection: direction === 'right' ? 'negative' : 'positive', labelSpacing: direction === 'center' ? 0 : 4, titleSpacing: (0, utils_1.isVertical)(orientation) ? 10 : 0, tick: direction === 'center' ? false : undefined }); - } - return themeStyle; -} -const LinearAxisComponent = (options) => { - const { direction = 'left', important = {}, labelFormatter, order, orientation, actualPosition, position, size, style = {}, title, tickCount, tickFilter, tickMethod, transform, indexBBox } = options, userDefinitions = __rest(options, ["direction", "important", "labelFormatter", "order", "orientation", "actualPosition", "position", "size", "style", "title", "tickCount", "tickFilter", "tickMethod", "transform", "indexBBox"]); - return ({ scales, value, coordinate, theme }) => { - const { bbox } = value; - const [scale] = scales; - const { domain, xScale } = scale.getOptions(); - const defaultStyle = inferDefaultStyle(scale, coordinate, theme, direction, position, orientation); - const internalAxisStyle = Object.assign(Object.assign(Object.assign({}, defaultStyle), style), userDefinitions); - const gridLength = inferGridLength(actualPosition || position, coordinate, options.plane); - const overrideStyle = inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale); - const threeDOverrideStyle = infer3DAxisLinearOverrideStyle(coordinate); - const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate); - // Bind computed bbox if exists. - const labels = indexBBox - ? data.map((d, i) => { - const bbox = indexBBox.get(i); - if (!bbox) - return d; - // bbox: [label, bbox] - // Make than indexBBox can match current label. - if (bbox[0] !== d.label) - return d; - return Object.assign(Object.assign({}, d), { bbox: bbox[1] }); - }) - : data; - const finalAxisStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalAxisStyle), { type: 'linear', data: labels, crossSize: size, titleText: (0, utils_1.titleContent)(title), labelOverlap: inferLabelOverlap(transform, internalAxisStyle), grid: inferGrid(internalAxisStyle.grid, coordinate, scale), gridLength, - // Always showLine, make title could align the end of axis. - line: true, indexBBox }), (!internalAxisStyle.line ? { lineOpacity: 0 } : null)), overrideStyle), threeDOverrideStyle), important); - // For hide overlap, do not set crossSize. - const hasHide = finalAxisStyle.labelOverlap.find((d) => d.type === 'hide'); - if (hasHide) - finalAxisStyle.crossSize = false; - return new component_1.Axis({ - className: 'axis', - style: (0, utils_1.adaptor)(finalAxisStyle), - }); - }; -}; -const axisFactor = (axis) => { - return (options) => { - const { labelFormatter: useDefinedLabelFormatter, labelFilter: userDefinedLabelFilter = () => true, } = options; - return (context) => { - var _a; - const { scales: [scale], } = context; - const ticks = ((_a = scale.getTicks) === null || _a === void 0 ? void 0 : _a.call(scale)) || scale.getOptions().domain; - const labelFormatter = typeof useDefinedLabelFormatter === 'string' - ? (0, d3_format_1.format)(useDefinedLabelFormatter) - : useDefinedLabelFormatter; - const labelFilter = (datum, index, array) => userDefinedLabelFilter(ticks[index], index, ticks); - const normalizedOptions = Object.assign(Object.assign({}, options), { labelFormatter, - labelFilter, - scale }); - return axis(normalizedOptions)(context); - }; - }; -}; -exports.LinearAxis = axisFactor(LinearAxisComponent); -exports.ArcAxis = axisFactor(ArcAxisComponent); -exports.LinearAxis.props = { - defaultPosition: 'center', - defaultSize: 45, - defaultOrder: 0, - defaultCrossPadding: [12, 12], - defaultPadding: [12, 12], -}; -exports.ArcAxis.props = { - defaultPosition: 'outer', - defaultOrientation: 'vertical', - defaultSize: 45, - defaultOrder: 0, - defaultCrossPadding: [12, 12], - defaultPadding: [12, 12], -}; -//# sourceMappingURL=axis.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../utils/number":1751263815884,"../utils/helper":1751263815829,"./utils":1751263816045}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816045, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.adaptor = exports.domainOf = exports.inferComponentShape = exports.isVertical = exports.isHorizontal = exports.scaleOf = exports.LegendCategoryLayout = exports.G2Layout = exports.inferComponentLayout = exports.titleContent = exports.maybeAppend = exports.createComponent = void 0; -const g_1 = require("@antv/g"); -const component_1 = require("@antv/component"); -const util_1 = require("@antv/util"); -const selection_1 = require("../utils/selection"); -function createComponent(descriptor) { - return class extends g_1.CustomElement { - constructor(config) { - super(config); - this.descriptor = descriptor; - } - connectedCallback() { - var _a, _b; - (_b = (_a = this.descriptor).render) === null || _b === void 0 ? void 0 : _b.call(_a, this.attributes, this); - } - update(cfg = {}) { - var _a, _b; - this.attr((0, util_1.deepMix)({}, this.attributes, cfg)); - (_b = (_a = this.descriptor).render) === null || _b === void 0 ? void 0 : _b.call(_a, this.attributes, this); - } - }; -} -exports.createComponent = createComponent; -function maybeAppend(parent, selector, node) { - if (!parent.querySelector(selector)) { - return (0, selection_1.select)(parent).append(node); - } - return (0, selection_1.select)(parent).select(selector); -} -exports.maybeAppend = maybeAppend; -function titleContent(field) { - return Array.isArray(field) ? field.join(', ') : `${field || ''}`; -} -exports.titleContent = titleContent; -function inferComponentLayout(position, userDefinitions) { - const preset = { - display: 'flex', - flexDirection: 'row', - justifyContent: 'flex-start', - alignItems: 'center', - }; - let { flexDirection, justifyContent, alignItems } = preset; - const layout = { - top: ['row', 'flex-start', 'center'], - bottom: ['row', 'flex-start', 'center'], - left: ['column', 'flex-start', 'center'], - right: ['column', 'flex-start', 'center'], - center: ['column', 'center', 'center'], - }; - if (position in layout) { - [flexDirection, justifyContent, alignItems] = layout[position]; - } - return Object.assign({ display: 'flex', flexDirection, - justifyContent, - alignItems }, userDefinitions); -} -exports.inferComponentLayout = inferComponentLayout; -class G2Layout extends component_1.Layout { - get child() { - var _a; - return (_a = this.children) === null || _a === void 0 ? void 0 : _a[0]; - } - update(options) { - var _a; - this.attr(options); - const { subOptions } = options; - (_a = this.child) === null || _a === void 0 ? void 0 : _a.update(subOptions); - } -} -exports.G2Layout = G2Layout; -class LegendCategoryLayout extends G2Layout { - update(options) { - var _a; - const { subOptions } = options; - this.attr(options); - (_a = this.child) === null || _a === void 0 ? void 0 : _a.update(subOptions); - } -} -exports.LegendCategoryLayout = LegendCategoryLayout; -function scaleOf(scales, type) { - var _a; - return (_a = scales.filter((s) => s.getOptions().name === type)) === null || _a === void 0 ? void 0 : _a[0]; -} -exports.scaleOf = scaleOf; -function isHorizontal(orientation) { - return orientation === 'horizontal' || orientation === 0; -} -exports.isHorizontal = isHorizontal; -function isVertical(orientation) { - return orientation === 'vertical' || orientation === -Math.PI / 2; -} -exports.isVertical = isVertical; -function inferComponentShape(value, options, component) { - const { bbox } = value; - const { position = 'top', size: userDefinedSize, length: userDefinedLength, } = options; - const isHorizontal = ['top', 'bottom', 'center'].includes(position); - const [bboxSize, bboxLength] = isHorizontal - ? [bbox.height, bbox.width] - : [bbox.width, bbox.height]; - const { defaultSize, defaultLength } = component.props; - const size = userDefinedSize || defaultSize || bboxSize; - const length = userDefinedLength || defaultLength || bboxLength; - const orientation = isHorizontal ? 'horizontal' : 'vertical'; - const [width, height] = isHorizontal ? [length, size] : [size, length]; - return { - orientation, - width, - height, - size, - length, - }; -} -exports.inferComponentShape = inferComponentShape; -function domainOf(scales) { - // to get a available scale's domain - return scales - .find((scale) => scale.getOptions().domain.length > 0) - .getOptions().domain; -} -exports.domainOf = domainOf; -function adaptor(style) { - const reservedKeys = [ - 'arrow', - 'crosshairs', - 'grid', - 'handle', - 'handleLabel', - 'indicator', - 'label', - 'line', - 'tick', - 'tip', - 'title', - 'trunc', - ]; - // @ts-ignore - const { style: styles } = style, rest = __rest(style, ["style"]); - const finalStyle = {}; - Object.entries(rest).forEach(([key, value]) => { - if (reservedKeys.includes(key)) { - finalStyle[`show${(0, util_1.upperFirst)(key)}`] = value; - } - else - finalStyle[key] = value; - }); - return Object.assign(Object.assign({}, finalStyle), styles); -} -exports.adaptor = adaptor; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {"../utils/selection":1751263815883}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816046, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.axisXConfig = exports.AxisX = void 0; -const axis_1 = require("./axis"); -/** - * LinearAxis component bind to x scale. - */ -const AxisX = (options) => { - return (...args) => { - // empirical value for crossPadding - const axisX = (0, axis_1.LinearAxis)(Object.assign({}, { crossPadding: 50 }, options))(...args); - (0, axis_1.rotateAxis)(axisX, options); - return axisX; - }; -}; -exports.AxisX = AxisX; -exports.AxisX.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'bottom' }); -function axisXConfig() { } -exports.axisXConfig = axisXConfig; -//# sourceMappingURL=axisX.js.map -}, function(modId) { var map = {"./axis":1751263816044}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816047, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AxisY = void 0; -const axis_1 = require("./axis"); -/** - * LinearAxis component bind to y scale. - */ -const AxisY = (options) => { - return (...args) => { - const axisY = (0, axis_1.LinearAxis)(Object.assign({}, { crossPadding: 10 }, options))(...args); - (0, axis_1.rotateAxis)(axisY, options); - return axisY; - }; -}; -exports.AxisY = AxisY; -exports.AxisY.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'left' }); -//# sourceMappingURL=axisY.js.map -}, function(modId) { var map = {"./axis":1751263816044}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816048, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AxisRadar = void 0; -const coordinate_1 = require("../utils/coordinate"); -const axis_1 = require("./axis"); -function inferTitleTransform(orientation) { - const internalOrientation = orientation % (Math.PI * 2); - if (internalOrientation === Math.PI / 2) { - return { titleTransform: 'translate(0, 50%)' }; - } - if (internalOrientation > -Math.PI / 2 && internalOrientation < Math.PI / 2) { - return { titleTransform: 'translate(50%, 0)' }; - } - if (internalOrientation > Math.PI / 2 && - internalOrientation < (Math.PI * 3) / 2) { - return { titleTransform: 'translate(-50%, 0)' }; - } - return {}; -} -function inferAxisStyle(options, theme, coordinate, scales) { - const { radar } = options; - const [scale] = scales; - const name = scale.getOptions().name; - const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate); - const { axisRadar: radarTheme = {} } = theme; - return Object.assign(Object.assign({}, radarTheme), { grid: name === 'position', gridConnect: 'line', gridControlAngles: new Array(radar.count).fill(0).map((_, i) => { - const angle = (endAngle - startAngle) / radar.count; - return angle * i; - }) }); -} -const AxisRadar = (options) => { - const { important = {} } = options, restOptions = __rest(options, ["important"]); - return (context) => { - const { theme, coordinate, scales } = context; - return (0, axis_1.LinearAxis)(Object.assign(Object.assign(Object.assign({}, restOptions), inferTitleTransform(options.orientation)), { important: Object.assign(Object.assign({}, inferAxisStyle(options, theme, coordinate, scales)), important) }))(context); - }; -}; -exports.AxisRadar = AxisRadar; -exports.AxisRadar.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'center' }); -//# sourceMappingURL=axisRadar.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"./axis":1751263816044}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816049, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendCategory = void 0; -const component_1 = require("@antv/component"); -const util_1 = require("@antv/util"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const scale_1 = require("@antv/scale"); -const marker_1 = require("../utils/marker"); -const utils_1 = require("./utils"); -function inferShape(scales, markState) { - const shapeScale = (0, utils_1.scaleOf)(scales, 'shape'); - const colorScale = (0, utils_1.scaleOf)(scales, 'color'); - // NOTE!!! - // scaleOrdinal.map will mute domain. - const shapeScale1 = shapeScale ? shapeScale.clone() : null; - // Infer the main shape if multiple marks are used. - const shapes = []; - for (const [mark, state] of markState) { - const namespace = mark.type; - const domain = (colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain.length) > 0 - ? colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain - : state.data; - const shape = domain.map((d, i) => { - var _a; - if (shapeScale1) - return shapeScale1.map(d || 'point'); - return ((_a = mark === null || mark === void 0 ? void 0 : mark.style) === null || _a === void 0 ? void 0 : _a.shape) || state.defaultShape || 'point'; - }); - if (typeof namespace === 'string') - shapes.push([namespace, shape]); - } - if (shapes.length === 0) - return ['point', ['point']]; - if (shapes.length === 1) - return shapes[0]; - if (!shapeScale) - return shapes[0]; - // Evaluate the maximum likelihood of shape - const { range } = shapeScale.getOptions(); - return shapes - .map(([namespace, shape]) => { - let sum = 0; - for (let i = 0; i < shapes.length; i++) { - const targetShape = range[i % range.length]; - if (shape[i] === targetShape) - sum++; - } - return [sum / shape.length, [namespace, shape]]; - }) - .sort((a, b) => b[0] - a[0])[0][1]; -} -function inferItemMarker(options, context) { - const { scales, library, markState } = context; - const [mark, shapes] = inferShape(scales, markState); - const { itemMarker, itemMarkerSize: size } = options; - const create = (name, d) => { - var _a, _b, _c; - const marker = ((_c = (_b = (_a = library[`mark.${mark}`]) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.shape[name]) === null || _c === void 0 ? void 0 : _c.props.defaultMarker) || (0, util_1.last)(name.split('.')); - const radius = typeof size === 'function' ? size(d) : size; - return () => (0, marker_1.useMarker)(marker, { color: d.color })(0, 0, radius); - }; - const shapeOf = (i) => `${shapes[i]}`; - const shapeScale = (0, utils_1.scaleOf)(scales, 'shape'); - if (shapeScale && !itemMarker) - return (d, i) => create(shapeOf(i), d); - if (typeof itemMarker === 'function') { - return (d, i) => { - // @todo Fix this in GUI. - // It should pass primitive value rather object. - const node = itemMarker(d.id, i); - if (typeof node === 'string') - return create(node, d); - return node; - }; - } - return (d, i) => create(itemMarker || shapeOf(i), d); -} -function inferItemMarkerOpacity(scales) { - const scale = (0, utils_1.scaleOf)(scales, 'opacity'); - if (scale) { - const { range } = scale.getOptions(); - return (d, i) => range[i]; - } - return undefined; -} -function inferItemMarkerSize(scales, defaults) { - const scale = (0, utils_1.scaleOf)(scales, 'size'); - if (scale instanceof scale_1.Identity) - return scale.map(NaN) * 2; - return defaults; -} -function inferCategoryStyle(options, context) { - const { labelFormatter = (d) => `${d}` } = options; - const { scales, theme } = context; - const defaultSize = theme.legendCategory.itemMarkerSize; - const itemMarkerSize = inferItemMarkerSize(scales, defaultSize); - const baseStyle = { - itemMarker: inferItemMarker(Object.assign(Object.assign({}, options), { itemMarkerSize }), context), - itemMarkerSize: itemMarkerSize, - itemMarkerOpacity: inferItemMarkerOpacity(scales), - }; - const finalLabelFormatter = typeof labelFormatter === 'string' - ? (0, d3_format_1.format)(labelFormatter) - : labelFormatter; - const colorScale = (0, utils_1.scaleOf)(scales, 'color'); - const domain = (0, utils_1.domainOf)(scales); - const colorOf = colorScale - ? (d) => colorScale.map(d) - : () => context.theme.color; - return Object.assign(Object.assign({}, baseStyle), { data: domain.map((d) => ({ - id: d, - label: finalLabelFormatter(d), - color: colorOf(d), - })) }); -} -function inferLegendShape(value, options, component) { - const { position } = options; - if (position === 'center') { - const { bbox } = value; - // to be confirm: if position is center, we should use the width and height of user definition. - const { width, height } = bbox; - return { width, height }; - } - const { width, height } = (0, utils_1.inferComponentShape)(value, options, component); - return { width, height }; -} -function filterEmptyIds(legendStyle) { - return Object.assign(Object.assign({}, legendStyle), { data: (legendStyle === null || legendStyle === void 0 ? void 0 : legendStyle.data.filter((item) => item.id !== '')) || [] }); -} -/** - * Guide Component for ordinal color scale. - */ -const LegendCategory = (options) => { - const { labelFormatter, layout, order, orientation, position, size, title, cols, itemMarker } = options, style = __rest(options, ["labelFormatter", "layout", "order", "orientation", "position", "size", "title", "cols", "itemMarker"]); - const { gridRow } = style; - return (context) => { - const { value, theme } = context; - const { bbox } = value; - const { width, height } = inferLegendShape(value, options, exports.LegendCategory); - const finalLayout = (0, utils_1.inferComponentLayout)(position, layout); - const legendStyle = Object.assign(Object.assign(Object.assign(Object.assign({ orientation: ['right', 'left', 'center'].includes(position) - ? 'vertical' - : 'horizontal', width, - height, layout: cols !== undefined ? 'grid' : 'flex' }, (cols !== undefined && { gridCol: cols })), (gridRow !== undefined && { gridRow })), { titleText: (0, utils_1.titleContent)(title) }), inferCategoryStyle(options, context)); - const { legendCategory: legendTheme = {} } = theme; - // Filter out the data items with empty string IDs in the wordCloud's data before generating the legend. - const categoryStyle = (0, utils_1.adaptor)(Object.assign({}, legendTheme, filterEmptyIds(legendStyle), style)); - const layoutWrapper = new utils_1.LegendCategoryLayout({ - style: Object.assign(Object.assign({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }, finalLayout), { - // @ts-ignore - subOptions: categoryStyle }), - }); - layoutWrapper.appendChild(new component_1.Category({ - className: 'legend-category', - style: categoryStyle, - })); - return layoutWrapper; - }; -}; -exports.LegendCategory = LegendCategory; -exports.LegendCategory.props = { - defaultPosition: 'top', - defaultOrder: 1, - defaultSize: 40, - defaultCrossPadding: [12, 12], - defaultPadding: [12, 12], -}; -//# sourceMappingURL=legendCategory.js.map -}, function(modId) { var map = {"../utils/marker":1751263815899,"./utils":1751263816045}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816050, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendContinuous = void 0; -const g_1 = require("@antv/g"); -const component_1 = require("@antv/component"); -const scale_1 = require("@antv/scale"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const array_1 = require("../utils/array"); -const utils_1 = require("./utils"); -function updateShapeDimensions(shape, finalSize, orientation) { - shape.size = finalSize; - if ((0, utils_1.isHorizontal)(orientation)) { - shape.height = finalSize; - } - else { - shape.width = finalSize; - } - return shape; -} -function inferContinuousShape(value, options, component) { - const { size } = options; - const shape = (0, utils_1.inferComponentShape)(value, options, component); - return updateShapeDimensions(shape, size, shape.orientation); -} -function getFormatter(max) { - return (value) => ({ - value: value / max, - label: String(value), - }); -} -function getQuantizeOrQuantileConfig(shape, colorScale, min, max, range) { - const thresholds = colorScale.thresholds; - const formatter = getFormatter(max); - return Object.assign(Object.assign({}, shape), { color: range, data: [min, ...thresholds, max].map(formatter) }); -} -function getThresholdConfig(shape, colorScale, range) { - const thresholds = colorScale.thresholds; - const data = [-Infinity, ...thresholds, Infinity].map((value, index) => ({ - value: index, - label: value, - })); - return Object.assign(Object.assign({}, shape), { data, color: range, labelFilter: (datum, index) => { - return index > 0 && index < data.length - 1; - } }); -} -function rangeOf(scale) { - const { domain } = scale.getOptions(); - const [min, max] = [domain[0], (0, array_1.lastOf)(domain)]; - return [min, max]; -} -/** - * if color scale is not defined, create a constant color scale based on default color - * @param scale - * @param theme - */ -function createColorScale(scale, defaultColor) { - const options = scale.getOptions(); - const newScale = scale.clone(); - newScale.update(Object.assign(Object.assign({}, options), { range: [(0, g_1.parseColor)(defaultColor).toString()] })); - return newScale; -} -function getLinearConfig(shape, colorScale, sizeScale, opacityScale, scales, theme) { - const { length } = shape; - const definedScale = sizeScale || opacityScale; - // Only use defaultColor when there is no color scale - // in this view. - const defaultColor = scales.color - ? theme.legendContinuous.ribbonFill || 'black' - : theme.color; - const scale = colorScale || createColorScale(definedScale, defaultColor); - const [min, max] = rangeOf(scale); - const [domainMin, domainMax] = rangeOf([colorScale, sizeScale, opacityScale] - .filter((d) => d !== undefined) - .find((d) => !(d instanceof scale_1.Constant))); - return Object.assign(Object.assign({}, shape), { domain: [domainMin, domainMax], data: scale.getTicks().map((value) => ({ value })), color: new Array(Math.floor(length)).fill(0).map((d, i) => { - const value = ((max - min) / (length - 1)) * i + min; - const color = scale.map(value) || defaultColor; - const opacity = opacityScale ? opacityScale.map(value) : 1; - return color.replace(/rgb[a]*\(([\d]{1,3}) *, *([\d]{1,3}) *, *([\d]{1,3})[\S\s]*\)/, (match, p1, p2, p3) => `rgba(${p1}, ${p2}, ${p3}, ${opacity})`); - }) }); -} -function inferContinuousConfig(scales, scale, value, options, component, theme) { - const colorScale = (0, utils_1.scaleOf)(scales, 'color'); - const shape = inferContinuousShape(value, options, component); - if (colorScale instanceof scale_1.Threshold) { - const { range } = colorScale.getOptions(); - const [min, max] = rangeOf(colorScale); - // for quantize, quantile scale - if (colorScale instanceof scale_1.Quantize || colorScale instanceof scale_1.Quantile) { - return getQuantizeOrQuantileConfig(shape, colorScale, min, max, range); - } - // for threshold - return getThresholdConfig(shape, colorScale, range); - } - // for linear, pow, sqrt, log, time, utc scale - const sizeScale = (0, utils_1.scaleOf)(scales, 'size'); - const opacityScale = (0, utils_1.scaleOf)(scales, 'opacity'); - return getLinearConfig(shape, colorScale, sizeScale, opacityScale, scale, theme); -} -/** - * Guide Component for continuous color scale. - * @todo Custom style. - */ -const LegendContinuous = (options) => { - const { labelFormatter, layout, order, orientation, position, size, title, style, crossPadding, padding } = options, rest = __rest(options, ["labelFormatter", "layout", "order", "orientation", "position", "size", "title", "style", "crossPadding", "padding"]); - return ({ scales, value, theme, scale }) => { - const { bbox } = value; - const { x, y, width, height } = bbox; - const finalLayout = (0, utils_1.inferComponentLayout)(position, layout); - const { legendContinuous: legendTheme = {} } = theme; - const finalStyle = (0, utils_1.adaptor)(Object.assign({}, legendTheme, Object.assign(Object.assign({ titleText: (0, utils_1.titleContent)(title), labelAlign: 'value', labelFormatter: typeof labelFormatter === 'string' - ? (d) => (0, d3_format_1.format)(labelFormatter)(d.label) - : labelFormatter }, inferContinuousConfig(scales, scale, value, options, exports.LegendContinuous, theme)), style), rest)); - const layoutWrapper = new utils_1.G2Layout({ - style: Object.assign(Object.assign({ x, - y, - width, - height }, finalLayout), { - // @ts-ignore - subOptions: finalStyle }), - }); - layoutWrapper.appendChild(new component_1.Continuous({ - className: 'legend-continuous', - style: finalStyle, - })); - return layoutWrapper; - }; -}; -exports.LegendContinuous = LegendContinuous; -exports.LegendContinuous.props = { - defaultPosition: 'top', - defaultOrientation: 'vertical', - defaultOrder: 1, - defaultSize: 60, - defaultLength: 200, - defaultLegendSize: 60, - defaultPadding: [20, 10], - defaultCrossPadding: [12, 12], // [horizontal, vertical] -}; -//# sourceMappingURL=legendContinuous.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"./utils":1751263816045}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816051, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendContinuousBlock = void 0; -const legendContinuous_1 = require("./legendContinuous"); -const LegendContinuousBlock = (options) => { - return (...args) => (0, legendContinuous_1.LegendContinuous)(Object.assign({}, { block: true }, options))(...args); -}; -exports.LegendContinuousBlock = LegendContinuousBlock; -exports.LegendContinuousBlock.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' }); -//# sourceMappingURL=legendContinuousBlock.js.map -}, function(modId) { var map = {"./legendContinuous":1751263816050}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816052, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendContinuousBlockSize = void 0; -const legendContinuous_1 = require("./legendContinuous"); -const legendContinuousSize_1 = require("./legendContinuousSize"); -const LegendContinuousBlockSize = (options) => { - return (0, legendContinuousSize_1.LegendContinuousSize)(Object.assign({}, { block: true }, options)); -}; -exports.LegendContinuousBlockSize = LegendContinuousBlockSize; -exports.LegendContinuousBlockSize.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' }); -//# sourceMappingURL=legendContinuousBlockSize.js.map -}, function(modId) { var map = {"./legendContinuous":1751263816050,"./legendContinuousSize":1751263816053}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816053, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendContinuousSize = void 0; -const utils_1 = require("./utils"); -const legendContinuous_1 = require("./legendContinuous"); -const LegendContinuousSize = (options) => { - return (context) => { - const { scales } = context; - const sizeScale = (0, utils_1.scaleOf)(scales, 'size'); - return (0, legendContinuous_1.LegendContinuous)(Object.assign({}, { - type: 'size', - data: sizeScale.getTicks().map((value, index) => ({ - value, - label: String(value), - })), - }, options))(context); - }; -}; -exports.LegendContinuousSize = LegendContinuousSize; -exports.LegendContinuousSize.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' }); -//# sourceMappingURL=legendContinuousSize.js.map -}, function(modId) { var map = {"./utils":1751263816045,"./legendContinuous":1751263816050}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816054, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TitleComponent = void 0; -const util_1 = require("@antv/util"); -const utils_1 = require("../shape/utils"); -const helper_1 = require("../utils/helper"); -const utils_2 = require("./utils"); -function inferStyleByAlign(x, y, width, align) { - switch (align) { - case 'center': - return { - x: x + width / 2, - y, - textAlign: 'middle', - }; - case 'right': - return { - x: x + width, - y, - textAlign: 'right', - }; - default: - return { - x, - y, - textAlign: 'left', - }; - } -} -const Title = (0, utils_2.createComponent)({ - render(attributes, container) { - const { width, title, subtitle, spacing = 2, align = 'left', x, y } = attributes, style = __rest(attributes, ["width", "title", "subtitle", "spacing", "align", "x", "y"]); - container.style.transform = `translate(${x}, ${y})`; - const titleStyle = (0, helper_1.subObject)(style, 'title'); - const subtitleStyle = (0, helper_1.subObject)(style, 'subtitle'); - const mainTitle = (0, utils_2.maybeAppend)(container, '.title', 'text') - .attr('className', 'title') - .call(utils_1.applyStyle, Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, 0, width, align)), { fontSize: 14, textBaseline: 'top', text: title }), titleStyle)) - .node(); - const bounds = mainTitle.getLocalBounds(); - (0, utils_2.maybeAppend)(container, '.sub-title', 'text') - .attr('className', 'sub-title') - .call((selection) => { - if (!subtitle) - return selection.node().remove(); - selection.node().attr(Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, bounds.max[1] + spacing, width, align)), { fontSize: 12, textBaseline: 'top', text: subtitle }), subtitleStyle)); - }); - }, -}); -/** - * Title Component. - */ -const TitleComponent = (options) => { - return ({ value, theme }) => { - const { x, y, width, height } = value.bbox; - return new Title({ - style: (0, util_1.deepMix)({}, theme.title, Object.assign({ x, - y, - width, - height }, options)), - }); - }; -}; -exports.TitleComponent = TitleComponent; -exports.TitleComponent.props = { - defaultPosition: 'top', - defaultOrder: 2, - defaultSize: 36, - defaultCrossPadding: [20, 20], - defaultPadding: [12, 12], -}; -//# sourceMappingURL=title.js.map -}, function(modId) { var map = {"../shape/utils":1751263815885,"../utils/helper":1751263815829,"./utils":1751263816045}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816055, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SliderX = void 0; -const slider_1 = require("./slider"); -/** - * SliderX component. - */ -const SliderX = (options) => { - return (0, slider_1.Slider)(Object.assign(Object.assign({}, options), { orientation: 'horizontal' })); -}; -exports.SliderX = SliderX; -exports.SliderX.props = Object.assign(Object.assign({}, slider_1.Slider.props), { defaultPosition: 'bottom' }); -//# sourceMappingURL=sliderX.js.map -}, function(modId) { var map = {"./slider":1751263816056}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816056, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Slider = void 0; -const component_1 = require("@antv/component"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const util_1 = require("@antv/util"); -const coordinate_1 = require("../utils/coordinate"); -const scale_1 = require("../utils/scale"); -function inferPosition(bbox, position, trackSize) { - const { x, y, width, height } = bbox; - if (position === 'left') - return [x + width - trackSize, y]; - if (position === 'right') - return [x, y]; - if (position === 'bottom') - return [x, y]; - if (position === 'top') - return [x, y + height - trackSize]; -} -/** - * Slider component. - */ -const Slider = (options) => { - // do not pass size. - const { orientation, labelFormatter, size, style = {}, position } = options, rest = __rest(options, ["orientation", "labelFormatter", "size", "style", "position"]); - return (context) => { - var _a; - const { scales: [scale], value, theme, coordinate, } = context; - const { bbox } = value; - const { width, height } = bbox; - const { slider: sliderTheme = {} } = theme; - const defaultFormatter = ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || ((v) => v + ''); - const formatter = typeof labelFormatter === 'string' - ? (0, d3_format_1.format)(labelFormatter) - : labelFormatter; - const isHorizontal = orientation === 'horizontal'; - const reverse = (0, coordinate_1.isTranspose)(coordinate) && isHorizontal; - const { trackSize = sliderTheme.trackSize } = style; - const [x0, y0] = inferPosition(bbox, position, trackSize); - return new component_1.Slider({ - className: 'slider', - style: Object.assign({}, sliderTheme, Object.assign(Object.assign({ x: x0, y: y0, trackLength: isHorizontal ? width : height, orientation, formatter: (v) => { - const f = formatter || defaultFormatter; - const v1 = reverse ? 1 - v : v; - const tick = (0, scale_1.invert)(scale, v1, true); - return f(tick); - }, sparklineData: inferSparklineData(options, context) }, style), rest)), - }); - }; -}; -exports.Slider = Slider; -function markValue(markState, channels) { - const [value] = Array.from(markState.entries()) - .filter(([mark]) => mark.type === 'line' || mark.type === 'area') - .filter(([mark]) => mark.slider) - .map(([mark]) => { - const { encode, slider } = mark; - if (slider === null || slider === void 0 ? void 0 : slider.x) { - const channel = (name) => { - const channel = encode[name]; - return [name, channel ? channel.value : undefined]; - }; - return Object.fromEntries(channels.map(channel)); - } - }); - if (!(value === null || value === void 0 ? void 0 : value.series)) - return value === null || value === void 0 ? void 0 : value.y; - const result = value.series.reduce((acc, curr, index) => { - acc[curr] = acc[curr] || []; - acc[curr].push(value.y[index]); - return acc; - }, {}); - return Object.values(result); -} -function inferSparklineData(options, context) { - const { markState } = context; - if ((0, util_1.isArray)(options.sparklineData)) - return options.sparklineData; - return markValue(markState, ['y', 'series']); -} -exports.Slider.props = { - defaultPosition: 'bottom', - defaultSize: 24, - defaultOrder: 1, - defaultCrossPadding: [12, 12], - defaultPadding: [12, 12], -}; -//# sourceMappingURL=slider.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../utils/scale":1751263816057}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816057, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.pixelsOf = exports.abstractOf = exports.selectionOf = exports.domainOf = exports.invert = exports.isOrdinalScale = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -function constrain(x, lo, hi) { - return Math.min(hi, Math.max(lo, x)); -} -function isOrdinalScale(scale) { - return !!scale.getBandWidth; -} -exports.isOrdinalScale = isOrdinalScale; -function invert(scale, x, start) { - if (!isOrdinalScale(scale)) - return scale.invert(x); - const { adjustedRange } = scale; - const { domain } = scale.getOptions(); - const offset = start ? -1 : 0; - const step = scale.getStep(); - const range = start ? adjustedRange : adjustedRange.map((d) => d + step); - // R[i0 - 1] < x <= R[i0] - const i0 = (0, d3_array_1.bisectLeft)(range, x); - const i1 = constrain(i0 + offset, 0, domain.length - 1); - return domain[i1]; -} -exports.invert = invert; -function domainOf(scale, values, ratioX) { - if (!values) - return scale.getOptions().domain; - if (!isOrdinalScale(scale)) { - const sortedDomain = (0, d3_array_1.sort)(values); - if (!ratioX) - return sortedDomain; - const [d] = sortedDomain; - const { range } = scale.getOptions(); - const [r0, r1] = range; - const v = r0 > r1 ? -1 : 1; - const d1 = scale.invert(scale.map(d) + v * ratioX); - return [d, d1]; - } - const { domain } = scale.getOptions(); - const v1 = values[0]; - const start = domain.indexOf(v1); - if (ratioX) { - const end = start + Math.round(domain.length * ratioX); - return domain.slice(start, end); - } - const v2 = values[values.length - 1]; - const end = domain.indexOf(v2); - return domain.slice(start, end + 1); -} -exports.domainOf = domainOf; -function selectionOf(x, y, x1, y1, scale, coordinate) { - const { x: scaleX, y: scaleY } = scale; - const abstractDomain = (point, start) => { - const [x, y] = coordinate.invert(point); - return [invert(scaleX, x, start), invert(scaleY, y, start)]; - }; - const p0 = abstractDomain([x, y], true); - const p1 = abstractDomain([x1, y1], false); - const domainX = domainOf(scaleX, [p0[0], p1[0]]); - const domainY = domainOf(scaleY, [p0[1], p1[1]]); - return [domainX, domainY]; -} -exports.selectionOf = selectionOf; -function abstractOf(domain, scale) { - const [d0, d1] = domain; - const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0); - return [scale.map(d0), scale.map(d1) + maybeStep(scale)]; -} -exports.abstractOf = abstractOf; -function pixelsOf(selection, scale, coordinate) { - const { x: scaleX, y: scaleY } = scale; - const [X, Y] = selection; - const AX = abstractOf(X, scaleX); - const AY = abstractOf(Y, scaleY); - const p0 = [AX[0], AY[0]]; - const p1 = [AX[1], AY[1]]; - const [x, y] = coordinate.map(p0); - const [x1, y1] = coordinate.map(p1); - return [x, y, x1, y1]; -} -exports.pixelsOf = pixelsOf; -//# sourceMappingURL=scale.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816058, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SliderY = void 0; -const slider_1 = require("./slider"); -/** - * SliderY component. - */ -const SliderY = (options) => { - return (0, slider_1.Slider)(Object.assign(Object.assign({}, options), { orientation: 'vertical' })); -}; -exports.SliderY = SliderY; -exports.SliderY.props = Object.assign(Object.assign({}, slider_1.Slider.props), { defaultPosition: 'left' }); -//# sourceMappingURL=sliderY.js.map -}, function(modId) { var map = {"./slider":1751263816056}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816059, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScrollbarX = void 0; -const scrollbar_1 = require("./scrollbar"); -/** - * ScrollbarX component. - */ -const ScrollbarX = (options) => { - return (0, scrollbar_1.Scrollbar)(Object.assign(Object.assign({}, options), { orientation: 'horizontal' })); -}; -exports.ScrollbarX = ScrollbarX; -exports.ScrollbarX.props = Object.assign(Object.assign({}, scrollbar_1.Scrollbar.props), { defaultPosition: 'bottom' }); -//# sourceMappingURL=scrollbarX.js.map -}, function(modId) { var map = {"./scrollbar":1751263816060}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816060, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Scrollbar = void 0; -const component_1 = require("@antv/component"); -/** - * Scrollbar component. - */ -const Scrollbar = (options) => { - const { orientation, labelFormatter, style } = options, rest = __rest(options, ["orientation", "labelFormatter", "style"]); - return ({ scales: [scale], value, theme }) => { - const { bbox } = value; - const { x, y, width, height } = bbox; - const { scrollbar: scrollbarTheme = {} } = theme; - const { ratio, range } = scale.getOptions(); - const mainSize = orientation === 'horizontal' ? width : height; - const actualSize = mainSize / ratio; - const [r0, r1] = range; - const value1 = r1 > r0 ? 0 : 1; - return new component_1.Scrollbar({ - className: 'g2-scrollbar', - style: Object.assign({}, scrollbarTheme, Object.assign(Object.assign(Object.assign(Object.assign({}, style), { x, - y, trackLength: mainSize, value: value1 }), rest), { orientation, contentLength: actualSize, viewportLength: mainSize })), - }); - }; -}; -exports.Scrollbar = Scrollbar; -exports.Scrollbar.props = { - defaultPosition: 'bottom', - defaultSize: 24, - defaultOrder: 1, - defaultCrossPadding: [12, 12], - defaultPadding: [12, 12], -}; -//# sourceMappingURL=scrollbar.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816061, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScrollbarY = void 0; -const scrollbar_1 = require("./scrollbar"); -/** - * ScrollbarY component. - */ -const ScrollbarY = (options) => { - return (0, scrollbar_1.Scrollbar)(Object.assign(Object.assign({}, options), { orientation: 'vertical' })); -}; -exports.ScrollbarY = ScrollbarY; -exports.ScrollbarY.props = Object.assign(Object.assign({}, scrollbar_1.Scrollbar.props), { defaultPosition: 'left' }); -//# sourceMappingURL=scrollbarY.js.map -}, function(modId) { var map = {"./scrollbar":1751263816060}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816062, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Legends = void 0; -const g_1 = require("@antv/g"); -// A empty component to pass parse view tree stage. -const Legends = (options) => { - return () => { - return new g_1.Group(); - }; -}; -exports.Legends = Legends; -exports.Legends.props = {}; -//# sourceMappingURL=legends.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816063, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GrowInY = exports.GrowInX = exports.PathIn = exports.ZoomOut = exports.ZoomIn = exports.WaveIn = exports.Morphing = exports.FadeOut = exports.FadeIn = exports.ScaleOutY = exports.ScaleInY = exports.ScaleOutX = exports.ScaleInX = void 0; -var scaleInX_1 = require("./scaleInX"); -Object.defineProperty(exports, "ScaleInX", { enumerable: true, get: function () { return scaleInX_1.ScaleInX; } }); -var scaleOutX_1 = require("./scaleOutX"); -Object.defineProperty(exports, "ScaleOutX", { enumerable: true, get: function () { return scaleOutX_1.ScaleOutX; } }); -var scaleInY_1 = require("./scaleInY"); -Object.defineProperty(exports, "ScaleInY", { enumerable: true, get: function () { return scaleInY_1.ScaleInY; } }); -var scaleOutY_1 = require("./scaleOutY"); -Object.defineProperty(exports, "ScaleOutY", { enumerable: true, get: function () { return scaleOutY_1.ScaleOutY; } }); -var fadeIn_1 = require("./fadeIn"); -Object.defineProperty(exports, "FadeIn", { enumerable: true, get: function () { return fadeIn_1.FadeIn; } }); -var fadeOut_1 = require("./fadeOut"); -Object.defineProperty(exports, "FadeOut", { enumerable: true, get: function () { return fadeOut_1.FadeOut; } }); -var morphing_1 = require("./morphing"); -Object.defineProperty(exports, "Morphing", { enumerable: true, get: function () { return morphing_1.Morphing; } }); -var waveIn_1 = require("./waveIn"); -Object.defineProperty(exports, "WaveIn", { enumerable: true, get: function () { return waveIn_1.WaveIn; } }); -var zoomIn_1 = require("./zoomIn"); -Object.defineProperty(exports, "ZoomIn", { enumerable: true, get: function () { return zoomIn_1.ZoomIn; } }); -var zoomOut_1 = require("./zoomOut"); -Object.defineProperty(exports, "ZoomOut", { enumerable: true, get: function () { return zoomOut_1.ZoomOut; } }); -var pathIn_1 = require("./pathIn"); -Object.defineProperty(exports, "PathIn", { enumerable: true, get: function () { return pathIn_1.PathIn; } }); -var growInX_1 = require("./growInX"); -Object.defineProperty(exports, "GrowInX", { enumerable: true, get: function () { return growInX_1.GrowInX; } }); -var growInY_1 = require("./growInY"); -Object.defineProperty(exports, "GrowInY", { enumerable: true, get: function () { return growInY_1.GrowInY; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./scaleInX":1751263816064,"./scaleOutX":1751263816065,"./scaleInY":1751263816066,"./scaleOutY":1751263816067,"./fadeIn":1751263816068,"./fadeOut":1751263816069,"./morphing":1751263816070,"./waveIn":1751263816072,"./zoomIn":1751263816073,"./zoomOut":1751263816074,"./pathIn":1751263816075,"./growInX":1751263816076,"./growInY":1751263816077}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816064, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScaleInX = void 0; -const coordinate_1 = require("../utils/coordinate"); -/** - * Scale mark from nothing to desired shape in x direction. - */ -const ScaleInX = (options, context) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - const { coordinate } = context; - return (from, _, defaults) => { - const [shape] = from; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style; - const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate) - ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner - : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner - // Using a short fadeIn transition to hide element with scale(0.001) - // which is still visible. - const keyframes = [ - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.01, - }, - { - transform: `${prefix} scale(1, 1)`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; -}; -exports.ScaleInX = ScaleInX; -//# sourceMappingURL=scaleInX.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816065, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScaleOutX = void 0; -const coordinate_1 = require("../utils/coordinate"); -/** - * Scale mark from desired shape to nothing in x direction. - */ -const ScaleOutX = (options, context) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - const { coordinate } = context; - return (from, _, defaults) => { - const [shape] = from; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style; - const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate) - ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner - : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner - // Using a short fadeIn transition to hide element with scale(0.001) - // which is still visible. - const keyframes = [ - { - transform: `${prefix} scale(1, 1)`.trimStart(), - transformOrigin, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.99, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; -}; -exports.ScaleOutX = ScaleOutX; -//# sourceMappingURL=scaleOutX.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816066, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScaleInY = void 0; -const g_1 = require("@antv/g"); -const coordinate_1 = require("../utils/coordinate"); -const utils_1 = require("../shape/utils"); -/** - * Scale mark from nothing to desired shape in y direction. - */ -const ScaleInY = (options, context) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - const { coordinate } = context; - // the polar coordinate need - g_1.CSS.registerProperty({ - name: 'scaleInYRadius', - inherits: false, - initialValue: '', - interpolable: true, - syntax: g_1.PropertySyntax.NUMBER, - }); - return (from, _, defaults) => { - const [shape] = from; - const PolarScaleInY = (shape) => { - const { __data__, style } = shape; - const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = style; - const { points, y, y1 } = __data__; - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]); - const { innerRadius, outerRadius } = arcObject; - const keyframes = [ - { - scaleInYRadius: innerRadius + ZERO, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - { - scaleInYRadius: innerRadius + ZERO, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.01, - }, - { - scaleInYRadius: outerRadius, - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; - const RectangularScaleInY = (shape) => { - const { style } = shape; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style; - const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate) - ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner - : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner - // Using a short fadeIn transition to hide element with scale(0.001) - // which is still visible. - const keyframes = [ - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.01, - }, - { - transform: `${prefix} scale(1, 1)`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; - if ((0, coordinate_1.isPolar)(coordinate)) { - return PolarScaleInY(shape); - } - else { - return RectangularScaleInY(shape); - } - }; -}; -exports.ScaleInY = ScaleInY; -//# sourceMappingURL=scaleInY.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../shape/utils":1751263815885}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816067, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScaleOutY = void 0; -const coordinate_1 = require("../utils/coordinate"); -/** - * Scale mark from desired shape to nothing in y direction. - */ -const ScaleOutY = (options, context) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - const { coordinate } = context; - return (from, _, defaults) => { - const [shape] = from; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style; - const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate) - ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner - : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner - // Using a short fadeIn transition to hide element with scale(0.001) - // which is still visible. - const keyframes = [ - { - transform: `${prefix} scale(1, 1)`.trimStart(), - transformOrigin, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.99, - }, - { - transform: `${prefix} ${transform}`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; -}; -exports.ScaleOutY = ScaleOutY; -//# sourceMappingURL=scaleOutY.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816068, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FadeIn = void 0; -/** - * Transform mark from transparent to solid. - */ -const FadeIn = (options) => { - return (from, _, defaults) => { - const [shape] = from; - const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style; - const keyframes = [ - { fillOpacity: 0, strokeOpacity: 0, opacity: 0 }, - { - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - }; -}; -exports.FadeIn = FadeIn; -exports.FadeIn.props = {}; -//# sourceMappingURL=fadeIn.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816069, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FadeOut = void 0; -/** - * Transform mark from solid to transparent. - */ -const FadeOut = (options) => { - return (from, _, defaults) => { - const [shape] = from; - const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style; - const keyframes = [ - { - fillOpacity, - strokeOpacity, - opacity, - }, - { fillOpacity: 0, strokeOpacity: 0, opacity: 0 }, - ]; - return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - }; -}; -exports.FadeOut = FadeOut; -exports.FadeOut.props = {}; -//# sourceMappingURL=fadeOut.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816070, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Morphing = void 0; -const g_1 = require("@antv/g"); -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -function localBBoxOf(shape) { - const { min, max } = shape.getLocalBounds(); - const [x0, y0] = min; - const [x1, y1] = max; - const height = y1 - y0; - const width = x1 - x0; - return [x0, y0, width, height]; -} -function d(bbox) { - const [x, y, width, height] = bbox; - return ` - M ${x} ${y} - L ${x + width} ${y} - L ${x + width} ${y + height} - L ${x} ${y + height} - Z - `; -} -function pack(shape, count) { - const [x0, y0, width, height] = localBBoxOf(shape); - const aspect = height / width; - const col = Math.ceil(Math.sqrt(count / aspect)); - const row = Math.ceil(count / col); - const B = []; - const h = height / row; - let j = 0; - let n = count; - while (n > 0) { - const c = Math.min(n, col); - const w = width / c; - for (let i = 0; i < c; i++) { - const x = x0 + i * w; - const y = y0 + j * h; - B.push(d([x, y, w, h])); - } - n -= c; - j += 1; - } - return B; -} -function normalizeSplit(split = 'pack') { - if (typeof split == 'function') - return split; - return pack; -} -/** - * Use attributes relative to geometry to do shape to shape animation. - * - * For example, the x, y, width, height of `Rect`, the cx, cy, r of `Circle`. - * And for `Group`, it will use the bbox of the group. - */ -function shapeToShape(from, to, timeEffect) { - let { transform: fromTransform } = from.style; - const { transform: toTransform } = to.style; - // Replace first to get right bbox after mounting. - replaceChild(to, from); - let keys = utils_1.attributeKeys; - if (from.nodeName === g_1.Shape.GROUP) { - // Apply translate and scale transform. - const [x0, y0, w0, h0] = localBBoxOf(from); - const [x1, y1, w1, h1] = localBBoxOf(to); - const dx = x0 - x1; - const dy = y0 - y1; - const sx = w0 / w1; - const sy = h0 / h1; - fromTransform = `translate(${dx}, ${dy}) scale(${sx}, ${sy})`; - } - else { - keys = keys.concat(utils_1.GEOMETRY_ATTRIBUTES[from.nodeName] || []); - } - const keyframes = [ - Object.assign({ transform: fromTransform !== null && fromTransform !== void 0 ? fromTransform : 'none' }, (0, utils_1.attributeOf)(from, keys, true)), - Object.assign({ transform: toTransform !== null && toTransform !== void 0 ? toTransform : 'none' }, (0, utils_1.attributeOf)(to, keys, true)), - ]; - const animation = to.animate(keyframes, timeEffect); - return animation; -} -/** - * Replace object and copy className and __data__ - */ -function replaceChild(newChild, oldChild) { - newChild['__data__'] = oldChild['__data__']; - newChild.className = oldChild.className; - // @ts-ignore - newChild.markType = oldChild.markType; - oldChild.parentNode.replaceChild(newChild, oldChild); -} -/** - * Replace element with a path shape. - */ -function maybePath(node, d) { - const { nodeName } = node; - if (nodeName === 'path') - return node; - const path = new g_1.Path({ - style: Object.assign(Object.assign({}, (0, utils_1.attributeOf)(node, utils_1.attributeKeys)), { d }), - }); - replaceChild(path, node); - return path; -} -function hasUniqueString(search, pattern) { - const first = search.indexOf(pattern); - const last = search.lastIndexOf(pattern); - return first === last; -} -// Path definition with multiple m and M command has sub path. -// eg. 'M10,10...M20,20', 'm10,10...m20,20' -function hasSubPath(path) { - return !hasUniqueString(path, 'm') || !hasUniqueString(path, 'M'); -} -function shape2path(shape) { - const path = (0, g_1.convertToPath)(shape); - if (!path) - return; - // Path definition with sub path can't do path morphing animation, - // so skip this kind of path. - if (hasSubPath(path)) - return; - return path; -} -// Check if the path has a markerEnd | markerStart -function hasMarker(shape) { - const { nodeName } = shape; - if (nodeName === 'path') { - const attributes = (0, util_1.get)(shape, 'attributes'); - return attributes.markerEnd || attributes.markerStart; - } - return false; -} -function oneToOne(shape, from, to, timeEffect) { - // If the nodeTypes of from and to are equal, - // or non of them can convert to path, - // the apply shape to shape animation. - const { nodeName: fromName } = from; - const { nodeName: toName } = to; - const fromPath = shape2path(from); - const toPath = shape2path(to); - const isSameNodes = fromName === toName && fromName !== 'path'; - const hasNonPathNode = fromPath === undefined || toPath === undefined; - // Path with mark can not use animate like ordinary path. - const isPathWithMarker = hasMarker(from) || hasMarker(to); - if (isSameNodes || hasNonPathNode || isPathWithMarker) - return shapeToShape(from, to, timeEffect); - const pathShape = maybePath(shape, fromPath); - // Convert Path will take transform, anchor, etc into account, - // so there is no need to specify these attributes in keyframes. - const keyframes = [ - Object.assign({}, (0, utils_1.attributeOf)(from, utils_1.attributeKeys)), - Object.assign({}, (0, utils_1.attributeOf)(to, utils_1.attributeKeys)), - ]; - if (fromPath !== toPath) { - keyframes[0].d = fromPath; - keyframes[1].d = toPath; - const animation = pathShape.animate(keyframes, timeEffect); - animation.onfinish = () => { - // Should keep the original path definition. - (0, helper_1.copyAttributes)(pathShape, to); - pathShape.style.d = toPath; - pathShape.style.transform = 'none'; - }; - // Remove transform because it already applied in path - // converted by convertToPath. - pathShape.style.transform = 'none'; - return animation; - } - // No need to apply animation since fromPath equals toPath. - return null; -} -function oneToMultiple(from, to, timeEffect, split) { - // Hide the shape to be split before being removing. - from.style.visibility = 'hidden'; - const D = split(from, to.length); - return to.map((shape, i) => { - const path = new g_1.Path({ - style: Object.assign({ d: D[i] }, (0, utils_1.attributeOf)(from, utils_1.attributeKeys)), - }); - return oneToOne(shape, path, shape, timeEffect); - }); -} -function multipleToOne(from, to, timeEffect, split) { - const D = split(to, from.length); - const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = to.style; - const keyframes = [ - { fillOpacity: 0, strokeOpacity: 0, opacity: 0 }, - { fillOpacity: 0, strokeOpacity: 0, opacity: 0, offset: 0.99 }, - { - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = to.animate(keyframes, timeEffect); - const animations = from.map((shape, i) => { - const path = new g_1.Path({ - style: { - d: D[i], - fill: to.style.fill, - }, - }); - return oneToOne(shape, shape, path, timeEffect); - }); - return [...animations, animation]; -} -/** - * Morphing animations. - * @todo Support more split function. - */ -const Morphing = (options) => { - return (from, to, defaults) => { - const split = normalizeSplit(options.split); - const timeEffect = Object.assign(Object.assign({}, defaults), options); - const { length: fl } = from; - const { length: tl } = to; - if ((fl === 1 && tl === 1) || (fl > 1 && tl > 1)) { - const [f] = from; - const [t] = to; - return oneToOne(f, f, t, timeEffect); - } - if (fl === 1 && tl > 1) { - const [f] = from; - return oneToMultiple(f, to, timeEffect, split); - } - if (fl > 1 && tl === 1) { - const [t] = to; - return multipleToOne(from, t, timeEffect, split); - } - return null; - }; -}; -exports.Morphing = Morphing; -exports.Morphing.props = {}; -//# sourceMappingURL=morphing.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils":1751263816071}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816071, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.attributeKeys = exports.attributeOf = exports.GEOMETRY_ATTRIBUTES = void 0; -const g_1 = require("@antv/g"); -const DEFAULT_ATTRIBUTE_VALUE = { - opacity: 1, - strokeOpacity: 1, - fillOpacity: 1, - lineWidth: 0, - x: 0, - y: 0, - cx: 0, - cy: 0, - r: 0, - rx: 0, - ry: 0, - width: 0, - height: 0, -}; -exports.GEOMETRY_ATTRIBUTES = { - [g_1.Shape.CIRCLE]: ['cx', 'cy', 'r'], - [g_1.Shape.ELLIPSE]: ['cx', 'cy', 'rx', 'ry'], - [g_1.Shape.RECT]: ['x', 'y', 'width', 'height'], - [g_1.Shape.IMAGE]: ['x', 'y', 'width', 'height'], - [g_1.Shape.LINE]: ['x1', 'y1', 'x2', 'y2'], - [g_1.Shape.POLYLINE]: ['points'], - [g_1.Shape.POLYGON]: ['points'], -}; -function attributeOf(shape, keys, useDefaultValue = false) { - const attribute = {}; - for (const key of keys) { - const value = shape.style[key]; - if (value) { - attribute[key] = value; - } - else if (useDefaultValue) { - attribute[key] = DEFAULT_ATTRIBUTE_VALUE[key]; - } - } - return attribute; -} -exports.attributeOf = attributeOf; -exports.attributeKeys = [ - 'fill', - 'stroke', - 'fillOpacity', - 'strokeOpacity', - 'opacity', - 'lineWidth', -]; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816072, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WaveIn = void 0; -const d3_shape_1 = require("@antv/vendor/d3-shape"); -const g_1 = require("@antv/g"); -const utils_1 = require("../shape/utils"); -const coordinate_1 = require("../utils/coordinate"); -const scaleInX_1 = require("./scaleInX"); -/** - * Transform mark from transparent to solid. - */ -const WaveIn = (options, context) => { - const ZERO = 0.0001; - // @see https://g-next.antv.vision/zh/docs/api/css/css-properties-values-api#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7 - g_1.CSS.registerProperty({ - name: 'waveInArcAngle', - inherits: false, - initialValue: '', - interpolable: true, - syntax: g_1.PropertySyntax.NUMBER, - }); - const { coordinate } = context; - return (from, to, defaults) => { - const [shape] = from; - if (!(0, coordinate_1.isPolar)(coordinate)) { - return (0, scaleInX_1.ScaleInX)(options, context)(from, to, defaults); - } - const { __data__, style } = shape; - const { radius = 0, inset = 0, fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style; - const { points, y, y1 } = __data__; - const path = (0, d3_shape_1.arc)() - .cornerRadius(radius) - .padAngle((inset * Math.PI) / 180); - const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]); - const { startAngle, endAngle } = arcObject; - const keyframes = [ - // Use custom interpolable CSS property. - { - waveInArcAngle: startAngle + ZERO, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - { - waveInArcAngle: startAngle + ZERO, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.01, - }, - { - waveInArcAngle: endAngle, - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - animation.onframe = function () { - shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: Number(shape.style.waveInArcAngle) })); - }; - animation.onfinish = function () { - shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: endAngle })); - }; - return animation; - }; -}; -exports.WaveIn = WaveIn; -exports.WaveIn.props = {}; -//# sourceMappingURL=waveIn.js.map -}, function(modId) { var map = {"../shape/utils":1751263815885,"../utils/coordinate":1751263815882,"./scaleInX":1751263816064}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816073, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZoomIn = void 0; -const ZoomIn = (options) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - return (from, _, defaults) => { - const [shape] = from; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style; - const transformOrigin = 'center center'; - const keyframes = [ - { - transform: `${prefix} scale(${ZERO})`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - { - transform: `${prefix} scale(${ZERO})`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.01, - }, - { - transform: `${prefix} scale(1)`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; -}; -exports.ZoomIn = ZoomIn; -//# sourceMappingURL=zoomIn.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816074, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZoomOut = void 0; -const ZoomOut = (options) => { - // Small enough to hide or show very small part of mark, - // but bigger enough to not cause bug. - const ZERO = 0.0001; - return (from, _, defaults) => { - const [shape] = from; - const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style; - const transformOrigin = 'center center'; - const keyframes = [ - { transform: `${prefix} scale(1)`.trimStart(), transformOrigin }, - { - transform: `${prefix} scale(${ZERO})`.trimStart(), - transformOrigin, - fillOpacity, - strokeOpacity, - opacity, - offset: 0.99, - }, - { - transform: `${prefix} scale(${ZERO})`.trimStart(), - transformOrigin, - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0, - }, - ]; - const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - return animation; - }; -}; -exports.ZoomOut = ZoomOut; -//# sourceMappingURL=zoomOut.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816075, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PathIn = void 0; -/** - * Transform mark from transparent to solid. - */ -const PathIn = (options) => { - return (from, _, defaults) => { - var _a, _b; - const [shape] = from; - const length = ((_b = (_a = shape).getTotalLength) === null || _b === void 0 ? void 0 : _b.call(_a)) || 0; - const keyframes = [ - { lineDash: [0, length] }, - { lineDash: [length, 0] }, - ]; - return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options)); - }; -}; -exports.PathIn = PathIn; -exports.PathIn.props = {}; -//# sourceMappingURL=pathIn.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816076, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GrowInX = void 0; -const g_1 = require("@antv/g"); -const scaleInX_1 = require("./scaleInX"); -/** - * Scale mark from nothing to desired shape in x direction. - */ -const GrowInX = (options, context) => { - return (from, to, defaults) => { - const [shape] = from; - const { min: [x, y], halfExtents, } = shape.getLocalBounds(); - const width = halfExtents[0] * 2; - const height = halfExtents[1] * 2; - const clipPath = new g_1.Path({ - style: { - d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`, - }, - }); - shape.appendChild(clipPath); - shape.style.clipPath = clipPath; - const animation = (0, scaleInX_1.ScaleInX)(options, context)([clipPath], to, defaults); - return animation; - }; -}; -exports.GrowInX = GrowInX; -exports.GrowInX.props = {}; -//# sourceMappingURL=growInX.js.map -}, function(modId) { var map = {"./scaleInX":1751263816064}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816077, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GrowInY = void 0; -const g_1 = require("@antv/g"); -const scaleInY_1 = require("./scaleInY"); -/** - * Scale mark from nothing to desired shape in x direction. - */ -const GrowInY = (options, context) => { - return (from, to, defaults) => { - const [shape] = from; - const { min: [x, y], halfExtents, } = shape.getLocalBounds(); - const width = halfExtents[0] * 2; - const height = halfExtents[1] * 2; - const clipPath = new g_1.Path({ - style: { - d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`, - }, - }); - shape.appendChild(clipPath); - shape.style.clipPath = clipPath; - const animation = (0, scaleInY_1.ScaleInY)(options, context)([clipPath], to, defaults); - return animation; - }; -}; -exports.GrowInY = GrowInY; -exports.GrowInY.props = {}; -//# sourceMappingURL=growInY.js.map -}, function(modId) { var map = {"./scaleInY":1751263816066}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816078, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementPointMove = exports.TreemapDrillDown = exports.Event = exports.Poptip = exports.ScrollbarFilter = exports.SliderFilter = exports.BrushYFilter = exports.BrushXFilter = exports.BrushFilter = exports.BrushAxisHighlight = exports.BrushYHighlight = exports.BrushXHighlight = exports.BrushHighlight = exports.LegendHighlight = exports.LegendFilter = exports.Tooltip = exports.Fisheye = exports.ChartIndex = exports.ElementSelectByColor = exports.ElementSelectByX = exports.ElementSelect = exports.ElementHighlightByColor = exports.ElementHighlightByX = exports.ElementHighlight = void 0; -var elementHighlight_1 = require("./elementHighlight"); -Object.defineProperty(exports, "ElementHighlight", { enumerable: true, get: function () { return elementHighlight_1.ElementHighlight; } }); -var elementHighlightByX_1 = require("./elementHighlightByX"); -Object.defineProperty(exports, "ElementHighlightByX", { enumerable: true, get: function () { return elementHighlightByX_1.ElementHighlightByX; } }); -var elementHighlightByColor_1 = require("./elementHighlightByColor"); -Object.defineProperty(exports, "ElementHighlightByColor", { enumerable: true, get: function () { return elementHighlightByColor_1.ElementHighlightByColor; } }); -var elementSelect_1 = require("./elementSelect"); -Object.defineProperty(exports, "ElementSelect", { enumerable: true, get: function () { return elementSelect_1.ElementSelect; } }); -var elementSelectByX_1 = require("./elementSelectByX"); -Object.defineProperty(exports, "ElementSelectByX", { enumerable: true, get: function () { return elementSelectByX_1.ElementSelectByX; } }); -var elementSelectByColor_1 = require("./elementSelectByColor"); -Object.defineProperty(exports, "ElementSelectByColor", { enumerable: true, get: function () { return elementSelectByColor_1.ElementSelectByColor; } }); -var chartIndex_1 = require("./chartIndex"); -Object.defineProperty(exports, "ChartIndex", { enumerable: true, get: function () { return chartIndex_1.ChartIndex; } }); -var fisheye_1 = require("./fisheye"); -Object.defineProperty(exports, "Fisheye", { enumerable: true, get: function () { return fisheye_1.Fisheye; } }); -var tooltip_1 = require("./tooltip"); -Object.defineProperty(exports, "Tooltip", { enumerable: true, get: function () { return tooltip_1.Tooltip; } }); -var legendFilter_1 = require("./legendFilter"); -Object.defineProperty(exports, "LegendFilter", { enumerable: true, get: function () { return legendFilter_1.LegendFilter; } }); -var legendHighlight_1 = require("./legendHighlight"); -Object.defineProperty(exports, "LegendHighlight", { enumerable: true, get: function () { return legendHighlight_1.LegendHighlight; } }); -var brushHighlight_1 = require("./brushHighlight"); -Object.defineProperty(exports, "BrushHighlight", { enumerable: true, get: function () { return brushHighlight_1.BrushHighlight; } }); -var brushXHighlight_1 = require("./brushXHighlight"); -Object.defineProperty(exports, "BrushXHighlight", { enumerable: true, get: function () { return brushXHighlight_1.BrushXHighlight; } }); -var brushYHighlight_1 = require("./brushYHighlight"); -Object.defineProperty(exports, "BrushYHighlight", { enumerable: true, get: function () { return brushYHighlight_1.BrushYHighlight; } }); -var brushAxisHighlight_1 = require("./brushAxisHighlight"); -Object.defineProperty(exports, "BrushAxisHighlight", { enumerable: true, get: function () { return brushAxisHighlight_1.BrushAxisHighlight; } }); -var brushFilter_1 = require("./brushFilter"); -Object.defineProperty(exports, "BrushFilter", { enumerable: true, get: function () { return brushFilter_1.BrushFilter; } }); -var brushXFilter_1 = require("./brushXFilter"); -Object.defineProperty(exports, "BrushXFilter", { enumerable: true, get: function () { return brushXFilter_1.BrushXFilter; } }); -var brushYFilter_1 = require("./brushYFilter"); -Object.defineProperty(exports, "BrushYFilter", { enumerable: true, get: function () { return brushYFilter_1.BrushYFilter; } }); -var sliderFilter_1 = require("./sliderFilter"); -Object.defineProperty(exports, "SliderFilter", { enumerable: true, get: function () { return sliderFilter_1.SliderFilter; } }); -var scrollbarFilter_1 = require("./scrollbarFilter"); -Object.defineProperty(exports, "ScrollbarFilter", { enumerable: true, get: function () { return scrollbarFilter_1.ScrollbarFilter; } }); -var poptip_1 = require("./poptip"); -Object.defineProperty(exports, "Poptip", { enumerable: true, get: function () { return poptip_1.Poptip; } }); -var event_1 = require("./event"); -Object.defineProperty(exports, "Event", { enumerable: true, get: function () { return event_1.Event; } }); -var treemapDrillDown_1 = require("./treemapDrillDown"); -Object.defineProperty(exports, "TreemapDrillDown", { enumerable: true, get: function () { return treemapDrillDown_1.TreemapDrillDown; } }); -var elementPointMove_1 = require("./elementPointMove"); -Object.defineProperty(exports, "ElementPointMove", { enumerable: true, get: function () { return elementPointMove_1.ElementPointMove; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./elementHighlight":1751263816079,"./elementHighlightByX":1751263816124,"./elementHighlightByColor":1751263816125,"./elementSelect":1751263816126,"./elementSelectByX":1751263816127,"./elementSelectByColor":1751263816128,"./chartIndex":1751263816129,"./fisheye":1751263816130,"./tooltip":1751263816131,"./legendFilter":1751263816132,"./legendHighlight":1751263816133,"./brushHighlight":1751263816134,"./brushXHighlight":1751263816135,"./brushYHighlight":1751263816136,"./brushAxisHighlight":1751263816137,"./brushFilter":1751263816138,"./brushXFilter":1751263816139,"./brushYFilter":1751263816140,"./sliderFilter":1751263816141,"./scrollbarFilter":1751263816142,"./poptip":1751263816143,"./event":1751263816113,"./treemapDrillDown":1751263816144,"./elementPointMove":1751263816145}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816079, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementHighlight = exports.elementHighlight = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -/** - * highlight a group of elements. - */ -function elementHighlight(root, { elements: elementsof, // given the root of chart returns elements to be manipulated -datum, // given each element returns the datum of it -groupKey: eleGroupKey = (d) => d, // group elements by specified key -regionGroupKey = (d) => d, // how to group elements when hover region -link = false, // draw link or not -background = false, // draw background or not -delay = 60, // delay to unhighlighted element -scale, coordinate, emitter, state = {}, region = false, regionEleFilter = (el) => utils_1.VALID_FIND_BY_X_MARKS.includes(el.markType), // some elements can not be highlighted by region, like shapes in pie. - }) { - var _a, _b; - const allElements = (_a = elementsof(root)) !== null && _a !== void 0 ? _a : []; - const elements = region ? allElements.filter(regionEleFilter) : allElements; - const elementSet = new Set(elements); - const groupKey = region ? regionGroupKey : eleGroupKey; - const keyGroup = (0, d3_array_1.group)(elements, groupKey); - const findElement = (0, utils_1.createFindElementByEvent)({ - elementsof, - root, - coordinate, - scale, - }); - const valueof = (0, utils_1.createValueof)(elements, datum); - const [appendLink, removeLink] = (0, utils_1.renderLink)(Object.assign({ elements, - valueof, - link, - coordinate }, (0, helper_1.subObject)(state.active, 'link'))); - const [appendBackground, removeBackground, isBackground] = (0, utils_1.renderBackground)(Object.assign({ document: root.ownerDocument, scale, - coordinate, - background, - valueof }, (0, helper_1.subObject)(state.active, 'background'))); - const elementStyle = (0, util_1.deepMix)(state, { - active: Object.assign({}, (((_b = state.active) === null || _b === void 0 ? void 0 : _b.offset) && { - //Apply translate to mock slice out. - transform: (...params) => { - const value = state.active.offset(...params); - const [, i] = params; - return (0, utils_1.offsetTransform)(elements[i], value, coordinate); - }, - })), - }); - const useState = (0, utils_1.createUseState)(elementStyle, elements); - const { updateState, removeState, hasState } = useState(valueof); - let out; // Timer for delaying unhighlighted. - const pointerover = (event) => { - const { nativeEvent = true } = event; - let element = event.target; - if (region) { - element = findElement(event); - } - if (!elementSet.has(element)) - return; - if (out) - clearTimeout(out); - const k = groupKey(element); - const group = keyGroup.get(k); - const groupSet = new Set(group); - for (const e of elements) { - if (groupSet.has(e)) { - if (!hasState(e, 'active')) - updateState(e, 'active'); - } - else { - updateState(e, 'inactive'); - removeLink(e); - } - if (e !== element) - removeBackground(e); - } - appendBackground(element); - appendLink(group); - // Emit events. - if (!nativeEvent) - return; - emitter.emit('element:highlight', { - nativeEvent, - data: { - data: datum(element), - group: group.map(datum), - }, - }); - }; - const delayUnhighlighted = () => { - if (out) - clearTimeout(out); - out = setTimeout(() => { - unhighlighted(); - out = null; - }, delay); - }; - const unhighlighted = (nativeEvent = true) => { - for (const e of elements) { - removeState(e, 'active', 'inactive'); - removeBackground(e); - removeLink(e); - } - if (nativeEvent) { - emitter.emit('element:unhighlight', { nativeEvent }); - } - }; - const pointerout = (event) => { - let element = event.target; - if (region) { - element = findElement(event); - } - if (!element) { - if (delay > 0) - delayUnhighlighted(); - else - unhighlighted(); - return; - } - if (background && !isBackground(element)) - return; - if (!background && !elementSet.has(element)) - return; - if (delay > 0) - delayUnhighlighted(); - else - unhighlighted(); - }; - const pointerleave = () => { - unhighlighted(); - }; - root.addEventListener('pointerover', pointerover); - root.addEventListener('pointermove', pointerover); - root.addEventListener('pointerout', pointerout); - root.addEventListener('pointerleave', pointerleave); - const onRest = (e) => { - const { nativeEvent } = e; - if (nativeEvent) - return; - unhighlighted(false); - }; - const onHighlight = (e) => { - const { nativeEvent } = e; - if (nativeEvent) - return; - const { data } = e.data; - const element = (0, utils_1.selectElementByData)(elements, data, datum); - if (!element) - return; - pointerover({ target: element, nativeEvent: false }); - }; - emitter.on('element:highlight', onHighlight); - emitter.on('element:unhighlight', onRest); - return () => { - root.removeEventListener('pointerover', pointerover); - root.removeEventListener('pointermove', pointerover); - root.removeEventListener('pointerout', pointerout); - root.removeEventListener('pointerleave', pointerleave); - emitter.off('element:highlight', onHighlight); - emitter.off('element:unhighlight', onRest); - for (const e of elements) { - removeBackground(e); - removeLink(e); - } - }; -} -exports.elementHighlight = elementHighlight; -function ElementHighlight(_a) { - var { delay, createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, ["delay", "createGroup", "createRegionGroup", "background", "link"]); - return (context, _, emitter) => { - const { container, view, options } = context; - const { scale, coordinate } = view; - const plotArea = (0, utils_1.selectPlotArea)(container); - return elementHighlight(plotArea, Object.assign({ elements: utils_1.selectG2Elements, datum: (0, utils_1.createDatumof)(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup - ? createRegionGroup(view) - : (0, utils_1.createXKey)(view), coordinate, - scale, state: (0, utils_1.mergeState)(options, [ - ['active', background ? {} : { lineWidth: '1', stroke: '#000' }], - 'inactive', - ]), background, - link, - delay, - emitter }, rest)); - }; -} -exports.ElementHighlight = ElementHighlight; -ElementHighlight.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementHighlight.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816080, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createFindElementByEvent = exports.VALID_FIND_BY_X_MARKS = exports.maybeRoot = exports.getThetaPath = exports.getElements = exports.getPointsPath = exports.getPointsR = exports.selectElementByData = exports.restoreCursor = exports.setCursor = exports.renderBackground = exports.offsetTransform = exports.renderLink = exports.createValueof = exports.mergeState = exports.useState = exports.createUseState = exports.createDatumof = exports.createXKey = exports.createColorKey = exports.boundsOfBrushArea = exports.brushMousePosition = exports.mousePosition = exports.bboxOf = exports.selectPlotArea = exports.selectFacetViews = exports.selectFacetG2Elements = exports.selectG2Elements = void 0; -const g_1 = require("@antv/g"); -const d3_path_1 = require("@antv/vendor/d3-path"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const util_1 = require("@antv/util"); -const selection_1 = require("../utils/selection"); -const array_1 = require("../utils/array"); -const runtime_1 = require("../runtime"); -const scale_1 = require("../utils/scale"); -const color_1 = require("../shape/interval/color"); -const coordinate_1 = require("../utils/coordinate"); -const style_1 = require("../utils/style"); -const utils_1 = require("../shape/utils"); -const vector_1 = require("../utils/vector"); -const traverse_elements_1 = require("../utils/traverse-elements"); -/** - * Given root of chart returns elements to be manipulated - */ -function selectG2Elements(root) { - return (0, selection_1.select)(root) - .selectAll(`.${runtime_1.ELEMENT_CLASS_NAME}`) - .nodes() - .filter((d) => !d.__removed__); -} -exports.selectG2Elements = selectG2Elements; -function selectFacetG2Elements(target, viewInstances) { - return selectFacetViews(target, viewInstances).flatMap(({ container }) => selectG2Elements(container)); -} -exports.selectFacetG2Elements = selectFacetG2Elements; -function selectFacetViews(target, viewInstances) { - return viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key); -} -exports.selectFacetViews = selectFacetViews; -function selectPlotArea(root) { - return (0, selection_1.select)(root).select(`.${runtime_1.PLOT_CLASS_NAME}`).node(); -} -exports.selectPlotArea = selectPlotArea; -function bboxOf(element) { - // The geometry bounds of a group is empty, so return the render bounds. - if (element.tagName === 'g') - return element.getRenderBounds(); - // Compute the geometry bounds related to the parent. - const bounds = element.getGeometryBounds(); - const aabb = new g_1.AABB(); - aabb.setFromTransformedAABB(bounds, element.getWorldTransform()); - return aabb; -} -exports.bboxOf = bboxOf; -function mousePosition(target, event) { - const { offsetX, offsetY } = event; - const bbox = bboxOf(target); - const { min: [x, y], max: [x1, y1], } = bbox; - const isOutX = offsetX < x || offsetX > x1; - const isOutY = offsetY < y || offsetY > y1; - if (isOutX || isOutY) - return null; - return [offsetX - x, offsetY - y]; -} -exports.mousePosition = mousePosition; -/** - * @todo Pass bbox rather than calc it here. - */ -function brushMousePosition(target, event) { - const { offsetX, offsetY } = event; - const [x, y, x1, y1] = boundsOfBrushArea(target); - return [ - Math.min(x1, Math.max(x, offsetX)) - x, - Math.min(y1, Math.max(y, offsetY)) - y, - ]; -} -exports.brushMousePosition = brushMousePosition; -function boundsOfBrushArea(target) { - // Calc bbox after clipping. - const bbox = target.getRenderBounds(); - const { min: [x0, y0], max: [x1, y1], } = bbox; - return [x0, y0, x1, y1]; -} -exports.boundsOfBrushArea = boundsOfBrushArea; -function createColorKey(view) { - return (element) => element.__data__.color; -} -exports.createColorKey = createColorKey; -function createXKey(view) { - return (element) => element.__data__.x; -} -exports.createXKey = createXKey; -function createDatumof(view) { - const views = Array.isArray(view) ? view : [view]; - const keyData = new Map(views.flatMap((view) => { - const marks = Array.from(view.markState.keys()); - return marks.map((mark) => [keyed(view.key, mark.key), mark.data]); - })); - return (element) => { - const { index, markKey, viewKey } = element.__data__; - const data = keyData.get(keyed(viewKey, markKey)); - return data[index]; - }; -} -exports.createDatumof = createDatumof; -/** - * A state manager for G2Element. - * The keys for each state's style start with the state name. - * { selectedFill, selectedStroke } is for selected state. - * { unselectedFill, unselectedStroke } is for unselected state. - */ -/** - * Define state priorities, higher number means higher priority. - */ -const STATE_PRIORITIES = { - selected: 3, - unselected: 3, - active: 2, - inactive: 2, - default: 1, -}; -/** - * Define state groups, states in the same group are mutually exclusive. - */ -const STATE_GROUPS = { - selection: ['selected', 'unselected'], - highlight: ['active', 'inactive'], -}; -const setElementAttribute = (element, k, v) => { - (0, traverse_elements_1.traverseElements)(element, (el) => { - if ('setAttribute' in el && typeof el.setAttribute === 'function') { - el.setAttribute(k, v); - } - }); -}; -function createUseState(style, elements) { - // Apply interaction style to all elements. - elements.forEach((element) => { - // @ts-ignore - const currentStyle = element.__interactionStyle__; - if (currentStyle) { - // @ts-ignore - element.__interactionStyle__ = Object.assign(Object.assign({}, currentStyle), style); - } - else { - // @ts-ignore - element.__interactionStyle__ = style; - } - }); - return (valueof = (d, element) => d, setAttribute = setElementAttribute) => useState(undefined, valueof, setAttribute); -} -exports.createUseState = createUseState; -function useState(style, valueof = (d, element) => d, setAttribute = setElementAttribute) { - const STATES = '__states__'; - const ORIGINAL = '__ordinal__'; - // Get state priority. - const getStatePriority = (stateName) => STATE_PRIORITIES[stateName] || STATE_PRIORITIES.default; - // Get the group that a state belongs to. - const getStateGroup = (stateName) => { - var _a; - return (_a = Object.entries(STATE_GROUPS).find(([_, states]) => states.includes(stateName))) === null || _a === void 0 ? void 0 : _a[0]; - }; - // Mix style for each state and apply it to element. - const applyState = (element) => { - var _a; - const { [STATES]: states = [], [ORIGINAL]: original = {} } = element; - // Sort states by priority. - const sortedStates = [...states].sort((a, b) => getStatePriority(b) - getStatePriority(a)); - // Create a Map to track the highest priority state for each style attribute. - const styleAttributeMap = new Map(); - // Iterate through all states to find the highest priority state for each style attribute. - for (const state of sortedStates) { - // If style exists, use it directly, else use interaction style on element. - const stateStyles = ((_a = (style !== null && style !== void 0 ? style : element.__interactionStyle__)) === null || _a === void 0 ? void 0 : _a[state]) || {}; - for (const [key, value] of Object.entries(stateStyles)) { - if (!styleAttributeMap.has(key)) { - styleAttributeMap.set(key, value); - } - } - } - // Apply styles including original styles. - const finalStyle = Object.assign({}, original); - for (const [key, value] of styleAttributeMap.entries()) { - finalStyle[key] = value; - } - if (Object.keys(finalStyle).length === 0) - return; - // Apply final styles to the element. - for (const [key, value] of Object.entries(finalStyle)) { - const currentValue = (0, style_1.getStyle)(element, key); - const v = valueof(value, element); - setAttribute(element, key, v); - // Store the attribute if it does not exist in original. - if (!(key in original)) - original[key] = currentValue; - } - element[ORIGINAL] = original; - }; - const initState = (element) => { - if (element[STATES]) - return; - element[STATES] = []; - return; - }; - /** - * Update states and update element, handle conflict states automatically. - */ - const updateState = (element, ...states) => { - initState(element); - const currentStates = element[STATES]; - // Collect all new state groups. - const newStateGroups = new Set(states - .map((state) => getStateGroup(state)) - .filter((group) => group !== undefined)); - // Exclude old states that are in the new state group. - const remainingStates = currentStates.filter((existingState) => !newStateGroups.has(getStateGroup(existingState))); - element[STATES] = [...remainingStates, ...states]; - applyState(element); - }; - /** - * Set the states and update element. - */ - const setState = (element, ...states) => { - initState(element); - element[STATES] = [...states]; - applyState(element); - }; - /** - * Remove the states and update element. - */ - const removeState = (element, ...states) => { - initState(element); - for (const state of states) { - const index = element[STATES].indexOf(state); - if (index !== -1) { - element[STATES].splice(index, 1); - } - } - applyState(element); - }; - const hasState = (element, state) => { - initState(element); - return element[STATES].indexOf(state) !== -1; - }; - return { - setState, - updateState, - removeState, - hasState, - }; -} -exports.useState = useState; -function isEmptyObject(obj) { - if (obj === undefined) - return true; - if (typeof obj !== 'object') - return false; - return Object.keys(obj).length === 0; -} -// A function to generate key for mark each view. -function keyed(viewKey, markKey) { - return `${viewKey},${markKey}`; -} -function mergeState(options, states) { - // Index state by mark key and view key. - const views = Array.isArray(options) ? options : [options]; - const markState = views.flatMap((view) => view.marks.map((mark) => [keyed(view.key, mark.key), mark.state])); - const state = {}; - // Update each specified state. - for (const descriptor of states) { - const [key, defaults] = Array.isArray(descriptor) - ? descriptor - : [descriptor, {}]; - // Update each specified mark state. - state[key] = markState.reduce((merged, mark) => { - // Normalize state. - const [markKey, markState = {}] = mark; - const selectedState = isEmptyObject(markState[key]) - ? defaults - : markState[key]; - // Update each state attribute. - for (const [attr, value] of Object.entries(selectedState)) { - const oldValue = merged[attr]; - const newValue = (data, index, array, element) => { - const k = keyed(element.__data__.viewKey, element.__data__.markKey); - if (markKey !== k) - return oldValue === null || oldValue === void 0 ? void 0 : oldValue(data, index, array, element); - if (typeof value !== 'function') - return value; - return value(data, index, array, element); - }; - merged[attr] = newValue; - } - return merged; - }, {}); - } - return state; -} -exports.mergeState = mergeState; -// @todo Support elements from different view. -function createValueof(elements, datum) { - const elementIndex = new Map(elements.map((d, i) => [d, i])); - const fa = datum ? elements.map(datum) : elements; - return (d, e) => { - if (typeof d !== 'function') - return d; - const i = elementIndex.get(e); - const fe = datum ? datum(e) : e; - return d(fe, i, fa, e); - }; -} -exports.createValueof = createValueof; -function renderLink(_a) { - var { link = false, valueof = (d, element) => d, coordinate } = _a, style = __rest(_a, ["link", "valueof", "coordinate"]); - const LINK_CLASS_NAME = 'element-link'; - if (!link) - return [() => { }, () => { }]; - const pointsOf = (element) => element.__data__.points; - const pathPointsOf = (P0, P1) => { - const [, p1, p2] = P0; - const [p0, , , p3] = P1; - const P = [p1, p0, p3, p2]; - return P; - }; - const append = (elements) => { - var _a; - if (elements.length <= 1) - return; - // Sort elements by normalized x to avoid cross. - const sortedElements = (0, d3_array_1.sort)(elements, (e0, e1) => { - const { x: x0 } = e0.__data__; - const { x: x1 } = e1.__data__; - const dx = x0 - x1; - return dx; - }); - for (let i = 1; i < sortedElements.length; i++) { - const p = (0, d3_path_1.path)(); - const e0 = sortedElements[i - 1]; - const e1 = sortedElements[i]; - const [p0, p1, p2, p3] = pathPointsOf(pointsOf(e0), pointsOf(e1)); - p.moveTo(...p0); - p.lineTo(...p1); - p.lineTo(...p2); - p.lineTo(...p3); - p.closePath(); - const _b = (0, array_1.mapObject)(style, (d) => valueof(d, e0)), { fill = e0.getAttribute('fill') } = _b, rest = __rest(_b, ["fill"]); - const link = new g_1.Path({ - className: LINK_CLASS_NAME, - style: Object.assign({ d: p.toString(), fill, zIndex: -2 }, rest), - }); - // @ts-ignore - (_a = e0.link) === null || _a === void 0 ? void 0 : _a.remove(); - e0.parentNode.appendChild(link); - // @ts-ignore - e0.link = link; - } - }; - const remove = (element) => { - var _a; - (_a = element.link) === null || _a === void 0 ? void 0 : _a.remove(); - element.link = null; - }; - return [append, remove]; -} -exports.renderLink = renderLink; -// Apply translate to mock slice out. -function offsetTransform(element, offset, coordinate) { - const append = (t) => { - const { transform } = element.style; - return transform ? `${transform} ${t}` : t; - }; - if ((0, coordinate_1.isPolar)(coordinate)) { - const { points } = element.__data__; - const [p0, p1] = (0, coordinate_1.isTranspose)(coordinate) ? (0, utils_1.reorder)(points) : points; - const center = coordinate.getCenter(); - const v0 = (0, vector_1.sub)(p0, center); - const v1 = (0, vector_1.sub)(p1, center); - const a0 = (0, vector_1.angle)(v0); - const da = (0, vector_1.angleBetween)(v0, v1); - const amid = a0 + da / 2; - const dx = offset * Math.cos(amid); - const dy = offset * Math.sin(amid); - return append(`translate(${dx}, ${dy})`); - } - if ((0, coordinate_1.isTranspose)(coordinate)) - return append(`translate(${offset}, 0)`); - return append(`translate(0, ${-offset})`); -} -exports.offsetTransform = offsetTransform; -function renderBackground(_a) { - var { document, background, scale, coordinate, valueof } = _a, rest = __rest(_a, ["document", "background", "scale", "coordinate", "valueof"]); - const BACKGROUND_CLASS_NAME = 'element-background'; - // Don't have background. - if (!background) - return [() => { }, () => { }]; - const extentOf = (scale, x, padding) => { - const ax = scale.invert(x); - const mid = x + scale.getBandWidth(ax) / 2; - const half = scale.getStep(ax) / 2; - const offset = half * padding; - return [mid - half + offset, mid + half - offset]; - }; - const sizeXOf = (element, padding) => { - const { x: scaleX } = scale; - if (!(0, scale_1.isOrdinalScale)(scaleX)) - return [0, 1]; - const { __data__: data } = element; - const { x } = data; - const [e1, e2] = extentOf(scaleX, x, padding); - return [e1, e2]; - }; - const sizeYOf = (element, padding) => { - const { y: scaleY } = scale; - if (!(0, scale_1.isOrdinalScale)(scaleY)) - return [0, 1]; - const { __data__: data } = element; - const { y } = data; - const [e1, e2] = extentOf(scaleY, y, padding); - return [e1, e2]; - }; - const bandShapeOf = (element, style) => { - const { padding } = style; - const [x1, x2] = sizeXOf(element, padding); - const [y1, y2] = sizeYOf(element, padding); - const points = [ - [x1, y1], - [x2, y1], - [x2, y2], - [x1, y2], - ].map((d) => coordinate.map(d)); - const { __data__: data } = element; - const { y: dy, y1: dy1 } = data; - return (0, color_1.rect)(document, points, { y: dy, y1: dy1 }, coordinate, style); - }; - // Shape without ordinal style. - // Clone and scale it. - const cloneShapeOf = (element, style) => { - const { transform = 'scale(1.2, 1.2)', transformOrigin = 'center center', stroke = '' } = style, rest = __rest(style, ["transform", "transformOrigin", "stroke"]); - const finalStyle = Object.assign({ transform, transformOrigin, stroke }, rest); - const shape = element.cloneNode(true); - for (const [key, value] of Object.entries(finalStyle)) { - shape.style[key] = value; - } - return shape; - }; - const isOrdinalShape = () => { - const { x, y } = scale; - return [x, y].some(scale_1.isOrdinalScale); - }; - const append = (element) => { - if (element.background) - element.background.remove(); - const _a = (0, array_1.mapObject)(rest, (d) => valueof(d, element)), { fill = '#CCD6EC', fillOpacity = 0.3, zIndex = -2, padding = 0.001, lineWidth = 0 } = _a, style = __rest(_a, ["fill", "fillOpacity", "zIndex", "padding", "lineWidth"]); - const finalStyle = Object.assign(Object.assign({}, style), { fill, - fillOpacity, - zIndex, - padding, - lineWidth }); - const shapeOf = isOrdinalShape() ? bandShapeOf : cloneShapeOf; - const shape = shapeOf(element, finalStyle); - shape.className = BACKGROUND_CLASS_NAME; - element.parentNode.parentNode.appendChild(shape); - element.background = shape; - }; - const remove = (element) => { - var _a; - (_a = element.background) === null || _a === void 0 ? void 0 : _a.remove(); - element.background = null; - }; - const is = (element) => { - return element.className === BACKGROUND_CLASS_NAME; - }; - return [append, remove, is]; -} -exports.renderBackground = renderBackground; -function setCursor(root, cursor) { - // @ts-ignore - const canvas = root.getRootNode().defaultView; - const dom = canvas.getContextService().getDomElement(); - if (dom === null || dom === void 0 ? void 0 : dom.style) { - root.cursor = dom.style.cursor; - dom.style.cursor = cursor; - } -} -exports.setCursor = setCursor; -function restoreCursor(root) { - setCursor(root, root.cursor); -} -exports.restoreCursor = restoreCursor; -function selectElementByData(elements, data, datum) { - return elements.find((d) => Object.entries(data).every(([key, value]) => datum(d)[key] === value)); -} -exports.selectElementByData = selectElementByData; -function getPointsR(point, nextPoint) { - return Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)); -} -exports.getPointsR = getPointsR; -// Points create path. -function getPointsPath(points, isClose = false) { - const path = (0, util_1.filter)(points, (d) => !!d).map((d, i) => { - return [i === 0 ? 'M' : 'L', ...d]; - }); - if (isClose) { - path.push(['Z']); - } - return path; -} -exports.getPointsPath = getPointsPath; -// Get element. -function getElements(plot) { - return plot.querySelectorAll('.element'); -} -exports.getElements = getElements; -// Get Theta coordinate round path. -function getThetaPath(center, points, isBig = 0) { - const path = [['M', ...points[1]]]; - const innerRadius = getPointsR(center, points[1]); - const outerRadius = getPointsR(center, points[0]); - if (innerRadius === 0) { - path.push(['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']); - } - else { - path.push(['A', innerRadius, innerRadius, 0, isBig, 0, ...points[2]], ['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']); - } - return path; -} -exports.getThetaPath = getThetaPath; -function maybeRoot(node, rootOf) { - if (rootOf(node)) - return node; - let root = node.parent; - while (root && !rootOf(root)) - root = root.parent; - return root; -} -exports.maybeRoot = maybeRoot; -exports.VALID_FIND_BY_X_MARKS = ['interval', 'point', 'density']; -/** - * @description Create function that can find element by event. - * @returns Element find function. - */ -function createFindElementByEvent({ elementsof, root, coordinate, scale, validFindByXMarks = exports.VALID_FIND_BY_X_MARKS, }) { - var _a, _b; - let elements = elementsof(root); - const getValidFindByXMarks = (d) => validFindByXMarks.includes(d.markType); - const hasValidFindByXMarks = elements.find(getValidFindByXMarks); - // Try to find element by x position. - if (hasValidFindByXMarks) { - elements = elements.filter(getValidFindByXMarks); - const scaleX = scale.x; - const scaleSeries = scale.series; - const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0; - const xof = scaleSeries - ? (d) => { - const seriesCount = Math.round(1 / scaleSeries.valueBandWidth); - return (d.__data__.x + - d.__data__.series * bandWidth + - bandWidth / (seriesCount * 2)); - } - : (d) => d.__data__.x + bandWidth / 2; - // Sort for bisector search. - elements.sort((a, b) => xof(a) - xof(b)); - return (event) => { - const mouse = mousePosition(root, event); - if (!mouse) - return; - const [abstractX] = coordinate.invert(mouse); - const search = (0, d3_array_1.bisector)(xof).center; - const i = search(elements, abstractX); - const target = elements[i]; - return target; - }; - } - // If there is no valid element find by x, just return the target element. - return (event) => { - const { target } = event; - return maybeRoot(target, (node) => { - if (!node.classList) - return false; - return node.classList.includes('element'); - }); - }; -} -exports.createFindElementByEvent = createFindElementByEvent; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {"../utils/selection":1751263815883,"../utils/array":1751263815830,"../runtime":1751263816081,"../utils/scale":1751263816057,"../shape/interval/color":1751263815881,"../utils/coordinate":1751263815882,"../utils/style":1751263816122,"../shape/utils":1751263815885,"../utils/vector":1751263815873,"../utils/traverse-elements":1751263816123}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816081, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.destroy = exports.renderToMountedElement = exports.render = void 0; -__exportStar(require("./constant"), exports); -__exportStar(require("./types/common"), exports); -__exportStar(require("./types/component"), exports); -__exportStar(require("./types/options"), exports); -__exportStar(require("./types/transform"), exports); -__exportStar(require("./types/encode"), exports); -__exportStar(require("./types/mark"), exports); -__exportStar(require("./types/data"), exports); -var render_1 = require("./render"); -Object.defineProperty(exports, "render", { enumerable: true, get: function () { return render_1.render; } }); -Object.defineProperty(exports, "renderToMountedElement", { enumerable: true, get: function () { return render_1.renderToMountedElement; } }); -Object.defineProperty(exports, "destroy", { enumerable: true, get: function () { return render_1.destroy; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./constant":1751263816082,"./types/common":1751263816083,"./types/component":1751263816084,"./types/options":1751263816085,"./types/transform":1751263816086,"./types/encode":1751263816087,"./types/mark":1751263816088,"./types/data":1751263816089,"./render":1751263816090}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816082, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MASK_CLASS_NAME = exports.AREA_CLASS_NAME = exports.LABEL_CLASS_NAME = exports.COMPONENT_CLASS_NAME = exports.PLOT_CLASS_NAME = exports.VIEW_CLASS_NAME = exports.ELEMENT_CLASS_NAME = exports.LABEL_LAYER_CLASS_NAME = exports.MAIN_LAYER_CLASS_NAME = void 0; -exports.MAIN_LAYER_CLASS_NAME = 'main-layer'; -exports.LABEL_LAYER_CLASS_NAME = 'label-layer'; -exports.ELEMENT_CLASS_NAME = 'element'; -exports.VIEW_CLASS_NAME = 'view'; -exports.PLOT_CLASS_NAME = 'plot'; -exports.COMPONENT_CLASS_NAME = 'component'; -exports.LABEL_CLASS_NAME = 'label'; -exports.AREA_CLASS_NAME = 'area'; -exports.MASK_CLASS_NAME = 'mask'; -//# sourceMappingURL=constant.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816083, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=common.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816084, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=component.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816085, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=options.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816086, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=transform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816087, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=encode.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816088, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816089, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=data.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816090, function(require, module, exports) { - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.destroy = exports.renderToMountedElement = exports.render = void 0; -const g_1 = require("@antv/g"); -const g_canvas_1 = require("@antv/g-canvas"); -const g_plugin_dragndrop_1 = require("@antv/g-plugin-dragndrop"); -const util_1 = require("@antv/util"); -const event_emitter_1 = __importDefault(require("@antv/event-emitter")); -const selection_1 = require("../utils/selection"); -const event_1 = require("../utils/event"); -const helper_1 = require("../utils/helper"); -const expr_1 = require("../utils/expr"); -const plot_1 = require("./plot"); -const constant_1 = require("./constant"); -const option_preprocess_1 = require("./option-preprocess"); -/** - * Infer key for each node of view tree. - * Each key should be unique in the entire view tree. - * The key is for incremental render when view tree is changed. - * @todo Fix custom key equals to inferred key. - */ -function inferKeys(options) { - const root = (0, util_1.deepMix)({}, options); - const nodeParent = new Map([[root, null]]); - const nodeIndex = new Map([[null, -1]]); - const discovered = [root]; - while (discovered.length) { - const node = discovered.shift(); - // If key of node is not specified, using parentKey and the index for it - // in parent.children as its key. - // e.g. The key of node named 'a' will be 'a', and the key of node named - // 'b' will be 'parent-1' in the following view tree specification. - // { key: 'parent', children: [{ name: 'a', key: 'a' }, { name: 'b' }] } - if (node.key === undefined) { - const parent = nodeParent.get(node); - const index = nodeIndex.get(node); - const key = parent === null ? `${0}` : `${parent.key}-${index}`; - node.key = key; - } - const { children = [] } = node; - if (Array.isArray(children)) { - for (let i = 0; i < children.length; i++) { - // Clone node as well. - const child = (0, util_1.deepMix)({}, children[i]); - children[i] = child; - nodeParent.set(child, node); - nodeIndex.set(child, i); - discovered.push(child); - } - } - } - return root; -} -function Canvas(width, height) { - const renderer = new g_canvas_1.Renderer(); - // DragAndDropPlugin is for interaction. - renderer.registerPlugin(new g_plugin_dragndrop_1.Plugin()); - return new g_1.Canvas({ - width, - height, - container: document.createElement('div'), - renderer: renderer, - }); -} -function render(options, context = {}, resolve = () => { }, reject = (e) => { - throw e; -}) { - const afterParsedOptions = (0, expr_1.parseOptionsExpr)(options); - // Initialize the context if it is not provided. - const { width = 640, height = 480, depth = 0 } = afterParsedOptions; - // Preprocessing here, such as syntactic sugar. - const preprocessedOption = (0, option_preprocess_1.preprocessOption)(afterParsedOptions); - const keyed = inferKeys(preprocessedOption); - const { canvas = Canvas(width, height), emitter = new event_emitter_1.default(), library, } = context; - context.canvas = canvas; - context.emitter = emitter; - const { width: prevWidth, height: prevHeight } = canvas.getConfig(); - if (prevWidth !== width || prevHeight !== height) { - canvas.resize(width, height); - } - emitter.emit(event_1.ChartEvent.BEFORE_RENDER); - // Plot the chart and mutate context. - // Make sure that plot chart after container is ready for every time. - const selection = (0, selection_1.select)(canvas.document.documentElement); - canvas.ready - .then(() => (0, plot_1.plot)(Object.assign(Object.assign({}, keyed), { width, height, depth }), selection, context)) - .then(() => { - // Place the center of whole scene at z axis' origin. - if (depth) { - const [x, y] = canvas.document.documentElement.getPosition(); - // Since `render` method can be called for multiple times, use setPosition instead of translate here. - canvas.document.documentElement.setPosition(x, y, -depth / 2); - } - // Wait for the next tick. - // FIXME: Use `rendered?` event instead of `requestAnimationFrame`. - canvas.requestAnimationFrame(() => { - canvas.requestAnimationFrame(() => { - emitter.emit(event_1.ChartEvent.AFTER_RENDER); - resolve === null || resolve === void 0 ? void 0 : resolve(); - }); - }); - }) - .catch((e) => { - reject === null || reject === void 0 ? void 0 : reject(e); - }); - // Return the container HTML element wraps the canvas or svg element. - return normalizeContainer(canvas.getConfig().container); -} -exports.render = render; -function renderToMountedElement(options, context = {}, resolve = () => { }, reject = (e) => { - throw e; -}) { - var _a; - // Initialize the context if it is not provided. - const { width = 640, height = 480 } = options; - const keyed = inferKeys(options); - const { group = new g_1.Group(), emitter = new event_emitter_1.default(), library, } = context; - if (!(group === null || group === void 0 ? void 0 : group.parentElement)) { - (0, helper_1.error)(`renderToMountedElement can't render chart to unmounted group.`); - } - const selection = (0, selection_1.select)(group); - context.group = group; - context.emitter = emitter; - context.canvas = - context.canvas || ((_a = group === null || group === void 0 ? void 0 : group.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView); - emitter.emit(event_1.ChartEvent.BEFORE_RENDER); - // Plot the chart and mutate context. - // Make sure that plot chart after container is ready for every time. - (0, plot_1.plot)(Object.assign(Object.assign({}, keyed), { width, height }), selection, context) - .then(() => { - var _a; - (_a = context.canvas) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(() => { - emitter.emit(event_1.ChartEvent.AFTER_RENDER); - resolve === null || resolve === void 0 ? void 0 : resolve(); - }); - }) - .catch((e) => { - reject === null || reject === void 0 ? void 0 : reject(e); - }); - // Return the Group wraps the canvas or svg element. - return group; -} -exports.renderToMountedElement = renderToMountedElement; -function destroy(options, context = {}, isDestroyCanvas = false) { - const { canvas, emitter } = context; - if (canvas) { - destroyAllInteractions(canvas); - isDestroyCanvas ? canvas.destroy() : canvas.destroyChildren(); - } - emitter.off(); -} -exports.destroy = destroy; -/** - * Destroy all interactions mounted on the canvas. - */ -function destroyAllInteractions(canvas) { - const viewGroups = canvas.getRoot().querySelectorAll(`.${constant_1.VIEW_CLASS_NAME}`); - viewGroups === null || viewGroups === void 0 ? void 0 : viewGroups.forEach((group) => { - const { nameInteraction = new Map() } = group; - if ((nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.size) > 0) { - Array.from(nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.values()).forEach((value) => { - value === null || value === void 0 ? void 0 : value.destroy(); - }); - } - }); -} -function normalizeContainer(container) { - return typeof container === 'string' - ? document.getElementById(container) - : container; -} -//# sourceMappingURL=render.js.map -}, function(modId) { var map = {"../utils/selection":1751263815883,"../utils/event":1751263816091,"../utils/helper":1751263815829,"../utils/expr":1751263816092,"./plot":1751263816093,"./constant":1751263816082,"./option-preprocess":1751263816119}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816091, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChartEvent = void 0; -// to prevent users from tampering with internal values. -exports.ChartEvent = { - BEFORE_RENDER: 'beforerender', - AFTER_RENDER: 'afterrender', - BEFORE_PAINT: 'beforepaint', - AFTER_PAINT: 'afterpaint', - BEFORE_CHANGE_DATA: 'beforechangedata', - AFTER_CHANGE_DATA: 'afterchangedata', - BEFORE_CLEAR: 'beforeclear', - AFTER_CLEAR: 'afterclear', - BEFORE_DESTROY: 'beforedestroy', - AFTER_DESTROY: 'afterdestroy', - BEFORE_CHANGE_SIZE: 'beforechangesize', - AFTER_CHANGE_SIZE: 'afterchangesize', - POINTER_TAP: 'pointertap', - POINTER_DOWN: 'pointerdown', - POINTER_UP: 'pointerup', - POINTER_OVER: 'pointerover', - POINTER_OUT: 'pointerout', - POINTER_MOVE: 'pointermove', - POINTER_ENTER: 'pointerenter', - POINTER_LEAVE: 'pointerleave', - POINTER_UPOUTSIDE: 'pointerupoutside', - DRAG_START: 'dragstart', - DRAG: 'drag', - DRAG_END: 'dragend', - DRAG_ENTER: 'dragenter', - DRAG_LEAVE: 'dragleave', - DRAG_OVER: 'dragover', - DROP: 'DROP', - CLICK: 'click', - DBLCLICK: 'dblclick', -}; -//# sourceMappingURL=event.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816092, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseOptionsExpr = exports.EXPR_WHITE_LIST = void 0; -const expr_1 = require("@antv/expr"); -const util_1 = require("@antv/util"); -const lru_1 = require("./lru"); -// Whitelist of properties that can contain expressions. -exports.EXPR_WHITE_LIST = ['style', 'encode', 'labels', 'children']; -/** - * Compiles an expression string into a function. - * @param expr Expression string to compile. - * @returns Compiled function or original string if empty. - */ -const compileExpression = (0, lru_1.lru)((expr) => { - const evaluator = (0, expr_1.compile)(expr); - return (...args) => { - const paramNames = Array.from({ length: args.length }, (_, i) => String.fromCharCode(97 + i)); - const namedParams = Object.fromEntries(args.map((value, index) => [paramNames[index], value])); - // global is used to overview what can i get in props. - return evaluator(Object.assign(Object.assign({}, namedParams), { global: Object.assign({}, namedParams) })); - }; -}, (expr) => expr, 128); -/** - * Processes options object to convert expressions to functions. - * @param options Options object to process. - * @param isSpecRoot Whether the options is the root of the spec. - * @returns Processed options object with expressions converted to functions. - */ -function parseOptionsExpr(options, isSpecRoot = true) { - if (Array.isArray(options)) { - return options.map((_, i) => parseOptionsExpr(options[i], isSpecRoot)); - } - if (typeof options === 'object' && options) { - return (0, util_1.mapValues)(options, (value, key) => { - // if options is root and the key is in the white list, parse the expression. - if (isSpecRoot && exports.EXPR_WHITE_LIST.includes(key)) { - return parseOptionsExpr(value, key === 'children'); - } - if (!isSpecRoot) { - return parseOptionsExpr(value, false); - } - return value; - }); - } - // if options is a string and is a valid expression. - if (typeof options === 'string') { - const trimmed = options.trim(); - if (trimmed.startsWith('{') && trimmed.endsWith('}')) { - return compileExpression(trimmed.slice(1, -1)); - } - } - return options; -} -exports.parseOptionsExpr = parseOptionsExpr; -//# sourceMappingURL=expr.js.map -}, function(modId) { var map = {"./lru":1751263815967}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816093, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.applyStyle = exports.plot = void 0; -const g_1 = require("@antv/g"); -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const array_1 = require("../utils/array"); -const event_1 = require("../utils/event"); -const helper_1 = require("../utils/helper"); -const selection_1 = require("../utils/selection"); -const component_1 = require("./component"); -const constant_1 = require("./constant"); -const coordinate_1 = require("./coordinate"); -const layout_1 = require("./layout"); -const library_1 = require("./library"); -const mark_1 = require("./mark"); -const scale_1 = require("./scale"); -const transform_1 = require("./transform"); -function plot(options, selection, context) { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const [useComposition] = (0, library_1.useLibrary)('composition', library); - const [useInteraction] = (0, library_1.useLibrary)('interaction', library); - // Some helper functions. - const marks = new Set(Object.keys(library) - .map((d) => { var _a; return (_a = /mark\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; }) - .filter(helper_1.defined)); - const staticMarks = new Set(Object.keys(library) - .map((d) => { var _a; return (_a = /component\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; }) - .filter(helper_1.defined)); - const typeOf = (node) => { - const { type } = node; - if (typeof type === 'function') { - // @ts-ignore - const { props = {} } = type; - const { composite = true } = props; - if (composite) - return 'mark'; - } - if (typeof type !== 'string') - return type; - if (marks.has(type) || staticMarks.has(type)) - return 'mark'; - return type; - }; - const isMark = (node) => typeOf(node) === 'mark'; - const isStandardView = (node) => typeOf(node) === 'standardView'; - const isStaticMark = (node) => { - const { type } = node; - if (typeof type !== 'string') - return false; - if (staticMarks.has(type)) - return true; - return false; - }; - const transform = (node) => { - if (isStandardView(node)) - return [node]; - const type = typeOf(node); - const composition = useComposition({ type, static: isStaticMark(node) }); - return composition(node); - }; - // Some temporary variables help parse the view tree. - const views = []; - const viewNode = new Map(); - const nodeState = new Map(); - const discovered = [options]; - const nodeGenerators = []; - while (discovered.length) { - const node = discovered.shift(); - if (isStandardView(node)) { - // Initialize view to get data to be visualized. If the marks - // of the view have already been initialized (facet view), - // initialize the view based on the initialized mark states, - // otherwise initialize it from beginning. - const state = nodeState.get(node); - const [view, children] = state - ? initializeState(state, node, library) - : yield initializeView(node, context); - viewNode.set(view, node); - views.push(view); - // Transform children, they will be transformed into - // standardView if they are mark or view node. - const transformedNodes = children - .flatMap(transform) - .map((d) => (0, coordinate_1.coordinate2Transform)(d, library)); - discovered.push(...transformedNodes); - // Only StandardView can be treated as facet and it - // should sync position scales among facets normally. - if (transformedNodes.every(isStandardView)) { - const states = yield Promise.all(transformedNodes.map((d) => initializeMarks(d, context))); - // Note!!! - // This will mutate scales for marks. - (0, scale_1.syncFacetsScales)(states); - for (let i = 0; i < transformedNodes.length; i++) { - const nodeT = transformedNodes[i]; - const state = states[i]; - nodeState.set(nodeT, state); - } - } - } - else { - // Apply transform to get data in advance for non-mark composition - // node, which makes sure that composition node can preprocess the - // data to produce more nodes based on it. - const n = isMark(node) ? node : yield applyTransform(node, context); - const N = transform(n); - if (Array.isArray(N)) - discovered.push(...N); - else if (typeof N === 'function') - nodeGenerators.push(N()); - } - } - context.emitter.emit(event_1.ChartEvent.BEFORE_PAINT); - // Plot chart. - const enterContainer = new Map(); - const updateContainer = new Map(); - const transitions = []; - selection - .selectAll(className(constant_1.VIEW_CLASS_NAME)) - .data(views, (d) => d.key) - .join((enter) => enter - .append('g') - .attr('className', constant_1.VIEW_CLASS_NAME) - .attr('id', (view) => view.key) - .call(applyTranslate) - .each(function (view, i, element) { - plotView(view, (0, selection_1.select)(element), transitions, context); - enterContainer.set(view, element); - }), (update) => update.call(applyTranslate).each(function (view, i, element) { - plotView(view, (0, selection_1.select)(element), transitions, context); - updateContainer.set(view, element); - }), (exit) => exit - .each(function (d, i, element) { - // Remove existed interactions. - const interactions = element['nameInteraction'].values(); - for (const interaction of interactions) { - interaction.destroy(); - } - }) - .remove()); - // Apply interactions. - const viewInstanceof = (viewContainer, updateInteractions, oldStore) => { - return Array.from(viewContainer.entries()).map(([view, container]) => { - // Index state by component or interaction name, - // such as legend, scrollbar, brushFilter. - // Each state transform options to another options. - const store = oldStore || new Map(); - const setState = (key, reducer = (x) => x) => store.set(key, reducer); - const options = viewNode.get(view); - const update = createUpdateView((0, selection_1.select)(container), options, context); - return { - view, - container, - options, - setState, - update: (from, updateTypes) => __awaiter(this, void 0, void 0, function* () { - // Apply all state functions to get new options. - const reducer = (0, helper_1.compose)(Array.from(store.values())); - const newOptions = reducer(options); - return yield update(newOptions, from, () => { - if ((0, util_1.isArray)(updateTypes)) { - updateInteractions(viewContainer, updateTypes, store); - } - }); - }), - }; - }); - }; - const updateInteractions = (container = updateContainer, updateType, oldStore) => { - var _a; - // Interactions for update views. - const updateViewInstances = viewInstanceof(container, updateInteractions, oldStore); - for (const target of updateViewInstances) { - const { options, container } = target; - const nameInteraction = container['nameInteraction']; - let typeOptions = inferInteraction(options); - if (updateType) { - typeOptions = typeOptions.filter((v) => updateType.includes(v[0])); - } - for (const typeOption of typeOptions) { - const [type, option] = typeOption; - // Remove interaction for existed views. - const prevInteraction = nameInteraction.get(type); - if (prevInteraction) - (_a = prevInteraction.destroy) === null || _a === void 0 ? void 0 : _a.call(prevInteraction); - // Apply new interaction. - if (option) { - const interaction = useThemeInteraction(target.view, type, option, useInteraction); - const destroy = interaction(target, updateViewInstances, context.emitter); - nameInteraction.set(type, { destroy }); - } - } - } - }; - // Interactions for enter views. - const enterViewInstances = viewInstanceof(enterContainer, updateInteractions); - for (const target of enterViewInstances) { - const { options } = target; - // A Map index interaction by interaction name. - const nameInteraction = new Map(); - target.container['nameInteraction'] = nameInteraction; - // Apply interactions. - for (const typeOption of inferInteraction(options)) { - const [type, option] = typeOption; - if (option) { - const interaction = useThemeInteraction(target.view, type, option, useInteraction); - const destroy = interaction(target, enterViewInstances, context.emitter); - nameInteraction.set(type, { destroy }); - } - } - } - updateInteractions(); - // Author animations. - const { width, height } = options; - const keyframes = []; - for (const nodeGenerator of nodeGenerators) { - // Delay the rendering of animation keyframe. Different animation - // created by different nodeGenerator will play in the same time. - // eslint-disable-next-line no-async-promise-executor - const keyframe = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { - for (const node of nodeGenerator) { - const sizedNode = Object.assign({ width, height }, node); - yield plot(sizedNode, selection, context); - } - resolve(); - })); - keyframes.push(keyframe); - } - context.views = views; - // Clear and update animation. - (_a = context.animations) === null || _a === void 0 ? void 0 : _a.forEach((animation) => animation === null || animation === void 0 ? void 0 : animation.cancel()); - context.animations = transitions; - context.emitter.emit(event_1.ChartEvent.AFTER_PAINT); - // Note!!! - // The returned promise will never resolved if one of nodeGenerator - // never stop to yield node, which may created by a keyframe composition - // with iteration count set to infinite. - const finished = transitions - .filter(helper_1.defined) - .map(cancel) - .map((d) => d.finished); - return Promise.all([...finished, ...keyframes]); - }); -} -exports.plot = plot; -function applyTranslate(selection) { - selection.style('transform', (d) => `translate(${d.layout.x}, ${d.layout.y})`); -} -function definedInteraction(library) { - const [, createInteraction] = (0, library_1.useLibrary)('interaction', library); - return (d) => { - const [name, options] = d; - try { - return [name, createInteraction(name)]; - } - catch (_a) { - return [name, options.type]; - } - }; -} -function createUpdateView(selection, options, context) { - const { library } = context; - const createDefinedInteraction = definedInteraction(library); - const filter = (d) => d[1] && d[1].props && d[1].props.reapplyWhenUpdate; - const interactions = inferInteraction(options); - const updates = interactions - .map(createDefinedInteraction) - .filter(filter) - .map((d) => d[0]); - return (newOptions, source, callback) => __awaiter(this, void 0, void 0, function* () { - const transitions = []; - const [newView, newChildren] = yield initializeView(newOptions, context); - plotView(newView, selection, transitions, context); - // Update interaction need to reapply when update. - for (const name of updates.filter((d) => d !== source)) { - updateInteraction(name, selection, newOptions, newView, context); - } - for (const child of newChildren) { - plot(child, selection, context); - } - callback(); - return { options: newOptions, view: newView }; - }); -} -function updateInteraction(name, selection, options, view, context) { - var _a; - const { library } = context; - const [useInteraction] = (0, library_1.useLibrary)('interaction', library); - // Instances for interaction. - const container = selection.node(); - const nameInteraction = container['nameInteraction']; - const interactionOptions = inferInteraction(options).find(([d]) => d === name); - // Destroy older interaction. - const interaction = nameInteraction.get(name); - if (!interaction) - return; - (_a = interaction.destroy) === null || _a === void 0 ? void 0 : _a.call(interaction); - if (!interactionOptions[1]) - return; - // Apply new interaction. - const applyInteraction = useThemeInteraction(view, name, interactionOptions[1], useInteraction); - const target = { - options, - view, - container: selection.node(), - update: (options) => Promise.resolve(options), - }; - const destroy = applyInteraction(target, [], context.emitter); - nameInteraction.set(name, { destroy }); -} -function initializeView(options, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const flattenOptions = yield transformMarks(options, context); - const mergedOptions = bubbleOptions(flattenOptions); - // @todo Remove this. - // !!! NOTE: Mute original view options. - // Update interaction and coordinate for this view. - options.interaction = mergedOptions.interaction; - options.coordinate = mergedOptions.coordinate; - // @ts-ignore - options.marks = [...mergedOptions.marks, ...mergedOptions.components]; - const transformedOptions = (0, coordinate_1.coordinate2Transform)(mergedOptions, library); - const state = yield initializeMarks(transformedOptions, context); - return initializeState(state, transformedOptions, library); - }); -} -function bubbleOptions(options) { - const { coordinate: viewCoordinate = {}, interaction: viewInteraction = {}, style: viewStyle = {}, marks } = options, rest = __rest(options, ["coordinate", "interaction", "style", "marks"]); - const markCoordinates = marks.map((d) => d.coordinate || {}); - const markInteractions = marks.map((d) => d.interaction || {}); - const markViewStyles = marks.map((d) => d.viewStyle || {}); - const newCoordinate = [...markCoordinates, viewCoordinate].reduceRight((prev, cur) => (0, util_1.deepMix)(prev, cur), {}); - const newInteraction = [viewInteraction, ...markInteractions].reduce((prev, cur) => (0, util_1.deepMix)(prev, cur), {}); - const newStyle = [...markViewStyles, viewStyle].reduce((prev, cur) => (0, util_1.deepMix)(prev, cur), {}); - return Object.assign(Object.assign({}, rest), { marks, coordinate: newCoordinate, interaction: newInteraction, style: newStyle }); -} -function transformMarks(options, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const [useMark, createMark] = (0, library_1.useLibrary)('mark', library); - const staticMarks = new Set(Object.keys(library) - .map((d) => { var _a; return (_a = /component\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; }) - .filter(helper_1.defined)); - const { marks } = options; - const flattenMarks = []; - const components = []; - const discovered = [...marks]; - const { width, height } = (0, layout_1.computeRoughPlotSize)(options); - const markOptions = { options, width, height }; - // Pre order traversal. - while (discovered.length) { - const [node] = discovered.splice(0, 1); - // Apply data transform to get data. - const mark = (yield applyTransform(node, context)); - const { type = (0, helper_1.error)('G2Mark type is required.'), key } = mark; - // For components. - if (staticMarks.has(type)) - components.push(mark); - else { - const { props = {} } = createMark(type); - const { composite = true } = props; - if (!composite) - flattenMarks.push(mark); - else { - // Unwrap data from { value: data } to data, - // then the composite mark can process the normalized data. - const { data } = mark; - const newMark = Object.assign(Object.assign({}, mark), { data: data ? (Array.isArray(data) ? data : data.value) : data }); - // Convert composite mark to marks. - const marks = yield useMark(newMark, markOptions); - const M = Array.isArray(marks) ? marks : [marks]; - discovered.unshift(...M.map((d, i) => (Object.assign(Object.assign({}, d), { key: `${key}-${i}` })))); - } - } - } - return Object.assign(Object.assign({}, options), { marks: flattenMarks, components }); - }); -} -function initializeMarks(options, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const [useTheme] = (0, library_1.useLibrary)('theme', library); - const [, createMark] = (0, library_1.useLibrary)('mark', library); - const { theme: partialTheme, marks: partialMarks, coordinates = [], } = options; - const theme = useTheme(inferTheme(partialTheme)); - const markState = new Map(); - // Initialize channels for marks. - for (const markOptions of partialMarks) { - const { type } = markOptions; - const { props = {} } = createMark(type); - const markAndState = yield (0, mark_1.initializeMark)(markOptions, props, context); - if (markAndState) { - const [initializedMark, state] = markAndState; - markState.set(initializedMark, state); - } - } - // Group channels by scale key, each group has scale. - const scaleChannels = (0, d3_array_1.group)(Array.from(markState.values()).flatMap((d) => d.channels), ({ scaleKey }) => scaleKey); - // Infer scale for each channel groups. - for (const channels of scaleChannels.values()) { - // Merge scale options for these channels. - const scaleOptions = channels.reduce((total, { scale }) => (0, util_1.deepMix)(total, scale), {}); - const { scaleKey } = channels[0]; - // Use the fields of the first channel as the title. - const { values: FV } = channels[0]; - const fields = Array.from(new Set(FV.map((d) => d.field).filter(helper_1.defined))); - const options = (0, util_1.deepMix)({ - guide: { title: fields.length === 0 ? undefined : fields }, - field: fields[0], - }, scaleOptions); - // Use the name of the first channel as the scale name. - const { name } = channels[0]; - const values = channels.flatMap(({ values }) => values.map((d) => d.value)); - const scale = Object.assign(Object.assign({}, (0, scale_1.inferScale)(name, values, options, coordinates, theme, library)), { uid: Symbol('scale'), key: scaleKey }); - channels.forEach((channel) => (channel.scale = scale)); - } - return markState; - }); -} -function useThemeInteraction(view, type, option, useInteraction) { - const theme = view.theme; - const defaults = typeof type === 'string' ? theme[type] || {} : {}; - const interaction = useInteraction((0, util_1.deepMix)(defaults, Object.assign({ type }, option))); - return interaction; -} -function initializeState(markState, options, library) { - var _a; - const [useMark] = (0, library_1.useLibrary)('mark', library); - const [useTheme] = (0, library_1.useLibrary)('theme', library); - const [useLabelTransform] = (0, library_1.useLibrary)('labelTransform', library); - const { key, frame = false, theme: partialTheme, clip, style = {}, labelTransform = [], } = options; - const theme = useTheme(inferTheme(partialTheme)); - // Infer components and compute layout. - const states = Array.from(markState.values()); - const scales = (0, scale_1.collectScales)(states, options); - const components = (0, component_1.normalizeComponents)((0, component_1.inferComponent)(inferComponentScales(Array.from(scales), states, markState), options, library)); - const layout = (0, layout_1.computeLayout)(components, options, theme, library); - const coordinate = (0, coordinate_1.createCoordinate)(layout, options, library); - const framedStyle = frame - ? (0, util_1.deepMix)({ mainLineWidth: 1, mainStroke: '#000' }, style) - : style; - // Place components and mutate their bbox. - (0, layout_1.placeComponents)((0, component_1.groupComponents)(components), coordinate, layout); - // AxisZ need a copy of axisX and axisY to show grids in X-Z & Y-Z planes. - (0, layout_1.processAxisZ)(components); - // Index scale instance by uid. - const uidScale = new Map(Array.from(markState.values()).flatMap((state) => { - const { channels } = state; - return channels.map(({ scale }) => [ - scale.uid, - (0, scale_1.useRelationScale)(scale, library), - ]); - })); - (0, scale_1.groupTransform)(markState, uidScale); - // Scale from marks and components. - const scaleInstance = {}; - // Initialize scale from components. - for (const component of components) { - const { scales: scaleDescriptors = [] } = component; - const scales = []; - for (const descriptor of scaleDescriptors) { - const { name, uid } = descriptor; - const scale = (_a = uidScale.get(uid)) !== null && _a !== void 0 ? _a : (0, scale_1.useRelationScale)(descriptor, library); - scales.push(scale); - // Delivery the scale of axisX to the AxisY, - // in order to calculate the angle of axisY component when rendering radar chart. - if (name === 'y') { - scale.update(Object.assign(Object.assign({}, scale.getOptions()), { xScale: scaleInstance.x })); - } - (0, scale_1.assignScale)(scaleInstance, { [name]: scale }); - } - component.scaleInstances = scales; - } - // Calc data to be rendered for each mark. - // @todo More readable APIs for Container which stays - // the same style with JS standard and lodash APIs. - // @todo More proper way to index scale for different marks. - const children = []; - const dataMap = new Map(); - for (const [mark, state] of markState.entries()) { - const { - // scale, - // Callback to create children options based on this mark. - children: createChildren, - // The total count of data (both show and hide)for this facet. - // This is for unit visualization to sync data domain. - dataDomain, modifier, key: markKey, data, } = mark; - dataMap.set(markKey, data); - const { index, channels, tooltip } = state; - const scale = Object.fromEntries(channels.map(({ name, scale }) => [name, scale])); - // Transform abstract value to visual value by scales. - const markScaleInstance = (0, array_1.mapObject)(scale, ({ uid }) => uidScale.get(uid)); - (0, scale_1.assignScale)(scaleInstance, markScaleInstance); - const value = (0, scale_1.applyScale)(channels, markScaleInstance); - // Calc points and transformation for each data, - // and then transform visual value to visual data. - const calcPoints = useMark(mark); - const [I, P, S] = filterValid(calcPoints(index, markScaleInstance, value, coordinate)); - const count = dataDomain || I.length; - const T = modifier ? modifier(P, count, layout) : []; - const titleOf = (i) => { var _a, _b; return (_b = (_a = tooltip.title) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.value; }; - const itemsOf = (i) => tooltip.items.map((V) => V[i]); - const visualData = I.map((d, i) => { - const datum = Object.assign({ points: P[i], transform: T[i], index: d, markKey, viewKey: key, data: data[d] }, (tooltip && { - title: titleOf(d), - items: itemsOf(d), - })); - for (const [k, V] of Object.entries(value)) { - datum[k] = V[d]; - if (S) - datum[`series${(0, util_1.upperFirst)(k)}`] = S[i].map((i) => V[i]); - } - if (S) - datum['seriesIndex'] = S[i]; - if (S && tooltip) { - datum['seriesItems'] = S[i].map((si) => itemsOf(si)); - datum['seriesTitle'] = S[i].map((si) => titleOf(si)); - } - return datum; - }); - state.data = visualData; - state.index = I; - // Create children options by children callback, - // and then propagate data to each child. - const markChildren = createChildren === null || createChildren === void 0 ? void 0 : createChildren(visualData, markScaleInstance, layout); - children.push(...(markChildren || [])); - } - const view = { - layout, - theme, - coordinate, - markState, - key, - clip, - scale: scaleInstance, - style: framedStyle, - components, - data: dataMap, - labelTransform: (0, helper_1.compose)(labelTransform.map(useLabelTransform)), - }; - return [view, children]; -} -function plotView(view, selection, transitions, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const { components, theme, layout, markState, coordinate, key, style, clip, scale, } = view; - // Render background for the different areas. - const { x, y, width, height } = layout, rest = __rest(layout, ["x", "y", "width", "height"]); - const areaKeys = ['view', 'plot', 'main', 'content']; - const I = areaKeys.map((_, i) => i); - const sizeKeys = ['a', 'margin', 'padding', 'inset']; - const areaStyles = areaKeys.map((d) => (0, helper_1.maybeSubObject)(Object.assign({}, theme.view, style), d)); - const areaSizes = sizeKeys.map((d) => (0, helper_1.subObject)(rest, d)); - const styleArea = (selection) => selection - .style('x', (i) => areaLayouts[i].x) - .style('y', (i) => areaLayouts[i].y) - .style('width', (i) => areaLayouts[i].width) - .style('height', (i) => areaLayouts[i].height) - .each(function (i, d, element) { - applyStyle((0, selection_1.select)(element), areaStyles[i]); - }); - let px = 0; - let py = 0; - let pw = width; - let ph = height; - const areaLayouts = I.map((i) => { - const size = areaSizes[i]; - const { left = 0, top = 0, bottom = 0, right = 0 } = size; - px += left; - py += top; - pw -= left + right; - ph -= top + bottom; - return { - x: px, - y: py, - width: pw, - height: ph, - }; - }); - selection - .selectAll(className(constant_1.AREA_CLASS_NAME)) - .data( - // Only render area with defined style. - I.filter((i) => (0, helper_1.defined)(areaStyles[i])), (i) => areaKeys[i]) - .join((enter) => enter - .append('rect') - .attr('className', constant_1.AREA_CLASS_NAME) - .style('zIndex', -2) - .call(styleArea), (update) => update.call(styleArea), (exit) => exit.remove()); - const animationExtent = computeAnimationExtent(markState); - const componentAnimateOptions = animationExtent - ? { duration: animationExtent[1] } - : false; - // Render components. - // @todo renderComponent return ctor and options. - // Key for each type of component. - // Index them grouped by position. - for (const [, C] of (0, d3_array_1.groups)(components, (d) => `${d.type}-${d.position}`)) { - C.forEach((d, i) => (d.index = i)); - } - const componentsTransitions = selection - .selectAll(className(constant_1.COMPONENT_CLASS_NAME)) - .data(components, (d) => `${d.type}-${d.position}-${d.index}`) - .join((enter) => enter - .append('g') - .style('zIndex', ({ zIndex }) => zIndex || -1) - .attr('className', constant_1.COMPONENT_CLASS_NAME) - .append((options) => (0, component_1.renderComponent)((0, util_1.deepMix)({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState)), (update) => update.transition(function (options, i, element) { - const { preserve = false } = options; - if (preserve) - return; - const newComponent = (0, component_1.renderComponent)((0, util_1.deepMix)({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState); - const { attributes } = newComponent; - const [node] = element.childNodes; - return node.update(attributes, false); - })) - .transitions(); - transitions.push(...componentsTransitions.flat().filter(helper_1.defined)); - // Main layer is for showing the main visual representation such as marks. There - // may be multiple main layers for a view, each main layer correspond to one of marks. - // @todo Test DOM structure. - const T = selection - .selectAll(className(constant_1.PLOT_CLASS_NAME)) - .data([layout], () => key) - .join((enter) => enter - // Make this layer interactive, such as click and mousemove events. - .append('rect') - .style('zIndex', 0) - .style('fill', 'transparent') - .attr('className', constant_1.PLOT_CLASS_NAME) - .call(updateBBox) - .call(updateLayers, Array.from(markState.keys())) - .call(applyClip, clip), (update) => update - .call(updateLayers, Array.from(markState.keys())) - .call((selection) => { - return animationExtent - ? animateBBox(selection, animationExtent) - : updateBBox(selection); - }) - .call(applyClip, clip)) - .transitions(); - transitions.push(...T.flat()); - // Render marks with corresponding data. - for (const [mark, state] of markState.entries()) { - const { data } = state; - const { key, class: cls, type } = mark; - const viewNode = selection.select(`#${key}`); - const shapeFunction = createMarkShapeFunction(mark, state, view, context); - const enterFunction = createEnterFunction(mark, state, view, library); - const updateFunction = createUpdateFunction(mark, state, view, library); - const exitFunction = createExitFunction(mark, state, view, library); - const facetElements = selectFacetElements(selection, viewNode, cls, 'element'); - const T = viewNode - .selectAll(className(constant_1.ELEMENT_CLASS_NAME)) - .selectFacetAll(facetElements) - .data(data, (d) => d.key, (d) => d.groupKey) - .join((enter) => enter - .append(shapeFunction) - // Note!!! Only one className can be set. - // Using attribute as alternative for other classNames. - .attr('className', constant_1.ELEMENT_CLASS_NAME) - .attr('markType', type) - .transition(function (data, i, element) { - return enterFunction(data, [element]); - }), (update) => update.call((selection) => { - const parent = selection.parent(); - const origin = (0, helper_1.useMemo)((node) => { - const [x, y] = node.getBounds().min; - return [x, y]; - }); - selection - .transition(function (data, index, element) { - maybeFacetElement(element, parent, origin); - const node = shapeFunction(data, index); - const animation = updateFunction(data, [element], [node]); - if (animation === null || animation === void 0 ? void 0 : animation.length) - return animation; - if (element.nodeName === node.nodeName && - node.nodeName !== 'g') { - (0, helper_1.copyAttributes)(element, node); - } - else { - element.parentNode.replaceChild(node, element); - node.className = constant_1.ELEMENT_CLASS_NAME; - // @ts-ignore - node.markType = type; - // @ts-ignore - node.__data__ = element.__data__; - } - return animation; - }) - .attr('markType', type) - .attr('className', constant_1.ELEMENT_CLASS_NAME); - }), (exit) => { - return exit - .each(function (d, i, element) { - element.__removed__ = true; - }) - .transition(function (data, i, element) { - return exitFunction(data, [element]); - }) - .remove(); - }, (merge) => merge - // Append elements to be merged. - .append(shapeFunction) - .attr('className', constant_1.ELEMENT_CLASS_NAME) - .attr('markType', type) - .transition(function (data, i, element) { - // Remove merged elements after animation finishing. - const { __fromElements__: fromElements } = element; - const transition = updateFunction(data, fromElements, [element]); - const exit = new selection_1.Selection(fromElements, null, element.parentNode); - exit.transition(transition).remove(); - return transition; - }), (split) => split - .transition(function (data, i, element) { - // Append splitted shapes. - const enter = new selection_1.Selection([], element.__toData__, element.parentNode); - const toElements = enter - .append(shapeFunction) - .attr('className', constant_1.ELEMENT_CLASS_NAME) - .attr('markType', type) - .nodes(); - return updateFunction(data, [element], toElements); - }) - // Remove elements to be splitted after animation finishing. - .remove()) - .transitions(); - transitions.push(...T.flat()); - } - // Plot label for this view. - plotLabel(view, selection, transitions, library, context); - }); -} -/** - * Auto hide labels be specify label layout. - */ -function plotLabel(view, selection, transitions, library, context) { - const [useLabelTransform] = (0, library_1.useLibrary)('labelTransform', library); - const { markState, labelTransform } = view; - const labelLayer = selection.select(className(constant_1.LABEL_LAYER_CLASS_NAME)).node(); - // A Map index shapeFunction by label. - const labelShapeFunction = new Map(); - // A Map index options by label. - const labelDescriptor = new Map(); - // Get all labels for this view. - const labels = Array.from(markState.entries()).flatMap(([mark, state]) => { - const { labels: labelOptions = [], key } = mark; - const shapeFunction = createLabelShapeFunction(mark, state, view, library, context); - const elements = selection - .select(`#${key}`) - .selectAll(className(constant_1.ELEMENT_CLASS_NAME)) - .nodes() - // Only select the valid element. - .filter((n) => !n.__removed__); - return labelOptions.flatMap((labelOption, i) => { - const { transform = [] } = labelOption, options = __rest(labelOption, ["transform"]); - return elements.flatMap((e) => { - const L = getLabels(options, i, e); - L.forEach((l) => { - labelShapeFunction.set(l, (data) => shapeFunction(Object.assign(Object.assign({}, data), { element: e }))); - labelDescriptor.set(l, labelOption); - }); - return L; - }); - }); - }); - // Render all labels. - const labelShapes = (0, selection_1.select)(labelLayer) - .selectAll(className(constant_1.LABEL_CLASS_NAME)) - .data(labels, (d) => d.key) - .join((enter) => enter - .append((d) => labelShapeFunction.get(d)(d)) - .attr('className', constant_1.LABEL_CLASS_NAME), (update) => update.each(function (d, i, element) { - // @todo Handle Label with different type. - const shapeFunction = labelShapeFunction.get(d); - const node = shapeFunction(d); - (0, helper_1.copyAttributes)(element, node); - }), (exit) => exit.remove()) - .nodes(); - // Apply group-level transforms. - const labelGroups = (0, d3_array_1.group)(labelShapes, (d) => labelDescriptor.get(d.__data__)); - const { coordinate, layout } = view; - const labelTransformContext = { - canvas: context.canvas, - coordinate, - layout, - }; - for (const [label, shapes] of labelGroups) { - const { transform = [] } = label; - const transformFunction = (0, helper_1.compose)(transform.map(useLabelTransform)); - transformFunction(shapes, labelTransformContext); - } - // Apply view-level transform. - if (labelTransform) { - labelTransform(labelShapes, labelTransformContext); - } -} -function getLabels(label, labelIndex, element) { - const { seriesIndex: SI, seriesKey, points, key, index } = element.__data__; - const bounds = getLocalBounds(element); - if (!SI) { - return [ - Object.assign(Object.assign({}, label), { key: `${key}-${labelIndex}`, bounds, - index, - points, dependentElement: element }), - ]; - } - const selector = normalizeLabelSelector(label); - const F = SI.map((index, i) => (Object.assign(Object.assign({}, label), { key: `${seriesKey[i]}-${labelIndex}`, bounds: [points[i]], index, - points, dependentElement: element }))); - return selector ? selector(F) : F; -} -function filterValid([I, P, S]) { - if (S) - return [I, P, S]; - const definedIndex = []; - const definedPoints = []; - for (let i = 0; i < I.length; i++) { - const d = I[i]; - const p = P[i]; - if (p.every(([x, y]) => (0, helper_1.defined)(x) && (0, helper_1.defined)(y))) { - definedIndex.push(d); - definedPoints.push(p); - } - } - return [definedIndex, definedPoints]; -} -function normalizeLabelSelector(label) { - const { selector } = label; - if (!selector) - return null; - if (typeof selector === 'function') - return selector; - if (selector === 'first') - return (I) => [I[0]]; - if (selector === 'last') - return (I) => [I[I.length - 1]]; - throw new Error(`Unknown selector: ${selector}`); -} -/** - * Avoid getting error bounds caused by element animations. - * @todo Remove this temporary handle method, if runtime supports - * correct process: drawElement, do label layout and then do - * transitions together. - */ -function getLocalBounds(element) { - const cloneElement = element.cloneNode(true); - const animations = element.getAnimations(); - cloneElement.style.visibility = 'hidden'; - animations.forEach((animation) => { - const keyframes = animation.effect.getKeyframes(); - cloneElement.attr(keyframes[keyframes.length - 1]); - }); - element.parentNode.appendChild(cloneElement); - const bounds = cloneElement.getLocalBounds(); - cloneElement.destroy(); - const { min, max } = bounds; - return [min, max]; -} -function createLabelShapeFunction(mark, state, view, library, context) { - const [useShape] = (0, library_1.useLibrary)('shape', library); - const { data: abstractData, encode } = mark; - const { data: visualData, defaultLabelShape } = state; - const point2d = visualData.map((d) => d.points); - const channel = (0, array_1.mapObject)(encode, (d) => d.value); - // Assemble Context. - const { theme, coordinate } = view; - const shapeContext = Object.assign(Object.assign({}, context), { document: (0, library_1.documentOf)(context), theme, - coordinate }); - return (options) => { - // Computed values from data and styles. - const { index, points } = options; - const datum = abstractData[index]; - const { formatter = (d) => `${d}`, transform, style: abstractStyle, render, selector, element } = options, abstractOptions = __rest(options, ["formatter", "transform", "style", "render", "selector", "element"]); - const visualOptions = (0, array_1.mapObject)(Object.assign(Object.assign({}, abstractOptions), abstractStyle), (d) => valueOf(d, datum, index, abstractData, { - channel, - element, - })); - const { shape = defaultLabelShape, text } = visualOptions, style = __rest(visualOptions, ["shape", "text"]); - const f = typeof formatter === 'string' ? (0, d3_format_1.format)(formatter) : formatter; - const value = Object.assign(Object.assign({}, style), { text: f(text, datum, index, abstractData), datum }); - // Params for create shape. - const shapeOptions = Object.assign({ type: `label.${shape}`, render }, style); - const shapeFunction = useShape(shapeOptions, shapeContext); - const defaults = getDefaultsStyle(theme, 'label', shape, 'label'); - return shapeFunction(points, value, defaults, point2d); - }; -} -function valueOf(value, datum, i, data, options) { - if (typeof value === 'function') - return value(datum, i, data, options); - if (typeof value !== 'string') - return value; - if ((0, helper_1.isStrictObject)(datum) && datum[value] !== undefined) - return datum[value]; - return value; -} -/** - * Compute max duration for this frame. - */ -function computeAnimationExtent(markState) { - let maxDuration = -Infinity; - let minDelay = Infinity; - for (const [mark, state] of markState) { - const { animate = {} } = mark; - const { data } = state; - const { enter = {}, update = {}, exit = {} } = animate; - const { type: defaultUpdateType, duration: defaultUpdateDuration = 300, delay: defaultUpdateDelay = 0, } = update; - const { type: defaultEnterType, duration: defaultEnterDuration = 300, delay: defaultEnterDelay = 0, } = enter; - const { type: defaultExitType, duration: defaultExitDuration = 300, delay: defaultExitDelay = 0, } = exit; - for (const d of data) { - const { updateType = defaultUpdateType, updateDuration = defaultUpdateDuration, updateDelay = defaultUpdateDelay, enterType = defaultEnterType, enterDuration = defaultEnterDuration, enterDelay = defaultEnterDelay, exitDuration = defaultExitDuration, exitDelay = defaultExitDelay, exitType = defaultExitType, } = d; - if (updateType === undefined || updateType) { - maxDuration = Math.max(maxDuration, updateDuration + updateDelay); - minDelay = Math.min(minDelay, updateDelay); - } - if (exitType === undefined || exitType) { - maxDuration = Math.max(maxDuration, exitDuration + exitDelay); - minDelay = Math.min(minDelay, exitDelay); - } - if (enterType === undefined || enterType) { - maxDuration = Math.max(maxDuration, enterDuration + enterDelay); - minDelay = Math.min(minDelay, enterDelay); - } - } - } - if (maxDuration === -Infinity) - return null; - return [minDelay, maxDuration - minDelay]; -} -function selectFacetElements(selection, current, facetClassName, elementClassName) { - const group = selection.node().parentElement; - return group - .findAll((node) => node.style.facet !== undefined && - node.style.facet === facetClassName && - node !== current.node()) - .flatMap((node) => node.getElementsByClassName(elementClassName)); -} -/** - * Update the parent of element and apply transform to make it - * stay in original position. - */ -function maybeFacetElement(element, parent, originOf) { - if (!element.__facet__) - return; - // element -> g#main -> rect#plot - const prePlot = element.parentNode.parentNode; - // g#main -> rect#plot - const newPlot = parent.parentNode; - const [px, py] = originOf(prePlot); - const [x, y] = originOf(newPlot); - const translate = `translate(${px - x}, ${py - y})`; - (0, helper_1.appendTransform)(element, translate); - parent.append(element); -} -function createMarkShapeFunction(mark, state, view, context) { - const { library } = context; - const [useShape] = (0, library_1.useLibrary)('shape', library); - const { data: abstractData, encode } = mark; - const { defaultShape, data, shape: shapeLibrary } = state; - const channel = (0, array_1.mapObject)(encode, (d) => d.value); - const point2d = data.map((d) => d.points); - const { theme, coordinate } = view; - const { type: markType, style = {} } = mark; - const shapeContext = Object.assign(Object.assign({}, context), { document: (0, library_1.documentOf)(context), coordinate, - theme }); - return (data) => { - const { shape: styleShape = defaultShape } = style; - const { shape = styleShape, points, seriesIndex, index: i } = data, v = __rest(data, ["shape", "points", "seriesIndex", "index"]); - const value = Object.assign(Object.assign({}, v), { index: i }); - // Get data-driven style. - // If it is a series shape, such as area and line, - // provides the series of abstract data and indices - // for this shape, otherwise the single datum and - // index. - const abstractDatum = seriesIndex - ? seriesIndex.map((i) => abstractData[i]) - : abstractData[i]; - const I = seriesIndex ? seriesIndex : i; - const visualStyle = (0, array_1.mapObject)(style, (d) => valueOf(d, abstractDatum, I, abstractData, { channel })); - // Try get shape from mark first, then from library. - const shapeFunction = shapeLibrary[shape] - ? shapeLibrary[shape](visualStyle, shapeContext) - : useShape(Object.assign(Object.assign({}, visualStyle), { type: shapeName(mark, shape) }), shapeContext); - const defaults = getDefaultsStyle(theme, markType, shape, defaultShape); - return shapeFunction(points, value, defaults, point2d); - }; -} -function getDefaultsStyle(theme, mark, shape, defaultShape) { - if (typeof mark !== 'string') - return; - const { color } = theme; - const markTheme = theme[mark] || {}; - const shapeTheme = markTheme[shape] || markTheme[defaultShape]; - return Object.assign({ color }, shapeTheme); -} -function createAnimationFunction(type, mark, state, view, library) { - var _a, _b; - const [, createShape] = (0, library_1.useLibrary)('shape', library); - const [useAnimation] = (0, library_1.useLibrary)('animation', library); - const { defaultShape, shape: shapeLibrary } = state; - const { theme, coordinate } = view; - const upperType = (0, util_1.upperFirst)(type); - const key = `default${upperType}Animation`; - // Get shape from mark first, then from library. - const { [key]: defaultAnimation } = ((_a = shapeLibrary[defaultShape]) === null || _a === void 0 ? void 0 : _a.props) || - createShape(shapeName(mark, defaultShape)).props; - const { [type]: defaultEffectTiming = {} } = theme; - const animate = ((_b = mark.animate) === null || _b === void 0 ? void 0 : _b[type]) || {}; - const context = { coordinate }; - return (data, from, to) => { - const { [`${type}Type`]: animation, [`${type}Delay`]: delay, [`${type}Duration`]: duration, [`${type}Easing`]: easing, } = data; - const options = Object.assign({ type: animation || defaultAnimation }, animate); - if (!options.type) - return null; - const animateFunction = useAnimation(options, context); - const value = { delay, duration, easing }; - const A = animateFunction(from, to, (0, util_1.deepMix)(defaultEffectTiming, value)); - let an = []; - if (!Array.isArray(A)) { - an = [A]; - } - else { - an = A; - } - return an.filter(Boolean); - }; -} -function createEnterFunction(mark, state, view, library) { - return createAnimationFunction('enter', mark, state, view, library); -} -/** - * Animation will not cancel automatically, it should be canceled - * manually. This is very important for performance. - */ -function cancel(animation) { - animation.finished.then(() => { - animation.cancel(); - }); - return animation; -} -function createUpdateFunction(mark, state, view, library) { - return createAnimationFunction('update', mark, state, view, library); -} -function createExitFunction(mark, state, view, library) { - return createAnimationFunction('exit', mark, state, view, library); -} -function inferTheme(theme = {}) { - if (typeof theme === 'string') - return { type: theme }; - const { type = 'light' } = theme, rest = __rest(theme, ["type"]); - return Object.assign(Object.assign({}, rest), { type }); -} -/** - * @todo Infer builtin tooltips. - */ -function inferInteraction(view) { - const defaults = { - event: true, - tooltip: true, - // @todo Inferred by slider self. - sliderFilter: true, - legendFilter: true, - scrollbarFilter: true, - }; - const { interaction = {} } = view; - return Object.entries((0, util_1.deepMix)(defaults, interaction)).reverse(); -} -function applyTransform(node, context) { - return __awaiter(this, void 0, void 0, function* () { - const { data } = node, rest = __rest(node, ["data"]); - if (data == undefined) - return node; - const [, { data: newData }] = yield (0, transform_1.applyDataTransform)([], { data }, context); - return Object.assign({ data: newData }, rest); - }); -} -function updateBBox(selection) { - selection - .style('transform', (d) => `translate(${d.paddingLeft + d.marginLeft}, ${d.paddingTop + d.marginTop})`) - .style('width', (d) => d.innerWidth) - .style('height', (d) => d.innerHeight); -} -function animateBBox(selection, extent) { - const [delay, duration] = extent; - selection.transition(function (data, i, element) { - const { transform, width, height } = element.style; - const { paddingLeft, paddingTop, innerWidth, innerHeight, marginLeft, marginTop, } = data; - const keyframes = [ - { - transform, - width, - height, - }, - { - transform: `translate(${paddingLeft + marginLeft}, ${paddingTop + marginTop})`, - width: innerWidth, - height: innerHeight, - }, - ]; - return element.animate(keyframes, { delay, duration, fill: 'both' }); - }); -} -function shapeName(mark, name) { - const { type } = mark; - if (typeof name === 'string') - return `${type}.${name}`; - return name; -} -/** - * Create and update layer for each mark. - * All the layers created here are treated as main layers. - */ -function updateLayers(selection, marks) { - const facet = (d) => (d.class !== undefined ? `${d.class}` : ''); - // Skip for empty selection, it can't append nodes. - const nodes = selection.nodes(); - if (nodes.length === 0) - return; - selection - .selectAll(className(constant_1.MAIN_LAYER_CLASS_NAME)) - .data(marks, (d) => d.key) - .join((enter) => enter - .append('g') - .attr('className', constant_1.MAIN_LAYER_CLASS_NAME) - .attr('id', (d) => d.key) - .style('facet', facet) - .style('fill', 'transparent') - .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (update) => update - .style('facet', facet) - .style('fill', 'transparent') - .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (exit) => exit.remove()); - const labelLayer = selection.select(className(constant_1.LABEL_LAYER_CLASS_NAME)).node(); - if (labelLayer) - return; - selection - .append('g') - .attr('className', constant_1.LABEL_LAYER_CLASS_NAME) - .style('zIndex', 0); -} -function className(...names) { - return names.map((d) => `.${d}`).join(''); -} -function applyClip(selection, clip) { - if (!selection.node()) - return; - selection.style('clipPath', (data) => { - if (!clip) - return null; - const { paddingTop: y, paddingLeft: x, marginLeft: x1, marginTop: y1, innerWidth: width, innerHeight: height, } = data; - return new g_1.Rect({ style: { x: x + x1, y: y + y1, width, height } }); - }); -} -function inferComponentScales(scales, states, markState) { - // add shape scale to state. - var _a; - // for cell, omit shape scale. - // @todo support shape scale for cell. - for (const [key] of markState.entries()) { - if (key.type === 'cell') { - return scales.filter((scale) => scale.name !== 'shape'); - } - } - // can't infer shape scale if there are multiple states. - if (states.length !== 1 || scales.some((scale) => scale.name === 'shape')) { - return scales; - } - const { defaultShape: shape } = states[0]; - const acceptMarkTypes = ['point', 'line', 'rect', 'hollow']; - if (!acceptMarkTypes.includes(shape)) - return scales; - const shapeMap = { - point: 'point', - line: 'hyphen', - rect: 'square', - hollow: 'hollow', - }; - // create shape scale - const field = ((_a = scales.find((scale) => scale.name === 'color')) === null || _a === void 0 ? void 0 : _a.field) || null; - const shapeScale = { - field, - name: 'shape', - type: 'constant', - domain: [], - range: [shapeMap[shape]], - }; - return [...scales, shapeScale]; -} -function applyStyle(selection, style) { - for (const [key, value] of Object.entries(style)) { - selection.style(key, value); - } -} -exports.applyStyle = applyStyle; -//# sourceMappingURL=plot.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"../utils/event":1751263816091,"../utils/helper":1751263815829,"../utils/selection":1751263815883,"./component":1751263816094,"./constant":1751263816082,"./coordinate":1751263816096,"./layout":1751263816116,"./library":1751263816097,"./mark":1751263816117,"./scale":1751263816114,"./transform":1751263816118}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816094, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.styleOf = exports.computeTitleBBox = exports.computeLabelsBBox = exports.createScale = exports.computeComponentSize = exports.groupComponents = exports.flatComponents = exports.normalizeComponents = exports.renderComponent = exports.inferComponent = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const g_1 = require("@antv/g"); -const coordinate_1 = require("../coordinate"); -const array_1 = require("../utils/array"); -const number_1 = require("../utils/number"); -const helper_1 = require("../utils/helper"); -const constant_1 = require("../component/constant"); -const coordinate_2 = require("./coordinate"); -const library_1 = require("./library"); -const scale_1 = require("./scale"); -const scale_2 = require("./types/scale"); -function inferComponent(scales, partialOptions, library) { - const { coordinates = [], title } = partialOptions; - const [, createGuideComponent] = (0, library_1.useLibrary)('component', library); - const displayedScales = scales.filter(({ guide }) => { - if (guide === null) - return false; - return true; - }); - const components = []; - // Sliders and scrollbar component. - const sliders = inferScrollableComponents(partialOptions, scales, library); - components.push(...sliders); - // Title components. - if (title) { - const { props } = createGuideComponent('title'); - const { defaultPosition, defaultOrientation, defaultOrder, defaultSize, defaultCrossPadding, } = props; - const titleOptions = typeof title === 'string' ? { title } : title; - components.push(Object.assign({ type: 'title', position: defaultPosition, orientation: defaultOrientation, order: defaultOrder, crossPadding: defaultCrossPadding[0], defaultSize }, titleOptions)); - } - // Axis and legends. - const inferredComponents = inferComponentsType(displayedScales, coordinates); - inferredComponents.forEach(([type, relativeScales]) => { - const { props } = createGuideComponent(type); - const { defaultPosition, defaultPlane = 'xy', defaultOrientation, defaultSize, defaultOrder, defaultLength, defaultPadding: DP = [0, 0], defaultCrossPadding: DCP = [0, 0], } = props; - // @todo to be confirm if the scale can be merged. - // const scale: G2ScaleOptions = Object.assign({}, ...relativeScales); - const scale = (0, util_1.deepMix)({}, ...relativeScales); - const { guide: guideOptions, field } = scale; - // A scale may have multiple guides. - const guides = Array.isArray(guideOptions) ? guideOptions : [guideOptions]; - for (const partialGuide of guides) { - const [position, orientation] = inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, partialGuide, relativeScales, displayedScales, coordinates); - // Skip if position and orientation are not specified. - // @example the last axis of radar chart - if (!position && !orientation) - continue; - const isVertical = position === 'left' || position === 'right'; - const defaultPadding = isVertical ? DP[1] : DP[0]; - const defaultCrossPadding = isVertical ? DCP[1] : DCP[0]; - const { size, order = defaultOrder, length = defaultLength, padding = defaultPadding, crossPadding = defaultCrossPadding, } = partialGuide; - components.push(Object.assign(Object.assign({ title: field }, partialGuide), { defaultSize, - length, - position, plane: defaultPlane, orientation, - padding, - order, - crossPadding, - size, - type, scales: relativeScales })); - } - }); - return components; -} -exports.inferComponent = inferComponent; -function renderComponent(component, coordinate, theme, library, markState) { - const [useGuideComponent] = (0, library_1.useLibrary)('component', library); - const { scaleInstances: scales, scale, bbox } = component, options = __rest(component, ["scaleInstances", "scale", "bbox"]); - const value = { bbox, library }; - const render = useGuideComponent(options); - return render({ - coordinate, - library, - markState, - scales, - theme, - value, - scale, - }); -} -exports.renderComponent = renderComponent; -function normalizeComponents(components) { - return components.map((d) => { - const component = (0, util_1.deepMix)(d, d.style); - delete component.style; - return component; - }); -} -exports.normalizeComponents = normalizeComponents; -function flatComponents(components) { - return components.flatMap((d) => (d.type == 'group' ? d.children : d)); -} -exports.flatComponents = flatComponents; -// Wrap legends into a group component. -function groupComponents(components, crossSize) { - // Group components by key. - const P = ['left', 'right', 'bottom', 'top']; - const key = ({ type, position, group }) => { - if (!P.includes(position)) - return Symbol('independent'); - if (group === undefined) { - if (type.startsWith('legend')) - return `legend-${position}`; - return Symbol('independent'); - } - if (group === 'independent') - return Symbol('independent'); - return group; - }; - const grouped = (0, d3_array_1.groups)(components, key); - // Update attributes of group components, - // and maybe flatten group components without enough room. - return grouped.flatMap(([, components]) => { - if (components.length === 1) - return components[0]; - // If crossSize defined, group components only when has - // enough room. - if (crossSize !== undefined) { - // Compute total length. - const DL = components - .filter((d) => d.length !== undefined) - .map((d) => d.length); - const totalLength = (0, d3_array_1.sum)(DL); - // If there is no enough room for components, - // do not group. - if (totalLength > crossSize) { - components.forEach((d) => (d.group = Symbol('independent'))); - return components; - } - // Group legends and update legend length. - const emptyLength = crossSize - totalLength; - const emptyCount = components.length - DL.length; - const length = emptyLength / emptyCount; - components.forEach((d) => { - if (d.length !== undefined) - return; - d.length = length; - }); - } - // Create a group component. - const size = (0, d3_array_1.max)(components, (d) => d.size); - const order = (0, d3_array_1.max)(components, (d) => d.order); - const crossPadding = (0, d3_array_1.max)(components, (d) => d.crossPadding); - const position = components[0].position; - return { - type: 'group', - size, - order, - position, - children: components, - crossPadding, - }; - }); -} -exports.groupComponents = groupComponents; -function inferLegendComponentType(scales, coordinates) { - // Filter accepts scales. - const channels = ['shape', 'size', 'color', 'opacity']; - const isConstantSize = (type, name) => type === 'constant' && name === 'size'; - const accepts = scales.filter(({ type, name }) => typeof type === 'string' && - channels.includes(name) && - !isConstantSize(type, name)); - // Group scales by fields. - const constants = accepts.filter(({ type }) => type === 'constant'); - const nonConstants = accepts.filter(({ type }) => type !== 'constant'); - const groupKey = (d) => (d.field ? d.field : Symbol('independent')); - const fieldScales = (0, d3_array_1.groups)(nonConstants, groupKey) - .map(([key, scales]) => [key, [...scales, ...constants]]) - .filter(([, scales]) => scales.some((scale) => scale.type !== 'constant')); - const scalesByField = new Map(fieldScales); - // Skip empty scales. - if (scalesByField.size === 0) - return []; - // Infer components. - const sort = (arr) => arr.sort(([a], [b]) => a.localeCompare(b)); - const components = Array.from(scalesByField) - .map(([, scs]) => { - const combinations = (0, array_1.combine)(scs).sort((a, b) => b.length - a.length); - const options = combinations.map((combination) => ({ - combination, - option: combination.map((scale) => [scale.name, getScaleType(scale)]), - })); - // For category legend. - for (const { option, combination } of options) { - // If every scale is constant, do not display legend. - if (option.every((d) => d[1] === 'constant')) - continue; - if (option.every((d) => d[1] === 'discrete' || d[1] === 'constant')) { - return ['legendCategory', combination]; - } - } - // For reset legend. - // @todo Remove this. - for (const [componentType, accords] of constant_1.LEGEND_INFER_STRATEGIES) { - for (const { option, combination } of options) { - if (accords.some((accord) => (0, util_1.isEqual)(sort(accord), sort(option)))) { - return [componentType, combination]; - } - } - } - return null; - }) - .filter(helper_1.defined); - return components; -} -function getScaleType(scale) { - const { type } = scale; - if (typeof type !== 'string') - return null; - if (type in scale_2.ContinuousScale) - return 'continuous'; - if (type in scale_2.DiscreteScale) - return 'discrete'; - if (type in scale_2.DistributionScale) - return 'distribution'; - if (type in scale_2.ConstantScale) - return 'constant'; - return null; -} -function inferAxisComponentType(scales, coordinates) { - return scales - .map((scale) => { - const { name } = scale; - // todo wait for gui provide helix axis - if ((0, coordinate_2.isHelix)(coordinates) || (0, coordinate_2.isTheta)(coordinates)) - return null; - if ((0, coordinate_2.isTranspose)(coordinates) && - ((0, coordinate_2.isPolar)(coordinates) || (0, coordinate_2.isRadial)(coordinates))) - return null; - // infer axis - if (name.startsWith('x')) { - if ((0, coordinate_2.isPolar)(coordinates)) - return ['axisArc', [scale]]; - if ((0, coordinate_2.isRadial)(coordinates)) - return ['axisLinear', [scale]]; - return [(0, coordinate_2.isTranspose)(coordinates) ? 'axisY' : 'axisX', [scale]]; - } - if (name.startsWith('y')) { - if ((0, coordinate_2.isPolar)(coordinates)) - return ['axisLinear', [scale]]; - if ((0, coordinate_2.isRadial)(coordinates)) - return ['axisArc', [scale]]; - return [(0, coordinate_2.isTranspose)(coordinates) ? 'axisX' : 'axisY', [scale]]; - } - // Only support linear axis for z. - if (name.startsWith('z')) { - return ['axisZ', [scale]]; - } - if (name.startsWith('position')) { - if ((0, coordinate_2.isRadar)(coordinates)) - return ['axisRadar', [scale]]; - if (!(0, coordinate_2.isPolar)(coordinates)) - return ['axisY', [scale]]; - } - return null; - }) - .filter(helper_1.defined); -} -function inferComponentsType(scales, coordinates) { - const availableScales = scales.filter((scale) => (0, scale_1.isValidScale)(scale)); - return [ - ...inferLegendComponentType(availableScales, coordinates), - ...inferAxisComponentType(availableScales, coordinates), - ]; -} -function angleOf(coordinates) { - const polar = (0, coordinate_2.coordOf)(coordinates, 'polar'); - if (polar.length) { - const lastPolar = polar[polar.length - 1]; - const { startAngle, endAngle } = (0, coordinate_1.getPolarOptions)(lastPolar); - return [startAngle, endAngle]; - } - const radial = (0, coordinate_2.coordOf)(coordinates, 'radial'); - if (radial.length) { - const lastRadial = radial[radial.length - 1]; - const { startAngle, endAngle } = (0, coordinate_1.getRadialOptions)(lastRadial); - return [startAngle, endAngle]; - } - return [-Math.PI / 2, (Math.PI / 2) * 3]; -} -/** - * match index of position - */ -function matchPosition(name) { - const match = /position(\d*)/g.exec(name); - if (!match) - return null; - return +match[1]; -} -function inferAxisPositionAndOrientation(type, ordinalPosition, relativeScales, scales, coordinates) { - // a axis only has one scale - const { name } = relativeScales[0]; - // todo, in current resolution, the radar chart is implement by parallel + polar coordinate. - // implementation plan to be confirmed. - // in current implementation, it must to add the first position encode to it's last. - // so we won't render the last axis repeatably. - if (type === 'axisRadar') { - const positions = scales.filter((scale) => scale.name.startsWith('position')); - const index = matchPosition(name); - if (index === null) - return [null, null]; - // infer radar axis orientation - const [startAngle, endAngle] = angleOf(coordinates); - const positionLength = (0, coordinate_2.isRadar)(coordinates) - ? positions.length - : positions.length - 1; - const angle = ((endAngle - startAngle) / positionLength) * index + startAngle; - return ['center', angle]; - } - if (type === 'axisY' && (0, coordinate_2.isParallel)(coordinates)) { - return (0, coordinate_2.isTranspose)(coordinates) - ? ['center', 'horizontal'] - : ['center', 'vertical']; - } - // in non-cartesian coordinate systems, infer the arc axis angle - if (type === 'axisLinear') { - const [startAngle] = angleOf(coordinates); - return ['center', startAngle]; - } - if (type === 'axisArc') { - if (ordinalPosition[0] === 'inner') - return ['inner', null]; - return ['outer', null]; - } - if ((0, coordinate_2.isPolar)(coordinates)) - return ['center', null]; - if ((0, coordinate_2.isRadial)(coordinates)) - return ['center', null]; - if ((type === 'axisX' && (0, coordinate_2.isReflect)(coordinates)) || - (type === 'axisX' && (0, coordinate_2.isReflectY)(coordinates))) { - return ['top', null]; - } - // if (type === 'axisX') return ['bottom', null]; - return ordinalPosition; -} -// @todo Infer position by coordinates. -function inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, guide, relativeScales, scales, coordinates) { - const [startAngle] = angleOf(coordinates); - const ordinalPositionAndOrientation = [ - guide.position || defaultPosition, - startAngle !== null && startAngle !== void 0 ? startAngle : defaultOrientation, - ]; - if (typeof type === 'string' && type.startsWith('axis')) { - return inferAxisPositionAndOrientation(type, ordinalPositionAndOrientation, relativeScales, scales, coordinates); - } - if (typeof type === 'string' && - type.startsWith('legend') && - (0, coordinate_2.isPolar)(coordinates)) { - if (guide.position === 'center') - return ['center', 'vertical']; - } - // for general component, use default position - return ordinalPositionAndOrientation; -} -function inferScrollableType(name, type, coordinates = []) { - if (name === 'x') - return (0, coordinate_2.isTranspose)(coordinates) ? `${type}Y` : `${type}X`; - if (name === 'y') - return (0, coordinate_2.isTranspose)(coordinates) ? `${type}X` : `${type}Y`; - return null; -} -/** - * Infer scrollable components, such as slider and scrollbar. - */ -function inferScrollableComponents(partialOptions, scales, library) { - const [, createGuideComponent] = (0, library_1.useLibrary)('component', library); - const { coordinates } = partialOptions; - function normalized(type, channelName, scale, options) { - const componentType = inferScrollableType(channelName, type, coordinates); - if (!options || !componentType) - return; - const { props } = createGuideComponent(componentType); - const { defaultPosition, defaultSize, defaultOrder, defaultCrossPadding: [crossPadding], } = props; - return Object.assign(Object.assign({ position: defaultPosition, defaultSize, order: defaultOrder, type: componentType, crossPadding }, options), { scales: [scale] }); - } - return scales - .filter((d) => d.slider || d.scrollbar) - .flatMap((scale) => { - const { slider, scrollbar, name: channelName } = scale; - return [ - normalized('slider', channelName, scale, slider), - normalized('scrollbar', channelName, scale, scrollbar), - ]; - }) - .filter((d) => !!d); -} -// !!! Note Mutate component.size and component. -function computeComponentSize(component, crossSize, crossPadding, position, theme, library) { - // Only compute and update size of components in padding area. - const { type } = component; - const paddingAreas = ['left', 'right', 'bottom', 'top']; - if (!paddingAreas.includes(position)) - return; - if (typeof type !== 'string') - return; - const t = type; - const createCompute = () => { - if (t.startsWith('axis')) - return computeAxisSize; - if (t.startsWith('group')) - return computeGroupSize; - if (t.startsWith('legendContinuous')) - return computeContinuousLegendSize; - if (t === 'legendCategory') - return computeCategoryLegendSize; - if (t.startsWith('slider')) - return computeSliderSize; - if (t === 'title') - return computeTitleSize; - if (t.startsWith('scrollbar')) - return computeScrollbarSize; - return () => { }; - }; - return createCompute()(component, crossSize, crossPadding, position, theme, library); -} -exports.computeComponentSize = computeComponentSize; -function computeGroupSize(component, crossSize, crossPadding, position, theme, library) { - const { children } = component; - const maxCrossPadding = (0, d3_array_1.max)(children, (d) => d.crossPadding); - children.forEach((d) => (d.crossPadding = maxCrossPadding)); - children.forEach((child) => computeComponentSize(child, crossSize, crossPadding, position, theme, library)); - const maxSize = (0, d3_array_1.max)(children, (d) => d.size); - component.size = maxSize; - children.forEach((d) => (d.size = maxSize)); -} -function computeScrollbarSize(component, crossSize, crossPadding, position, theme, library) { - const { trackSize = 6 } = (0, util_1.deepMix)({}, theme.scrollbar, component); - component.size = trackSize; -} -function computeTitleSize(component, crossSize, crossPadding, position, theme, library) { - const _a = (0, util_1.deepMix)({}, theme.title, component), { title, subtitle, spacing = 0 } = _a, style = __rest(_a, ["title", "subtitle", "spacing"]); - if (title) { - const titleStyle = (0, helper_1.subObject)(style, 'title'); - const titleBBox = computeLabelSize(title, titleStyle); - component.size = titleBBox.height; - } - if (subtitle) { - const subtitleStyle = (0, helper_1.subObject)(style, 'subtitle'); - const subtitleBBox = computeLabelSize(subtitle, subtitleStyle); - component.size += spacing + subtitleBBox.height; - } -} -function computeSliderSize(component, crossSize, crossPadding, position, theme, library) { - const styleOf = () => { - const { slider } = theme; - return (0, util_1.deepMix)({}, slider, component); - }; - const { trackSize, handleIconSize } = styleOf(); - const size = Math.max(trackSize, handleIconSize * 2.4); - component.size = size; -} -function computeAxisSize(component, crossSize, crossPadding, position, theme, library) { - var _a; - // If padding is auto, use hide as the labelTransform by default - // to avoid overlap between labels. - component.transform = component.transform || [{ type: 'hide' }]; - // Vertical or horizontal. - const isVertical = position === 'left' || position === 'right'; - // Get styles to be applied. - const style = styleOf(component, position, theme); - const { tickLength = 0, labelSpacing = 0, titleSpacing = 0, labelAutoRotate } = style, rest = __rest(style, ["tickLength", "labelSpacing", "titleSpacing", "labelAutoRotate"]); - // Compute Labels. - const scale = createScale(component, library); - const labelBBoxes = computeLabelsBBox(rest, scale); - const paddingTick = tickLength + labelSpacing; - if (labelBBoxes && labelBBoxes.length) { - const maxLabelWidth = (0, d3_array_1.max)(labelBBoxes, (d) => d.width); - const maxLabelHeight = (0, d3_array_1.max)(labelBBoxes, (d) => d.height); - if (isVertical) { - component.size = maxLabelWidth + paddingTick; - } - else { - const { tickFilter, labelTransform } = component; - // If the labels can't be placed horizontally, and labelTransform is unset, - // rotate 90 deg to display them. - if (overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) && - !labelTransform && - labelAutoRotate !== false && - labelAutoRotate !== null) { - component.labelTransform = 'rotate(90)'; - component.size = maxLabelWidth + paddingTick; - } - else { - component.labelTransform = (_a = component.labelTransform) !== null && _a !== void 0 ? _a : 'rotate(0)'; - component.size = maxLabelHeight + paddingTick; - } - } - } - else { - component.size = tickLength; - } - // Compute title. - const titleBBox = computeTitleBBox(rest); - if (titleBBox) { - if (isVertical) { - component.size += titleSpacing + titleBBox.width; - } - else { - component.size += titleSpacing + titleBBox.height; - } - } -} -function computeContinuousLegendSize(component, crossSize, crossPadding, position, theme, library) { - // Get styles. - const styleOf = () => { - const { legendContinuous } = theme; - return (0, util_1.deepMix)({}, legendContinuous, component); - }; - const _a = styleOf(), { labelSpacing = 0, titleSpacing = 0 } = _a, rest = __rest(_a, ["labelSpacing", "titleSpacing"]); - // Vertical or horizontal. - const isVertical = position === 'left' || position === 'right'; - // Ribbon styles. - const ribbonStyles = (0, helper_1.subObject)(rest, 'ribbon'); - const { size: ribbonSize } = ribbonStyles; - const handleIconStyles = (0, helper_1.subObject)(rest, 'handleIcon'); - const { size: handleIconSize } = handleIconStyles; - const mainSize = Math.max(ribbonSize, handleIconSize * 2.4); - component.size = mainSize; - // Compute labels. - const scale = createScale(component, library); - const labelBBoxes = computeLabelsBBox(rest, scale); - if (labelBBoxes) { - const key = isVertical ? 'width' : 'height'; - const size = (0, d3_array_1.max)(labelBBoxes, (d) => d[key]); - component.size += size + labelSpacing; - } - // Compute title. - const titleBBox = computeTitleBBox(rest); - if (titleBBox) { - if (isVertical) { - component.size = Math.max(component.size, titleBBox.width); - } - else { - component.size += titleSpacing + titleBBox.height; - } - } -} -function computeCategoryLegendSize(component, crossSize0, crossPadding, position, theme, library) { - const styleOf = () => { - const { legendCategory } = theme; - const { title } = component; - const [defaultTitle, specifiedTitle] = Array.isArray(title) - ? [title, undefined] - : [undefined, title]; - return (0, util_1.deepMix)({ title: defaultTitle }, legendCategory, Object.assign(Object.assign({}, component), { title: specifiedTitle })); - }; - const _a = styleOf(), { itemSpacing, itemMarkerSize, titleSpacing, rowPadding, colPadding, maxCols = Infinity, maxRows = Infinity } = _a, rest = __rest(_a, ["itemSpacing", "itemMarkerSize", "titleSpacing", "rowPadding", "colPadding", "maxCols", "maxRows"]); - const { cols, length } = component; - const getRows = (rows) => Math.min(rows, maxRows); - const getCols = (cols) => Math.min(cols, maxCols); - // Vertical or horizontal. - const isVertical = position === 'left' || position === 'right'; - const crossSize = length === undefined - ? crossSize0 + (isVertical ? 0 : crossPadding[0] + crossPadding[1]) - : length; - // Compute title. - const titleBBox = computeTitleBBox(rest); - const scale = createScale(component, library); - const labelBBoxes = computeLabelsBBox(rest, scale, 'itemLabel'); - const height = Math.max(labelBBoxes[0].height, itemMarkerSize) + rowPadding; - const widthOf = (w, padding = 0) => itemMarkerSize + w + itemSpacing[0] + padding; - // Only support grid layout for vertical area. - const computeVerticalSize = () => { - let maxSize = -Infinity; - let pos = 0; - let cols = 1; - let rows = 0; - let maxRows = -Infinity; - let maxPos = -Infinity; - const titleHeight = titleBBox ? titleBBox.height : 0; - const maxHeight = crossSize - titleHeight; - for (const { width } of labelBBoxes) { - const w = widthOf(width, colPadding); - maxSize = Math.max(maxSize, w); - if (pos + height > maxHeight) { - cols++; - maxRows = Math.max(maxRows, rows); - maxPos = Math.max(maxPos, pos); - rows = 1; - pos = height; - } - else { - pos += height; - rows++; - } - } - if (cols <= 1) { - maxRows = rows; - maxPos = pos; - } - component.size = maxSize * getCols(cols); - component.length = maxPos + titleHeight; - (0, util_1.deepMix)(component, { cols: getCols(cols), gridRow: maxRows }); - }; - // Horizontal grid layout. - const computeHorizontalGrid = () => { - const rows = Math.ceil(labelBBoxes.length / cols); - const maxWidth = (0, d3_array_1.max)(labelBBoxes, (d) => widthOf(d.width)) * cols; - component.size = height * getRows(rows) - rowPadding; - component.length = Math.min(maxWidth, crossSize); - }; - // Horizontal flex layout. - const computeHorizontalFlex = () => { - let rows = 1; - let pos = 0; - let maxPos = -Infinity; - for (const { width } of labelBBoxes) { - const w = widthOf(width, colPadding); - if (pos + w > crossSize) { - maxPos = Math.max(maxPos, pos); - pos = w; - rows++; - } - else { - pos += w; - } - } - if (rows === 1) - maxPos = pos; - component.size = height * getRows(rows) - rowPadding; - component.length = maxPos; - }; - if (isVertical) - computeVerticalSize(); - else if (typeof cols === 'number') - computeHorizontalGrid(); - else - computeHorizontalFlex(); - // Compute titles. - if (titleBBox) { - if (isVertical) { - component.size = Math.max(component.size, titleBBox.width); - } - else { - component.size += titleSpacing + titleBBox.height; - } - } -} -function createScale(component, library) { - const [useScale] = (0, library_1.useLibrary)('scale', library); - // Init scale, the tickCount of axis has higher priority than scale. - const { scales, tickCount, tickMethod } = component; - const scaleOptions = scales.find((d) => d.type !== 'constant' && d.type !== 'identity'); - if (tickCount !== undefined) - scaleOptions.tickCount = tickCount; - if (tickMethod !== undefined) - scaleOptions.tickMethod = tickMethod; - return useScale(scaleOptions); -} -exports.createScale = createScale; -function computeLabelsBBox(component, scale, key = 'label') { - const { labelFormatter, tickFilter, label = true } = component, style = __rest(component, ["labelFormatter", "tickFilter", "label"]); - if (!label) - return null; - // Get labels to be rendered. - const labels = labelsOf(scale, labelFormatter, tickFilter); - const labelStyle = (0, helper_1.subObject)(style, key); - const labelStyles = labels.map((d, i) => Object.fromEntries(Object.entries(labelStyle).map(([key, value]) => [ - key, - typeof value === 'function' ? value(d, i) : value, - ]))); - const labelBBoxes = labels.map((d, i) => { - const normalizeStyle = labelStyles[i]; - return computeLabelSize(d, normalizeStyle); - }); - // Cache boxes to avoid computed twice. - // @todo GUI use untransformed bbox, so it can't cache if - // label.style has transform attributes. - const hasTransform = labelStyles.some((d) => d.transform); - if (!hasTransform) { - const I = labels.map((_, i) => i); - component.indexBBox = new Map(I.map((i) => [i, [labels[i], labelBBoxes[i]]])); - } - return labelBBoxes; -} -exports.computeLabelsBBox = computeLabelsBBox; -function computeTitleBBox(component) { - const isFalsy = (x) => x === false || x === null; - const { title } = component, style = __rest(component, ["title"]); - if (isFalsy(title) || title === undefined) - return null; - const titleStyle = (0, helper_1.subObject)(style, 'title'); - const { direction, transform } = titleStyle; - const titleText = Array.isArray(title) ? title.join(',') : title; - if (typeof titleText !== 'string') - return null; - const titleBBox = computeLabelSize(titleText, Object.assign(Object.assign({}, titleStyle), { transform: transform || (direction === 'vertical' ? 'rotate(-90)' : '') })); - return titleBBox; -} -exports.computeTitleBBox = computeTitleBBox; -function styleOf(axis, position, theme) { - const { title } = axis; - const [defaultTitle, specifiedTitle] = Array.isArray(title) - ? [title, undefined] - : [undefined, title]; - const { axis: baseStyle, - // @ts-ignore - [`axis${(0, helper_1.capitalizeFirst)(position)}`]: positionStyle, } = theme; - return (0, util_1.deepMix)({ title: defaultTitle }, baseStyle, positionStyle, Object.assign(Object.assign({}, axis), { title: specifiedTitle })); -} -exports.styleOf = styleOf; -function ticksOf(scale, tickFilter) { - const ticks = scale.getTicks ? scale.getTicks() : scale.getOptions().domain; - if (!tickFilter) - return ticks; - return ticks.filter(tickFilter); -} -function labelsOf(scale, labelFormatter, tickFilter) { - const T = ticksOf(scale, tickFilter); - const ticks = T.map((d) => (typeof d === 'number' ? (0, number_1.prettyNumber)(d) : d)); - const formatter = labelFormatter - ? typeof labelFormatter === 'string' - ? (0, d3_format_1.format)(labelFormatter) - : labelFormatter - : scale.getFormatter - ? scale.getFormatter() - : (d) => `${d}`; - return ticks.map(formatter); -} -function offsetOf(scale, d) { - if (!scale.getBandWidth) - return 0; - const offset = scale.getBandWidth(d) / 2; - return offset; -} -function overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) { - // If actual size bigger than container size, overflow. - const totalSize = (0, d3_array_1.sum)(labelBBoxes, (d) => d.width); - if (totalSize > crossSize) - return true; - // Clone scale to get visual position for labels. - const scaleX = scale.clone(); - scaleX.update({ range: [0, crossSize] }); - const ticks = ticksOf(scale, tickFilter); - const X = ticks.map((d) => scaleX.map(d) + offsetOf(scaleX, d)); - const I = ticks.map((_, i) => i); - const startX = -crossPadding[0]; - const endX = crossSize + crossPadding[1]; - const extent = (x, bbox) => { - const { width } = bbox; - return [x - width / 2, x + width / 2]; - }; - // Collision detection. - for (let i = 0; i < I.length; i++) { - const x = X[i]; - const [x0, x1] = extent(x, labelBBoxes[i]); - // If a label is out of plot area, overflow. - if (x0 < startX || x1 > endX) - return true; - const y = X[i + 1]; - if (y) { - // If two labels intersect, overflow. - const [y0] = extent(y, labelBBoxes[i + 1]); - if (x1 > y0) - return true; - } - } - return false; -} -function computeLabelSize(d, style) { - const shape = normalizeLabel(d); - const { filter } = style, rest = __rest(style, ["filter"]); - shape.attr(Object.assign(Object.assign({}, rest), { visibility: 'none' })); - const bbox = shape.getBBox(); - return bbox; -} -function normalizeLabel(d) { - if (d instanceof g_1.DisplayObject) - return d; - return new g_1.Text({ style: { text: `${d}` } }); -} -//# sourceMappingURL=component.js.map -}, function(modId) { var map = {"../coordinate":1751263815805,"../utils/array":1751263815830,"../utils/number":1751263815884,"../utils/helper":1751263815829,"../component/constant":1751263816095,"./coordinate":1751263816096,"./library":1751263816097,"./scale":1751263816114,"./types/scale":1751263816115}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816095, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LEGEND_INFER_STRATEGIES = void 0; -/** - * @examples - * ✅ - * color - `discrete`, shape - `constant` - * legendCategory.rule[27] is matched - * - * ❎ - * shape - `discrete`, size - `constant` - * There are no rules to match - * - */ -exports.LEGEND_INFER_STRATEGIES = [ - [ - 'legendCategory', - [ - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ['shape', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ['shape', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'constant'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ['shape', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ['shape', 'discrete'], - ], - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ['shape', 'discrete'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['shape', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ['shape', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ['shape', 'constant'], - ], - [ - ['color', 'constant'], - ['shape', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ['shape', 'discrete'], - ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'constant'], - ['shape', 'discrete'], - ], - // [ - // ['color', 'constant'], - // ['opacity', 'constant'], - // ['size', 'constant'], - // ], - // [ - // ['color', 'constant'], - // ['shape', 'constant'], - // ['size', 'constant'], - // ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ['shape', 'constant'], - ], - [ - ['color', 'discrete'], - ['shape', 'discrete'], - ], - [ - ['color', 'discrete'], - ['size', 'constant'], - ], - [ - ['color', 'discrete'], - ['opacity', 'discrete'], - ], - [ - ['color', 'discrete'], - ['opacity', 'constant'], - ], - [ - ['color', 'discrete'], - ['shape', 'constant'], - ], - [ - ['color', 'constant'], - ['shape', 'discrete'], - ], - [ - ['color', 'constant'], - ['size', 'constant'], - ], - [ - ['color', 'constant'], - ['opacity', 'discrete'], - ], - // [ - // ['color', 'constant'], - // ['opacity', 'constant'], - // ], - // [ - // ['color', 'constant'], - // ['shape', 'constant'], - // ], - [['color', 'discrete']], - // [['color', 'constant']], - ], - ], - [ - 'legendContinuousSize', - [ - [ - ['color', 'continuous'], - ['opacity', 'continuous'], - ['size', 'continuous'], - ], - [ - ['color', 'constant'], - ['opacity', 'continuous'], - ['size', 'continuous'], - ], - [ - ['color', 'continuous'], - ['size', 'continuous'], - ], - [ - ['color', 'constant'], - ['size', 'continuous'], - ], - [ - ['size', 'continuous'], - ['opacity', 'continuous'], - ], - [['size', 'continuous']], - ], - ], - [ - 'legendContinuousBlockSize', - [ - [ - ['color', 'distribution'], - ['opacity', 'distribution'], - ['size', 'distribution'], - ], - [ - ['color', 'distribution'], - ['size', 'distribution'], - ], - ], - ], - [ - 'legendContinuousBlock', - [ - [ - ['color', 'distribution'], - ['opacity', 'continuous'], - ], - [['color', 'distribution']], - ], - ], - [ - 'legendContinuous', - [ - [ - ['color', 'continuous'], - ['opacity', 'continuous'], - ], - [['color', 'continuous']], - [['opacity', 'continuous']], - ], - ], -]; -//# sourceMappingURL=constant.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816096, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isReflectY = exports.isRadar = exports.isRadial = exports.isReflect = exports.isTheta = exports.isParallel = exports.isTranspose = exports.isHelix = exports.isPolar = exports.coordOf = exports.coordinate2Transform = exports.createCoordinate = void 0; -const coord_1 = require("@antv/coord"); -const library_1 = require("./library"); -function createCoordinate(layout, partialOptions, library) { - const [useCoordinate] = (0, library_1.useLibrary)('coordinate', library); - const { innerHeight, innerWidth, insetLeft, insetTop, insetRight, insetBottom, } = layout; - const { coordinates: partialTransform = [] } = partialOptions; - const transform = inferCoordinate(partialTransform); - const isCartesian3D = transform[0].type === 'cartesian3D'; - const options = Object.assign(Object.assign({}, layout), { x: insetLeft, y: insetTop, width: innerWidth - insetLeft - insetRight, height: innerHeight - insetBottom - insetTop, transformations: transform.flatMap(useCoordinate) }); - const coordinate = isCartesian3D - ? // @ts-ignore - new coord_1.Coordinate3D(options) - : new coord_1.Coordinate(options); - return coordinate; -} -exports.createCoordinate = createCoordinate; -function coordinate2Transform(node, library) { - // @ts-ignore - const { coordinate = {}, coordinates } = node, rest = __rest(node, ["coordinate", "coordinates"]); - // If coordinates are already set, it means that the coordinate has been processed - // during the initialization. There is not need to process it during update. - if (coordinates) - return node; - const { type, transform = [] } = coordinate, options = __rest(coordinate, ["type", "transform"]); - if (!type) - return Object.assign(Object.assign({}, rest), { coordinates: transform }); - const [, createCoordinate] = (0, library_1.useLibrary)('coordinate', library); - const { transform: isTransform = false } = createCoordinate(type).props || {}; - if (isTransform) { - throw new Error(`Unknown coordinate: ${type}.`); - } - return Object.assign(Object.assign({}, rest), { coordinates: [Object.assign({ type }, options), ...transform] }); -} -exports.coordinate2Transform = coordinate2Transform; -function coordOf(coordinates, type) { - return coordinates.filter((d) => d.type === type); -} -exports.coordOf = coordOf; -/** - * todo Duplication is not considered - */ -function isPolar(coordinates) { - return coordOf(coordinates, 'polar').length > 0; -} -exports.isPolar = isPolar; -function isHelix(coordinates) { - return coordOf(coordinates, 'helix').length > 0; -} -exports.isHelix = isHelix; -/** - * todo The number of transposes matters - */ -function isTranspose(coordinates) { - return coordOf(coordinates, 'transpose').length % 2 === 1; -} -exports.isTranspose = isTranspose; -function isParallel(coordinates) { - return coordOf(coordinates, 'parallel').length > 0; -} -exports.isParallel = isParallel; -function isTheta(coordinates) { - return coordOf(coordinates, 'theta').length > 0; -} -exports.isTheta = isTheta; -function isReflect(coordinates) { - return coordOf(coordinates, 'reflect').length > 0; -} -exports.isReflect = isReflect; -function isRadial(coordinates) { - return coordOf(coordinates, 'radial').length > 0; -} -exports.isRadial = isRadial; -function isRadar(coordinates) { - return coordOf(coordinates, 'radar').length > 0; -} -exports.isRadar = isRadar; -/** - * todo The axis corresponding to the Y reversal is not reversed - */ -function isReflectY(coordinates) { - return coordOf(coordinates, 'reflectY').length > 0; -} -exports.isReflectY = isReflectY; -function inferCoordinate(coordinates) { - if (coordinates.find((d) => d.type === 'cartesian' || d.type === 'cartesian3D')) - return coordinates; - return [...coordinates, { type: 'cartesian' }]; -} -//# sourceMappingURL=coordinate.js.map -}, function(modId) { var map = {"./library":1751263816097}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816097, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.documentOf = exports.useLibrary = void 0; -const helper_1 = require("../utils/helper"); -const builtinlib_1 = require("../lib/builtinlib"); -function useLibrary(namespace, publicLibrary) { - const library = Object.assign(Object.assign({}, (0, builtinlib_1.builtinlib)()), publicLibrary); - const create = (type) => { - if (typeof type !== 'string') - return type; - const key = `${namespace}.${type}`; - return library[key] || (0, helper_1.error)(`Unknown Component: ${key}`); - }; - const use = (options, context) => { - const { type } = options, rest = __rest(options, ["type"]); - if (!type) - (0, helper_1.error)(`Plot type is required!`); - const currentLibrary = create(type); - return currentLibrary === null || currentLibrary === void 0 ? void 0 : currentLibrary(rest, context); - }; - return [use, create]; -} -exports.useLibrary = useLibrary; -function documentOf(library) { - const { canvas, group } = library; - return ((canvas === null || canvas === void 0 ? void 0 : canvas.document) || - (group === null || group === void 0 ? void 0 : group.ownerDocument) || - (0, helper_1.error)(`Cannot find library document`)); -} -exports.documentOf = documentOf; -//# sourceMappingURL=library.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../lib/builtinlib":1751263816098}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816098, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.builtinlib = void 0; -const component_1 = require("../component"); -const composition_1 = require("../composition"); -const shape_1 = require("../shape"); -const event_1 = require("../interaction/event"); -// Some private visual components, they are not public to -// users, only for runtime. -function builtinlib() { - return { - 'component.axisRadar': component_1.AxisRadar, - 'component.axisLinear': component_1.AxisLinear, - 'component.axisArc': component_1.AxisArc, - 'component.legendContinuousBlock': component_1.LegendContinuousBlock, - 'component.legendContinuousBlockSize': component_1.LegendContinuousBlockSize, - 'component.legendContinuousSize': component_1.LegendContinuousSize, - 'interaction.event': event_1.Event, - 'composition.mark': composition_1.Mark, - 'composition.view': composition_1.View, - 'shape.label.label': shape_1.LabelShape, - }; -} -exports.builtinlib = builtinlib; -//# sourceMappingURL=builtinlib.js.map -}, function(modId) { var map = {"../component":1751263816043,"../composition":1751263816099,"../shape":1751263815879,"../interaction/event":1751263816113}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816099, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GeoView = exports.GeoPath = exports.TimingKeyframe = exports.FacetCircle = exports.RepeatMatrix = exports.FacetRect = exports.Mark = exports.View = exports.SpaceFlex = exports.SpaceLayer = void 0; -var spaceLayer_1 = require("./spaceLayer"); -Object.defineProperty(exports, "SpaceLayer", { enumerable: true, get: function () { return spaceLayer_1.SpaceLayer; } }); -var spaceFlex_1 = require("./spaceFlex"); -Object.defineProperty(exports, "SpaceFlex", { enumerable: true, get: function () { return spaceFlex_1.SpaceFlex; } }); -var view_1 = require("./view"); -Object.defineProperty(exports, "View", { enumerable: true, get: function () { return view_1.View; } }); -var mark_1 = require("./mark"); -Object.defineProperty(exports, "Mark", { enumerable: true, get: function () { return mark_1.Mark; } }); -var facetRect_1 = require("./facetRect"); -Object.defineProperty(exports, "FacetRect", { enumerable: true, get: function () { return facetRect_1.FacetRect; } }); -var repeatMatrix_1 = require("./repeatMatrix"); -Object.defineProperty(exports, "RepeatMatrix", { enumerable: true, get: function () { return repeatMatrix_1.RepeatMatrix; } }); -var facetCircle_1 = require("./facetCircle"); -Object.defineProperty(exports, "FacetCircle", { enumerable: true, get: function () { return facetCircle_1.FacetCircle; } }); -var timingKeyframe_1 = require("./timingKeyframe"); -Object.defineProperty(exports, "TimingKeyframe", { enumerable: true, get: function () { return timingKeyframe_1.TimingKeyframe; } }); -var geoPath_1 = require("./geoPath"); -Object.defineProperty(exports, "GeoPath", { enumerable: true, get: function () { return geoPath_1.GeoPath; } }); -var geoView_1 = require("./geoView"); -Object.defineProperty(exports, "GeoView", { enumerable: true, get: function () { return geoView_1.GeoView; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./spaceLayer":1751263816100,"./spaceFlex":1751263816102,"./view":1751263816103,"./mark":1751263816104,"./facetRect":1751263816105,"./repeatMatrix":1751263816107,"./facetCircle":1751263816108,"./timingKeyframe":1751263816109,"./geoPath":1751263816110,"./geoView":1751263816111}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816100, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SpaceLayer = void 0; -const utils_1 = require("./utils"); -/** - * @todo Propagate more options to children. - */ -const SpaceLayer = () => { - return (options) => { - const { children } = options; - if (!Array.isArray(children)) - return []; - const { x: viewX = 0, y: viewY = 0, width: viewWidth, height: viewHeight, data: layerData, } = options; - return children.map((_a) => { - var { data, x, y, width, height } = _a, rest = __rest(_a, ["data", "x", "y", "width", "height"]); - return (Object.assign(Object.assign({}, rest), { data: (0, utils_1.mergeData)(data, layerData), x: x !== null && x !== void 0 ? x : viewX, y: y !== null && y !== void 0 ? y : viewY, width: width !== null && width !== void 0 ? width : viewWidth, height: height !== null && height !== void 0 ? height : viewHeight })); - }); - }; -}; -exports.SpaceLayer = SpaceLayer; -exports.SpaceLayer.props = {}; -//# sourceMappingURL=spaceLayer.js.map -}, function(modId) { var map = {"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816101, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.mergeData = exports.isObject = exports.useOverrideAdaptor = exports.useDefaultAdaptor = void 0; -const util_1 = require("@antv/util"); -/** - * Adaptor return default options for raw options. - */ -function useDefaultAdaptor(adaptor) { - return (options, ...rest) => (0, util_1.deepMix)({}, adaptor(options, ...rest), options); -} -exports.useDefaultAdaptor = useDefaultAdaptor; -/** - * Adaptor return options override raw options. - */ -function useOverrideAdaptor(adaptor) { - return (options, ...rest) => (0, util_1.deepMix)({}, options, adaptor(options, ...rest)); -} -exports.useOverrideAdaptor = useOverrideAdaptor; -function isObject(d) { - if (d instanceof Date) - return false; - return typeof d === 'object'; -} -exports.isObject = isObject; -function mergeData(dataDescriptor, dataValue) { - if (!dataDescriptor) - return dataValue; - if (Array.isArray(dataDescriptor)) - return dataDescriptor; - if (isObject(dataDescriptor)) { - const { value = dataValue } = dataDescriptor, rest = __rest(dataDescriptor, ["value"]); - return Object.assign(Object.assign({}, rest), { value }); - } - return dataDescriptor; -} -exports.mergeData = mergeData; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816102, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SpaceFlex = void 0; -const utils_1 = require("./utils"); -/** - * @todo Propagate more options to children. - */ -const SpaceFlex = () => { - return (options) => { - const { children } = options; - if (!Array.isArray(children)) - return []; - const { direction = 'row', ratio = children.map(() => 1), padding = 0, data: flexData, } = options; - const [mainStart, mainSize, crossSize, crossStart] = direction === 'col' - ? ['y', 'height', 'width', 'x'] - : ['x', 'width', 'height', 'y']; - const sum = ratio.reduce((total, value) => total + value); - const totalSize = options[mainSize] - padding * (children.length - 1); - const sizes = ratio.map((value) => totalSize * (value / sum)); - const newChildren = []; - let next = options[mainStart] || 0; - for (let i = 0; i < sizes.length; i += 1) { - const _a = children[i], { data } = _a, rest = __rest(_a, ["data"]); - const newData = (0, utils_1.mergeData)(data, flexData); - newChildren.push(Object.assign({ [mainStart]: next, [mainSize]: sizes[i], [crossStart]: options[crossStart] || 0, [crossSize]: options[crossSize], data: newData }, rest)); - next += sizes[i] + padding; - } - return newChildren; - }; -}; -exports.SpaceFlex = SpaceFlex; -exports.SpaceFlex.props = {}; -//# sourceMappingURL=spaceFlex.js.map -}, function(modId) { var map = {"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816103, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.View = void 0; -const util_1 = require("@antv/util"); -const utils_1 = require("./utils"); -/** - * @todo Propagate more options to children.(e.g. filter) - * @todo Propagate encode options to children. This is useful for Matrix composition. - * @todo Move this to runtime, do not treat it as a composition to cause confusion. - */ -const View = () => { - return (options) => { - const { children } = options, restOptions = __rest(options, ["children"]); - if (!Array.isArray(children)) - return []; - const { data: viewData, scale: viewScale = {}, axis: viewAxis = {}, legend: viewLegend = {}, encode: viewEncode = {}, transform: viewTransform = [] } = restOptions, rest = __rest(restOptions, ["data", "scale", "axis", "legend", "encode", "transform"]); - const marks = children.map((_a) => { - var { data, scale = {}, axis = {}, legend = {}, encode = {}, transform = [] } = _a, rest = __rest(_a, ["data", "scale", "axis", "legend", "encode", "transform"]); - return (Object.assign({ data: (0, utils_1.mergeData)(data, viewData), scale: (0, util_1.deepMix)({}, viewScale, scale), encode: (0, util_1.deepMix)({}, viewEncode, encode), transform: [...viewTransform, ...transform], axis: axis && viewAxis ? (0, util_1.deepMix)({}, viewAxis, axis) : false, legend: legend && viewLegend ? (0, util_1.deepMix)({}, viewLegend, legend) : false }, rest)); - }); - return [Object.assign(Object.assign({}, rest), { marks, type: 'standardView' })]; - }; -}; -exports.View = View; -exports.View.props = {}; -//# sourceMappingURL=view.js.map -}, function(modId) { var map = {"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816104, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Mark = void 0; -// @todo Move this to runtime. -const Mark = ({ static: isStatic = false, } = {}) => { - return (options) => { - const { width, height, depth, paddingLeft, paddingRight, paddingTop, paddingBottom, padding, inset, insetLeft, insetTop, insetRight, insetBottom, margin, marginLeft, marginBottom, marginTop, marginRight, data, coordinate, theme, component, interaction, x, y, z, key, frame, labelTransform, parentKey, clip, viewStyle, title } = options, mark = __rest(options, ["width", "height", "depth", "paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "padding", "inset", "insetLeft", "insetTop", "insetRight", "insetBottom", "margin", "marginLeft", "marginBottom", "marginTop", "marginRight", "data", "coordinate", "theme", "component", "interaction", "x", "y", "z", "key", "frame", "labelTransform", "parentKey", "clip", "viewStyle", "title"]); - return [ - Object.assign(Object.assign({ type: 'standardView', x, - y, - z, - key, - width, - height, - depth, - padding, - paddingLeft, - paddingRight, - paddingTop, - inset, - insetLeft, - insetTop, - insetRight, - insetBottom, - paddingBottom, - theme, - coordinate, - component, - interaction, - frame, - labelTransform, - margin, - marginLeft, - marginBottom, - marginTop, - marginRight, - parentKey, - clip, style: viewStyle }, (!isStatic && { title })), { marks: [Object.assign(Object.assign(Object.assign({}, mark), { key: `${key}-0`, data }), (isStatic && { title }))] }), - ]; - }; -}; -exports.Mark = Mark; -exports.Mark.props = {}; -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816105, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FacetRect = exports.createInnerGuide = exports.setChildren = exports.setData = exports.toCell = exports.setStyle = exports.setAnimation = exports.inferColor = void 0; -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const vector_1 = require("../utils/vector"); -const container_1 = require("../utils/container"); -const array_1 = require("../utils/array"); -const utils_1 = require("./utils"); -const setScale = (0, utils_1.useDefaultAdaptor)((options) => { - const { encode, data, scale, shareSize = false } = options; - const { x, y } = encode; - const flexDomain = (encode, channel) => { - var _a; - if (encode === undefined || !shareSize) - return {}; - const groups = (0, d3_array_1.group)(data, (d) => d[encode]); - const domain = ((_a = scale === null || scale === void 0 ? void 0 : scale[channel]) === null || _a === void 0 ? void 0 : _a.domain) || Array.from(groups.keys()); - const flex = domain.map((key) => { - if (!groups.has(key)) - return 1; - return groups.get(key).length; - }); - return { domain, flex }; - }; - return { - scale: { - x: Object.assign(Object.assign({ paddingOuter: 0, paddingInner: 0.1, guide: x === undefined ? null : { position: 'top' } }, (x === undefined && { paddingInner: 0 })), flexDomain(x, 'x')), - y: Object.assign(Object.assign({ range: [0, 1], paddingOuter: 0, paddingInner: 0.1, guide: y === undefined ? null : { position: 'right' } }, (y === undefined && { paddingInner: 0 })), flexDomain(y, 'y')), - }, - }; -}); -/** - * BFS view tree and using the last discovered color encode - * as the top-level encode for this plot. This is useful when - * color encode and color scale is specified in mark node. - * It makes sense because the whole facet should shared the same - * color encoding, but it also can be override with explicity - * encode and scale specification. - */ -exports.inferColor = (0, utils_1.useOverrideAdaptor)((options) => { - const { data, scale, legend } = options; - const discovered = [options]; - let encodeColor; - let scaleColor; - let legendColor; - while (discovered.length) { - const node = discovered.shift(); - const { children, encode = {}, scale = {}, legend = {} } = node; - const { color: c } = encode; - const { color: cs } = scale; - const { color: cl } = legend; - if (c !== undefined) - encodeColor = c; - if (cs !== undefined) - scaleColor = cs; - if (cl !== undefined) - legendColor = cl; - if (Array.isArray(children)) { - discovered.push(...children); - } - } - const domainColor = () => { - var _a; - const domain = (_a = scale === null || scale === void 0 ? void 0 : scale.color) === null || _a === void 0 ? void 0 : _a.domain; - if (domain !== undefined) - return [domain]; - if (encodeColor === undefined) - return [undefined]; - const color = typeof encodeColor === 'function' ? encodeColor : (d) => d[encodeColor]; - const values = data.map(color); - if (values.some((d) => typeof d === 'number')) - return [(0, d3_array_1.extent)(values)]; - return [Array.from(new Set(values)), 'ordinal']; - }; - const title = typeof encodeColor === 'string' ? encodeColor : ''; - const [domain, type] = domainColor(); - return Object.assign({ encode: { color: { type: 'column', value: domain !== null && domain !== void 0 ? domain : [] } }, scale: { color: (0, util_1.deepMix)({}, scaleColor, { domain, type }) } }, (legend === undefined && { - legend: { color: (0, util_1.deepMix)({ title }, legendColor) }, - })); -}); -exports.setAnimation = (0, utils_1.useDefaultAdaptor)(() => ({ - animate: { - enterType: 'fadeIn', - }, -})); -exports.setStyle = (0, utils_1.useOverrideAdaptor)(() => ({ - frame: false, - encode: { - shape: 'hollow', - }, - style: { - lineWidth: 0, - }, -})); -exports.toCell = (0, utils_1.useOverrideAdaptor)(() => ({ - type: 'cell', -})); -/** - * Do not set cell data directly, the children will get wrong do if do - * so. Use transform to set new data. - **/ -exports.setData = (0, utils_1.useOverrideAdaptor)((options) => { - const { data } = options; - const connector = { - type: 'custom', - callback: () => { - const { data, encode } = options; - const { x, y } = encode; - const X = x ? Array.from(new Set(data.map((d) => d[x]))) : []; - const Y = y ? Array.from(new Set(data.map((d) => d[y]))) : []; - const cellData = () => { - if (X.length && Y.length) { - const cellData = []; - for (const vx of X) { - for (const vy of Y) { - cellData.push({ [x]: vx, [y]: vy }); - } - } - return cellData; - } - if (X.length) - return X.map((d) => ({ [x]: d })); - if (Y.length) - return Y.map((d) => ({ [y]: d })); - }; - return cellData(); - }, - }; - return { - data: { type: 'inline', value: data, transform: [connector] }, - }; -}); -/** - * @todo Move some options assignment to runtime. - */ -exports.setChildren = (0, utils_1.useOverrideAdaptor)((options, subLayout = subLayoutRect, createGuideX = createGuideXRect, createGuideY = createGuideYRect, childOptions = {}) => { - const { data: dataValue, encode, children, scale: facetScale, x: originX = 0, y: originY = 0, shareData = false, key: viewKey, } = options; - const { value: data } = dataValue; - // Only support field encode now. - const { x: encodeX, y: encodeY } = encode; - const { color: facetScaleColor } = facetScale; - const { domain: facetDomainColor } = facetScaleColor; - const createChildren = (visualData, scale, layout) => { - const { x: scaleX, y: scaleY } = scale; - const { paddingLeft, paddingTop, marginLeft, marginTop } = layout; - const { domain: domainX } = scaleX.getOptions(); - const { domain: domainY } = scaleY.getOptions(); - const index = (0, array_1.indexOf)(visualData); - const bboxs = visualData.map(subLayout); - const values = visualData.map(({ x, y }) => [ - scaleX.invert(x), - scaleY.invert(y), - ]); - const filters = values.map(([fx, fy]) => (d) => { - const { [encodeX]: x, [encodeY]: y } = d; - const inX = encodeX !== undefined ? x === fx : true; - const inY = encodeY !== undefined ? y === fy : true; - return inX && inY; - }); - const facetData2d = filters.map((f) => data.filter(f)); - const maxDataDomain = shareData - ? (0, d3_array_1.max)(facetData2d, (data) => data.length) - : undefined; - const facets = values.map(([fx, fy]) => ({ - columnField: encodeX, - columnIndex: domainX.indexOf(fx), - columnValue: fx, - columnValuesLength: domainX.length, - rowField: encodeY, - rowIndex: domainY.indexOf(fy), - rowValue: fy, - rowValuesLength: domainY.length, - })); - const normalizedChildren = facets.map((facet) => { - if (Array.isArray(children)) - return children; - return [children(facet)].flat(1); - }); - return index.flatMap((i) => { - const [left, top, width, height] = bboxs[i]; - const facet = facets[i]; - const facetData = facetData2d[i]; - const children = normalizedChildren[i]; - return children.map((_a) => { - var _b, _c; - var { scale, key, facet: isFacet = true, axis = {}, legend = {} } = _a, rest = __rest(_a, ["scale", "key", "facet", "axis", "legend"]); - const guideY = ((_b = scale === null || scale === void 0 ? void 0 : scale.y) === null || _b === void 0 ? void 0 : _b.guide) || axis.y; - const guideX = ((_c = scale === null || scale === void 0 ? void 0 : scale.x) === null || _c === void 0 ? void 0 : _c.guide) || axis.x; - const defaultScale = { - x: { tickCount: encodeX ? 5 : undefined }, - y: { tickCount: encodeY ? 5 : undefined }, - }; - const newData = isFacet - ? facetData - : facetData.length === 0 - ? [] - : data; - const newScale = { - color: { domain: facetDomainColor }, - }; - const newAxis = { - x: createGuide(guideX, createGuideX)(facet, newData), - y: createGuide(guideY, createGuideY)(facet, newData), - }; - return Object.assign(Object.assign({ key: `${key}-${i}`, data: newData, margin: 0, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, parentKey: viewKey, width, - height, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: newData.length ? true : false, dataDomain: maxDataDomain, scale: (0, util_1.deepMix)(defaultScale, scale, newScale), axis: (0, util_1.deepMix)({}, axis, newAxis), - // Hide all legends for child mark by default, - // they are displayed in the top-level. - legend: false }, rest), childOptions); - }); - }); - }; - return { - children: createChildren, - }; -}); -function subLayoutRect(data) { - const { points } = data; - return (0, vector_1.calcBBox)(points); -} -/** - * Inner guide not show title, tickLine, label and subTickLine, - * if data is empty, do not show guide. - */ -function createInnerGuide(guide, data) { - return data.length - ? (0, util_1.deepMix)({ - title: false, - tick: null, - label: null, - }, guide) - : (0, util_1.deepMix)({ - title: false, - tick: null, - label: null, - grid: null, - }, guide); -} -exports.createInnerGuide = createInnerGuide; -function createGuideXRect(guide) { - return (facet, data) => { - const { rowIndex, rowValuesLength, columnIndex, columnValuesLength } = facet; - // Only the bottom-most facet show axisX. - if (rowIndex !== rowValuesLength - 1) - return createInnerGuide(guide, data); - // Only the bottom-left facet show title. - const title = columnIndex !== columnValuesLength - 1 ? false : undefined; - // If data is empty, do not show cell. - const grid = data.length ? undefined : null; - return (0, util_1.deepMix)({ title, grid }, guide); - }; -} -function createGuideYRect(guide) { - return (facet, data) => { - const { rowIndex, columnIndex } = facet; - // Only the left-most facet show axisY. - if (columnIndex !== 0) - return createInnerGuide(guide, data); - // Only the left-top facet show title. - const title = rowIndex !== 0 ? false : undefined; - // If data is empty, do not show cell. - const grid = data.length ? undefined : null; - return (0, util_1.deepMix)({ title, grid }, guide); - }; -} -function createGuide(guide, factory) { - if (typeof guide === 'function') - return guide; - if (guide === null || guide === false) - return () => null; - return factory(guide); -} -const FacetRect = () => { - return (options) => { - const newOptions = container_1.Container.of(options) - .call(exports.toCell) - .call(exports.inferColor) - .call(exports.setAnimation) - .call(setScale) - .call(exports.setStyle) - .call(exports.setData) - .call(exports.setChildren) - .value(); - return [newOptions]; - }; -}; -exports.FacetRect = FacetRect; -exports.FacetRect.props = {}; -//# sourceMappingURL=facetRect.js.map -}, function(modId) { var map = {"../utils/vector":1751263815873,"../utils/container":1751263816106,"../utils/array":1751263815830,"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816106, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Container = void 0; -class Container { - constructor(x) { - this.$value = x; - } - static of(x) { - return new Container(x); - } - call(f, ...rest) { - return (this.$value = f(this.$value, ...rest)), this; - } - value() { - return this.$value; - } -} -exports.Container = Container; -//# sourceMappingURL=container.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816107, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RepeatMatrix = void 0; -const util_1 = require("@antv/util"); -const container_1 = require("../utils/container"); -const vector_1 = require("../utils/vector"); -const array_1 = require("../utils/array"); -const facetRect_1 = require("./facetRect"); -const utils_1 = require("./utils"); -const setScale = (0, utils_1.useDefaultAdaptor)((options) => { - return { - scale: { - x: { guide: null, paddingOuter: 0, paddingInner: 0.1 }, - y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 }, - }, - }; -}); -const setChildren = (0, utils_1.useOverrideAdaptor)((options) => { - const { data, children, x: originX = 0, y: originY = 0, key: viewKey, } = options; - const createChildren = (visualData, scale, layout) => { - const { x: scaleX, y: scaleY } = scale; - const { paddingLeft, paddingTop, marginLeft, marginTop } = layout; - const { domain: domainX } = scaleX.getOptions(); - const { domain: domainY } = scaleY.getOptions(); - const index = (0, array_1.indexOf)(visualData); - const bboxs = visualData.map(({ points }) => (0, vector_1.calcBBox)(points)); - const values = visualData.map(({ x, y }) => [ - scaleX.invert(x), - scaleY.invert(y), - ]); - const facets = values.map(([fx, fy]) => ({ - columnField: fx, - columnIndex: domainX.indexOf(fx), - columnValue: fx, - columnValuesLength: domainX.length, - rowField: fy, - rowIndex: domainY.indexOf(fy), - rowValue: fy, - rowValuesLength: domainY.length, - })); - const normalizedChildren = facets.map((facet) => { - if (Array.isArray(children)) - return children; - return [children(facet)].flat(1); - }); - return index.flatMap((i) => { - const [left, top, width, height] = bboxs[i]; - const [fx, fy] = values[i]; - const facet = facets[i]; - const children = normalizedChildren[i]; - return children.map((d) => { - var _a, _b; - const { scale, key, encode, axis, interaction } = d, rest = __rest(d, ["scale", "key", "encode", "axis", "interaction"]); - const guideY = (_a = scale === null || scale === void 0 ? void 0 : scale.y) === null || _a === void 0 ? void 0 : _a.guide; - const guideX = (_b = scale === null || scale === void 0 ? void 0 : scale.x) === null || _b === void 0 ? void 0 : _b.guide; - const defaultScale = { - // Do not sync position scales among facets by default. - x: { facet: false }, - // Do not sync position scales among facets by default. - y: { facet: false }, - }; - const newAxis = { - x: createGuideX(guideX)(facet, data), - y: createGuideY(guideY)(facet, data), - }; - const defaultAxis = { - x: { tickCount: 5 }, - y: { tickCount: 5 }, - }; - return Object.assign({ data, parentKey: viewKey, key: `${key}-${i}`, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, width, - height, margin: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: true, scale: (0, util_1.deepMix)(defaultScale, scale), axis: (0, util_1.deepMix)(defaultAxis, axis, newAxis), - // Hide all legends for child mark by default, - // they are displayed in the top-level. - legend: false, encode: (0, util_1.deepMix)({}, encode, { - x: fx, - y: fy, - }), interaction: (0, util_1.deepMix)({}, interaction, { - // Register this interaction in parent node. - legendFilter: false, - }) }, rest); - }); - }); - }; - return { - children: createChildren, - }; -}); -/** - * @todo Use transform instead of override data directly. - */ -const setData = (0, utils_1.useOverrideAdaptor)((options) => { - const { encode } = options, rest = __rest(options, ["encode"]); - const { position: P = [], x: X = P, y: Y = [...P].reverse() } = encode, restEncode = __rest(encode, ["position", "x", "y"]); - const data = []; - for (const $x of [X].flat(1)) { - for (const $y of [Y].flat(1)) { - data.push({ $x, $y }); - } - } - return Object.assign(Object.assign({}, rest), { data, encode: Object.assign(Object.assign({}, restEncode), { x: '$x', y: '$y' }), scale: Object.assign(Object.assign({}, ([X].flat(1).length === 1 && { x: { paddingInner: 0 } })), ([Y].flat(1).length === 1 && { y: { paddingInner: 0 } })) }); -}); -function createGuideX(guideX) { - if (typeof guideX === 'function') - return guideX; - if (guideX === null) - return () => null; - return (facet, data) => { - const { rowIndex, rowValuesLength } = facet; - // Only the bottom-most facet show axisX. - if (rowIndex !== rowValuesLength - 1) - return (0, facetRect_1.createInnerGuide)(guideX, data); - }; -} -function createGuideY(guideY) { - if (typeof guideY === 'function') - return guideY; - if (guideY === null) - return () => null; - return (facet, data) => { - const { columnIndex } = facet; - // Only the left-most facet show axisY. - if (columnIndex !== 0) - return (0, facetRect_1.createInnerGuide)(guideY, data); - }; -} -/** - * @todo Layout mode: layer, row, col... - * @todo Specify show axis or not. - */ -const RepeatMatrix = () => { - return (options) => { - const newOptions = container_1.Container.of(options) - .call(facetRect_1.toCell) - .call(facetRect_1.inferColor) - .call(setChildren) - .call(setData) - .call(facetRect_1.setAnimation) - .call(facetRect_1.setStyle) - .call(setScale) - .value(); - return [newOptions]; - }; -}; -exports.RepeatMatrix = RepeatMatrix; -//# sourceMappingURL=repeatMatrix.js.map -}, function(modId) { var map = {"../utils/container":1751263816106,"../utils/vector":1751263815873,"../utils/array":1751263815830,"./facetRect":1751263816105,"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816108, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FacetCircle = void 0; -const container_1 = require("../utils/container"); -const vector_1 = require("../utils/vector"); -const facetRect_1 = require("./facetRect"); -const utils_1 = require("./utils"); -const setScale = (0, utils_1.useDefaultAdaptor)((options) => { - return { - scale: { - x: { guide: { type: 'axisArc' }, paddingOuter: 0, paddingInner: 0.1 }, - y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 }, - }, - }; -}); -const setCoordinate = (0, utils_1.useDefaultAdaptor)((options) => { - return { - coordinate: { type: 'polar' }, - }; -}); -const setEncode = (options) => { - const { encode } = options, rest = __rest(options, ["encode"]); - const { position } = encode; - return Object.assign(Object.assign({}, rest), { encode: { x: position } }); -}; -/** - * Every facet should do not show both axisX and axisY by default. - */ -function createGuideFacetCircle(guide) { - return (facet) => null; -} -/** - * Use the inscribed circle of the sector as the - * circumscribed circle of the new bbox. - */ -function subLayoutFacetCircle(data) { - const { points } = data; - const [p0, p1, p2, p3] = points; - const sr = (0, vector_1.dist)(p0, p3); // radius of sector - const v0 = (0, vector_1.sub)(p0, p3); - const v1 = (0, vector_1.sub)(p1, p2); - const a01 = (0, vector_1.angleBetween)(v0, v1); - // sr = ir + ir / sin(theta/2) - const t = 1 / Math.sin(a01 / 2); - const ir = sr / (1 + t); // radius of inscribed circle - const s = ir * Math.sqrt(2); // size of the bbox. - // This assume the innerRadius of polar is 0. - // @todo Compute the right origin if it's not 0, - // or maybe pass the coordinates to get the right center. - const [x0, y0] = p2; - const a0 = (0, vector_1.angleWithQuadrant)(v0); - const a3 = a0 + a01 / 2; - const d = ir * t; - const cx = x0 + d * Math.sin(a3); // center x of inscribed circle - const cy = y0 - d * Math.cos(a3); // center y of inscribed circle - return [cx - s / 2, cy - s / 2, s, s]; -} -/** - * @todo Pack. - */ -const FacetCircle = () => { - return (options) => { - const newOptions = container_1.Container.of(options) - .call(facetRect_1.toCell) - .call(setEncode) - .call(facetRect_1.inferColor) - .call(setCoordinate) - .call(facetRect_1.setData) - .call(facetRect_1.setChildren, subLayoutFacetCircle, createGuideFacetCircle, createGuideFacetCircle, { frame: false }) - .call(facetRect_1.setAnimation) - .call(facetRect_1.setStyle) - .call(setScale) - .value(); - return [newOptions]; - }; -}; -exports.FacetCircle = FacetCircle; -//# sourceMappingURL=facetCircle.js.map -}, function(modId) { var map = {"../utils/container":1751263816106,"../utils/vector":1751263815873,"./facetRect":1751263816105,"./utils":1751263816101}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816109, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TimingKeyframe = void 0; -const util_1 = require("@antv/util"); -function range(direction, iterationCount, keyframeCount) { - const start = 0; - const end = keyframeCount; - const normal = [start, end]; - const reverse = [-end + 1, -start + 1]; - if (direction === 'normal') - return normal; - if (direction === 'reverse') - return reverse; - if (direction === 'alternate') { - return iterationCount % 2 === 0 ? normal : reverse; - } - if (direction === 'reverse-alternate') { - return iterationCount % 2 === 0 ? reverse : normal; - } -} -/** - * Set animation options for all descendants. - */ -function setAnimation(node, duration, easing) { - const discovered = [node]; - while (discovered.length) { - const n = discovered.pop(); - n.animate = (0, util_1.deepMix)({ - enter: { - duration, - }, - update: { - duration, - easing, - type: 'morphing', - fill: 'both', - }, - exit: { - type: 'fadeOut', - duration, - }, - }, n.animate || {}); - const { children } = n; - if (Array.isArray(children)) - discovered.push(...children); - } - return node; -} -/** - * @todo More options, such as fill, totalDuration... - */ -const TimingKeyframe = () => { - return (options) => { - const { children = [], duration = 1000, iterationCount = 1, direction = 'normal', easing = 'ease-in-out-sine', } = options; - const n = children.length; - if (!Array.isArray(children) || n === 0) - return []; - const { key } = children[0]; - const newChildren = children - .map((d) => (Object.assign(Object.assign({}, d), { key }))) - .map((d) => setAnimation(d, duration, easing)); - return function* () { - let count = 0; - let prevIndex; - while (iterationCount === 'infinite' || count < iterationCount) { - const [start, end] = range(direction, count, n); - for (let i = start; i < end; i += 1) { - // For reverse direction, the range is from negative to negative - // so the absolute value of i is the real index for newChildren. - const index = Math.abs(i); - // This is for preventing alternate or reverse-alternate keyframe - // to yield two same node one by one when the direction change. - if (prevIndex !== index) - yield newChildren[index]; - prevIndex = index; - } - count++; - } - }; - }; -}; -exports.TimingKeyframe = TimingKeyframe; -exports.TimingKeyframe.props = {}; -//# sourceMappingURL=timingKeyframe.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816110, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GeoPath = void 0; -/** - * Wrap GeoPath by a GeoView. - */ -const GeoPath = () => { - return (options) => { - const { type, data, scale, encode, style, animate, key, state } = options, rest = __rest(options, ["type", "data", "scale", "encode", "style", "animate", "key", "state"]); - return [ - Object.assign(Object.assign({ type: 'geoView' }, rest), { children: [ - { - type: 'geoPath', - key: `${key}-0`, - data: { - value: data, - }, - scale, - encode, - style, - animate, - state, - }, - ] }), - ]; - }; -}; -exports.GeoPath = GeoPath; -exports.GeoPath.props = {}; -//# sourceMappingURL=geoPath.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816111, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GeoView = void 0; -const scale_1 = require("@antv/scale"); -const util_1 = require("@antv/util"); -const d3_geo_1 = require("@antv/vendor/d3-geo"); -const mark_1 = require("../utils/mark"); -const d3Projection = __importStar(require("./d3Projection")); -/** - * Get projection factory from d3-projection. - */ -function normalizeProjection(type) { - if (typeof type === 'function') - return type; - const name = `geo${(0, util_1.upperFirst)(type)}`; - const projection = d3Projection[name]; - if (!projection) - throw new Error(`Unknown coordinate: ${type}`); - return projection; -} -/** - * @see https://github.com/mapbox/geojson-merge/blob/master/index.js - */ -function mergeGeoJSON(gjs) { - return { - type: 'FeatureCollection', - features: gjs.flatMap((gj) => normalizeGeoJSON(gj).features), - }; -} -function normalizeGeoJSON(gj) { - const types = { - Point: 'geometry', - MultiPoint: 'geometry', - LineString: 'geometry', - MultiLineString: 'geometry', - Polygon: 'geometry', - MultiPolygon: 'geometry', - GeometryCollection: 'geometry', - Feature: 'feature', - FeatureCollection: 'featureCollection', - }; - if (!gj || !gj.type) - return null; - const type = types[gj.type]; - if (!type) - return null; - if (type === 'geometry') { - return { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: {}, - geometry: gj, - }, - ], - }; - } - else if (type === 'feature') { - return { - type: 'FeatureCollection', - features: [gj], - }; - } - else if (type === 'featureCollection') { - return gj; - } -} -/** - * Specify the options for d3 projection - * @see https://github.com/d3/d3-geo#projections - * @todo Specify key each by each. - */ -function setProjectionOptions(projection, options) { - var _a; - for (const [key, value] of Object.entries(options)) { - (_a = projection[key]) === null || _a === void 0 ? void 0 : _a.call(projection, value); - } -} -function setProjectionSize(projection, nodes, layout, options) { - const defaultOutline = () => { - const geoNodes = nodes.filter(isGeoPath); - // For geoPath with sphere mark, use it as outline. - const sphere = geoNodes.find((d) => d.sphere); - if (sphere) - return { type: 'Sphere' }; - // Merge all GeoJSON as the outline. - return mergeGeoJSON(geoNodes.filter((d) => !d.sphere).flatMap((d) => d.data.value)); - }; - const { outline = defaultOutline() } = options; - const { size = 'fitExtent' } = options; - if (size === 'fitExtent') { - return setFitExtent(projection, outline, layout); - } - else if (size === 'fitWidth') { - return setFitWidth(projection, outline, layout); - } -} -function setFitExtent(projection, object, layout) { - const { x, y, width, height } = layout; - projection.fitExtent([ - [x, y], - [width, height], - ], object); -} -function setFitWidth(projection, object, layout) { - const { width, height } = layout; - const [[x0, y0], [x1, y1]] = (0, d3_geo_1.geoPath)(projection.fitWidth(width, object)).bounds(object); - const dy = Math.ceil(y1 - y0); - const l = Math.min(Math.ceil(x1 - x0), dy); - const s = (projection.scale() * (l - 1)) / l; - const [tx, ty] = projection.translate(); - const t = ty + (height - dy) / 2; - projection.scale(s).translate([tx, t]).precision(0.2); -} -/** - * @todo Remove this. - */ -function normalizeDataSource(node) { - const { data } = node; - if (Array.isArray(data)) - return Object.assign(Object.assign({}, node), { data: { value: data } }); - const { type } = data; - if (type === 'graticule10') { - return Object.assign(Object.assign({}, node), { data: { value: [(0, d3_geo_1.geoGraticule10)()] } }); - } - else if (type === 'sphere') { - // Sphere is not a standard type of GeoJSON. - // Mark this geoPath as sphere geoPath. - return Object.assign(Object.assign({}, node), { sphere: true, data: { value: [{ type: 'Sphere' }] } }); - } - return node; -} -function isGeoPath(d) { - return d.type === 'geoPath'; -} -/** - * A view with geo coordinate. - */ -const GeoView = () => { - return (options) => { - const { children, coordinate: projection = {} } = options; - if (!Array.isArray(children)) - return []; - // Get projection factory. - const { type = 'equalEarth' } = projection, projectionOptions = __rest(projection, ["type"]); - const createProjection = normalizeProjection(type); - const nodes = children.map(normalizeDataSource); - // Set path generator lazily. - let path; - // A custom geo coordinate. - function Geo() { - return [ - [ - 'custom', - (x, y, width, height) => { - // Create and set projection. - const visual = createProjection(); - const layout = { x, y, width, height }; - setProjectionSize(visual, nodes, layout, projectionOptions); - setProjectionOptions(visual, projectionOptions); - // Create path generator. - path = (0, d3_geo_1.geoPath)(visual); - // Normalize projection and projection.invert, - // which normalize projected points. - const scaleX = new scale_1.Linear({ - domain: [x, x + width], - }); - const scaleY = new scale_1.Linear({ - domain: [y, y + height], - }); - const normalize = (point) => { - const visualPoint = visual(point); - if (!visualPoint) - return [null, null]; - const [vx, vy] = visualPoint; - return [scaleX.map(vx), scaleY.map(vy)]; - }; - const normalizeInvert = (point) => { - if (!point) - return null; - const [px, py] = point; - const visualPoint = [scaleX.invert(px), scaleY.invert(py)]; - return visual.invert(visualPoint); - }; - return { - transform: (point) => normalize(point), - untransform: (point) => normalizeInvert(point), - }; - }, - ], - ]; - } - function GeoPath(options) { - const { style, tooltip = {} } = options; - return Object.assign(Object.assign({}, options), { type: 'path', tooltip: (0, mark_1.maybeTooltip)(tooltip, { - title: 'id', - items: [{ channel: 'color' }], - }), style: Object.assign(Object.assign({}, style), { d: (d) => path(d) || [] }) }); - } - const t = (d) => (isGeoPath(d) ? GeoPath(d) : d); - return [ - Object.assign(Object.assign({}, options), { type: 'view', scale: { - x: { type: 'identity' }, - y: { type: 'identity' }, - }, axis: false, coordinate: { type: Geo }, children: nodes.flatMap(t) }), - ]; - }; -}; -exports.GeoView = GeoView; -exports.GeoView.props = {}; -//# sourceMappingURL=geoView.js.map -}, function(modId) { var map = {"../utils/mark":1751263815997,"./d3Projection":1751263816112}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816112, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.geoTransverseMercatorRaw = exports.geoTransverseMercator = exports.geoStereographicRaw = exports.geoStereographic = exports.geoOrthographicRaw = exports.geoOrthographic = exports.geoNaturalEarth1Raw = exports.geoNaturalEarth1 = exports.geoMercatorRaw = exports.geoMercator = exports.geoProjectionMutator = exports.geoProjection = exports.geoIdentity = exports.geoGnomonicRaw = exports.geoGnomonic = exports.geoEquirectangularRaw = exports.geoEquirectangular = exports.geoEqualEarthRaw = exports.geoEqualEarth = exports.geoConicEquidistantRaw = exports.geoConicEquidistant = exports.geoConicEqualAreaRaw = exports.geoConicEqualArea = exports.geoConicConformalRaw = exports.geoConicConformal = exports.geoAzimuthalEquidistantRaw = exports.geoAzimuthalEquidistant = exports.geoAzimuthalEqualAreaRaw = exports.geoAzimuthalEqualArea = exports.geoAlbers = exports.geoAlbersUsa = void 0; -var d3_geo_1 = require("@antv/vendor/d3-geo"); -Object.defineProperty(exports, "geoAlbersUsa", { enumerable: true, get: function () { return d3_geo_1.geoAlbersUsa; } }); -Object.defineProperty(exports, "geoAlbers", { enumerable: true, get: function () { return d3_geo_1.geoAlbers; } }); -Object.defineProperty(exports, "geoAzimuthalEqualArea", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEqualArea; } }); -Object.defineProperty(exports, "geoAzimuthalEqualAreaRaw", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEqualAreaRaw; } }); -Object.defineProperty(exports, "geoAzimuthalEquidistant", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEquidistant; } }); -Object.defineProperty(exports, "geoAzimuthalEquidistantRaw", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEquidistantRaw; } }); -Object.defineProperty(exports, "geoConicConformal", { enumerable: true, get: function () { return d3_geo_1.geoConicConformal; } }); -Object.defineProperty(exports, "geoConicConformalRaw", { enumerable: true, get: function () { return d3_geo_1.geoConicConformalRaw; } }); -Object.defineProperty(exports, "geoConicEqualArea", { enumerable: true, get: function () { return d3_geo_1.geoConicEqualArea; } }); -Object.defineProperty(exports, "geoConicEqualAreaRaw", { enumerable: true, get: function () { return d3_geo_1.geoConicEqualAreaRaw; } }); -Object.defineProperty(exports, "geoConicEquidistant", { enumerable: true, get: function () { return d3_geo_1.geoConicEquidistant; } }); -Object.defineProperty(exports, "geoConicEquidistantRaw", { enumerable: true, get: function () { return d3_geo_1.geoConicEquidistantRaw; } }); -Object.defineProperty(exports, "geoEqualEarth", { enumerable: true, get: function () { return d3_geo_1.geoEqualEarth; } }); -Object.defineProperty(exports, "geoEqualEarthRaw", { enumerable: true, get: function () { return d3_geo_1.geoEqualEarthRaw; } }); -Object.defineProperty(exports, "geoEquirectangular", { enumerable: true, get: function () { return d3_geo_1.geoEquirectangular; } }); -Object.defineProperty(exports, "geoEquirectangularRaw", { enumerable: true, get: function () { return d3_geo_1.geoEquirectangularRaw; } }); -Object.defineProperty(exports, "geoGnomonic", { enumerable: true, get: function () { return d3_geo_1.geoGnomonic; } }); -Object.defineProperty(exports, "geoGnomonicRaw", { enumerable: true, get: function () { return d3_geo_1.geoGnomonicRaw; } }); -Object.defineProperty(exports, "geoIdentity", { enumerable: true, get: function () { return d3_geo_1.geoIdentity; } }); -Object.defineProperty(exports, "geoProjection", { enumerable: true, get: function () { return d3_geo_1.geoProjection; } }); -Object.defineProperty(exports, "geoProjectionMutator", { enumerable: true, get: function () { return d3_geo_1.geoProjectionMutator; } }); -Object.defineProperty(exports, "geoMercator", { enumerable: true, get: function () { return d3_geo_1.geoMercator; } }); -Object.defineProperty(exports, "geoMercatorRaw", { enumerable: true, get: function () { return d3_geo_1.geoMercatorRaw; } }); -Object.defineProperty(exports, "geoNaturalEarth1", { enumerable: true, get: function () { return d3_geo_1.geoNaturalEarth1; } }); -Object.defineProperty(exports, "geoNaturalEarth1Raw", { enumerable: true, get: function () { return d3_geo_1.geoNaturalEarth1Raw; } }); -Object.defineProperty(exports, "geoOrthographic", { enumerable: true, get: function () { return d3_geo_1.geoOrthographic; } }); -Object.defineProperty(exports, "geoOrthographicRaw", { enumerable: true, get: function () { return d3_geo_1.geoOrthographicRaw; } }); -Object.defineProperty(exports, "geoStereographic", { enumerable: true, get: function () { return d3_geo_1.geoStereographic; } }); -Object.defineProperty(exports, "geoStereographicRaw", { enumerable: true, get: function () { return d3_geo_1.geoStereographicRaw; } }); -Object.defineProperty(exports, "geoTransverseMercator", { enumerable: true, get: function () { return d3_geo_1.geoTransverseMercator; } }); -Object.defineProperty(exports, "geoTransverseMercatorRaw", { enumerable: true, get: function () { return d3_geo_1.geoTransverseMercatorRaw; } }); -//# sourceMappingURL=d3Projection.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816113, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Event = void 0; -const event_1 = require("../utils/event"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -// For extended component -function maybeComponentRoot(node) { - return (0, utils_1.maybeRoot)(node, (node) => node.className === 'component'); -} -// For extended shape. -function maybeElementRoot(node) { - return (0, utils_1.maybeRoot)(node, (node) => node.className === 'element'); -} -// For extended label. -function maybeLabelRoot(node) { - return (0, utils_1.maybeRoot)(node, (node) => node.className === 'label'); -} -function bubblesEvent(eventType, view, emitter, predicate = (event) => true) { - return (e) => { - if (!predicate(e)) - return; - // Emit plot events. - emitter.emit(`plot:${eventType}`, e); - const { target } = e; - // There is no target for pointerupoutside event if out of canvas. - if (!target) - return; - const { className } = target; - // If target area is plot area, do not emit extra events. - if (className === 'plot') - return; - // If target is element or child of element. - const elementRoot = maybeElementRoot(target); - // If target is component or child of component. - const componentRoot = maybeComponentRoot(target); - // If target is babel or child of babel. - const babelRoot = maybeLabelRoot(target); - const root = elementRoot || componentRoot || babelRoot; - if (!root) - return; - const { className: elementType, markType } = root; - const e1 = Object.assign(Object.assign({}, e), { nativeEvent: true }); - if (elementType === 'element') { - e1['data'] = { data: (0, helper_1.dataOf)(root, view) }; - emitter.emit(`element:${eventType}`, e1); - emitter.emit(`${markType}:${eventType}`, e1); - } - else if (elementType === 'label') { - //label children [Text2, Rect2, Path2], - e1['data'] = { data: root.attributes.datum }; - emitter.emit(`label:${eventType}`, e1); - emitter.emit(`${className}:${eventType}`, e1); - } - else { - emitter.emit(`component:${eventType}`, e1); - emitter.emit(`${className}:${eventType}`, e1); - } - }; -} -// @todo Provide more info for event.dataset. -function Event() { - return (context, _, emitter) => { - const { container, view } = context; - // Click events. - const click = bubblesEvent(event_1.ChartEvent.CLICK, view, emitter, (e) => e.detail === 1); - const dblclick = bubblesEvent(event_1.ChartEvent.DBLCLICK, view, emitter, (e) => e.detail === 2); - // Pointer events. - const pointertap = bubblesEvent(event_1.ChartEvent.POINTER_TAP, view, emitter); - const pointerdown = bubblesEvent(event_1.ChartEvent.POINTER_DOWN, view, emitter); - const pointerup = bubblesEvent(event_1.ChartEvent.POINTER_UP, view, emitter); - const pointerover = bubblesEvent(event_1.ChartEvent.POINTER_OVER, view, emitter); - const pointerout = bubblesEvent(event_1.ChartEvent.POINTER_OUT, view, emitter); - const pointermove = bubblesEvent(event_1.ChartEvent.POINTER_MOVE, view, emitter); - const pointerenter = bubblesEvent(event_1.ChartEvent.POINTER_ENTER, view, emitter); - const pointerleave = bubblesEvent(event_1.ChartEvent.POINTER_LEAVE, view, emitter); - const pointerupoutside = bubblesEvent(event_1.ChartEvent.POINTER_UPOUTSIDE, view, emitter); - // Drag and drop events. - const dragstart = bubblesEvent(event_1.ChartEvent.DRAG_START, view, emitter); - const drag = bubblesEvent(event_1.ChartEvent.DRAG, view, emitter); - const dragend = bubblesEvent(event_1.ChartEvent.DRAG_END, view, emitter); - const dragenter = bubblesEvent(event_1.ChartEvent.DRAG_ENTER, view, emitter); - const dragleave = bubblesEvent(event_1.ChartEvent.DRAG_LEAVE, view, emitter); - const dragover = bubblesEvent(event_1.ChartEvent.DRAG_OVER, view, emitter); - const drop = bubblesEvent(event_1.ChartEvent.DROP, view, emitter); - // For legacy usage. - container.addEventListener('click', click); - container.addEventListener('click', dblclick); - // Recommend events. - container.addEventListener('pointertap', pointertap); - container.addEventListener('pointerdown', pointerdown); - container.addEventListener('pointerup', pointerup); - container.addEventListener('pointerover', pointerover); - container.addEventListener('pointerout', pointerout); - container.addEventListener('pointermove', pointermove); - container.addEventListener('pointerenter', pointerenter); - container.addEventListener('pointerleave', pointerleave); - container.addEventListener('pointerupoutside', pointerupoutside); - // Plugin events. - container.addEventListener('dragstart', dragstart); - container.addEventListener('drag', drag); - container.addEventListener('dragend', dragend); - container.addEventListener('dragenter', dragenter); - container.addEventListener('dragleave', dragleave); - container.addEventListener('dragover', dragover); - container.addEventListener('drop', drop); - return () => { - container.removeEventListener('click', click); - container.removeEventListener('click', dblclick); - container.removeEventListener('pointertap', pointertap); - container.removeEventListener('pointerdown', pointerdown); - container.removeEventListener('pointerup', pointerup); - container.removeEventListener('pointerover', pointerover); - container.removeEventListener('pointerout', pointerout); - container.removeEventListener('pointermove', pointermove); - container.removeEventListener('pointerenter', pointerenter); - container.removeEventListener('pointerleave', pointerleave); - container.removeEventListener('pointerupoutside', pointerupoutside); - container.removeEventListener('dragstart', dragstart); - container.removeEventListener('drag', drag); - container.removeEventListener('dragend', dragend); - container.removeEventListener('dragenter', dragenter); - container.removeEventListener('dragleave', dragleave); - container.removeEventListener('dragover', dragover); - container.removeEventListener('drop', drop); - }; - }; -} -exports.Event = Event; -Event.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=event.js.map -}, function(modId) { var map = {"../utils/event":1751263816091,"../utils/helper":1751263815829,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816114, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isValidScale = exports.isPosition = exports.syncFacetsScales = exports.useRelationScale = exports.assignScale = exports.useRelation = exports.collectScales = exports.groupTransform = exports.applyScale = exports.inferScale = void 0; -const scale_1 = require("@antv/scale"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const d3ScaleChromatic = __importStar(require("@antv/vendor/d3-scale-chromatic")); -const util_1 = require("@antv/util"); -const array_1 = require("../utils/array"); -const helper_1 = require("../utils/helper"); -const coordinate_1 = require("./coordinate"); -const library_1 = require("./library"); -function inferScale(name, values, options, coordinates, theme, library) { - const { guide = {} } = options; - const type = inferScaleType(name, values, options); - if (typeof type !== 'string') - return options; - const expectedDomain = inferScaleDomain(type, name, values, options); - const actualDomain = maybeRatio(type, expectedDomain, options); - return Object.assign(Object.assign(Object.assign({}, options), inferScaleOptions(type, name, values, options, coordinates)), { domain: actualDomain, range: inferScaleRange(type, name, values, options, actualDomain, theme, library), expectedDomain, - guide, - name, - type }); -} -exports.inferScale = inferScale; -function applyScale(channels, scale) { - const scaledValue = {}; - for (const channel of channels) { - const { values, name: scaleName } = channel; - const scaleInstance = scale[scaleName]; - for (const value of values) { - const { name, value: V } = value; - scaledValue[name] = V.map((d) => scaleInstance.map(d)); - } - } - return scaledValue; -} -exports.applyScale = applyScale; -function groupTransform(markState, uidScale) { - const channels = Array.from(markState.values()).flatMap((d) => d.channels); - const scaleGroups = (0, d3_array_1.rollups)(channels, (channels) => channels.map((d) => uidScale.get(d.scale.uid)), (d) => d.name) - .filter(([, scales]) => scales.some((d) => typeof d.getOptions().groupTransform === 'function') && // only sync scales with groupTransform options - scales.every((d) => d.getTicks)) - .map((d) => d[1]); - scaleGroups.forEach((group) => { - const groupTransform = group.map((d) => d.getOptions().groupTransform)[0]; - groupTransform(group); - }); -} -exports.groupTransform = groupTransform; -function collectScales(states, options) { - var _a; - const { components = [] } = options; - const NONE_STATIC_KEYS = [ - 'scale', - 'encode', - 'axis', - 'legend', - 'data', - 'transform', - ]; - // From normal marks. - const scales = Array.from(new Set(states.flatMap((d) => d.channels.map((d) => d.scale)))); - // From static marks. - const nameScale = new Map(scales.map((scale) => [scale.name, scale])); - for (const component of components) { - const channels = inferChannelsForComponent(component); - for (const channel of channels) { - const scale = nameScale.get(channel); - const staticScale = ((_a = component.scale) === null || _a === void 0 ? void 0 : _a[channel]) || {}; - const { independent = false } = staticScale; - if (scale && !independent) { - // Merged with exist scales if is not independent. - const { guide } = scale; - const guide1 = typeof guide === 'boolean' ? {} : guide; - scale.guide = (0, util_1.deepMix)({}, guide1, component); - Object.assign(scale, staticScale); - } - else { - // Append new scales without exit scales or independent. - const options1 = Object.assign(Object.assign({}, staticScale), { expectedDomain: staticScale.domain, name: channel, guide: (0, util_1.omit)(component, NONE_STATIC_KEYS) }); - scales.push(options1); - } - } - } - return scales; -} -exports.collectScales = collectScales; -function useRelation(relations) { - if (!relations || !Array.isArray(relations)) - return [helper_1.identity, helper_1.identity]; - // Store original map and invert. - let map; - let invert; - const conditionalize = (scale) => { - var _a; - map = scale.map.bind(scale); - invert = (_a = scale.invert) === null || _a === void 0 ? void 0 : _a.bind(scale); - // Distinguish functions[function, output] and value[vale, output] relations. - const funcRelations = relations.filter(([v]) => typeof v === 'function'); - const valueRelations = relations.filter(([v]) => typeof v !== 'function'); - // Update scale.map - const valueOutput = new Map(valueRelations); - scale.map = (x) => { - for (const [verify, value] of funcRelations) { - if (verify(x)) - return value; - } - if (valueOutput.has(x)) - return valueOutput.get(x); - return map(x); - }; - if (!invert) - return scale; - // Update scale.invert - const outputValue = new Map(valueRelations.map(([a, b]) => [b, a])); - const outputFunc = new Map(funcRelations.map(([a, b]) => [b, a])); - scale.invert = (x) => { - if (outputFunc.has(x)) - return x; - if (outputValue.has(x)) - return outputValue.get(x); - return invert(x); - }; - return scale; - }; - const deconditionalize = (scale) => { - if (map !== null) - scale.map = map; - if (invert !== null) - scale.invert = invert; - return scale; - }; - return [conditionalize, deconditionalize]; -} -exports.useRelation = useRelation; -function assignScale(target, source) { - const keys = Object.keys(target); - for (const scale of Object.values(source)) { - const { name } = scale.getOptions(); - if (!(name in target)) - target[name] = scale; - else { - const I = keys - .filter((d) => d.startsWith(name)) - // Reg is for extract `1` from `x1`; - .map((d) => +(d.replace(name, '') || 0)); - const index = (0, d3_array_1.max)(I) + 1; - const newKey = `${name}${index}`; - target[newKey] = scale; - scale.getOptions().key = newKey; - } - } - return target; -} -exports.assignScale = assignScale; -function useRelationScale(options, library) { - const [useScale] = (0, library_1.useLibrary)('scale', library); - const { relations } = options; - const [conditionalize] = useRelation(relations); - const scale = useScale(options); - return conditionalize(scale); -} -exports.useRelationScale = useRelationScale; -function syncFacetsScales(states) { - const scales = states - .flatMap((d) => Array.from(d.values())) - .flatMap((d) => d.channels.map((d) => d.scale)); - syncFacetsScaleByChannel(scales, 'x'); - syncFacetsScaleByChannel(scales, 'y'); -} -exports.syncFacetsScales = syncFacetsScales; -function inferChannelsForComponent(component) { - const { channels = [], type, scale = {} } = component; - const L = ['shape', 'color', 'opacity', 'size']; - if (channels.length !== 0) - return channels; - if (type === 'axisX') - return ['x']; - if (type === 'axisY') - return ['y']; - if (type === 'legends') - return Object.keys(scale).filter((d) => L.includes(d)); - return []; -} -function syncFacetsScaleByChannel(scales, channel) { - const S = scales.filter(({ name, facet = true }) => facet && name === channel); - const D = S.flatMap((d) => d.domain); - const syncedD = S.every(isQuantitativeScale) - ? (0, d3_array_1.extent)(D) - : S.every(isDiscreteScale) - ? Array.from(new Set(D)) - : null; - if (syncedD === null) - return; - for (const scale of S) { - scale.domain = syncedD; - } -} -function maybeRatio(type, domain, options) { - const { ratio } = options; - if (ratio === undefined || ratio === null) - return domain; - if (isQuantitativeScale({ type })) { - return clampQuantitativeScale(domain, ratio, type); - } - if (isDiscreteScale({ type })) - return clampDiscreteScale(domain, ratio); - return domain; -} -function clampQuantitativeScale(domain, ratio, type) { - const D = domain.map(Number); - const scale = new scale_1.Linear({ - domain: D, - range: [D[0], D[0] + (D[D.length - 1] - D[0]) * ratio], - }); - if (type === 'time') - return domain.map((d) => new Date(scale.map(d))); - return domain.map((d) => scale.map(d)); -} -function clampDiscreteScale(domain, ratio) { - const index = Math.round(domain.length * ratio); - return domain.slice(0, index); -} -function isQuantitativeScale(scale) { - const { type } = scale; - if (typeof type !== 'string') - return false; - // Do not take quantize, quantile or threshold scale into account, - // because they are not for position scales. If they are, there is - // no need to sync them. - const names = ['linear', 'log', 'pow', 'time']; - return names.includes(type); -} -function isDiscreteScale(scale) { - const { type } = scale; - if (typeof type !== 'string') - return false; - const names = ['band', 'point', 'ordinal']; - return names.includes(type); -} -// @todo More accurate inference for different cases. -function inferScaleType(name, values, options) { - const { type, domain, range, quantitative, ordinal } = options; - if (type !== undefined) - return type; - if (isObject(values)) - return 'identity'; - if (typeof range === 'string') - return 'linear'; - if ((domain || range || []).length > 2) - return asOrdinalType(name, ordinal); - if (domain !== undefined) { - if (isOrdinal([domain])) - return asOrdinalType(name, ordinal); - if (isTemporal(values)) - return 'time'; - return asQuantitativeType(name, range, quantitative); - } - if (isOrdinal(values)) - return asOrdinalType(name, ordinal); - if (isTemporal(values)) - return 'time'; - return asQuantitativeType(name, range, quantitative); -} -function inferScaleDomain(type, name, values, options) { - const { domain } = options; - if (domain !== undefined) - return domain; - switch (type) { - case 'linear': - case 'time': - case 'log': - case 'pow': - case 'sqrt': - case 'quantize': - case 'threshold': - return maybeMinMax(inferDomainQ(values, options), options); - case 'band': - case 'ordinal': - case 'point': - return inferDomainC(values); - case 'quantile': - return inferDomainO(values); - case 'sequential': - return maybeMinMax(inferDomainS(values), options); - default: - return []; - } -} -function inferScaleRange(type, name, values, options, domain, theme, library) { - const { range } = options; - if (typeof range === 'string') - return gradientColors(range); - if (range !== undefined) - return range; - const { rangeMin, rangeMax } = options; - switch (type) { - case 'linear': - case 'time': - case 'log': - case 'pow': - case 'sqrt': { - const colors = categoricalColors(values, options, domain, theme, library); - const [r0, r1] = inferRangeQ(name, colors); - return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : r0, rangeMax !== null && rangeMax !== void 0 ? rangeMax : r1]; - } - case 'band': - case 'point': { - const min = name === 'size' ? 5 : 0; - const max = name === 'size' ? 10 : 1; - return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : min, rangeMax !== null && rangeMax !== void 0 ? rangeMax : max]; - } - case 'ordinal': { - return categoricalColors(values, options, domain, theme, library); - } - case 'sequential': - return undefined; - case 'constant': - return [values[0][0]]; - default: - return []; - } -} -function inferScaleOptions(type, name, values, options, coordinates) { - switch (type) { - case 'linear': - case 'time': - case 'log': - case 'pow': - case 'sqrt': - return inferOptionsQ(coordinates, options); - case 'band': - case 'point': - return inferOptionsC(type, name, coordinates, options); - case 'sequential': - return inferOptionsS(options); - default: - return options; - } -} -function categoricalColors(values, options, domain, theme, library) { - const [usePalette] = (0, library_1.useLibrary)('palette', library); - const { category10: c10, category20: c20 } = theme; - const defaultPalette = (0, array_1.unique)(domain).length <= c10.length ? c10 : c20; - const { palette = defaultPalette, offset } = options; - if (Array.isArray(palette)) - return palette; - // Built-in palettes have higher priority. - try { - return usePalette({ type: palette }); - } - catch (e) { - const colors = interpolatedColors(palette, domain, offset); - if (colors) - return colors; - throw new Error(`Unknown Component: ${palette} `); - } -} -function gradientColors(range) { - return range.split('-'); -} -function interpolatedColors(palette, domain, offset = (d) => d) { - if (!palette) - return null; - const fullName = (0, util_1.upperFirst)(palette); - // If scheme have enough colors, then return pre-defined colors. - const scheme = d3ScaleChromatic[`scheme${fullName}`]; - const interpolator = d3ScaleChromatic[`interpolate${fullName}`]; - if (!scheme && !interpolator) - return null; - if (scheme) { - // If is a one dimension array, return it. - if (!scheme.some(Array.isArray)) - return scheme; - const schemeColors = scheme[domain.length]; - if (schemeColors) - return schemeColors; - } - // Otherwise interpolate to get full colors. - return domain.map((_, i) => interpolator(offset(i / domain.length))); -} -function inferOptionsS(options) { - const { palette = 'ylGnBu', offset } = options; - const name = (0, util_1.upperFirst)(palette); - const interpolator = d3ScaleChromatic[`interpolate${name}`]; - if (!interpolator) - throw new Error(`Unknown palette: ${name}`); - return { - interpolator: offset ? (x) => interpolator(offset(x)) : interpolator, - }; -} -function inferOptionsQ(coordinates, options) { - const { interpolate = scale_1.createInterpolateValue, nice = false, tickCount = 5, } = options; - return Object.assign(Object.assign({}, options), { interpolate, nice, tickCount }); -} -function inferOptionsC(type, name, coordinates, options) { - if (options.padding !== undefined || - options.paddingInner !== undefined || - options.paddingOuter !== undefined) { - return Object.assign(Object.assign({}, options), { unknown: NaN }); - } - const padding = inferPadding(type, name, coordinates); - const { paddingInner = padding, paddingOuter = padding } = options; - return Object.assign(Object.assign({}, options), { paddingInner, - paddingOuter, - padding, unknown: NaN }); -} -function inferPadding(type, name, coordinates) { - // The scale for enterDelay and enterDuration should has zero padding by default. - // Because there is no need to add extra delay for the start and the end. - if (name === 'enterDelay' || name === 'enterDuration') - return 0; - if (name === 'size') - return 0; - if (type === 'band') - return (0, coordinate_1.isTheta)(coordinates) ? 0 : 0.1; - // Point scale need 0.5 padding to make interval between first and last point - // equal to other intervals in polar coordinate. - if (type === 'point') - return 0.5; - return 0; -} -function asOrdinalType(name, defaults) { - if (defaults) - return defaults; - return isQuantitative(name) ? 'point' : 'ordinal'; -} -function asQuantitativeType(name, range, defaults) { - if (defaults) - return defaults; - if (name !== 'color') - return 'linear'; - return range ? 'linear' : 'sequential'; -} -function maybeMinMax(domain, options) { - if (domain.length === 0) - return domain; - const { domainMin, domainMax } = options; - const [d0, d1] = domain; - return [domainMin !== null && domainMin !== void 0 ? domainMin : d0, domainMax !== null && domainMax !== void 0 ? domainMax : d1]; -} -function inferDomainQ(values, options) { - const { zero = false } = options; - let min = Infinity; - let max = -Infinity; - for (const value of values) { - for (const d of value) { - if ((0, helper_1.defined)(d)) { - min = Math.min(min, +d); - max = Math.max(max, +d); - } - } - } - if (min === Infinity) - return []; - return zero ? [Math.min(0, min), max] : [min, max]; -} -function inferDomainC(values) { - return Array.from(new Set(values.flat())); -} -function inferDomainO(values) { - return values.flat().sort(); -} -function inferDomainS(values) { - let min = Infinity; - let max = -Infinity; - for (const value of values) { - for (const d of value) { - if ((0, helper_1.defined)(d)) { - min = Math.min(min, +d); - max = Math.max(max, +d); - } - } - } - if (min === Infinity) - return []; - return [min < 0 ? -max : min, max]; -} -/** - * @todo More nice default range for enterDelay and enterDuration. - * @todo Move these to channel definition. - */ -function inferRangeQ(name, palette) { - if (name === 'enterDelay') - return [0, 1000]; - if (name == 'enterDuration') - return [300, 1000]; - if (name.startsWith('y') || name.startsWith('position')) - return [1, 0]; - if (name === 'color') - return [(0, array_1.firstOf)(palette), (0, array_1.lastOf)(palette)]; - if (name === 'opacity') - return [0, 1]; - if (name === 'size') - return [1, 10]; - return [0, 1]; -} -function isOrdinal(values) { - return some(values, (d) => { - const type = typeof d; - return type === 'string' || type === 'boolean'; - }); -} -function isTemporal(values) { - return some(values, (d) => d instanceof Date); -} -function isObject(values) { - return some(values, helper_1.isStrictObject); -} -function some(values, callback) { - for (const V of values) { - if (V.some(callback)) - return true; - } - return false; -} -function isQuantitative(name) { - return (name.startsWith('x') || - name.startsWith('y') || - name.startsWith('position') || - name.startsWith('size')); -} -// Spatial and temporal position. -function isPosition(name) { - return (name.startsWith('x') || - name.startsWith('y') || - name.startsWith('position') || - name === 'enterDelay' || - name === 'enterDuration' || - name === 'updateDelay' || - name === 'updateDuration' || - name === 'exitDelay' || - name === 'exitDuration'); -} -exports.isPosition = isPosition; -function isValidScale(scale) { - if (!scale || !scale.type) - return false; - if (typeof scale.type === 'function') - return true; - const { type, domain, range, interpolator } = scale; - const isValidDomain = domain && domain.length > 0; - const isValidRange = range && range.length > 0; - if ([ - 'linear', - 'sqrt', - 'log', - 'time', - 'pow', - 'threshold', - 'quantize', - 'quantile', - 'ordinal', - 'band', - 'point', - ].includes(type) && - isValidDomain && - isValidRange) { - return true; - } - if (['sequential'].includes(type) && - isValidDomain && - (isValidRange || interpolator)) { - return true; - } - if (['constant', 'identity'].includes(type) && isValidRange) - return true; - return false; -} -exports.isValidScale = isValidScale; -//# sourceMappingURL=scale.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"../utils/helper":1751263815829,"./coordinate":1751263816096,"./library":1751263816097}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816115, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConstantScale = exports.DiscreteScale = exports.DistributionScale = exports.ContinuousScale = void 0; -exports.ContinuousScale = { - linear: 'linear', - identity: 'identity', - log: 'log', - pow: 'pow', - sqrt: 'sqrt', - sequential: 'sequential', -}; -exports.DistributionScale = { - threshold: 'threshold', - quantize: 'quantize', - quantile: 'quantile', -}; -exports.DiscreteScale = { - ordinal: 'ordinal', - band: 'band', - point: 'point', -}; -exports.ConstantScale = { - constant: 'constant', -}; -//# sourceMappingURL=scale.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816116, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.placeComponents = exports.computeRoughPlotSize = exports.computeLayout = exports.processAxisZ = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const util_1 = require("@antv/util"); -const coordinate_1 = require("../utils/coordinate"); -const helper_1 = require("../utils/helper"); -const array_1 = require("../utils/array"); -const string_1 = require("../utils/string"); -const component_1 = require("./component"); -const coordinate_2 = require("./coordinate"); -function processAxisZ(components) { - const axisX = components.find(({ type }) => type === 'axisX'); - const axisY = components.find(({ type }) => type === 'axisY'); - const axisZ = components.find(({ type }) => type === 'axisZ'); - if (axisX && axisY && axisZ) { - axisX.plane = 'xy'; - axisY.plane = 'xy'; - axisZ.plane = 'yz'; - axisZ.origin = [axisX.bbox.x, axisX.bbox.y, 0]; - axisZ.eulerAngles = [0, -90, 0]; - axisZ.bbox.x = axisX.bbox.x; - axisZ.bbox.y = axisX.bbox.y; - components.push(Object.assign(Object.assign({}, axisX), { plane: 'xz', showLabel: false, showTitle: false, origin: [axisX.bbox.x, axisX.bbox.y, 0], eulerAngles: [-90, 0, 0] })); - components.push(Object.assign(Object.assign({}, axisY), { plane: 'yz', showLabel: false, showTitle: false, origin: [axisY.bbox.x + axisY.bbox.width, axisY.bbox.y, 0], eulerAngles: [0, -90, 0] })); - components.push(Object.assign(Object.assign({}, axisZ), { plane: 'xz', actualPosition: 'left', showLabel: false, showTitle: false, eulerAngles: [90, -90, 0] })); - } -} -exports.processAxisZ = processAxisZ; -function computeLayout(components, options, theme, library) { - var _a, _b; - const { width, height, depth, x = 0, y = 0, z = 0, inset = (_a = theme.inset) !== null && _a !== void 0 ? _a : 0, insetLeft = inset, insetTop = inset, insetBottom = inset, insetRight = inset, margin = (_b = theme.margin) !== null && _b !== void 0 ? _b : 0, marginLeft = margin, marginBottom = margin, marginTop = margin, marginRight = margin, padding = theme.padding, paddingBottom = padding, paddingLeft = padding, paddingRight = padding, paddingTop = padding, } = computeInset(components, options, theme, library); - const MIN_CONTENT_RATIO = 1 / 4; - const maybeClamp = (viewWidth, paddingLeft, paddingRight, pl0, pr0) => { - // Only clamp when has marks. - const { marks } = options; - if (marks.length === 0) - return [pl0, pr0]; - // If size of content is enough, skip. - const contentSize = viewWidth - pl0 - pr0; - const diff = contentSize - viewWidth * MIN_CONTENT_RATIO; - if (diff > 0) - return [pl0, pr0]; - // Shrink start and end size equally. - const shrinkSize = viewWidth * (1 - MIN_CONTENT_RATIO); - return [ - paddingLeft === 'auto' ? (shrinkSize * pl0) / (pl0 + pr0) : pl0, - paddingRight === 'auto' ? (shrinkSize * pr0) / (pl0 + pr0) : pr0, - ]; - }; - const roughPadding = (padding) => (padding === 'auto' ? 20 : padding !== null && padding !== void 0 ? padding : 20); - const rpt = roughPadding(paddingTop); - const rpb = roughPadding(paddingBottom); - // Compute paddingLeft and paddingRight first to get innerWidth. - const horizontalPadding = computePadding(components, height - rpt - rpb, [rpt + marginTop, rpb + marginBottom], ['left', 'right'], options, theme, library); - const { paddingLeft: pl0, paddingRight: pr0 } = horizontalPadding; - const viewWidth = width - marginLeft - marginRight; - const [pl, pr] = maybeClamp(viewWidth, paddingLeft, paddingRight, pl0, pr0); - const iw = viewWidth - pl - pr; - // Compute paddingBottom and paddingTop based on innerWidth. - const verticalPadding = computePadding(components, iw, [pl + marginLeft, pr + marginRight], ['bottom', 'top'], options, theme, library); - const { paddingTop: pt0, paddingBottom: pb0 } = verticalPadding; - const viewHeight = height - marginBottom - marginTop; - const [pb, pt] = maybeClamp(viewHeight, paddingBottom, paddingTop, pb0, pt0); - const ih = viewHeight - pb - pt; - return { - width, - height, - depth, - insetLeft, - insetTop, - insetBottom, - insetRight, - innerWidth: iw, - innerHeight: ih, - paddingLeft: pl, - paddingRight: pr, - paddingTop: pt, - paddingBottom: pb, - marginLeft, - marginBottom, - marginTop, - marginRight, - x, - y, - z, - }; -} -exports.computeLayout = computeLayout; -// For composite mark with a layout algorithm and without axis, -// such as worldcloud, circlepack. -function computeRoughPlotSize(options) { - const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 16, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options; - // @todo Add this padding to theme. - // 30 is default size for padding, which defined in runtime. - const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding); - const finalWidth = width - - maybeAuto(paddingLeft) - - maybeAuto(paddingRight) - - marginLeft - - marginRight - - insetLeft - - insetRight; - const finalHeight = height - - maybeAuto(paddingTop) - - maybeAuto(paddingBottom) - - marginTop - - marginBottom - - insetTop - - insetBottom; - return { width: finalWidth, height: finalHeight }; -} -exports.computeRoughPlotSize = computeRoughPlotSize; -function computeInset(components, options, theme, library) { - const { coordinates } = options; - if (!(0, coordinate_2.isPolar)(coordinates) && !(0, coordinate_2.isRadial)(coordinates)) { - return options; - } - // Filter axis. - const axes = components.filter((d) => typeof d.type === 'string' && d.type.startsWith('axis')); - if (axes.length === 0) - return options; - const styles = axes.map((component) => { - const key = component.type === 'axisArc' ? 'arc' : 'linear'; - return (0, component_1.styleOf)(component, key, theme); - }); - // Compute max labelSpacing. - const maxLabelSpacing = (0, d3_array_1.max)(styles, (d) => { var _a; return (_a = d.labelSpacing) !== null && _a !== void 0 ? _a : 0; }); - // Compute labelBBoxes. - const labelBBoxes = axes - .flatMap((component, i) => { - const style = styles[i]; - const scale = (0, component_1.createScale)(component, library); - const labels = (0, component_1.computeLabelsBBox)(style, scale); - return labels; - }) - .filter(helper_1.defined); - const size = (0, d3_array_1.max)(labelBBoxes, (d) => d.height) + maxLabelSpacing; - // Compute titles. - const titleBBoxes = axes - .flatMap((_, i) => { - const style = styles[i]; - return (0, component_1.computeTitleBBox)(style); - }) - .filter((d) => d !== null); - const titleSize = titleBBoxes.length === 0 ? 0 : (0, d3_array_1.max)(titleBBoxes, (d) => d.height); - // Update inset. - const { inset = size, insetLeft = inset, insetBottom = inset, insetTop = inset + titleSize, insetRight = inset, } = options; - return Object.assign(Object.assign({}, options), { insetLeft, insetBottom, insetTop, insetRight }); -} -/** - * @todo Support percentage size(e.g. 50%) - */ -function computePadding(components, crossSize, crossPadding, positions, options, theme, library) { - const positionComponents = (0, d3_array_1.group)(components, (d) => d.position); - const { padding = theme.padding, paddingLeft = padding, paddingRight = padding, paddingBottom = padding, paddingTop = padding, } = options; - const layout = { - paddingBottom, - paddingLeft, - paddingTop, - paddingRight, - }; - for (const position of positions) { - const key = `padding${(0, helper_1.capitalizeFirst)((0, string_1.camelCase)(position))}`; - const components = positionComponents.get(position) || []; - const value = layout[key]; - const defaultSizeOf = (d) => { - if (d.size === undefined) - d.size = d.defaultSize; - }; - const sizeOf = (d) => { - if (d.type === 'group') { - d.children.forEach(defaultSizeOf); - d.size = (0, d3_array_1.max)(d.children, (d) => d.size); - } - else { - d.size = d.defaultSize; - } - }; - const autoSizeOf = (d) => { - if (d.size) - return; - if (value !== 'auto') - sizeOf(d); - else { - // Compute component size dynamically. - (0, component_1.computeComponentSize)(d, crossSize, crossPadding, position, theme, library); - defaultSizeOf(d); - } - }; - const maybeHide = (d) => { - if (!d.type.startsWith('axis')) - return; - if (d.labelAutoHide === undefined) - d.labelAutoHide = true; - }; - const isHorizontal = position === 'bottom' || position === 'top'; - // !!!Note - // Mute axis component padding. - // The first axis do not has padding. - const minOrder = (0, d3_array_1.min)(components, (d) => d.order); - const axes = components.filter((d) => d.type.startsWith('axis') && d.order == minOrder); - if (axes.length) - axes[0].crossPadding = 0; - // Specified padding. - if (typeof value === 'number') { - components.forEach(defaultSizeOf); - components.forEach(maybeHide); - } - else { - // Compute padding dynamically. - if (components.length === 0) { - layout[key] = 0; - } - else { - const size = isHorizontal - ? crossSize + crossPadding[0] + crossPadding[1] - : crossSize; - const grouped = (0, component_1.groupComponents)(components, size); - grouped.forEach(autoSizeOf); - const totalSize = grouped.reduce((sum, { size, crossPadding = 12 }) => sum + size + crossPadding, 0); - layout[key] = totalSize; - } - } - } - return layout; -} -function placeComponents(components, coordinate, layout) { - // Group components by plane & position. - const positionComponents = (0, d3_array_1.group)(components, (d) => `${d.plane || 'xy'}-${d.position}`); - const { paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, height, width, depth, } = layout; - const planes = { - xy: createSection({ - width, - height, - paddingLeft, - paddingRight, - paddingTop, - paddingBottom, - marginLeft, - marginTop, - marginBottom, - marginRight, - innerHeight, - innerWidth, - insetBottom, - insetLeft, - insetRight, - insetTop, - }), - yz: createSection({ - width: depth, - height: height, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - paddingBottom: 0, - marginLeft: 0, - marginTop: 0, - marginBottom: 0, - marginRight: 0, - innerWidth: depth, - innerHeight: height, - insetBottom: 0, - insetLeft: 0, - insetRight: 0, - insetTop: 0, - }), - xz: createSection({ - width, - height: depth, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - paddingBottom: 0, - marginLeft: 0, - marginTop: 0, - marginBottom: 0, - marginRight: 0, - innerWidth: width, - innerHeight: depth, - insetBottom: 0, - insetLeft: 0, - insetRight: 0, - insetTop: 0, - }), - }; - for (const [key, components] of positionComponents.entries()) { - const [plane, position] = key.split('-'); - const area = planes[plane][position]; - /** - * @description non-entity components: axis in the center, inner, outer, component in the center - * @description entity components: other components - * @description no volume components take up no extra space - */ - const [nonEntityComponents, entityComponents] = (0, array_1.divide)(components, (component) => { - if (typeof component.type !== 'string') - return false; - if (position === 'center') - return true; - if (component.type.startsWith('axis') && - ['inner', 'outer'].includes(position)) { - return true; - } - return false; - }); - if (nonEntityComponents.length) { - placeNonEntityComponents(nonEntityComponents, coordinate, area, position); - } - if (entityComponents.length) { - placePaddingArea(components, coordinate, area); - } - } -} -exports.placeComponents = placeComponents; -function createSection({ width, height, paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, }) { - const pl = paddingLeft + marginLeft; - const pt = paddingTop + marginTop; - const pr = paddingRight + marginRight; - const pb = paddingBottom + marginBottom; - const plotWidth = width - marginLeft - marginRight; - const centerSection = [ - pl + insetLeft, - pt + insetTop, - innerWidth - insetLeft - insetRight, - innerHeight - insetTop - insetBottom, - 'center', - null, - null, - ]; - const xySection = { - top: [ - pl, - 0, - innerWidth, - pt, - 'vertical', - true, - d3_array_1.ascending, - marginLeft, - plotWidth, - ], - right: [width - pr, pt, pr, innerHeight, 'horizontal', false, d3_array_1.ascending], - bottom: [ - pl, - height - pb, - innerWidth, - pb, - 'vertical', - false, - d3_array_1.ascending, - marginLeft, - plotWidth, - ], - left: [0, pt, pl, innerHeight, 'horizontal', true, d3_array_1.ascending], - 'top-left': [pl, 0, innerWidth, pt, 'vertical', true, d3_array_1.ascending], - 'top-right': [pl, 0, innerWidth, pt, 'vertical', true, d3_array_1.ascending], - 'bottom-left': [ - pl, - height - pb, - innerWidth, - pb, - 'vertical', - false, - d3_array_1.ascending, - ], - 'bottom-right': [ - pl, - height - pb, - innerWidth, - pb, - 'vertical', - false, - d3_array_1.ascending, - ], - center: centerSection, - inner: centerSection, - outer: centerSection, - }; - return xySection; -} -function placeNonEntityComponents(components, coordinate, area, position) { - const [axisComponents, nonAxisComponents] = (0, array_1.divide)(components, (component) => { - if (typeof component.type === 'string' && - component.type.startsWith('axis')) { - return true; - } - return false; - }); - placeNonEntityAxis(axisComponents, coordinate, area, position); - // in current stage, only legend component which located in the center can be placed - placeCenter(nonAxisComponents, coordinate, area); -} -function placeNonEntityAxis(components, coordinate, area, position) { - if (position === 'center') { - if ((0, coordinate_1.isRadar)(coordinate)) { - placeAxisRadar(components, coordinate, area, position); - } - else if ((0, coordinate_1.isPolar)(coordinate)) { - placeArcLinear(components, coordinate, area); - } - else if ((0, coordinate_1.isParallel)(coordinate)) { - placeAxisParallel(components, coordinate, area, components[0].orientation); - } - } - else if (position === 'inner') { - placeAxisArcInner(components, coordinate, area); - } - else if (position === 'outer') { - placeAxisArcOuter(components, coordinate, area); - } -} -function placeAxisArcInner(components, coordinate, area) { - const [x, y, , height] = area; - const [cx, cy] = coordinate.getCenter(); - const [innerRadius] = (0, coordinate_1.radiusOf)(coordinate); - const r = height / 2; - const size = innerRadius * r; - const x0 = cx - size; - const y0 = cy - size; - for (let i = 0; i < components.length; i++) { - const component = components[i]; - component.bbox = { - x: x + x0, - y: y + y0, - width: size * 2, - height: size * 2, - }; - } -} -function placeAxisArcOuter(components, coordinate, area) { - const [x, y, width, height] = area; - for (const component of components) { - component.bbox = { x, y, width, height }; - } -} -/** - * @example arcX, arcY, axisLinear with angle - */ -function placeArcLinear(components, coordinate, area) { - const [x, y, width, height] = area; - for (const component of components) { - component.bbox = { x: x, y, width, height }; - } -} -function placeAxisParallel(components, coordinate, area, orientation) { - if (orientation === 'horizontal') { - placeAxisParallelHorizontal(components, coordinate, area); - } - else if (orientation === 'vertical') { - placeAxisParallelVertical(components, coordinate, area); - } -} -function placeAxisParallelVertical(components, coordinate, area) { - const [x, y, , height] = area; - // Create a high dimension vector and map to a list of two-dimension points. - // [0, 0, 0] -> [x0, 0, x1, 0, x2, 0] - const vector = new Array(components.length).fill(0); - const points = coordinate.map(vector); - // Extract x of each points. - // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2] - const X = points.filter((_, i) => i % 2 === 0).map((d) => d + x); - // Place each axis by coordinate in parallel coordinate. - for (let i = 0; i < components.length; i++) { - const component = components[i]; - const x = X[i]; - const width = X[i + 1] - x; - component.bbox = { x, y, width, height }; - } -} -function placeAxisParallelHorizontal(components, coordinate, area) { - const [x, y, width] = area; - // Create a high dimension vector and map to a list of two-dimension points. - // [0, 0, 0] -> [height, y0, height, y1, height, y2] - const vector = new Array(components.length).fill(0); - const points = coordinate.map(vector); - // Extract y of each points. - // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2] - const Y = points.filter((_, i) => i % 2 === 1).map((d) => d + y); - // Place each axis by coordinate in parallel coordinate. - for (let i = 0; i < components.length; i++) { - const component = components[i]; - const y = Y[i]; - const height = Y[i + 1] - y; - component.bbox = { x, y, width, height }; - } -} -function placeAxisRadar(components, coordinate, area, position) { - const [x, y, width, height] = area; - for (const component of components) { - component.bbox = { x, y, width, height }; - component.radar = { - index: components.indexOf(component), - count: components.length, - }; - } -} -function placePaddingArea(components, coordinate, area) { - const [x, y, width, height, direction, reverse, comparator, minX, totalSize] = area; - const [mainStartKey, mainStartValue, crossStartKey, crossStartValue, mainSizeKey, mainSizeValue, crossSizeKey, crossSizeValue,] = direction === 'vertical' - ? ['y', y, 'x', x, 'height', height, 'width', width] - : ['x', x, 'y', y, 'width', width, 'height', height]; - // Sort components by order. - // The smaller the order, the closer to center. - components.sort((a, b) => comparator === null || comparator === void 0 ? void 0 : comparator(a.order, b.order)); - const isLarge = (type) => type === 'title' || type === 'group' || type.startsWith('legend'); - const crossSizeOf = (type, small, bigger) => { - if (bigger === undefined) - return small; - if (isLarge(type)) - return bigger; - return small; - }; - const crossStartOf = (type, x, minX) => { - if (minX === undefined) - return x; - if (isLarge(type)) - return minX; - return x; - }; - const startValue = reverse ? mainStartValue + mainSizeValue : mainStartValue; - for (let i = 0, start = startValue; i < components.length; i++) { - const component = components[i]; - const { crossPadding = 0, type } = component; - const { size } = component; - component.bbox = { - [mainStartKey]: reverse - ? start - size - crossPadding - : start + crossPadding, - [crossStartKey]: crossStartOf(type, crossStartValue, minX), - [mainSizeKey]: size, - [crossSizeKey]: crossSizeOf(type, crossSizeValue, totalSize), - }; - start += (size + crossPadding) * (reverse ? -1 : 1); - } - // Place group components. - const groupComponents = components.filter((d) => d.type === 'group'); - for (const group of groupComponents) { - const { bbox, children } = group; - const size = bbox[crossSizeKey]; - const step = size / children.length; - const justifyContent = children.reduce((j, child) => { - var _a; - const j0 = (_a = child.layout) === null || _a === void 0 ? void 0 : _a.justifyContent; - return j0 ? j0 : j; - }, 'flex-start'); - const L = children.map((d, i) => { - const { length = step, padding = 0 } = d; - return length + (i === children.length - 1 ? 0 : padding); - }); - const totalLength = (0, d3_array_1.sum)(L); - const diff = size - totalLength; - const offset = justifyContent === 'flex-start' - ? 0 - : justifyContent === 'center' - ? diff / 2 - : diff; - for (let i = 0, start = bbox[crossStartKey] + offset; i < children.length; i++) { - const component = children[i]; - const { padding = 0 } = component; - const interval = i === children.length - 1 ? 0 : padding; - component.bbox = { - [mainSizeKey]: bbox[mainSizeKey], - [mainStartKey]: bbox[mainStartKey], - [crossStartKey]: start, - [crossSizeKey]: L[i] - interval, - }; - (0, util_1.deepMix)(component, { layout: { justifyContent } }); - start += L[i]; - } - } -} -/** - * @example legend in the center of radial or polar system - */ -function placeCenter(components, coordinate, area) { - if (components.length === 0) - return; - const [x, y, width, height] = area; - const [innerRadius] = (0, coordinate_1.radiusOf)(coordinate); - const r = ((height / 2) * innerRadius) / Math.sqrt(2); - const cx = x + width / 2; - const cy = y + height / 2; - for (let i = 0; i < components.length; i++) { - const component = components[i]; - component.bbox = { x: cx - r, y: cy - r, width: r * 2, height: r * 2 }; - } -} -//# sourceMappingURL=layout.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../utils/helper":1751263815829,"../utils/array":1751263815830,"../utils/string":1751263815900,"./component":1751263816094,"./coordinate":1751263816096}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816117, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createColumnOf = exports.initializeMark = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const library_1 = require("./library"); -const transform_1 = require("./transform"); -function initializeMark(partialMark, partialProps, context) { - return __awaiter(this, void 0, void 0, function* () { - // Apply transform to mark to derive indices, data, encode, etc,. - const [I, transformedMark] = yield applyMarkTransform(partialMark, partialProps, context); - const { encode, scale, data, tooltip } = transformedMark; - // Skip mark with non-tabular data. Do not skip empty - // data, they are useful for facet to display axes. - if (Array.isArray(data) === false) { - return null; - } - // Group non-independent channels with same prefix, such as x1, x2 => x. - // For independent channels, dot not group them, such as position1, position2. - const { channels: channelDescriptors } = partialProps; - const nameChannels = (0, d3_array_1.rollups)(Object.entries(encode).filter(([, value]) => (0, helper_1.defined)(value)), (values) => values.map(([key, options]) => (Object.assign({ name: key }, options))), ([key]) => { - var _a; - const prefix = (_a = /([^\d]+)\d*$/.exec(key)) === null || _a === void 0 ? void 0 : _a[1]; - const descriptor = channelDescriptors.find((d) => d.name === prefix); - if (descriptor === null || descriptor === void 0 ? void 0 : descriptor.independent) - return key; - return prefix; - }); - // Check required channels and initialize scale options for each channel. - const channels = channelDescriptors - .filter((descriptor) => { - const { name, required } = descriptor; - if (nameChannels.find(([d]) => d === name)) - return true; - if (required) - throw new Error(`Missing encoding for channel: ${name}.`); - return false; - }) - .flatMap((descriptor) => { - const { name, scale: scaleType, scaleKey, range, quantitative, ordinal, } = descriptor; - const valuesArray = nameChannels.filter(([channel]) => channel.startsWith(name)); - return valuesArray.map(([channel, values], i) => { - const visual = values.some((d) => d.visual); - const constant = values.some((d) => d.constant); - const _a = scale[channel] || {}, { independent = false, - // Use channel name as default scale key. - key = scaleKey || channel, - // Visual channel use identity scale. - type = constant ? 'constant' : visual ? 'identity' : scaleType } = _a, scaleOptions = __rest(_a, ["independent", "key", "type"]); - // For constant scale, infer range from data. - const isConstant = type === 'constant'; - const finalRange = isConstant ? undefined : range; - return { - name: channel, - values, - // Generate a unique key for independent channel, - // which will not group with any other channels. - scaleKey: independent || isConstant ? Symbol('independent') : key, - scale: Object.assign(Object.assign({ type, range: finalRange }, scaleOptions), { quantitative, - ordinal }), - }; - }); - }); - return [transformedMark, Object.assign(Object.assign({}, partialProps), { index: I, channels, tooltip })]; - }); -} -exports.initializeMark = initializeMark; -function createColumnOf(library) { - const [useEncode] = (0, library_1.useLibrary)('encode', library); - return (data, encode) => { - if (encode === undefined) - return null; - if (data === undefined) - return null; - return Object.assign(Object.assign({}, encode), { type: 'column', value: useEncode(encode)(data), field: fieldOf(encode) }); - }; -} -exports.createColumnOf = createColumnOf; -function applyMarkTransform(mark, props, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const [useTransform] = (0, library_1.useLibrary)('transform', library); - const { preInference = [], postInference = [] } = props; - const { transform = [] } = mark; - const transforms = [ - transform_1.applyDefaults, - transform_1.applyDataTransform, - transform_1.flatEncode, - transform_1.inferChannelsType, - transform_1.maybeVisualChannel, - transform_1.extractColumns, - transform_1.maybeArrayField, - transform_1.maybeNonAnimate, - transform_1.addGuideToScale, - transform_1.normalizeTooltip, - ...preInference.map(useTransform), - ...transform.map(useTransform), - ...postInference.map(useTransform), - transform_1.extractTooltip, - ]; - let index = []; - let transformedMark = mark; - for (const t of transforms) { - [index, transformedMark] = yield t(index, transformedMark, context); - } - return [index, transformedMark]; - }); -} -function fieldOf(encode) { - const { type, value } = encode; - if (type === 'field' && typeof value === 'string') - return value; - return null; -} -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./library":1751263816097,"./transform":1751263816118}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816118, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.maybeNonAnimate = exports.addGuideToScale = exports.maybeArrayField = exports.extractTooltip = exports.normalizeTooltip = exports.extractColumns = exports.maybeVisualChannel = exports.inferChannelsType = exports.flatEncode = exports.applyDataTransform = exports.applyDefaults = exports.CALLBACK_ITEM_SYMBOL = void 0; -const util_1 = require("@antv/util"); -const d3_format_1 = require("@antv/vendor/d3-format"); -const array_1 = require("../utils/array"); -const helper_1 = require("../utils/helper"); -const mark_1 = require("../utils/mark"); -const library_1 = require("./library"); -const mark_2 = require("./mark"); -const scale_1 = require("./scale"); -exports.CALLBACK_ITEM_SYMBOL = Symbol('CALLBACK_ITEM'); -// @todo Add more defaults. -function applyDefaults(I, mark, context) { - const { encode = {}, scale = {}, transform = [] } = mark, rest = __rest(mark, ["encode", "scale", "transform"]); - return [I, Object.assign(Object.assign({}, rest), { encode, scale, transform })]; -} -exports.applyDefaults = applyDefaults; -function applyDataTransform(I, mark, context) { - return __awaiter(this, void 0, void 0, function* () { - const { library } = context; - const { data } = mark; - const [useData] = (0, library_1.useLibrary)('data', library); - const descriptor = normalizedDataSource(data); - const { transform: T = [] } = descriptor, connector = __rest(descriptor, ["transform"]); - const transform = [connector, ...T]; - const transformFunctions = transform.map((t) => useData(t, context)); - const transformedData = yield (0, helper_1.composeAsync)(transformFunctions)(data); - // Maintain the consistency of shape between input and output data. - // If the shape of raw data is like { value: any } - // and the returned transformedData is Object, - // returns the wrapped data: { value: transformedData }, - // otherwise returns the processed tabular data. - const newData = data && !Array.isArray(data) && !Array.isArray(transformedData) - ? { value: transformedData } - : transformedData; - return [ - Array.isArray(transformedData) ? (0, array_1.indexOf)(transformedData) : [], - Object.assign(Object.assign({}, mark), { data: newData }), - ]; - }); -} -exports.applyDataTransform = applyDataTransform; -function flatEncode(I, mark, context) { - const { encode } = mark; - if (!encode) - return [I, mark]; - const flattenEncode = {}; - for (const [key, value] of Object.entries(encode)) { - if (Array.isArray(value)) { - for (let i = 0; i < value.length; i++) { - const name = `${key}${i === 0 ? '' : i}`; - flattenEncode[name] = value[i]; - } - } - else { - flattenEncode[key] = value; - } - } - return [I, Object.assign(Object.assign({}, mark), { encode: flattenEncode })]; -} -exports.flatEncode = flatEncode; -function inferChannelsType(I, mark, context) { - const { encode, data } = mark; - if (!encode) - return [I, mark]; - const typedEncode = (0, array_1.mapObject)(encode, (channel) => { - if (isTypedChannel(channel)) - return channel; - const type = inferChannelType(data, channel); - return { type, value: channel }; - }); - return [I, Object.assign(Object.assign({}, mark), { encode: typedEncode })]; -} -exports.inferChannelsType = inferChannelsType; -function maybeVisualChannel(I, mark, context) { - const { encode } = mark; - if (!encode) - return [I, mark]; - const newEncode = (0, array_1.mapObject)(encode, (channel, name) => { - const { type } = channel; - if (type !== 'constant' || (0, scale_1.isPosition)(name)) - return channel; - return Object.assign(Object.assign({}, channel), { constant: true }); - }); - return [I, Object.assign(Object.assign({}, mark), { encode: newEncode })]; -} -exports.maybeVisualChannel = maybeVisualChannel; -function extractColumns(I, mark, context) { - const { encode, data } = mark; - if (!encode) - return [I, mark]; - const { library } = context; - const columnOf = (0, mark_2.createColumnOf)(library); - const valuedEncode = (0, array_1.mapObject)(encode, (channel) => columnOf(data, channel)); - return [I, Object.assign(Object.assign({}, mark), { encode: valuedEncode })]; -} -exports.extractColumns = extractColumns; -/** - * Normalize mark.tooltip to {title, items}. - */ -function normalizeTooltip(I, mark, context) { - const { tooltip = {} } = mark; - if ((0, helper_1.isUnset)(tooltip)) - return [I, mark]; - if (Array.isArray(tooltip)) { - return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: tooltip } })]; - } - if ((0, helper_1.isStrictObject)(tooltip) && (0, mark_1.isFullTooltip)(tooltip)) { - return [I, Object.assign(Object.assign({}, mark), { tooltip })]; - } - return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: [tooltip] } })]; -} -exports.normalizeTooltip = normalizeTooltip; -function extractTooltip(I, mark, context) { - const { data, encode, tooltip = {} } = mark; - if ((0, helper_1.isUnset)(tooltip)) - return [I, mark]; - const valueOf = (item) => { - if (!item) - return item; - if (typeof item === 'string') { - return I.map((i) => ({ name: item, value: data[i][item] })); - } - if ((0, helper_1.isStrictObject)(item)) { - const { field, channel, color, name = field, valueFormatter = (d) => d, } = item; - // Support d3-format. - const normalizedValueFormatter = typeof valueFormatter === 'string' - ? (0, d3_format_1.format)(valueFormatter) - : valueFormatter; - // Field name. - const definedChannel = channel && encode[channel]; - const channelField = definedChannel && encode[channel].field; - const name1 = name || channelField || channel; - const values = []; - for (const i of I) { - const value1 = field - ? data[i][field] - : definedChannel - ? encode[channel].value[i] - : null; - values[i] = { - name: name1, - color, - value: normalizedValueFormatter(value1), - }; - } - return values; - } - if (typeof item === 'function') { - const values = []; - for (const i of I) { - const v = item(data[i], i, data, encode); - if ((0, helper_1.isStrictObject)(v)) - values[i] = Object.assign(Object.assign({}, v), { [exports.CALLBACK_ITEM_SYMBOL]: true }); - else - values[i] = { value: v }; - } - return values; - } - return item; - }; - const { title, items = [] } = tooltip, rest = __rest(tooltip, ["title", "items"]); - const newTooltip = Object.assign({ title: valueOf(title), items: Array.isArray(items) ? items.map(valueOf) : [] }, rest); - return [I, Object.assign(Object.assign({}, mark), { tooltip: newTooltip })]; -} -exports.extractTooltip = extractTooltip; -function maybeArrayField(I, mark, context) { - const { encode } = mark, rest = __rest(mark, ["encode"]); - if (!encode) - return [I, mark]; - const columns = Object.entries(encode); - const arrayColumns = columns - .filter(([, channel]) => { - const { value: V } = channel; - return Array.isArray(V[0]); - }) - .flatMap(([key, V]) => { - const columns = [[key, new Array(I.length).fill(undefined)]]; - const { value: rows } = V, rest = __rest(V, ["value"]); - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - if (Array.isArray(row)) { - for (let j = 0; j < row.length; j++) { - const column = columns[j] || [ - `${key}${j}`, - new Array(I).fill(undefined), - ]; - column[1][i] = row[j]; - columns[j] = column; - } - } - } - return columns.map(([key, value]) => [ - key, - Object.assign({ type: 'column', value }, rest), - ]); - }); - const newEncode = Object.fromEntries([...columns, ...arrayColumns]); - return [I, Object.assign(Object.assign({}, rest), { encode: newEncode })]; -} -exports.maybeArrayField = maybeArrayField; -function addGuideToScale(I, mark, context) { - const { axis = {}, legend = {}, slider = {}, scrollbar = {} } = mark; - const normalize = (guide, channel) => { - if (typeof guide === 'boolean') - return guide ? {} : null; - const eachGuide = guide[channel]; - return eachGuide === undefined || eachGuide ? eachGuide : null; - }; - const axisChannels = typeof axis === 'object' - ? Array.from(new Set(['x', 'y', 'z', ...Object.keys(axis)])) - : ['x', 'y', 'z']; - (0, util_1.deepMix)(mark, { - scale: Object.assign(Object.assign({}, Object.fromEntries(axisChannels.map((channel) => { - const scrollbarOptions = normalize(scrollbar, channel); - return [ - channel, - Object.assign({ guide: normalize(axis, channel), slider: normalize(slider, channel), scrollbar: scrollbarOptions }, (scrollbarOptions && { - ratio: scrollbarOptions.ratio === undefined - ? 0.5 - : scrollbarOptions.ratio, - })), - ]; - }))), { color: { guide: normalize(legend, 'color') }, size: { guide: normalize(legend, 'size') }, shape: { guide: normalize(legend, 'shape') }, - // fixme: opacity is conflict with DisplayObject.opacity - // to be confirm. - opacity: { guide: normalize(legend, 'opacity') } }), - }); - return [I, mark]; -} -exports.addGuideToScale = addGuideToScale; -function maybeNonAnimate(I, mark, context) { - const { animate } = mark; - if (animate || animate === undefined) - return [I, mark]; - (0, util_1.deepMix)(mark, { - animate: { - enter: { type: null }, - exit: { type: null }, - update: { type: null }, - }, - }); - return [I, mark]; -} -exports.maybeNonAnimate = maybeNonAnimate; -function isTypedChannel(channel) { - if (typeof channel !== 'object' || - channel instanceof Date || - channel === null) { - return false; - } - const { type } = channel; - return (0, helper_1.defined)(type); -} -function inferChannelType(data, channel) { - if (typeof channel === 'function') - return 'transform'; - if (typeof channel === 'string' && isField(data, channel)) - return 'field'; - return 'constant'; -} -function isField(data, value) { - if (!Array.isArray(data)) - return false; - return data.some((d) => d[value] !== undefined); -} -function normalizedDataSource(data) { - // Liquid、Gauge need number data. - if ((0, util_1.isNumber)(data)) - return { type: 'inline', value: data }; - // Return null as a placeholder. - if (!data) - return { type: 'inline', value: null }; - if (Array.isArray(data)) - return { type: 'inline', value: data }; - const { type = 'inline' } = data, rest = __rest(data, ["type"]); - return Object.assign(Object.assign({}, rest), { type }); -} -//# sourceMappingURL=transform.js.map -}, function(modId) { var map = {"../utils/array":1751263815830,"../utils/helper":1751263815829,"../utils/mark":1751263815997,"./library":1751263816097,"./mark":1751263816117,"./scale":1751263816114}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816119, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.preprocessOption = void 0; -const flow_1 = require("../../utils/flow"); -const style_1 = require("./style"); -function preprocessOption(options) { - const convertedOptions = adapter(options); - // If there are children, recursively convert each child node. - if (convertedOptions.children && Array.isArray(convertedOptions.children)) { - convertedOptions.children = convertedOptions.children.map((child) => preprocessOption(child)); - } - return convertedOptions; -} -exports.preprocessOption = preprocessOption; -// Entry point for all syntactic sugar functions. -function adapter(options) { - //@todo define a type for params of flow - return (0, flow_1.flow)(style_1.columnWidthRatio)(options); -} -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"../../utils/flow":1751263816120,"./style":1751263816121}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816120, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.flow = void 0; -/** - * 类似 lodash.flow 的方法 - * @param flows - */ -function flow(...flows) { - return (param) => { - return flows.reduce((result, f) => { - return f(result); - }, param); - }; -} -exports.flow = flow; -//# sourceMappingURL=flow.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816121, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.columnWidthRatio = void 0; -const util_1 = require("@antv/util"); -// style: { columnWidthRatio: 0.2 } => scale: { x: { padding: 0.8 } } -function columnWidthRatio(options) { - const { style, scale, type } = options; - const scaleOption = {}; - const columnWidthRatio = (0, util_1.get)(style, 'columnWidthRatio'); - if (columnWidthRatio && type === 'interval') { - scaleOption.x = Object.assign(Object.assign({}, scale === null || scale === void 0 ? void 0 : scale.x), { padding: 1 - columnWidthRatio }); - } - return Object.assign(Object.assign({}, options), { scale: Object.assign(Object.assign({}, scale), scaleOption) }); -} -exports.columnWidthRatio = columnWidthRatio; -//# sourceMappingURL=style.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816122, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.show = exports.hide = exports.setStyle = exports.getStyle = void 0; -const traverse_elements_1 = require("./traverse-elements"); -const defaultStyle = { - visibility: 'visible', - opacity: 1, - fillOpacity: 1, - strokeOpacity: 1, -}; -function getStyle(element, key) { - let value; - (0, traverse_elements_1.traverseElements)(element, (el) => { - var _a; - if (el.tagName !== 'g' && ((_a = el.style) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) { - value = el.style[key]; - return true; - } - return false; - }); - return value !== null && value !== void 0 ? value : defaultStyle[key]; -} -exports.getStyle = getStyle; -function setStyle(element, key, value, recursive) { - element.style[key] = value; - if (recursive) { - element.children.forEach((child) => setStyle(child, key, value, recursive)); - } -} -exports.setStyle = setStyle; -function hide(element) { - setStyle(element, 'visibility', 'hidden', true); -} -exports.hide = hide; -function show(element) { - setStyle(element, 'visibility', 'visible', true); -} -exports.show = show; -//# sourceMappingURL=style.js.map -}, function(modId) { var map = {"./traverse-elements":1751263816123}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816123, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.traverseElements = void 0; -function traverseElements(element, visitor) { - if (visitor(element)) - return true; - if (element.tagName === 'g') { - const { childNodes = [] } = element; - for (const child of childNodes) { - if (traverseElements(child, visitor)) - return true; - } - } - return false; -} -exports.traverseElements = traverseElements; -//# sourceMappingURL=traverse-elements.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816124, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementHighlightByX = void 0; -const utils_1 = require("./utils"); -const elementHighlight_1 = require("./elementHighlight"); -function ElementHighlightByX(options) { - return (0, elementHighlight_1.ElementHighlight)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createXKey })); -} -exports.ElementHighlightByX = ElementHighlightByX; -ElementHighlightByX.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementHighlightByX.js.map -}, function(modId) { var map = {"./utils":1751263816080,"./elementHighlight":1751263816079}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816125, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementHighlightByColor = void 0; -const utils_1 = require("./utils"); -const elementHighlight_1 = require("./elementHighlight"); -function ElementHighlightByColor(options) { - return (0, elementHighlight_1.ElementHighlight)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createColorKey })); -} -exports.ElementHighlightByColor = ElementHighlightByColor; -ElementHighlightByColor.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementHighlightByColor.js.map -}, function(modId) { var map = {"./utils":1751263816080,"./elementHighlight":1751263816079}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816126, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementSelect = exports.elementSelect = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const traverse_elements_1 = require("../utils/traverse-elements"); -const utils_1 = require("./utils"); -/** - * Active a group of elements. - */ -function elementSelect(root, { elements: elementsof, // given the root of chart returns elements to be manipulated -datum, // given each element returns the datum of it -groupKey = (d) => d, // group elements by specified key -regionGroupKey = (d) => d, // how to group elements when click region -link = false, // draw link or not -single = false, // single select or not -multipleSelectHotkey, // hotkey for multi-select mode -coordinate, background = false, scale, emitter, state = {}, region = false, regionEleFilter = (el) => utils_1.VALID_FIND_BY_X_MARKS.includes(el.markType), }) { - var _a; - const elements = elementsof(root); - const elementSet = new Set(elements); - const findElement = (0, utils_1.createFindElementByEvent)({ - elementsof, - root, - coordinate, - scale, - }); - const keyGroup = (0, d3_array_1.group)(elements, groupKey); - const regionGroup = (0, d3_array_1.group)(elements, regionGroupKey); - const valueof = (0, utils_1.createValueof)(elements, datum); - const [appendLink, removeLink] = (0, utils_1.renderLink)(Object.assign({ link, - elements, - valueof, - coordinate }, (0, helper_1.subObject)(state.selected, 'link'))); - const [appendBackground, removeBackground] = (0, utils_1.renderBackground)(Object.assign({ document: root.ownerDocument, background, - coordinate, - scale, - valueof }, (0, helper_1.subObject)(state.selected, 'background'))); - const elementStyle = (0, util_1.deepMix)(state, { - selected: Object.assign({}, (((_a = state.selected) === null || _a === void 0 ? void 0 : _a.offset) && { - // Apply translate to mock slice out. - transform: (...params) => { - const value = state.selected.offset(...params); - const [, i] = params; - return (0, utils_1.offsetTransform)(elements[i], value, coordinate); - }, - })), - }); - const useState = (0, utils_1.createUseState)(elementStyle, elements); - const { updateState, removeState, hasState } = useState(valueof); - let isMultiSelectMode = !single; // "single" determines whether to multi-select by default - let activeHotkey = null; // Track the currently active hotkey - const clear = (nativeEvent = true) => { - for (const e of elements) { - removeState(e, 'selected', 'unselected'); - removeLink(e); - removeBackground(e); - } - if (nativeEvent) - emitter.emit('element:unselect', { nativeEvent: true }); - return; - }; - const singleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => { - const filteredElements = elements.filter(filter); - // Clear states if clicked selected element. - if (hasState(element, 'selected')) - clear(); - else { - const k = groupBy(element); - const group = groupMap.get(k); - const groupSet = new Set(group); - for (const e of filteredElements) { - if (groupSet.has(e)) - updateState(e, 'selected'); - else { - updateState(e, 'unselected'); - removeLink(e); - } - if (e !== element) - removeBackground(e); - } - appendLink(group); - appendBackground(element); - if (!nativeEvent) - return; - emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: { - data: [datum(element), ...group.map(datum)], - } })); - } - }; - const multipleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => { - const k = groupBy(element); - const group = groupMap.get(k); - const groupSet = new Set(group); - const filteredElements = elements.filter(filter); - if (!hasState(element, 'selected')) { - const hasSelectedGroup = group.some((e) => hasState(e, 'selected')); - for (const e of filteredElements) { - if (groupSet.has(e)) - updateState(e, 'selected'); - else if (!hasState(e, 'selected')) - updateState(e, 'unselected'); - } - // Append link for each group only once. - if (!hasSelectedGroup && link) - appendLink(group); - appendBackground(element); - } - else { - // If there is no selected elements after resetting this group, - // clear the states. - const hasSelected = elements.some((e) => !groupSet.has(e) && hasState(e, 'selected')); - if (!hasSelected) - return clear(); - // If there are still some selected elements after resetting this group, - // only remove the link. - for (const e of group) { - updateState(e, 'unselected'); - removeLink(e); - removeBackground(e); - } - } - if (!nativeEvent) - return; - emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: { - data: elements.filter((e) => hasState(e, 'selected')).map(datum), - } })); - }; - const isClickElementOrGroup = (element) => { - if (elementSet.has(element)) - return true; - for (const group of elementSet) { - const found = (0, traverse_elements_1.traverseElements)(group, (el) => el === element); - if (found) - return true; - } - return false; - }; - const getRealElement = (element) => { - if (elementSet.has(element)) - return element; - for (const group of elementSet) { - let match = null; - (0, traverse_elements_1.traverseElements)(group, (el) => { - if (el === element) - match = group; - }); - if (match) - return match; - } - return element; - }; - const click = (event) => { - const { target: element, nativeEvent = true } = event; - const select = !isMultiSelectMode ? singleSelect : multipleSelect; - let el = element; - const isClickElement = isClickElementOrGroup(element); - if (!region || isClickElement) { - // Click non-element shape, reset. - // Such as the rest of content area(background). - if (!isClickElement) - return clear(); - return select({ - event, - element: getRealElement(el), - nativeEvent, - groupBy: groupKey, - }); - } - else { - // Click background region area, select elements in the region. - // Get element at cursor.x position. - el = findElement(event); - if (!elementSet.has(el)) - return clear(); - return select({ - event, - element: el, - nativeEvent, - filter: regionEleFilter, - groupBy: regionGroupKey, - groupMap: regionGroup, - }); - } - }; - // Handle keyboard events for multi-select mode - const hotkeys = Array.isArray(multipleSelectHotkey) - ? multipleSelectHotkey - : [multipleSelectHotkey]; - const handleKeyDown = (event) => { - if (hotkeys.includes(event.code) && !activeHotkey) { - activeHotkey = event.code; - isMultiSelectMode = true; - } - }; - const handleKeyUp = (event) => { - if (event.code === activeHotkey) { - activeHotkey = null; - isMultiSelectMode = false; - } - }; - root.addEventListener('click', click); - if (multipleSelectHotkey) { - // If a hotkey is set, the initial state should be single mode - isMultiSelectMode = false; - document.addEventListener('keydown', handleKeyDown); - document.addEventListener('keyup', handleKeyUp); - } - const onSelect = (e) => { - const { nativeEvent, data } = e; - if (nativeEvent) - return; - const selectedData = !isMultiSelectMode ? data.data.slice(0, 1) : data.data; - for (const d of selectedData) { - const element = (0, utils_1.selectElementByData)(elements, d, datum); - click({ target: element, nativeEvent: false }); - } - }; - const onUnSelect = () => { - clear(false); - }; - emitter.on('element:select', onSelect); - emitter.on('element:unselect', onUnSelect); - return () => { - for (const e of elements) - removeLink(e); - root.removeEventListener('click', click); - if (multipleSelectHotkey) { - document.removeEventListener('keydown', handleKeyDown); - document.removeEventListener('keyup', handleKeyUp); - } - emitter.off('element:select', onSelect); - emitter.off('element:unselect', onUnSelect); - }; -} -exports.elementSelect = elementSelect; -function ElementSelect(_a) { - var { createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, ["createGroup", "createRegionGroup", "background", "link"]); - return (context, _, emitter) => { - const { container, view, options } = context; - const { coordinate, scale } = view; - const plotArea = (0, utils_1.selectPlotArea)(container); - return elementSelect(plotArea, Object.assign({ elements: utils_1.selectG2Elements, datum: (0, utils_1.createDatumof)(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup - ? createRegionGroup(view) - : (0, utils_1.createXKey)(view), coordinate, - scale, state: (0, utils_1.mergeState)(options, [ - ['selected', background ? {} : { lineWidth: '1', stroke: '#000' }], - 'unselected', - ]), background, - link, - emitter }, rest)); - }; -} -exports.ElementSelect = ElementSelect; -ElementSelect.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementSelect.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/traverse-elements":1751263816123,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816127, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementSelectByX = void 0; -const utils_1 = require("./utils"); -const elementSelect_1 = require("./elementSelect"); -function ElementSelectByX(options) { - return (0, elementSelect_1.ElementSelect)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createXKey })); -} -exports.ElementSelectByX = ElementSelectByX; -ElementSelectByX.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementSelectByX.js.map -}, function(modId) { var map = {"./utils":1751263816080,"./elementSelect":1751263816126}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816128, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementSelectByColor = void 0; -const utils_1 = require("./utils"); -const elementSelect_1 = require("./elementSelect"); -function ElementSelectByColor(options) { - return (0, elementSelect_1.ElementSelect)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createColorKey })); -} -exports.ElementSelectByColor = ElementSelectByColor; -ElementSelectByColor.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=elementSelectByColor.js.map -}, function(modId) { var map = {"./utils":1751263816080,"./elementSelect":1751263816126}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816129, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChartIndex = void 0; -const g_1 = require("@antv/g"); -const util_1 = require("@antv/util"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const runtime_1 = require("../runtime"); -const utils_1 = require("./utils"); -function maybeTransform(options) { - const { transform = [] } = options; - const normalizeY = transform.find((d) => d.type === 'normalizeY'); - if (normalizeY) - return normalizeY; - const newNormalizeY = { type: 'normalizeY' }; - transform.push(newNormalizeY); - options.transform = transform; - return newNormalizeY; -} -function markValue(markState, markName, channels) { - const [value] = Array.from(markState.entries()) - .filter(([mark]) => mark.type === markName) - .map(([mark]) => { - const { encode } = mark; - const channel = (name) => { - const channel = encode[name]; - return [name, channel ? channel.value : undefined]; - }; - return Object.fromEntries(channels.map(channel)); - }); - return value; -} -/** - * @todo Perf - */ -function ChartIndex(_a) { - var { wait = 20, leading, trailing = false, labelFormatter = (date) => `${date}` } = _a, style = __rest(_a, ["wait", "leading", "trailing", "labelFormatter"]); - return (context) => { - const { view, container, update, setState } = context; - const { markState, scale, coordinate } = view; - // Get line mark value, exit if it is not existed. - const value = markValue(markState, 'line', ['x', 'y', 'series']); - if (!value) - return; - // Prepare channel value. - const { y: Y, x: X, series: S = [] } = value; - const I = Y.map((_, i) => i); - const sortedX = (0, d3_array_1.sort)(I.map((i) => X[i])); - // Prepare shapes. - const plotArea = (0, utils_1.selectPlotArea)(container); - const lines = container.getElementsByClassName(runtime_1.ELEMENT_CLASS_NAME); - const labels = container.getElementsByClassName(runtime_1.LABEL_CLASS_NAME); - // The format of label key: `${elementKey}-index`, - // group labels by elementKey. - const keyofLabel = (d) => d.__data__.key.split('-')[0]; - const keyLabels = (0, d3_array_1.group)(labels, keyofLabel); - const rule = new g_1.Line({ - style: Object.assign({ x1: 0, y1: 0, x2: 0, y2: plotArea.getAttribute('height'), stroke: 'black', lineWidth: 1 }, (0, helper_1.subObject)(style, 'rule')), - }); - const text = new g_1.Text({ - style: Object.assign({ x: 0, y: plotArea.getAttribute('height'), text: '', fontSize: 10 }, (0, helper_1.subObject)(style, 'label')), - }); - rule.append(text); - plotArea.appendChild(rule); - // Get the closet date to the rule. - const dateByFocus = (coordinate, scaleX, focus) => { - const [normalizedX] = coordinate.invert(focus); - const date = scaleX.invert(normalizedX); - return sortedX[(0, d3_array_1.bisectCenter)(sortedX, date)]; - }; - // Update rule and label content. - const updateRule = (focus, date) => { - rule.setAttribute('x1', focus[0]); - rule.setAttribute('x2', focus[0]); - text.setAttribute('text', labelFormatter(date)); - }; - // Store the new inner state alter rerender the view. - let newView; - // Rerender the view to update basis for each line. - const updateBasisByRerender = (focus) => __awaiter(this, void 0, void 0, function* () { - // Find the closetDate to the rule. - const { x: scaleX } = scale; - const date = dateByFocus(coordinate, scaleX, focus); - updateRule(focus, date); - setState('chartIndex', (options) => { - // Clone options and get line mark. - const clonedOptions = (0, util_1.deepMix)({}, options); - const lineMark = clonedOptions.marks.find((d) => d.type === 'line'); - // Update domain of y scale for the line mark. - const r = (I) => (0, d3_array_1.max)(I, (i) => +Y[i]) / (0, d3_array_1.min)(I, (i) => +Y[i]); - const k = (0, d3_array_1.max)((0, d3_array_1.rollup)(I, r, (i) => S[i]).values()); - const domainY = [1 / k, k]; - (0, util_1.deepMix)(lineMark, { - scale: { y: { domain: domainY } }, - }); - // Update normalize options. - const normalizeY = maybeTransform(lineMark); - normalizeY.groupBy = 'color'; - normalizeY.basis = (I, Y) => { - const i = I[(0, d3_array_1.bisector)((i) => X[+i]).center(I, date)]; - return Y[i]; - }; - // Disable animation. - for (const mark of clonedOptions.marks) - mark.animate = false; - return clonedOptions; - }); - const newState = yield update('chartIndex'); - newView = newState.view; - }); - // Only apply translate to update basis for each line. - // If performance is ok, there is no need to use this - // strategy to update basis. - const updateBasisByTranslate = (focus) => { - // Find the closetDate to the rule. - const { scale, coordinate } = newView; - const { x: scaleX, y: scaleY } = scale; - const date = dateByFocus(coordinate, scaleX, focus); - updateRule(focus, date); - // Translate mark and label for better performance. - for (const line of lines) { - // Compute transform in y direction. - const { seriesIndex: SI, key } = line.__data__; - const i = SI[(0, d3_array_1.bisector)((i) => X[+i]).center(SI, date)]; - const p0 = [0, scaleY.map(1)]; // basis point - const p1 = [0, scaleY.map(Y[i] / Y[SI[0]])]; - const [, y0] = coordinate.map(p0); - const [, y1] = coordinate.map(p1); - const dy = y0 - y1; - line.setAttribute('transform', `translate(0, ${dy})`); - // Update line and related label. - const labels = keyLabels.get(key) || []; - for (const label of labels) { - // @todo Replace with style.transform. - // It now has unexpected behavior. - label.setAttribute('dy', dy); - } - } - }; - const updateBasis = (0, util_1.throttle)((event) => { - const focus = (0, utils_1.mousePosition)(plotArea, event); - if (!focus) - return; - updateBasisByTranslate(focus); - }, wait, { leading, trailing }); - updateBasisByRerender([0, 0]); - plotArea.addEventListener('pointerenter', updateBasis); - plotArea.addEventListener('pointermove', updateBasis); - plotArea.addEventListener('pointerleave', updateBasis); - return () => { - rule.remove(); - plotArea.removeEventListener('pointerenter', updateBasis); - plotArea.removeEventListener('pointermove', updateBasis); - plotArea.removeEventListener('pointerleave', updateBasis); - }; - }; -} -exports.ChartIndex = ChartIndex; -ChartIndex.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=chartIndex.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../runtime":1751263816081,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816130, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Fisheye = void 0; -const util_1 = require("@antv/util"); -const utils_1 = require("./utils"); -function maybeCoordinate(options) { - const { coordinate = {} } = options; - const { transform = [] } = coordinate; - const fisheye = transform.find((d) => d.type === 'fisheye'); - if (fisheye) - return fisheye; - const newFisheye = { type: 'fisheye' }; - transform.push(newFisheye); - coordinate.transform = transform; - options.coordinate = coordinate; - return newFisheye; -} -/** - * @todo Bind abstract data or data index. - */ -function Fisheye({ wait = 30, leading, trailing = false, }) { - return (context) => { - const { options, update, setState, container } = context; - const plotArea = (0, utils_1.selectPlotArea)(container); - const updateFocus = (0, util_1.throttle)((event) => { - const focus = (0, utils_1.mousePosition)(plotArea, event); - if (!focus) { - setState('fisheye'); - update(); - return; - } - setState('fisheye', (options) => { - // Clone options and mutate it. - // Disable animation. - const clonedOptions = (0, util_1.deepMix)({}, options, { - interaction: { tooltip: { preserve: true } }, - }); - for (const mark of clonedOptions.marks) - mark.animate = false; - const [x, y] = focus; - const fisheye = maybeCoordinate(clonedOptions); - fisheye.focusX = x; - fisheye.focusY = y; - fisheye.visual = true; - return clonedOptions; - }); - update(); - }, wait, { leading, trailing }); - // Bind events. - plotArea.addEventListener('pointerenter', updateFocus); - plotArea.addEventListener('pointermove', updateFocus); - plotArea.addEventListener('pointerleave', updateFocus); - return () => { - plotArea.removeEventListener('pointerenter', updateFocus); - plotArea.removeEventListener('pointermove', updateFocus); - plotArea.removeEventListener('pointerleave', updateFocus); - }; - }; -} -exports.Fisheye = Fisheye; -//# sourceMappingURL=fisheye.js.map -}, function(modId) { var map = {"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816131, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tooltip = exports.tooltip = exports.seriesTooltip = exports.findSeriesElement = exports.findSingleElement = exports.maybeValue = void 0; -const g_1 = require("@antv/g"); -const d3_array_1 = require("@antv/vendor/d3-array"); -const util_1 = require("@antv/util"); -const component_1 = require("@antv/component"); -const helper_1 = require("../utils/helper"); -const coordinate_1 = require("../utils/coordinate"); -const vector_1 = require("../utils/vector"); -const scale_1 = require("../utils/scale"); -const transform_1 = require("../runtime/transform"); -const utils_1 = require("./utils"); -function getContainer(group, mount) { - if (mount) { - return typeof mount === 'string' ? document.querySelector(mount) : mount; - } - const canvas = group.ownerDocument.defaultView - .getContextService() - .getDomElement(); - return canvas.parentElement; -} -function getBounding(root) { - const bbox = root.getRenderBounds(); - const { min: [x1, y1], max: [x2, y2], } = bbox; - return { - x: x1, - y: y1, - width: x2 - x1, - height: y2 - y1, - }; -} -function getContainerOffset(container1, container2) { - const r1 = container1.getBoundingClientRect(); - const r2 = container2.getBoundingClientRect(); - return { - x: r1.x - r2.x, - y: r1.y - r2.y, - }; -} -function createTooltip(container, x0, y0, position, enterable, bounding, containerOffset, css = {}, offset = [10, 10]) { - const defaults = { - '.g2-tooltip': {}, - '.g2-tooltip-title': { - overflow: 'hidden', - 'white-space': 'nowrap', - 'text-overflow': 'ellipsis', - }, - }; - const tooltipElement = new component_1.Tooltip({ - className: 'tooltip', - style: { - x: x0, - y: y0, - container: containerOffset, - data: [], - bounding, - position, - enterable, - title: '', - offset, - template: { - prefixCls: 'g2-', - }, - style: (0, util_1.deepMix)(defaults, css), - }, - }); - container.appendChild(tooltipElement.HTMLTooltipElement); - return tooltipElement; -} -function showTooltip({ root, data, x, y, render, event, single, position = 'right-bottom', enterable = false, css, mount, bounding, offset, }) { - const container = getContainer(root, mount); - const canvasContainer = getContainer(root); - // All the views share the same tooltip. - const parent = single ? canvasContainer : root; - const b = bounding || getBounding(root); - const containerOffset = getContainerOffset(canvasContainer, container); - const { tooltipElement = createTooltip(container, x, y, position, enterable, b, containerOffset, css, offset), } = parent; - const { items, title = '' } = data; - tooltipElement.update(Object.assign({ x, - y, data: items, title, - position, - enterable, container: containerOffset }, (render !== undefined && { - content: render(event, { items, title }), - }))); - parent.tooltipElement = tooltipElement; -} -function hideTooltip({ root, single, emitter, nativeEvent = true, event = null, }) { - if (nativeEvent) { - emitter.emit('tooltip:hide', { nativeEvent }); - } - const container = getContainer(root); - const parent = single ? container : root; - const { tooltipElement } = parent; - if (tooltipElement) { - // Must be clientX, clientY. - tooltipElement.hide(event === null || event === void 0 ? void 0 : event.clientX, event === null || event === void 0 ? void 0 : event.clientY); - } - hideRuleY(root); - hideRuleX(root); - hideMarker(root); -} -function destroyTooltip({ root, single }) { - const container = getContainer(root); - const parent = single ? container : root; - if (!parent) - return; - const { tooltipElement } = parent; - if (tooltipElement) { - tooltipElement.destroy(); - parent.tooltipElement = undefined; - } - hideRuleY(root); - hideRuleX(root); - hideMarker(root); -} -function showUndefined(item) { - const { value } = item; - return Object.assign(Object.assign({}, item), { value: value === undefined ? 'undefined' : value }); -} -function singleItem(element) { - const { __data__: datum } = element; - const { title, items = [] } = datum; - const newItems = items - .filter(helper_1.defined) - .map((_a) => { - var { color = itemColorOf(element) } = _a, item = __rest(_a, ["color"]); - return (Object.assign(Object.assign({}, item), { color })); - }) - .map(showUndefined); - return Object.assign(Object.assign({}, (title && { title })), { items: newItems }); -} -function itemColorOf(element) { - const fill = element.getAttribute('fill'); - const stroke = element.getAttribute('stroke'); - const { __data__: datum } = element; - const { color = fill && fill !== 'transparent' ? fill : stroke } = datum; - return color; -} -function unique(items, key = (d) => d) { - const valueName = new Map(items.map((d) => [key(d), d])); - return Array.from(valueName.values()); -} -function groupItems(elements, scale, groupName, data = elements.map((d) => d['__data__']), theme = {}) { - const key = (d) => (d instanceof Date ? +d : d); - const T = unique(data.map((d) => d.title), key).filter(helper_1.defined); - const newItems = data - .flatMap((datum, i) => { - const element = elements[i]; - const { items = [], title } = datum; - const definedItems = items.filter(helper_1.defined); - // If there is only one item, use groupName as title by default. - const useGroupName = groupName !== undefined ? groupName : items.length <= 1 ? true : false; - return definedItems.map((_a) => { - var { color = itemColorOf(element) || theme.color, name } = _a, item = __rest(_a, ["color", "name"]); - const groupName = (0, helper_1.groupNameOf)(scale, datum); - // callback's priority is higher than groupName. - const name1 = useGroupName && !(transform_1.CALLBACK_ITEM_SYMBOL in item) - ? groupName || name - : name || groupName; - return Object.assign(Object.assign({}, item), { color, name: name1 || title }); - }); - }) - .map(showUndefined); - return Object.assign(Object.assign({}, (T.length > 0 && { title: T.join(',') })), { items: unique(newItems, (d) => `(${key(d.name)}, ${key(d.value)}, ${key(d.color)})`) }); -} -function updateRuleX(root, points, mouse, _a) { - var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, ["plotWidth", "plotHeight", "mainWidth", "mainHeight", "startX", "startY", "transposed", "polar", "insetLeft", "insetTop"]); - const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest); - const createCircle = (cx, cy, r) => { - const circle = new g_1.Circle({ - style: Object.assign({ cx, - cy, - r }, defaults), - }); - root.appendChild(circle); - return circle; - }; - const createLine = (x1, x2, y1, y2) => { - const line = new g_1.Line({ - style: Object.assign({ x1, - x2, - y1, - y2 }, defaults), - }); - root.appendChild(line); - return line; - }; - const minDistPoint = (mouse, points) => { - // only one point do not need compute - if (points.length === 1) { - return points[0]; - } - const dists = points.map((p) => (0, vector_1.dist)(p, mouse)); - const minDistIndex = (0, d3_array_1.minIndex)(dists, (d) => d); - return points[minDistIndex]; - }; - const target = minDistPoint(mouse, points); - const pointsOf = () => { - if (transposed) - return [ - startX + target[0], - startX + target[0], - startY, - startY + plotHeight, - ]; - return [startX, startX + plotWidth, target[1] + startY, target[1] + startY]; - }; - const pointsOfPolar = () => { - const cx = startX + insetLeft + mainWidth / 2; - const cy = startY + insetTop + mainHeight / 2; - const cdist = (0, vector_1.dist)([cx, cy], target); - return [cx, cy, cdist]; - }; - if (polar) { - const [cx, cy, r] = pointsOfPolar(); - const ruleX = root.ruleX || createCircle(cx, cy, r); - ruleX.style.cx = cx; - ruleX.style.cy = cy; - ruleX.style.r = r; - root.ruleX = ruleX; - } - else { - const [x1, x2, y1, y2] = pointsOf(); - const ruleX = root.ruleX || createLine(x1, x2, y1, y2); - ruleX.style.x1 = x1; - ruleX.style.x2 = x2; - ruleX.style.y1 = y1; - ruleX.style.y2 = y2; - root.ruleX = ruleX; - } -} -function updateRuleY(root, points, _a) { - var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, ["plotWidth", "plotHeight", "mainWidth", "mainHeight", "startX", "startY", "transposed", "polar", "insetLeft", "insetTop"]); - const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest); - const Y = points.map((p) => p[1]); - const X = points.map((p) => p[0]); - const y = (0, d3_array_1.mean)(Y); - const x = (0, d3_array_1.mean)(X); - const pointsOf = () => { - if (polar) { - const r = Math.min(mainWidth, mainHeight) / 2; - const cx = startX + insetLeft + mainWidth / 2; - const cy = startY + insetTop + mainHeight / 2; - const a = (0, vector_1.angle)((0, vector_1.sub)([x, y], [cx, cy])); - const x0 = cx + r * Math.cos(a); - const y0 = cy + r * Math.sin(a); - return [cx, x0, cy, y0]; - } - if (transposed) - return [startX, startX + plotWidth, y + startY, y + startY]; - return [x + startX, x + startX, startY, startY + plotHeight]; - }; - const [x1, x2, y1, y2] = pointsOf(); - const createLine = () => { - const line = new g_1.Line({ - style: Object.assign({ x1, - x2, - y1, - y2 }, defaults), - }); - root.appendChild(line); - return line; - }; - // Only update rule with defined series elements. - if (X.length > 0) { - const ruleY = root.ruleY || createLine(); - ruleY.style.x1 = x1; - ruleY.style.x2 = x2; - ruleY.style.y1 = y1; - ruleY.style.y2 = y2; - root.ruleY = ruleY; - } -} -function hideRuleY(root) { - if (root.ruleY) { - root.ruleY.remove(); - root.ruleY = undefined; - } -} -function hideRuleX(root) { - if (root.ruleX) { - root.ruleX.remove(); - root.ruleX = undefined; - } -} -function updateMarker(root, { data, style, theme }) { - if (root.markers) - root.markers.forEach((d) => d.remove()); - const { type = '' } = style; - const markers = data - .filter((d) => { - const [{ x, y }] = d; - return (0, helper_1.defined)(x) && (0, helper_1.defined)(y); - }) - .map((d) => { - const [{ color, element }, point] = d; - const originColor = color || // encode value - element.style.fill || - element.style.stroke || - theme.color; - const fill = type === 'hollow' ? 'transparent' : originColor; - const stroke = type === 'hollow' ? originColor : '#fff'; - const shape = new g_1.Circle({ - className: 'g2-tooltip-marker', - style: Object.assign({ cx: point[0], cy: point[1], fill, r: 4, stroke, lineWidth: 2, - // Prevents blocking clicks on elements behind. - pointerEvents: 'none' }, style), - }); - return shape; - }); - for (const marker of markers) - root.appendChild(marker); - root.markers = markers; -} -function hideMarker(root) { - if (root.markers) { - root.markers.forEach((d) => d.remove()); - root.markers = []; - } -} -function interactionKeyof(markState, key) { - return Array.from(markState.values()).some( - // @ts-ignore - (d) => { var _a; return (_a = d.interaction) === null || _a === void 0 ? void 0 : _a[key]; }); -} -function maybeValue(specified, defaults) { - return specified === undefined ? defaults : specified; -} -exports.maybeValue = maybeValue; -function isEmptyTooltipData(data) { - const { title, items } = data; - if (items.length === 0 && title === undefined) - return true; - return false; -} -function hasSeries(markState) { - return Array.from(markState.values()).some( - // @ts-ignore - (d) => { var _a; return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a.seriesTooltip) && d.tooltip; }); -} -/** - * Finds a single element based on the mouse event in a non-series context (e.g., single item tooltip). - * @param root - The root display object of the chart. - * @param event - The mouse event object (e.g., pointermove, pointerdown). - * @param elements - Array of chart elements to search within. - * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar). - * @param scale - The scale configurations (e.g., x, series scales). - * @param shared - Whether the tooltip is shared among multiple elements (e.g., grouped bars). - * @returns The matched display object or `undefined` if no element is found. - * @description - * - Handles bar charts by sorting elements and using bisector search for efficient lookup. - * - For non-bar charts, directly finds the target element from the event's target. - * - Adjusts for bar spacing in grouped charts when `shared` is false. - */ -function findSingleElement({ root, event, elements, coordinate, scale, shared, }) { - var _a, _b; - const inInterval = (d) => d.markType === 'interval'; - const isBar = elements.every(inInterval) && !(0, coordinate_1.isPolar)(coordinate); - const scaleX = scale.x; - const scaleSeries = scale.series; - const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0; - const xof = scaleSeries - ? (d) => { - const seriesCount = Math.round(1 / scaleSeries.valueBandWidth); - return (d.__data__.x + - d.__data__.series * bandWidth + - bandWidth / (seriesCount * 2)); - } - : (d) => d.__data__.x + bandWidth / 2; - // Sort for bisector search. - if (isBar) - elements.sort((a, b) => xof(a) - xof(b)); - const findElementByTarget = (event) => { - const { target } = event; - return (0, utils_1.maybeRoot)(target, (node) => { - if (!node.classList) - return false; - return node.classList.includes('element'); - }); - }; - const element = isBar - ? (event) => { - const mouse = (0, utils_1.mousePosition)(root, event); - if (!mouse) - return; - const [abstractX] = coordinate.invert(mouse); - const search = (0, d3_array_1.bisector)(xof).center; - const i = search(elements, abstractX); - const target = elements[i]; - if (!shared) { - // For grouped bar chart without shared options. - const isGrouped = elements.find((d) => d !== target && xof(d) === xof(target)); - if (isGrouped) - return findElementByTarget(event); - } - return target; - } - : findElementByTarget; - return element(event); -} -exports.findSingleElement = findSingleElement; -/** - * Finds series-related elements and data based on the mouse event for series tooltips. - * @param root - The root display object of the chart. - * @param event - The mouse event object (e.g., pointermove, pointerdown). - * @param elements - Array of chart elements to search within. - * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar). - * @param scale - The scale configurations (e.g., x, series scales). - * @param startX - The starting X position of the plot area. - * @param startY - The starting Y position of the plot area. - * @returns An object containing: - * - `selectedElements`: Matched display objects (series and item elements). - * - `selectedData`: Corresponding data records of the selected elements. - * - `filteredSeriesData`: Filtered series data closest to the mouse focus. - * - `abstractX`: A function to convert mouse coordinates to abstract X values. - * @description - * - Splits elements into series and item elements for targeted searching. - * - Handles bar charts and band scales using bisector search and coordinate inversion. - * - Sorts elements to ensure correct visual ordering (top-to-bottom or right-to-left in transposed mode). - * - Filters and groups data to provide accurate tooltip information for series. - */ -function findSeriesElement({ root, event, elements, coordinate, scale, startX, startY, }) { - const transposed = (0, coordinate_1.isTranspose)(coordinate); - // Split elements into series elements and item elements. - const seriesElements = []; - const itemElements = []; - for (const element of elements) { - const { __data__: data } = element; - const { seriesX, title, items } = data; - if (seriesX) - seriesElements.push(element); - else if (title || items) - itemElements.push(element); - } - const inInterval = (d) => d.markType === 'interval'; - const isBar = itemElements.length && - itemElements.every(inInterval) && - !(0, coordinate_1.isPolar)(coordinate); - const xof = (d) => d.__data__.x; - // For band scale x, find the closest series element to focus, - // useful for interval + line mark. - const isBandScale = !!scale.x.getBandWidth; - const closest = isBandScale && itemElements.length > 0; - // Sorted elements from top to bottom visually, - // or from right to left in transpose coordinate. - seriesElements.sort((a, b) => { - const index = transposed ? 0 : 1; - const minY = (d) => d.getBounds().min[index]; - return transposed ? minY(b) - minY(a) : minY(a) - minY(b); - }); - const extent = (d) => { - const index = transposed ? 1 : 0; - const { min, max } = d.getLocalBounds(); - return (0, d3_array_1.sort)([min[index], max[index]]); - }; - // Sort itemElements for bisector search. - if (isBar) - elements.sort((a, b) => xof(a) - xof(b)); - else { - itemElements.sort((a, b) => { - const [minA, maxA] = extent(a); - const [minB, maxB] = extent(b); - const midA = (minA + maxA) / 2; - const midB = (minB + maxB) / 2; - return transposed ? midB - midA : midA - midB; - }); - } - // Get sortedIndex and X for each series elements - const elementSortedX = new Map(seriesElements.map((element) => { - const { __data__: data } = element; - const { seriesX } = data; - const seriesIndex = seriesX.map((_, i) => i); - const sortedIndex = (0, d3_array_1.sort)(seriesIndex, (i) => seriesX[+i]); - return [element, [sortedIndex, seriesX]]; - })); - const { x: scaleX } = scale; - // Apply offset for band scale x. - const offsetX = (scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) ? scaleX.getBandWidth() / 2 : 0; - const abstractX = (focus) => { - const [normalizedX] = coordinate.invert(focus); - return normalizedX - offsetX; - }; - const indexByFocus = (event, focus, I, X) => { - // _x is from emit event, to find the right element. - const { _x } = event; - const finalX = _x !== undefined ? scaleX.map(_x) : abstractX(focus); - const DX = X.filter(helper_1.defined); - const [minX, maxX] = (0, d3_array_1.sort)([DX[0], DX[DX.length - 1]]); - // If only has one element(minX == maxX), show tooltip when hover whole chart - const isOnlyOneElement = minX === maxX; - // If closest is true, always find at least one element. - // Otherwise, skip element out of plot area. - if (!closest && (finalX < minX || finalX > maxX) && !isOnlyOneElement) - return null; - const search = (0, d3_array_1.bisector)((i) => X[+i]).center; - const i = search(I, finalX); - return I[i]; - }; - const elementsByFocus = isBar - ? (focus, elements) => { - const search = (0, d3_array_1.bisector)(xof).center; - const i = search(elements, abstractX(focus)); - const find = elements[i]; - const groups = (0, d3_array_1.group)(elements, xof); - const selected = groups.get(xof(find)); - return selected; - } - : (focus, elements) => { - const index = transposed ? 1 : 0; - const x = focus[index]; - const filtered = elements.filter((element) => { - const [min, max] = extent(element); - return x >= min && x <= max; - }); - // If closet is true, always find at least one element. - if (!closest || filtered.length > 0) - return filtered; - // Search the closet element to the focus. - const search = (0, d3_array_1.bisector)((element) => { - const [min, max] = extent(element); - return (min + max) / 2; - }).center; - const i = search(elements, x); - return [elements[i]].filter(helper_1.defined); - }; - const seriesData = (element, index) => { - const { __data__: data } = element; - return Object.fromEntries(Object.entries(data) - .filter(([key]) => key.startsWith('series') && key !== 'series') - .map(([key, V]) => { - const d = V[index]; - return [(0, util_1.lowerFirst)(key.replace('series', '')), d]; - })); - }; - const mouse = (0, utils_1.mousePosition)(root, event); - if (!mouse) - return; - const focus = [mouse[0] - startX, mouse[1] - startY]; - if (!focus) - return; - // Get selected item element. - const selectedItems = elementsByFocus(focus, itemElements); - // Get selected data item from both series element and item element. - const selectedSeriesElements = []; - const selectedSeriesData = []; - for (const element of seriesElements) { - const [sortedIndex, X] = elementSortedX.get(element); - const index = indexByFocus(event, focus, sortedIndex, X); - if (index !== null) { - selectedSeriesElements.push(element); - const d = seriesData(element, index); - const { x, y } = d; - const p = coordinate.map([(x || 0) + offsetX, y || 0]); - selectedSeriesData.push([Object.assign(Object.assign({}, d), { element }), p]); - } - } - // Filter selectedSeriesData with different x, - // make sure there is only one x closest to focusX. - const SX = Array.from(new Set(selectedSeriesData.map((d) => d[0].x))); - const closestX = SX[(0, d3_array_1.minIndex)(SX, (x) => Math.abs(x - abstractX(focus)))]; - const filteredSeriesData = selectedSeriesData.filter((d) => d[0].x === closestX); - const selectedData = [ - ...filteredSeriesData.map((d) => d[0]), - ...selectedItems.map((d) => d.__data__), - ]; - // Get the displayed tooltip data. - const selectedElements = [...selectedSeriesElements, ...selectedItems]; - return { selectedElements, selectedData, filteredSeriesData, abstractX }; -} -exports.findSeriesElement = findSeriesElement; -/** - * Show tooltip for series item. - */ -function seriesTooltip(root, _a) { - var { elements: elementsof, sort: sortFunction, filter: filterFunction, scale, coordinate, crosshairs, crosshairsX, crosshairsY, render, groupName, emitter, wait = 50, leading = true, trailing = false, startX = 0, startY = 0, body = true, single = true, position, enterable, mount, bounding, theme, offset, disableNative = false, marker = true, preserve = false, style: _style = {}, css = {} } = _a, rest = __rest(_a, ["elements", "sort", "filter", "scale", "coordinate", "crosshairs", "crosshairsX", "crosshairsY", "render", "groupName", "emitter", "wait", "leading", "trailing", "startX", "startY", "body", "single", "position", "enterable", "mount", "bounding", "theme", "offset", "disableNative", "marker", "preserve", "style", "css"]); - const elements = elementsof(root); - const style = (0, util_1.deepMix)(_style, rest); - const polar = (0, coordinate_1.isPolar)(coordinate); - const transposed = (0, coordinate_1.isTranspose)(coordinate); - const { innerWidth: plotWidth, innerHeight: plotHeight, width: mainWidth, height: mainHeight, insetLeft, insetTop, } = coordinate.getOptions(); - const update = (0, util_1.throttle)((event) => { - var _a; - const mouse = (0, utils_1.mousePosition)(root, event); - if (!mouse) - return; - const bbox = (0, utils_1.bboxOf)(root); - const x = bbox.min[0]; - const y = bbox.min[1]; - const { selectedElements, selectedData, filteredSeriesData, abstractX } = findSeriesElement({ - root, - event, - elements, - coordinate, - scale, - startX, - startY, - }); - const tooltipData = groupItems(selectedElements, scale, groupName, selectedData, theme); - // Sort items and filter items. - if (sortFunction) { - tooltipData.items.sort((a, b) => sortFunction(a) - sortFunction(b)); - } - if (filterFunction) { - tooltipData.items = tooltipData.items.filter(filterFunction); - } - // Hide tooltip with no selected tooltip. - if (selectedElements.length === 0 || isEmptyTooltipData(tooltipData)) { - hide(event); - return; - } - if (body) { - showTooltip({ - root, - data: tooltipData, - x: mouse[0] + x, - y: mouse[1] + y, - render, - event, - single, - position, - enterable, - mount, - bounding, - css, - offset, - }); - } - if (crosshairs || crosshairsX || crosshairsY) { - const ruleStyle = (0, helper_1.subObject)(style, 'crosshairs'); - const ruleStyleX = Object.assign(Object.assign({}, ruleStyle), (0, helper_1.subObject)(style, 'crosshairsX')); - const ruleStyleY = Object.assign(Object.assign({}, ruleStyle), (0, helper_1.subObject)(style, 'crosshairsY')); - const points = filteredSeriesData.map((d) => d[1]); - if (crosshairsX) { - updateRuleX(root, points, mouse, Object.assign(Object.assign({}, ruleStyleX), { plotWidth, - plotHeight, - mainWidth, - mainHeight, - insetLeft, - insetTop, - startX, - startY, - transposed, - polar })); - } - if (crosshairsY) { - updateRuleY(root, points, Object.assign(Object.assign({}, ruleStyleY), { plotWidth, - plotHeight, - mainWidth, - mainHeight, - insetLeft, - insetTop, - startX, - startY, - transposed, - polar })); - } - } - if (marker) { - const markerStyles = (0, helper_1.subObject)(style, 'marker'); - updateMarker(root, { - data: filteredSeriesData, - style: markerStyles, - theme, - }); - } - // X in focus may related multiple points when dataset is large, - // so we need to find the first x to show tooltip. - const firstX = (_a = filteredSeriesData[0]) === null || _a === void 0 ? void 0 : _a[0].x; - const transformedX = firstX !== null && firstX !== void 0 ? firstX : abstractX(focus); - emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, tooltipData), { data: { x: (0, scale_1.invert)(scale.x, transformedX, true) } }) })); - }, wait, { leading, trailing }); - const hide = (event) => { - hideTooltip({ root, single, emitter, event }); - }; - const destroy = () => { - destroyTooltip({ root, single }); - }; - const onTooltipShow = (_a) => { - var _b; - var { nativeEvent, data, offsetX, offsetY } = _a, rest = __rest(_a, ["nativeEvent", "data", "offsetX", "offsetY"]); - if (nativeEvent) - return; - const x = (_b = data === null || data === void 0 ? void 0 : data.data) === null || _b === void 0 ? void 0 : _b.x; - const scaleX = scale.x; - const x1 = scaleX.map(x); - const [x2, y2] = coordinate.map([x1, 0.5]); - const rootBounds = root.getRenderBounds(); - const minX = rootBounds.min[0]; - const minY = rootBounds.min[1]; - update(Object.assign(Object.assign({}, rest), { offsetX: offsetX !== undefined ? offsetX : minX + x2, offsetY: offsetY !== undefined ? offsetY : minY + y2, _x: x })); - }; - const onTooltipHide = () => { - hideTooltip({ root, single, emitter, nativeEvent: false }); - }; - const onTooltipDisable = () => { - removeEventListeners(); - destroy(); - }; - const onTooltipEnable = () => { - addEventListeners(); - }; - const addEventListeners = () => { - if (!disableNative) { - root.addEventListener('pointerdown', update); - root.addEventListener('pointerenter', update); - root.addEventListener('pointermove', update); - // Only emit pointerleave event when the pointer is not in the root area. - root.addEventListener('pointerleave', (e) => { - if ((0, utils_1.mousePosition)(root, e)) - return; - hide(e); - }); - root.addEventListener('pointerup', hide); - } - }; - const removeEventListeners = () => { - if (!disableNative) { - root.removeEventListener('pointerdown', update); - root.removeEventListener('pointerenter', update); - root.removeEventListener('pointermove', update); - root.removeEventListener('pointerleave', hide); - root.removeEventListener('pointerup', hide); - } - }; - addEventListeners(); - emitter.on('tooltip:show', onTooltipShow); - emitter.on('tooltip:hide', onTooltipHide); - emitter.on('tooltip:disable', onTooltipDisable); - emitter.on('tooltip:enable', onTooltipEnable); - return () => { - removeEventListeners(); - emitter.off('tooltip:show', onTooltipShow); - emitter.off('tooltip:hide', onTooltipHide); - emitter.off('tooltip:disable', onTooltipDisable); - emitter.off('tooltip:enable', onTooltipEnable); - if (preserve) { - hideTooltip({ root, single, emitter, nativeEvent: false }); - } - else { - destroy(); - } - }; -} -exports.seriesTooltip = seriesTooltip; -/** - * Show tooltip for non-series item. - */ -function tooltip(root, { elements: elementsof, coordinate, scale, render, groupName, sort: sortFunction, filter: filterFunction, emitter, wait = 50, leading = true, trailing = false, groupKey = (d) => d, // group elements by specified key -single = true, position, enterable, datum, view, mount, bounding, theme, offset, shared = false, body = true, disableNative = false, preserve = false, css = {}, }) { - const elements = elementsof(root); - const keyGroup = (0, d3_array_1.group)(elements, groupKey); - const pointermove = (0, util_1.throttle)((event) => { - const element = findSingleElement({ - root, - event, - elements, - coordinate, - scale, - shared, - }); - if (!element) { - hideTooltip({ root, single, emitter, event }); - return; - } - const k = groupKey(element); - const group = keyGroup.get(k); - if (!group) { - return; - } - const data = group.length === 1 && !shared - ? singleItem(group[0]) - : groupItems(group, scale, groupName, undefined, theme); - // Sort items and sort. - if (sortFunction) { - data.items.sort((a, b) => sortFunction(a) - sortFunction(b)); - } - if (filterFunction) { - data.items = data.items.filter(filterFunction); - } - if (isEmptyTooltipData(data)) { - hideTooltip({ root, single, emitter, event }); - return; - } - const { offsetX, offsetY } = event; - if (body) { - showTooltip({ - root, - data, - x: offsetX, - y: offsetY, - render, - event, - single, - position, - enterable, - mount, - bounding, - css, - offset, - }); - } - emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, data), { data: (0, helper_1.dataOf)(element, view) }) })); - }, wait, { leading, trailing }); - const pointerleave = (event) => { - hideTooltip({ root, single, emitter, event }); - }; - const addEventListeners = () => { - if (!disableNative) { - root.addEventListener('pointerdown', pointermove); - root.addEventListener('pointermove', pointermove); - // Only emit pointerleave event when the pointer is not in the root area. - // !!!DO NOT USE pointerout event, it will emit when the pointer is in the child area. - root.addEventListener('pointerleave', pointerleave); - root.addEventListener('pointerup', pointerleave); - } - }; - const removeEventListeners = () => { - if (!disableNative) { - root.removeEventListener('pointerdown', pointermove); - root.removeEventListener('pointermove', pointermove); - root.removeEventListener('pointerleave', pointerleave); - root.removeEventListener('pointerup', pointerleave); - } - }; - const onTooltipShow = ({ nativeEvent, offsetX, offsetY, data: raw }) => { - if (nativeEvent) - return; - const { data } = raw; - const element = (0, utils_1.selectElementByData)(elements, data, datum); - if (!element) - return; - const bbox = element.getBBox(); - const { x, y, width, height } = bbox; - const rootBBox = root.getBBox(); - pointermove({ - target: element, - offsetX: offsetX !== undefined ? offsetX + rootBBox.x : x + width / 2, - offsetY: offsetY !== undefined ? offsetY + rootBBox.y : y + height / 2, - }); - }; - const onTooltipHide = ({ nativeEvent } = {}) => { - if (nativeEvent) - return; - hideTooltip({ root, single, emitter, nativeEvent: false }); - }; - const onTooltipDisable = () => { - removeEventListeners(); - destroyTooltip({ root, single }); - }; - const onTooltipEnable = () => { - addEventListeners(); - }; - emitter.on('tooltip:show', onTooltipShow); - emitter.on('tooltip:hide', onTooltipHide); - emitter.on('tooltip:enable', onTooltipEnable); - emitter.on('tooltip:disable', onTooltipDisable); - addEventListeners(); - return () => { - removeEventListeners(); - emitter.off('tooltip:show', onTooltipShow); - emitter.off('tooltip:hide', onTooltipHide); - if (preserve) { - hideTooltip({ root, single, emitter, nativeEvent: false }); - } - else { - destroyTooltip({ root, single }); - } - }; -} -exports.tooltip = tooltip; -function Tooltip(options) { - const { shared, crosshairs, crosshairsX, crosshairsY, series, name, item = () => ({}), facet = false } = options, rest = __rest(options, ["shared", "crosshairs", "crosshairsX", "crosshairsY", "series", "name", "item", "facet"]); - return (target, viewInstances, emitter) => { - const { container, view } = target; - const { scale, markState, coordinate, theme } = view; - // Get default value from mark states. - const defaultSeries = interactionKeyof(markState, 'seriesTooltip'); - const defaultShowCrosshairs = interactionKeyof(markState, 'crosshairs'); - const plotArea = (0, utils_1.selectPlotArea)(container); - const isSeries = maybeValue(series, defaultSeries); - const crosshairsSetting = maybeValue(crosshairs, defaultShowCrosshairs); - // For non-facet and series tooltip. - if (isSeries && hasSeries(markState) && !facet) { - return seriesTooltip(plotArea, Object.assign(Object.assign({}, rest), { theme, elements: utils_1.selectG2Elements, scale, - coordinate, crosshairs: crosshairsSetting, - // the crosshairsX settings level: crosshairsX > crosshairs > false - // it means crosshairsX default is false - crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), - // crosshairsY default depend on the crossharisSettings - crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item, - emitter })); - } - // For facet and series tooltip. - if (isSeries && facet) { - // Get sub view instances for this view. - const facetInstances = viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key); - const elements = (0, utils_1.selectFacetG2Elements)(target, viewInstances); - // Use the scale of the first view. - const scale = facetInstances[0].view.scale; - const bbox = plotArea.getBounds(); - const startX = bbox.min[0]; - const startY = bbox.min[1]; - Object.assign(scale, { facet: true }); - // @todo Nested structure rather than flat structure for facet? - // Add listener to the root area. - // @ts-ignore - return seriesTooltip(plotArea.parentNode.parentNode, Object.assign(Object.assign({}, rest), { theme, elements: () => elements, scale, - coordinate, crosshairs: maybeValue(crosshairs, defaultShowCrosshairs), - // the crosshairsX settings level: crosshairsX > crosshairs > false - // it means crosshairsX default is false - crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item, - startX, - startY, - emitter })); - } - return tooltip(plotArea, Object.assign(Object.assign({}, rest), { datum: (0, utils_1.createDatumof)(view), elements: utils_1.selectG2Elements, scale, - coordinate, groupKey: shared ? (0, utils_1.createXKey)(view) : undefined, item, - emitter, - view, - theme, - shared })); - }; -} -exports.Tooltip = Tooltip; -Tooltip.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=tooltip.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/coordinate":1751263815882,"../utils/vector":1751263815873,"../utils/scale":1751263816057,"../runtime/transform":1751263816118,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816132, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendFilter = exports.attributesOf = exports.dataOf = exports.legendClearSetState = exports.legendsContinuousOf = exports.legendsOf = exports.itemsOf = exports.labelOf = exports.markerOf = exports.LEGEND_LABEL_CLASS_NAME = exports.LEGEND_MAKER_CLASS_NAME = exports.LEGEND_ITEMS_CLASS_NAME = exports.CONTINUOUS_LEGEND_CLASS_NAME = exports.CATEGORY_LEGEND_CLASS_NAME = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -exports.CATEGORY_LEGEND_CLASS_NAME = 'legend-category'; -exports.CONTINUOUS_LEGEND_CLASS_NAME = 'legend-continuous'; -exports.LEGEND_ITEMS_CLASS_NAME = 'items-item'; -exports.LEGEND_MAKER_CLASS_NAME = 'legend-category-item-marker'; -exports.LEGEND_LABEL_CLASS_NAME = 'legend-category-item-label'; -function markerOf(item) { - return item.getElementsByClassName(exports.LEGEND_MAKER_CLASS_NAME)[0]; -} -exports.markerOf = markerOf; -function labelOf(item) { - return item.getElementsByClassName(exports.LEGEND_LABEL_CLASS_NAME)[0]; -} -exports.labelOf = labelOf; -function itemsOf(root) { - return root.getElementsByClassName(exports.LEGEND_ITEMS_CLASS_NAME); -} -exports.itemsOf = itemsOf; -function legendsOf(root) { - return root.getElementsByClassName(exports.CATEGORY_LEGEND_CLASS_NAME); -} -exports.legendsOf = legendsOf; -function legendsContinuousOf(root) { - return root.getElementsByClassName(exports.CONTINUOUS_LEGEND_CLASS_NAME); -} -exports.legendsContinuousOf = legendsContinuousOf; -function legendClearSetState(root, setState) { - const legends = [...legendsOf(root), ...legendsContinuousOf(root)]; - legends.forEach((legend) => { - setState(legend, (v) => v); - }); -} -exports.legendClearSetState = legendClearSetState; -function dataOf(root) { - // legend -> layout -> container - let parent = root.parentNode; - while (parent && !parent.__data__) { - parent = parent.parentNode; - } - return parent.__data__; -} -exports.dataOf = dataOf; -function attributesOf(root) { - let child = root; - while (child && !child.attr('class').startsWith('legend')) { - child = child.children[0]; - } - return child.attributes; -} -exports.attributesOf = attributesOf; -function legendFilterOrdinal(root, { legends, // given the root of chart returns legends to be manipulated -marker: markerOf, // given the legend returns the marker -label: labelOf, // given the legend returns the label -datum, // given the legend returns the value -filter, // invoke when dispatch filter event, -emitter, channel, state = {}, // state options - }) { - // Index handler by item. - const itemClick = new Map(); - const itemPointerenter = new Map(); - const itemPointerout = new Map(); - const { unselected = { - markerStroke: '#aaa', - markerFill: '#aaa', - labelFill: '#aaa', - }, } = state; - const markerStyle = { unselected: (0, helper_1.subObject)(unselected, 'marker') }; - const labelStyle = { unselected: (0, helper_1.subObject)(unselected, 'label') }; - const { setState: setM, removeState: removeM } = (0, utils_1.useState)(markerStyle, undefined); - const { setState: setL, removeState: removeL } = (0, utils_1.useState)(labelStyle, undefined); - const items = Array.from(legends(root)); - let selectedValues = items.map(datum); - const updateLegendState = () => { - for (const item of items) { - const value = datum(item); - const marker = markerOf(item); - const label = labelOf(item); - if (!selectedValues.includes(value)) { - setM(marker, 'unselected'); - setL(label, 'unselected'); - } - else { - removeM(marker, 'unselected'); - removeL(label, 'unselected'); - } - } - }; - for (const item of items) { - // Defined handlers. - const pointerenter = () => { - (0, utils_1.setCursor)(root, 'pointer'); - }; - const pointerout = () => { - (0, utils_1.restoreCursor)(root); - }; - const click = (event) => __awaiter(this, void 0, void 0, function* () { - const value = datum(item); - const index = selectedValues.indexOf(value); - if (index === -1) - selectedValues.push(value); - else - selectedValues.splice(index, 1); - yield filter(selectedValues); - updateLegendState(); - const { nativeEvent = true } = event; - if (!nativeEvent) - return; - if (selectedValues.length === items.length) { - emitter.emit('legend:reset', { nativeEvent }); - } - else { - // Emit events. - emitter.emit('legend:filter', Object.assign(Object.assign({}, event), { nativeEvent, data: { - channel, - values: selectedValues, - } })); - } - }); - // Bind and store handlers. - item.addEventListener('click', click); - item.addEventListener('pointerenter', pointerenter); - item.addEventListener('pointerout', pointerout); - itemClick.set(item, click); - itemPointerenter.set(item, pointerenter); - itemPointerout.set(item, pointerout); - } - const onFilter = (event) => __awaiter(this, void 0, void 0, function* () { - const { nativeEvent } = event; - if (nativeEvent) - return; - const { data } = event; - const { channel: specifiedChannel, values } = data; - if (specifiedChannel !== channel) - return; - selectedValues = values; - yield filter(selectedValues); - updateLegendState(); - }); - const onEnd = (event) => __awaiter(this, void 0, void 0, function* () { - const { nativeEvent } = event; - if (nativeEvent) - return; - selectedValues = items.map(datum); - yield filter(selectedValues); - updateLegendState(); - }); - emitter.on('legend:filter', onFilter); - emitter.on('legend:reset', onEnd); - return () => { - for (const item of items) { - item.removeEventListener('click', itemClick.get(item)); - item.removeEventListener('pointerenter', itemPointerenter.get(item)); - item.removeEventListener('pointerout', itemPointerout.get(item)); - emitter.off('legend:filter', onFilter); - emitter.off('legend:reset', onEnd); - } - }; -} -function legendFilterContinuous(_, { legend, filter, emitter, channel }) { - const onValueChange = ({ detail: { value } }) => { - filter(value); - emitter.emit({ - nativeEvent: true, - data: { - channel, - values: value, - }, - }); - }; - legend.addEventListener('valuechange', onValueChange); - return () => { - legend.removeEventListener('valuechange', onValueChange); - }; -} -function filterView(context, // View instance, -{ legend, // Legend instance. -channel, // Filter Channel. -value, // Filtered Values. -ordinal, // Data type of the legend. -channels, // Channels for this legend. -allChannels, // Channels for all legends. -facet = false, // For facet. - }) { - return __awaiter(this, void 0, void 0, function* () { - const { view, update, setState } = context; - setState(legend, (viewOptions) => { - const { marks } = viewOptions; - // Add filter transform for every marks, - // which will skip for mark without color channel. - const newMarks = marks.map((mark) => { - if (mark.type === 'legends') - return mark; - // Inset after aggregate transform, such as group, and bin. - const { transform = [], data = [] } = mark; - const index = transform.findIndex(({ type }) => type.startsWith('group') || type.startsWith('bin')); - const newTransform = [...transform]; - if (data.length) { - newTransform.splice(index + 1, 0, { - type: 'filter', - [channel]: { value, ordinal }, - }); - } - // Set domain of scale to preserve encoding. - const newScale = Object.fromEntries(channels.map((channel) => [ - channel, - { domain: view.scale[channel].getOptions().domain }, - ])); - return (0, util_1.deepMix)({}, mark, Object.assign(Object.assign({ transform: newTransform, scale: newScale }, (!ordinal && { animate: false })), { legend: facet - ? false - : Object.fromEntries(allChannels.map((d) => [d, { preserve: true }])) })); - }); - return Object.assign(Object.assign({}, viewOptions), { marks: newMarks }); - }); - yield update(); - }); -} -function filterFacets(facets, options) { - for (const facet of facets) { - filterView(facet, Object.assign(Object.assign({}, options), { facet: true })); - } -} -function LegendFilter() { - return (context, contexts, emitter) => { - const { container } = context; - const facets = contexts.filter((d) => d !== context); - const isFacet = facets.length > 0; - const channelsOf = (legend) => { - return dataOf(legend).scales.map((d) => d.name); - }; - const legends = [ - ...legendsOf(container), - ...legendsContinuousOf(container), - ]; - const allChannels = legends.flatMap(channelsOf); - const filter = isFacet - ? (0, util_1.throttle)(filterFacets, 50, { trailing: true }) - : (0, util_1.throttle)(filterView, 50, { trailing: true }); - const removes = legends.map((legend) => { - const { name: channel, domain } = dataOf(legend).scales[0]; - const channels = channelsOf(legend); - const common = { - legend, - channel, - channels, - allChannels, - }; - if (legend.className === exports.CATEGORY_LEGEND_CLASS_NAME) { - return legendFilterOrdinal(container, { - legends: itemsOf, - marker: markerOf, - label: labelOf, - datum: (d) => { - const { __data__: datum } = d; - const { index } = datum; - return domain[index]; - }, - filter: (value) => { - const options = Object.assign(Object.assign({}, common), { value, ordinal: true }); - if (isFacet) - filter(facets, options); - else - filter(context, options); - }, - state: legend.attributes.state, - channel, - emitter, - }); - } - else { - return legendFilterContinuous(container, { - legend, - filter: (value) => { - const options = Object.assign(Object.assign({}, common), { value, ordinal: false }); - if (isFacet) - filter(facets, options); - else - filter(context, options); - }, - emitter, - channel, - }); - } - }); - return () => { - removes.forEach((remove) => remove()); - }; - }; -} -exports.LegendFilter = LegendFilter; -//# sourceMappingURL=legendFilter.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816133, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LegendHighlight = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -const legendFilter_1 = require("./legendFilter"); -function LegendHighlight() { - return (context, _, emitter) => { - const { container, view, options } = context; - const legends = (0, legendFilter_1.legendsOf)(container); - const elements = (0, utils_1.selectG2Elements)(container); - const channelOf = (legend) => { - return (0, legendFilter_1.dataOf)(legend).scales[0].name; - }; - const scaleOf = (channel) => { - const { scale: { [channel]: scale }, } = view; - return scale; - }; - const markState = (0, utils_1.mergeState)(options, ['active', 'inactive']); - const valueof = (0, utils_1.createValueof)(elements, (0, utils_1.createDatumof)(view)); - const destroys = []; - // Bind events for each legend. - for (const legend of legends) { - const datumOf = (item) => { - const { data } = legend.attributes; - const { __data__: datum } = item; - const { index } = datum; - return data[index].label; - }; - const channel = channelOf(legend); - const items = (0, legendFilter_1.itemsOf)(legend); - const scale = scaleOf(channel); - const elementGroup = (0, d3_array_1.group)(elements, (d) => scale.invert(d.__data__[channel])); - const { state: legendState = {} } = legend.attributes; - const { inactive = {} } = legendState; - const { setState, removeState } = (0, utils_1.useState)(markState, valueof); - // Handle styles of inner item. - const markerStyle = { inactive: (0, helper_1.subObject)(inactive, 'marker') }; - const labelStyle = { inactive: (0, helper_1.subObject)(inactive, 'label') }; - const { setState: setM, removeState: removeM } = (0, utils_1.useState)(markerStyle); - const { setState: setL, removeState: removeL } = (0, utils_1.useState)(labelStyle); - const updateLegendState = (highlight) => { - for (const item of items) { - const marker = (0, legendFilter_1.markerOf)(item); - const label = (0, legendFilter_1.labelOf)(item); - if (item === highlight || highlight === null) { - removeM(marker, 'inactive'); - removeL(label, 'inactive'); - } - else { - setM(marker, 'inactive'); - setL(label, 'inactive'); - } - } - }; - const highlightItem = (event, item) => { - // Update UI. - const value = datumOf(item); - const elementSet = new Set(elementGroup.get(value)); - for (const e of elements) { - if (elementSet.has(e)) - setState(e, 'active'); - else - setState(e, 'inactive'); - } - updateLegendState(item); - // Emit events. - const { nativeEvent = true } = event; - if (!nativeEvent) - return; - emitter.emit('legend:highlight', Object.assign(Object.assign({}, event), { nativeEvent, data: { channel, value } })); - }; - const itemPointerover = new Map(); - // Add listener for the legend items. - for (const item of items) { - const pointerover = (event) => { - highlightItem(event, item); - }; - item.addEventListener('pointerover', pointerover); - itemPointerover.set(item, pointerover); - } - // Add listener for the legend group. - const pointerleave = (event) => { - for (const e of elements) - removeState(e, 'inactive', 'active'); - updateLegendState(null); - // Emit events. - const { nativeEvent = true } = event; - if (!nativeEvent) - return; - emitter.emit('legend:unhighlight', { nativeEvent }); - }; - const onHighlight = (event) => { - const { nativeEvent, data } = event; - if (nativeEvent) - return; - const { channel: specifiedChannel, value } = data; - if (specifiedChannel !== channel) - return; - const item = items.find((d) => datumOf(d) === value); - if (!item) - return; - highlightItem({ nativeEvent: false }, item); - }; - const onUnHighlight = (event) => { - const { nativeEvent } = event; - if (nativeEvent) - return; - pointerleave({ nativeEvent: false }); - }; - legend.addEventListener('pointerleave', pointerleave); - emitter.on('legend:highlight', onHighlight); - emitter.on('legend:unhighlight', onUnHighlight); - const destroy = () => { - legend.removeEventListener(pointerleave); - emitter.off('legend:highlight', onHighlight); - emitter.off('legend:unhighlight', onUnHighlight); - for (const [item, pointerover] of itemPointerover) { - item.removeEventListener(pointerover); - } - }; - destroys.push(destroy); - } - return () => destroys.forEach((d) => d()); - }; -} -exports.LegendHighlight = LegendHighlight; -//# sourceMappingURL=legendHighlight.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils":1751263816080,"./legendFilter":1751263816132}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816134, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushHighlight = exports.brushHighlight = exports.brush = void 0; -const g_1 = require("@antv/g"); -const helper_1 = require("../utils/helper"); -const scale_1 = require("../utils/scale"); -const createElement_1 = require("../utils/createElement"); -const selection_1 = require("../utils/selection"); -const utils_1 = require("./utils"); -function intersect(bbox1, bbox2) { - const [minX1, minY1, maxX1, maxY1] = bbox1; - const [minX2, minY2, maxX2, maxY2] = bbox2; - return !(minX2 > maxX1 || maxX2 < minX1 || minY2 > maxY1 || maxY2 < minY1); -} -function normalizeBounds(x, y, x1, y1, extent) { - const [minX, minY, maxX, maxY] = extent; - return [ - Math.max(minX, Math.min(x, x1)), - Math.max(minY, Math.min(y, y1)), - Math.min(maxX, Math.max(x, x1)), - Math.min(maxY, Math.max(y, y1)), - ]; -} -function bboxOf(root) { - const { width, height } = root.getBBox(); - return [0, 0, width, height]; -} -function applyStyle(selection, style) { - for (const [key, value] of Object.entries(style)) { - selection.style(key, value); - } -} -const ResizableMask = (0, createElement_1.createElement)((g) => { - const _a = g.attributes, { x, y, width, height, class: className, renders = {}, handleSize: size = 10, document } = _a, style = __rest(_a, ["x", "y", "width", "height", "class", "renders", "handleSize", "document"]); - if (!document || - width === undefined || - height === undefined || - x === undefined || - y === undefined) - return; - const half = size / 2; - const renderRect = (g, options, document) => { - if (!g.handle) { - g.handle = document.createElement('rect'); - g.append(g.handle); - } - const { handle } = g; - handle.attr(options); - return handle; - }; - const _b = (0, helper_1.subObject)((0, helper_1.omitPrefixObject)(style, 'handleNW', 'handleNE'), 'handleN'), { render: handleNRender = renderRect } = _b, handleNStyle = __rest(_b, ["render"]); - const _c = (0, helper_1.subObject)(style, 'handleE'), { render: handleERender = renderRect } = _c, handleEStyle = __rest(_c, ["render"]); - const _d = (0, helper_1.subObject)((0, helper_1.omitPrefixObject)(style, 'handleSE', 'handleSW'), 'handleS'), { render: handleSRender = renderRect } = _d, handleSStyle = __rest(_d, ["render"]); - const _e = (0, helper_1.subObject)(style, 'handleW'), { render: handleWRender = renderRect } = _e, handleWStyle = __rest(_e, ["render"]); - const _f = (0, helper_1.subObject)(style, 'handleNW'), { render: handleNWRender = renderRect } = _f, handleNWStyle = __rest(_f, ["render"]); - const _g = (0, helper_1.subObject)(style, 'handleNE'), { render: handleNERender = renderRect } = _g, handleNEStyle = __rest(_g, ["render"]); - const _h = (0, helper_1.subObject)(style, 'handleSE'), { render: handleSERender = renderRect } = _h, handleSEStyle = __rest(_h, ["render"]); - const _j = (0, helper_1.subObject)(style, 'handleSW'), { render: handleSWRender = renderRect } = _j, handleSWStyle = __rest(_j, ["render"]); - const renderHandle = (g, renderNode) => { - const { id } = g; - const handle = renderNode(g, g.attributes, document); - handle.id = id; - handle.style.draggable = true; - }; - const appendHandle = (handleRender) => { - return () => { - const Node = (0, createElement_1.createElement)((g) => renderHandle(g, handleRender)); - return new Node({}); - }; - }; - const container = (0, selection_1.select)(g) - .attr('className', className) - .style('transform', `translate(${x}, ${y})`) - .style('draggable', true); - container - .maybeAppend('selection', 'rect') - .style('draggable', true) - .style('fill', 'transparent') - .call(applyStyle, Object.assign(Object.assign({ width, - height }, (0, helper_1.omitPrefixObject)(style, 'handle')), { transform: undefined })); - container - .maybeAppend('handle-n', appendHandle(handleNRender)) - .style('x', half) - .style('y', -half) - .style('width', width - size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleNStyle); - container - .maybeAppend('handle-e', appendHandle(handleERender)) - .style('x', width - half) - .style('y', half) - .style('width', size) - .style('height', height - size) - .style('fill', 'transparent') - .call(applyStyle, handleEStyle); - container - .maybeAppend('handle-s', appendHandle(handleSRender)) - .style('x', half) - .style('y', height - half) - .style('width', width - size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleSStyle); - container - .maybeAppend('handle-w', appendHandle(handleWRender)) - .style('x', -half) - .style('y', half) - .style('width', size) - .style('height', height - size) - .style('fill', 'transparent') - .call(applyStyle, handleWStyle); - container - .maybeAppend('handle-nw', appendHandle(handleNWRender)) - .style('x', -half) - .style('y', -half) - .style('width', size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleNWStyle); - container - .maybeAppend('handle-ne', appendHandle(handleNERender)) - .style('x', width - half) - .style('y', -half) - .style('width', size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleNEStyle); - container - .maybeAppend('handle-se', appendHandle(handleSERender)) - .style('x', width - half) - .style('y', height - half) - .style('width', size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleSEStyle); - container - .maybeAppend('handle-sw', appendHandle(handleSWRender)) - .style('x', -half) - .style('y', height - half) - .style('width', size) - .style('height', size) - .style('fill', 'transparent') - .call(applyStyle, handleSWStyle); -}); -function brush(root, _a) { - var { brushed = () => { }, brushended = () => { }, brushcreated = () => { }, brushstarted = () => { }, brushupdated = () => { }, extent = bboxOf(root), brushRegion = (x, y, x1, y1, extent) => [x, y, x1, y1], reverse = false, fill = '#777', fillOpacity = '0.3', stroke = '#fff', selectedHandles = [ - 'handle-n', - 'handle-e', - 'handle-s', - 'handle-w', - 'handle-nw', - 'handle-ne', - 'handle-se', - 'handle-sw', - ] } = _a, style = __rest(_a, ["brushed", "brushended", "brushcreated", "brushstarted", "brushupdated", "extent", "brushRegion", "reverse", "fill", "fillOpacity", "stroke", "selectedHandles"]); - let start = null; // Start point of mask. - let end = null; // End point of mask. - let moveStart = null; // Start point of moving mask. - let mask = null; // Mask instance. - let background = null; - let creating = false; - const [originX, originY, width, height] = extent; - (0, utils_1.setCursor)(root, 'crosshair'); - root.style.draggable = true; // Make it response to drag event. - // Remove old mask and init new mask. - const initMask = (x, y, event) => { - brushstarted(event); - if (mask) - mask.remove(); - if (background) - background.remove(); - start = [x, y]; - if (reverse) - return initReverseMask(); - initNormalMask(); - }; - const initReverseMask = () => { - background = new g_1.Path({ - style: Object.assign(Object.assign({}, style), { fill, - fillOpacity, - stroke, pointerEvents: 'none' }), - }); - mask = new ResizableMask({ - // @ts-ignore - style: { - x: 0, - y: 0, - width: 0, - height: 0, - draggable: true, - document: root.ownerDocument, - }, - className: 'mask', - }); - root.appendChild(background); - root.appendChild(mask); - }; - const initNormalMask = () => { - mask = new ResizableMask({ - // @ts-ignore - style: Object.assign(Object.assign({ document: root.ownerDocument, x: 0, y: 0 }, style), { fill, - fillOpacity, - stroke, draggable: true }), - className: 'mask', - }); - root.appendChild(mask); - }; - // Remove mask and reset states. - const removeMask = (emit = true) => { - if (mask) - mask.remove(); - if (background) - background.remove(); - start = null; - end = null; - moveStart = null; - creating = false; - mask = null; - background = null; - brushended(emit); - }; - // Update mask and invoke brushended callback. - const updateMask = (start, end, emit = true) => { - const [x, y, x1, y1] = normalizeBounds(start[0], start[1], end[0], end[1], extent); - const [fx, fy, fx1, fy1] = brushRegion(x, y, x1, y1, extent); - if (reverse) - updateReverseMask(fx, fy, fx1, fy1); - else - updateNormalMask(fx, fy, fx1, fy1); - brushed(fx, fy, fx1, fy1, emit); - return [fx, fy, fx1, fy1]; - }; - const updateNormalMask = (x, y, x1, y1) => { - mask.style.x = x; - mask.style.y = y; - mask.style.width = x1 - x; - mask.style.height = y1 - y; - }; - const updateReverseMask = (x, y, x1, y1) => { - background.style.d = ` - M${originX},${originY}L${width},${originY}L${width},${height}L${originX},${height}Z - M${x},${y}L${x},${y1}L${x1},${y1}L${x1},${y}Z - `; - mask.style.x = x; - mask.style.y = y; - mask.style.width = x1 - x; - mask.style.height = y1 - y; - }; - // Move and update mask. - const moveMask = (current) => { - const clip = (dt, start, end, min, max) => { - if (dt + start < min) - return min - start; - if (dt + end > max) - return max - end; - return dt; - }; - const dx = current[0] - moveStart[0]; - const dy = current[1] - moveStart[1]; - const dx1 = clip(dx, start[0], end[0], originX, width); - const dy1 = clip(dy, start[1], end[1], originY, height); - const currentStart = [start[0] + dx1, start[1] + dy1]; - const currentEnd = [end[0] + dx1, end[1] + dy1]; - updateMask(currentStart, currentEnd); - }; - const handles = { - 'handle-n': { vector: [0, 1, 0, 0], cursor: 'ns-resize' }, - 'handle-e': { vector: [0, 0, 1, 0], cursor: 'ew-resize' }, - 'handle-s': { vector: [0, 0, 0, 1], cursor: 'ns-resize' }, - 'handle-w': { vector: [1, 0, 0, 0], cursor: 'ew-resize' }, - 'handle-nw': { vector: [1, 1, 0, 0], cursor: 'nwse-resize' }, - 'handle-ne': { vector: [0, 1, 1, 0], cursor: 'nesw-resize' }, - 'handle-se': { vector: [0, 0, 1, 1], cursor: 'nwse-resize' }, - 'handle-sw': { vector: [1, 0, 0, 1], cursor: 'nesw-resize' }, - }; - const isMask = (target) => { - return isSelection(target) || isHandle(target); - }; - const isHandle = (target) => { - const { id } = target; - if (selectedHandles.indexOf(id) === -1) - return false; - return new Set(Object.keys(handles)).has(id); - }; - const isSelection = (target) => { - return target === mask.getElementById('selection'); - }; - // If target is plot area, create mask. - // If target is mask, about to update position. - const dragstart = (event) => { - const { target } = event; - const [offsetX, offsetY] = (0, utils_1.brushMousePosition)(root, event); - if (!mask || !isMask(target)) { - initMask(offsetX, offsetY, event); - creating = true; - return; - } - if (isMask(target)) { - moveStart = [offsetX, offsetY]; - } - }; - const drag = (event) => { - const { target } = event; - const mouse = (0, utils_1.brushMousePosition)(root, event); - if (!start) - return; - // If target is plot area, resize mask. - if (!moveStart) - return updateMask(start, mouse); - // If target is selection area, move mask. - if (isSelection(target)) - return moveMask(mouse); - // If target is handle area, resize mask. - const [dx, dy] = [mouse[0] - moveStart[0], mouse[1] - moveStart[1]]; - const { id } = target; - if (handles[id]) { - const [sx, sy, ex, ey] = handles[id].vector; - return updateMask([start[0] + dx * sx, start[1] + dy * sy], [end[0] + dx * ex, end[1] + dy * ey]); - } - }; - // If target is plot area, finish creating. - // If target is mask, finish moving mask. - const dragend = (event) => { - if (moveStart) { - moveStart = null; - // Update start and end; - const { x, y, width, height } = mask.style; - start = [x, y]; - end = [x + width, y + height]; - brushupdated(x, y, x + width, y + height, event); - return; - } - end = (0, utils_1.brushMousePosition)(root, event); - const [fx, fy, fx1, fy1] = updateMask(start, end); - creating = false; - brushcreated(fx, fy, fx1, fy1, event); - }; - // Hide mask. - const click = (event) => { - const { target } = event; - if (mask && !isMask(target)) - removeMask(); - }; - // Update cursor depends on hovered element. - const pointermove = (event) => { - const { target } = event; - if (!mask || !isMask(target) || creating) - (0, utils_1.setCursor)(root, 'crosshair'); - else if (isSelection(target)) - (0, utils_1.setCursor)(root, 'move'); - else if (isHandle(target)) - (0, utils_1.setCursor)(root, handles[target.id].cursor); - }; - const pointerleave = () => { - (0, utils_1.setCursor)(root, 'default'); - }; - root.addEventListener('dragstart', dragstart); - root.addEventListener('drag', drag); - root.addEventListener('dragend', dragend); - root.addEventListener('click', click); - root.addEventListener('pointermove', pointermove); - root.addEventListener('pointerleave', pointerleave); - return { - mask, - move(x, y, x1, y1, emit = true) { - if (!mask) - initMask(x, y, {}); - start = [x, y]; - end = [x1, y1]; - updateMask([x, y], [x1, y1], emit); - }, - remove(emit = true) { - if (mask) - removeMask(emit); - }, - destroy() { - // Do not emit brush:end event. - if (mask) - removeMask(false); - (0, utils_1.setCursor)(root, 'default'); - root.removeEventListener('dragstart', dragstart); - root.removeEventListener('drag', drag); - root.removeEventListener('dragend', dragend); - root.removeEventListener('click', click); - root.removeEventListener('pointermove', pointermove); - root.removeEventListener('pointerleave', pointerleave); - }, - }; -} -exports.brush = brush; -function selectSiblingViews(target, viewInstances, brushKey) { - return viewInstances.filter((d) => { - if (d === target) - return false; - const { interaction = {} } = d.options; - return Object.values(interaction).find((d) => d.brushKey === brushKey); - }); -} -function selectSiblingContainers(target, viewInstances, brushKey) { - return selectSiblingViews(target, viewInstances, brushKey).map((d) => (0, utils_1.selectPlotArea)(d.container)); -} -function selectSiblingOptions(target, viewInstances, brushKey) { - return selectSiblingViews(target, viewInstances, brushKey).map((d) => d.options); -} -/** - * @todo Brush over view for series view. - * @todo Test perf. - */ -function brushHighlight(root, _a) { - var { elements: elementof, selectedHandles, siblings: siblingsof = (root) => [], datum, brushRegion, extent: optionalExtent, reverse, scale, coordinate, series = false, key = (d) => d, bboxOf = (root) => { - const { x, y, width, height } = root.style; - return { x, y, width, height }; - }, state = {}, emitter } = _a, rest = __rest(_a, ["elements", "selectedHandles", "siblings", "datum", "brushRegion", "extent", "reverse", "scale", "coordinate", "series", "key", "bboxOf", "state", "emitter"]); - const elements = elementof(root); - const siblings = siblingsof(root); - const siblingElements = siblings.flatMap(elementof); - const valueof = (0, utils_1.createValueof)(elements, datum); - const brushStyle = (0, helper_1.subObject)(rest, 'mask'); - const { setState, removeState } = (0, utils_1.useState)(state, valueof); - const clonedElement = new Map(); - const { width: rootWidth, height: rootHeight, x: ordinalX = 0, y: ordinalY = 0, } = bboxOf(root); - const extent = optionalExtent - ? optionalExtent - : [0, 0, rootWidth, rootHeight]; - const brushended = () => { - for (const element of [...elements, ...siblingElements]) { - removeState(element, 'active', 'inactive'); - } - }; - const brushed = (x, y, x1, y1) => { - var _a; - // Hide brush for the sibling view. - for (const sibling of siblings) - (_a = sibling.brush) === null || _a === void 0 ? void 0 : _a.remove(); - // Store the key of the active element. - const keys = new Set(); - // Highlight and store selected elements. - for (const element of elements) { - const { min, max } = element.getLocalBounds(); - const [ex, ey] = min; - const [ex1, ey1] = max; - if (!intersect([ex, ey, ex1, ey1], [x, y, x1, y1])) { - setState(element, 'inactive'); - } - else { - setState(element, 'active'); - keys.add(key(element)); - } - } - // Highlight elements with same key in sibling view. - for (const element of siblingElements) { - if (keys.has(key(element))) - setState(element, 'active'); - else - setState(element, 'inactive'); - } - }; - const seriesBrushend = () => { - for (const element of elements) - removeState(element, 'inactive'); - for (const cloned of clonedElement.values()) - cloned.remove(); - clonedElement.clear(); - }; - const seriesBrushed = (x, y, x1, y1) => { - const clone = (element) => { - const cloned = element.cloneNode(); - cloned.__data__ = element.__data__; - element.parentNode.appendChild(cloned); - clonedElement.set(element, cloned); - return cloned; - }; - // Create a clipPath shared between all children. - const clipPath = new g_1.Rect({ - style: { - x: x + ordinalX, - y: y + ordinalY, - width: x1 - x, - height: y1 - y, - }, - }); - root.appendChild(clipPath); - for (const element of elements) { - const cloned = clonedElement.get(element) || clone(element); - cloned.style.clipPath = clipPath; - setState(element, 'inactive'); - setState(cloned, 'active'); - } - }; - const brushHandler = brush(root, Object.assign(Object.assign({}, brushStyle), { extent, - brushRegion, - reverse, - selectedHandles, brushended: (emit) => { - const handler = series ? seriesBrushend : brushended; - if (emit) { - emitter.emit('brush:remove', { nativeEvent: true }); - } - handler(); - }, brushed: (x, y, x1, y1, emit) => { - const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate); - if (emit) { - emitter.emit('brush:highlight', { - nativeEvent: true, - data: { selection }, - }); - } - const handler = series ? seriesBrushed : brushed; - handler(x, y, x1, y1); - }, brushcreated: (x, y, x1, y1, event) => { - const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate); - emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } })); - }, brushupdated: (x, y, x1, y1, event) => { - const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate); - emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } })); - }, brushstarted: (e) => { - emitter.emit('brush:start', e); - } })); - // Move brush and highlight data. - const onHighlight = ({ nativeEvent, data }) => { - if (nativeEvent) - return; - const { selection } = data; - const [x, y, x1, y1] = (0, scale_1.pixelsOf)(selection, scale, coordinate); - brushHandler.move(x, y, x1, y1, false); - }; - emitter.on('brush:highlight', onHighlight); - // Remove brush and reset data. - const onRemove = ({ nativeEvent } = {}) => { - if (nativeEvent) - return; - brushHandler.remove(false); - }; - emitter.on('brush:remove', onRemove); - // Remove event handlers. - const preBrushDestroy = brushHandler.destroy.bind(brushHandler); - brushHandler.destroy = () => { - emitter.off('brush:highlight', onHighlight); - emitter.off('brush:remove', onRemove); - preBrushDestroy(); - }; - return brushHandler; -} -exports.brushHighlight = brushHighlight; -function BrushHighlight(_a) { - var { facet, brushKey } = _a, rest = __rest(_a, ["facet", "brushKey"]); - return (target, viewInstances, emitter) => { - const { container, view, options } = target; - const plotArea = (0, utils_1.selectPlotArea)(container); - const defaultOptions = { - maskFill: '#777', - maskFillOpacity: '0.3', - maskStroke: '#fff', - reverse: false, - }; - const defaultStates = ['active', ['inactive', { opacity: 0.5 }]]; - const { scale, coordinate } = view; - if (facet) { - const bbox = plotArea.getBounds(); - const x = bbox.min[0]; - const y = bbox.min[1]; - const x1 = bbox.max[0]; - const y1 = bbox.max[1]; - return brushHighlight(plotArea.parentNode.parentNode, Object.assign(Object.assign({ elements: () => (0, utils_1.selectFacetG2Elements)(target, viewInstances), datum: (0, utils_1.createDatumof)((0, utils_1.selectFacetViews)(target, viewInstances).map((d) => d.view)), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: [x, y, x1, y1], state: (0, utils_1.mergeState)((0, utils_1.selectFacetViews)(target, viewInstances).map((d) => d.options), defaultStates), emitter, - scale, - coordinate, selectedHandles: undefined }, defaultOptions), rest)); - } - const brush = brushHighlight(plotArea, Object.assign(Object.assign({ elements: utils_1.selectG2Elements, key: (element) => element.__data__.key, siblings: () => selectSiblingContainers(target, viewInstances, brushKey), datum: (0, utils_1.createDatumof)([ - view, - ...selectSiblingViews(target, viewInstances, brushKey).map((d) => d.view), - ]), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: undefined, state: (0, utils_1.mergeState)([options, ...selectSiblingOptions(target, viewInstances, brushKey)], defaultStates), emitter, - scale, - coordinate, selectedHandles: undefined }, defaultOptions), rest)); - // Bind brush to the view it belongs to. - //@ts-ignore - plotArea.brush = brush; - return () => brush.destroy(); - }; -} -exports.BrushHighlight = BrushHighlight; -//# sourceMappingURL=brushHighlight.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/scale":1751263816057,"../utils/createElement":1751263815891,"../utils/selection":1751263815883,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816135, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushXHighlight = exports.brushXRegion = void 0; -const brushHighlight_1 = require("./brushHighlight"); -function brushXRegion(x, y, x1, y1, extent) { - const [, minY, , maxY] = extent; - return [x, minY, x1, maxY]; -} -exports.brushXRegion = brushXRegion; -function BrushXHighlight(options) { - return (0, brushHighlight_1.BrushHighlight)(Object.assign(Object.assign({}, options), { brushRegion: brushXRegion, selectedHandles: ['handle-e', 'handle-w'] })); -} -exports.BrushXHighlight = BrushXHighlight; -//# sourceMappingURL=brushXHighlight.js.map -}, function(modId) { var map = {"./brushHighlight":1751263816134}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816136, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushYHighlight = exports.brushYRegion = void 0; -const brushHighlight_1 = require("./brushHighlight"); -function brushYRegion(x, y, x1, y1, extent) { - const [minX, , maxX] = extent; - return [minX, y, maxX, y1]; -} -exports.brushYRegion = brushYRegion; -function BrushYHighlight(options) { - return (0, brushHighlight_1.BrushHighlight)(Object.assign(Object.assign({}, options), { brushRegion: brushYRegion, selectedHandles: ['handle-n', 'handle-s'] })); -} -exports.BrushYHighlight = BrushYHighlight; -//# sourceMappingURL=brushYHighlight.js.map -}, function(modId) { var map = {"./brushHighlight":1751263816134}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816137, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushAxisHighlight = exports.brushAxisHighlight = exports.AXIS_HOT_AREA_CLASS_NAME = exports.AXIS_MAIN_CLASS_NAME = exports.AXIS_LINE_CLASS_NAME = exports.AXIS_CLASS_NAME = void 0; -const g_1 = require("@antv/g"); -const helper_1 = require("../utils/helper"); -const scale_1 = require("../utils/scale"); -const brushHighlight_1 = require("./brushHighlight"); -const brushXHighlight_1 = require("./brushXHighlight"); -const brushYHighlight_1 = require("./brushYHighlight"); -const utils_1 = require("./utils"); -exports.AXIS_CLASS_NAME = 'axis'; -exports.AXIS_LINE_CLASS_NAME = 'axis-line'; -exports.AXIS_MAIN_CLASS_NAME = 'axis-main-group'; -exports.AXIS_HOT_AREA_CLASS_NAME = 'axis-hot-area'; -function axesOf(container) { - return container.getElementsByClassName(exports.AXIS_CLASS_NAME); -} -function lineOf(axis) { - return axis.getElementsByClassName(exports.AXIS_LINE_CLASS_NAME)[0]; -} -function mainGroupOf(axis) { - return axis.getElementsByClassName(exports.AXIS_MAIN_CLASS_NAME)[0]; -} -// Use the bounds of main group of axis as the bounds of axis, -// get rid of grid and title. -function boundsOfAxis(axis) { - return mainGroupOf(axis).getLocalBounds(); -} -// Brush for vertical axis. -function verticalBrush(axis, _a) { - var { cross, offsetX, offsetY } = _a, style = __rest(_a, ["cross", "offsetX", "offsetY"]); - const bounds = boundsOfAxis(axis); - const axisLine = lineOf(axis); - const [lineX] = axisLine.getLocalBounds().min; - const [minX, minY] = bounds.min; - const [maxX, maxY] = bounds.max; - const size = (maxX - minX) * 2; - return { - brushRegion: brushYHighlight_1.brushYRegion, - hotZone: new g_1.Rect({ - className: exports.AXIS_HOT_AREA_CLASS_NAME, - style: Object.assign({ - // If it is not cross, draw brush in both side of axisLine, - // otherwise the draw brush within bounds area. - width: cross ? size / 2 : size, transform: `translate(${(cross ? minX : lineX - size / 2).toFixed(2)}, ${minY})`, height: maxY - minY }, style), - }), - extent: cross - ? // If it is cross, the x range is ignored. - (x, y, x1, y1) => [-Infinity, y, Infinity, y1] - : (x, y, x1, y1) => [ - Math.floor(minX - offsetX), - y, - Math.ceil(maxX - offsetX), - y1, - ], - }; -} -// Brush for horizontal axis. -function horizontalBrush(axis, _a) { - var { offsetY, offsetX, cross = false } = _a, style = __rest(_a, ["offsetY", "offsetX", "cross"]); - const bounds = boundsOfAxis(axis); - const axisLine = lineOf(axis); - const [, lineY] = axisLine.getLocalBounds().min; - const [minX, minY] = bounds.min; - const [maxX, maxY] = bounds.max; - const size = maxY - minY; - return { - brushRegion: brushXHighlight_1.brushXRegion, - hotZone: new g_1.Rect({ - className: exports.AXIS_HOT_AREA_CLASS_NAME, - style: Object.assign({ width: maxX - minX, - // If it is not cross, draw brush in both side of axisLine, - // otherwise the draw brush within bounds area. - height: cross ? size : size * 2, transform: `translate(${minX}, ${cross ? minY : lineY - size})` }, style), - }), - extent: cross - ? // If it is cross, the y range is ignored. - (x, y, x1, y1) => [x, -Infinity, x1, Infinity] - : (x, y, x1, y1) => [ - x, - Math.floor(minY - offsetY), - x1, - Math.ceil(maxY - offsetY), - ], - }; -} -function brushAxisHighlight(root, _a) { - var { axes: axesOf, // given root, return axes - elements: elementsOf, // given root, return elements - points: pointsOf, // given shape, return control points - horizontal: isHorizontal, // given axis, return direction - datum, // given shape, return datum - offsetY, // offsetY for shape area - offsetX, // offsetX for shape area - reverse = false, state = {}, emitter, coordinate } = _a, rest = __rest(_a, ["axes", "elements", "points", "horizontal", "datum", "offsetY", "offsetX", "reverse", "state", "emitter", "coordinate"]) // style - ; - const elements = elementsOf(root); - const axes = axesOf(root); - const valueof = (0, utils_1.createValueof)(elements, datum); - const { setState, removeState } = (0, utils_1.useState)(state, valueof); - const axisExtent = new Map(); - const brushStyle = (0, helper_1.subObject)(rest, 'mask'); - // Only some of shape's points in all mask, it is selected. - const brushed = (points) => Array.from(axisExtent.values()).every(([x, y, x1, y1]) => points.some(([x0, y0]) => { - return x0 >= x && x0 <= x1 && y0 >= y && y0 <= y1; - })); - const scales = axes.map((d) => d.attributes.scale); - const extentOf = (D) => (D.length > 2 ? [D[0], D[D.length - 1]] : D); - const indexDomain = new Map(); - const initIndexDomain = () => { - indexDomain.clear(); - for (let i = 0; i < axes.length; i++) { - const scale = scales[i]; - const { domain } = scale.getOptions(); - indexDomain.set(i, extentOf(domain)); - } - }; - initIndexDomain(); - // Update element when brush changed. - const updateElement = (i, emit) => { - const selectedElements = []; - for (const element of elements) { - const points = pointsOf(element); - if (brushed(points)) { - setState(element, 'active'); - selectedElements.push(element); - } - else - setState(element, 'inactive'); - } - indexDomain.set(i, selectionOf(selectedElements, i)); - if (!emit) - return; - // Emit events. - const selection = () => { - if (!cross) - return Array.from(indexDomain.values()); - const S = []; - for (const [index, domain] of indexDomain) { - const scale = scales[index]; - const { name } = scale.getOptions(); - if (name === 'x') - S[0] = domain; - else - S[1] = domain; - } - return S; - }; - emitter.emit('brushAxis:highlight', { - nativeEvent: true, - data: { - selection: selection(), - }, - }); - }; - const clearElement = (emit) => { - for (const element of elements) - removeState(element, 'active', 'inactive'); - initIndexDomain(); - if (!emit) - return; - emitter.emit('brushAxis:remove', { nativeEvent: true }); - }; - const selectionOf = (selected, i) => { - const scale = scales[i]; - const { name } = scale.getOptions(); - const domain = selected.map((d) => { - const data = d.__data__; - return scale.invert(data[name]); - }); - return extentOf((0, scale_1.domainOf)(scale, domain)); - }; - // Distinguish between parallel coordinates and normal charts. - const cross = axes.some(isHorizontal) && axes.some((d) => !isHorizontal(d)); - const handlers = []; - for (let i = 0; i < axes.length; i++) { - const axis = axes[i]; - const createBrush = isHorizontal(axis) ? horizontalBrush : verticalBrush; - const { hotZone, brushRegion, extent } = createBrush(axis, { - offsetY, - offsetX, - cross, - zIndex: 999, - fill: 'transparent', // Make it interactive. - }); - axis.parentNode.appendChild(hotZone); - const brushHandler = (0, brushHighlight_1.brush)(hotZone, Object.assign(Object.assign({}, brushStyle), { reverse, - brushRegion, - brushended(emit) { - axisExtent.delete(axis); - if (Array.from(axisExtent.entries()).length === 0) - clearElement(emit); - else - updateElement(i, emit); - }, - brushed(x, y, x1, y1, emit) { - axisExtent.set(axis, extent(x, y, x1, y1)); - updateElement(i, emit); - } })); - handlers.push(brushHandler); - } - const onRemove = (event = {}) => { - const { nativeEvent } = event; - if (nativeEvent) - return; - handlers.forEach((d) => d.remove(false)); - }; - const rangeOf = (domain, scale, axis) => { - const [d0, d1] = domain; - const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0); - const x = abstractOf(d0, scale, axis); - const x1 = abstractOf(d1, scale, axis) + maybeStep(scale); - if (isHorizontal(axis)) - return [x, -Infinity, x1, Infinity]; - return [-Infinity, x, Infinity, x1]; - }; - const abstractOf = (x, scale, axis) => { - const { height, width } = coordinate.getOptions(); - const scale1 = scale.clone(); - if (isHorizontal(axis)) - scale1.update({ range: [0, width] }); - else - scale1.update({ range: [height, 0] }); - return scale1.map(x); - }; - const onHighlight = (event) => { - const { nativeEvent } = event; - if (nativeEvent) - return; - const { selection } = event.data; - for (let i = 0; i < handlers.length; i++) { - const domain = selection[i]; - const handler = handlers[i]; - const axis = axes[i]; - if (domain) { - const scale = scales[i]; - handler.move(...rangeOf(domain, scale, axis), false); - } - else { - handler.remove(false); - } - } - }; - emitter.on('brushAxis:remove', onRemove); - emitter.on('brushAxis:highlight', onHighlight); - return () => { - handlers.forEach((d) => d.destroy()); - emitter.off('brushAxis:remove', onRemove); - emitter.off('brushAxis:highlight', onHighlight); - }; -} -exports.brushAxisHighlight = brushAxisHighlight; -/** - * @todo Support mask size. - */ -function BrushAxisHighlight(options) { - return (target, _, emitter) => { - const { container, view, options: viewOptions } = target; - const plotArea = (0, utils_1.selectPlotArea)(container); - const { x: x0, y: y0 } = plotArea.getBBox(); - const { coordinate } = view; - return brushAxisHighlight(container, Object.assign({ elements: utils_1.selectG2Elements, axes: axesOf, offsetY: y0, offsetX: x0, points: (element) => element.__data__.points, horizontal: (axis) => { - const { startPos: [sx, sy], endPos: [ex, ey], } = axis.attributes; - // attention, non-horizontal does not mean vertical - // it may has a specific degree angle - return sx !== ex && sy === ey; - }, datum: (0, utils_1.createDatumof)(view), state: (0, utils_1.mergeState)(viewOptions, [ - 'active', - ['inactive', { opacity: 0.5 }], - ]), coordinate, - emitter }, options)); - }; -} -exports.BrushAxisHighlight = BrushAxisHighlight; -//# sourceMappingURL=brushAxisHighlight.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/scale":1751263816057,"./brushHighlight":1751263816134,"./brushXHighlight":1751263816135,"./brushYHighlight":1751263816136,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816138, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushFilter = exports.brushFilter = void 0; -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const scale_1 = require("../utils/scale"); -const brushHighlight_1 = require("./brushHighlight"); -const utils_1 = require("./utils"); -// Mock dblclick events. -function dblclick(interval = 300) { - let preTimeStamp = null; - return (e) => { - const { timeStamp } = e; - if (preTimeStamp !== null && timeStamp - preTimeStamp < interval) { - preTimeStamp = timeStamp; - return true; - } - preTimeStamp = timeStamp; - return false; - }; -} -function brushFilter(root, _a) { - var { filter, reset, brushRegion, extent: optionalExtent, reverse, emitter, scale, coordinate, selection, series = false } = _a, rest = __rest(_a, ["filter", "reset", "brushRegion", "extent", "reverse", "emitter", "scale", "coordinate", "selection", "series"]); - const brushStyle = (0, helper_1.subObject)(rest, 'mask'); - const { width: rootWidth, height: rootHeight } = root.getBBox(); - const extent = optionalExtent - ? optionalExtent - : [0, 0, rootWidth, rootHeight]; - const isDblclick = dblclick(); - const brush = (0, brushHighlight_1.brush)(root, Object.assign(Object.assign({}, brushStyle), { extent, - brushRegion, - reverse, - brushcreated })); - root.addEventListener('click', click); - // Filter when brush created. - function brushcreated(x, y, x1, y1, event) { - if (x === x1 && y === y1) - return; - event.nativeEvent = true; - filter(selection(x, y, x1, y1), event); - brush.remove(); - } - // Reset when dblclick. - function click(e) { - if (isDblclick(e)) { - e.nativeEvent = true; - reset(e); - } - } - const onFilter = ({ nativeEvent, data }) => { - if (nativeEvent) - return; - const { selection } = data; - filter(selection, { nativeEvent: false }); - }; - emitter.on('brush:filter', onFilter); - return () => { - brush.destroy(); - emitter.off('brush:filter', onFilter); - root.removeEventListener('click', click); - }; -} -exports.brushFilter = brushFilter; -function BrushFilter(_a) { - var { hideX = true, hideY = true } = _a, rest = __rest(_a, ["hideX", "hideY"]); - return (target, viewInstances, emitter) => { - const { container, view, options: viewOptions, update, setState } = target; - const plotArea = (0, utils_1.selectPlotArea)(container); - const defaultOptions = { - maskFill: '#777', - maskFillOpacity: '0.3', - maskStroke: '#fff', - unhighlightedOpacity: 0.5, - reverse: false, - }; - let filtered = false; - let filtering = false; - let newView = view; - const { scale, coordinate } = view; - return brushFilter(plotArea, Object.assign(Object.assign({ brushRegion: (x, y, x1, y1) => [x, y, x1, y1], selection: (x, y, x1, y1) => { - const { scale, coordinate } = newView; - return (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate); - }, filter: (selection, event) => __awaiter(this, void 0, void 0, function* () { - // Avoid redundant filter. - if (filtering) - return; - filtering = true; - // Update the domain of x and y scale to filter data. - const [domainX, domainY] = selection; - setState('brushFilter', (options) => { - const { marks } = options; - const newMarks = marks.map((mark) => (0, util_1.deepMix)({ - // Hide label to keep smooth transition. - axis: Object.assign(Object.assign({}, (hideX && { x: { transform: [{ type: 'hide' }] } })), (hideY && { y: { transform: [{ type: 'hide' }] } })), - }, mark, { - // Set nice to false to avoid modify domain. - scale: { - x: { domain: domainX, nice: false }, - y: { domain: domainY, nice: false }, - }, - })); - return Object.assign(Object.assign({}, viewOptions), { marks: newMarks, clip: true }); - }); - // Emit event. - emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } })); - const newState = yield update(); - newView = newState.view; - filtering = false; - filtered = true; - }), reset: (event) => { - if (filtering || !filtered) - return; - // Emit event. - const { scale } = view; - const { x: scaleX, y: scaleY } = scale; - const domainX = scaleX.getOptions().domain; - const domainY = scaleY.getOptions().domain; - emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } })); - filtered = false; - newView = view; - setState('brushFilter'); - update(); - }, extent: undefined, emitter, - scale, - coordinate }, defaultOptions), rest)); - }; -} -exports.BrushFilter = BrushFilter; -//# sourceMappingURL=brushFilter.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../utils/scale":1751263816057,"./brushHighlight":1751263816134,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816139, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushXFilter = void 0; -const brushFilter_1 = require("./brushFilter"); -const brushXHighlight_1 = require("./brushXHighlight"); -function BrushXFilter(options) { - return (0, brushFilter_1.BrushFilter)(Object.assign(Object.assign({ hideX: true }, options), { brushRegion: brushXHighlight_1.brushXRegion })); -} -exports.BrushXFilter = BrushXFilter; -//# sourceMappingURL=brushXFilter.js.map -}, function(modId) { var map = {"./brushFilter":1751263816138,"./brushXHighlight":1751263816135}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816140, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrushYFilter = void 0; -const brushFilter_1 = require("./brushFilter"); -const brushYHighlight_1 = require("./brushYHighlight"); -function BrushYFilter(options) { - return (0, brushFilter_1.BrushFilter)(Object.assign(Object.assign({ hideY: true }, options), { brushRegion: brushYHighlight_1.brushYRegion })); -} -exports.BrushYFilter = BrushYFilter; -//# sourceMappingURL=brushYFilter.js.map -}, function(modId) { var map = {"./brushFilter":1751263816138,"./brushYHighlight":1751263816136}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816141, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SliderFilter = exports.SLIDER_CLASS_NAME = void 0; -const util_1 = require("@antv/util"); -const g_1 = require("@antv/g"); -const coordinate_1 = require("../utils/coordinate"); -const scale_1 = require("../utils/scale"); -exports.SLIDER_CLASS_NAME = 'slider'; -function filterDataByDomain(options, scaleOptions, prefix, hasState = false, channel0 = 'x', channel1 = 'y') { - const { marks } = options; - const newMarks = marks.map((mark) => { - var _a, _b; - return (0, util_1.deepMix)({ - // Hide label to keep smooth transition. - axis: { - x: { transform: [{ type: 'hide' }] }, - y: { transform: [{ type: 'hide' }] }, - }, - }, mark, { - scale: scaleOptions, - // Don't rerender sliders. - [prefix]: Object.assign(Object.assign({}, (((_a = mark[prefix]) === null || _a === void 0 ? void 0 : _a[channel0]) && { - [channel0]: Object.assign({ preserve: true }, (hasState && { ratio: null })), - })), (((_b = mark[prefix]) === null || _b === void 0 ? void 0 : _b[channel1]) && { - [channel1]: { preserve: true }, - })), - animate: false, - }); - }); - // Rerender and update view. - return Object.assign(Object.assign({}, options), { marks: newMarks, clip: true, animate: false }); -} -function abstractValue(values, scale, reverse) { - const [x, x1] = values; - const v = reverse ? (d) => 1 - d : (d) => d; - const d0 = (0, scale_1.invert)(scale, v(x), true); - const d1 = (0, scale_1.invert)(scale, v(x1), false); - return (0, scale_1.domainOf)(scale, [d0, d1]); -} -function extentOf(domain) { - return [domain[0], domain[domain.length - 1]]; -} -/** - * @todo Support click to reset after fix click and dragend conflict. - */ -function SliderFilter({ initDomain = {}, className = exports.SLIDER_CLASS_NAME, prefix = 'slider', setValue = (component, values) => component.setValues(values), hasState = false, wait = 50, leading = true, trailing = false, getInitValues = (slider) => { - var _a; - const values = (_a = slider === null || slider === void 0 ? void 0 : slider.attributes) === null || _a === void 0 ? void 0 : _a.values; - if (values[0] !== 0 || values[1] !== 1) - return values; -}, }) { - return (context, _, emitter) => { - const { container, view, update, setState } = context; - const sliders = container.getElementsByClassName(className); - if (!sliders.length) - return () => { }; - let filtering = false; - const { scale, coordinate, layout } = view; - const { paddingLeft, paddingTop, paddingBottom, paddingRight } = layout; - const { x: scaleX, y: scaleY } = scale; - const transposed = (0, coordinate_1.isTranspose)(coordinate); - const channelOf = (orientation) => { - const channel0 = orientation === 'vertical' ? 'y' : 'x'; - const channel1 = orientation === 'vertical' ? 'x' : 'y'; - if (transposed) - return [channel1, channel0]; - return [channel0, channel1]; - }; - const sliderHandler = new Map(); - const emitHandlers = new Set(); - // Store current domain of x and y scale. - const channelDomain = { - x: initDomain.x || scaleX.getOptions().domain, - y: initDomain.y || scaleY.getOptions().domain, - }; - for (const slider of sliders) { - const { orientation } = slider.attributes; - const [channel0, channel1] = channelOf(orientation); - const eventName = `${prefix}${(0, util_1.upperFirst)(channel0)}:filter`; - const isX = channel0 === 'x'; - const { ratio: ratioX } = scaleX.getOptions(); - const { ratio: ratioY } = scaleY.getOptions(); - const domainsOf = (event) => { - // From abstract values. - if (event.data) { - const { selection } = event.data; - const [X = extentOf(channelDomain.x), Y = extentOf(channelDomain.y)] = selection; - return isX - ? [(0, scale_1.domainOf)(scaleX, X, ratioX), (0, scale_1.domainOf)(scaleY, Y, ratioY)] - : [(0, scale_1.domainOf)(scaleY, Y, ratioY), (0, scale_1.domainOf)(scaleX, X, ratioX)]; - } - // From visual values. - const { value: values } = event.detail; - const scale0 = scale[channel0]; - const domain0 = abstractValue(values, scale0, transposed && orientation === 'horizontal'); - const domain1 = channelDomain[channel1]; - return [domain0, domain1]; - }; - const onValueChange = (0, util_1.throttle)((event) => __awaiter(this, void 0, void 0, function* () { - const { initValue = false } = event; - if (filtering && !initValue) - return; - filtering = true; - const { nativeEvent = true } = event; - // Get and update domain. - const [domain0, domain1] = domainsOf(event); - channelDomain[channel0] = domain0; - channelDomain[channel1] = domain1; - if (nativeEvent) { - // Emit events. - const X = isX ? domain0 : domain1; - const Y = isX ? domain1 : domain0; - emitter.emit(eventName, Object.assign(Object.assign({}, event), { nativeEvent, data: { selection: [extentOf(X), extentOf(Y)] } })); - } - setState(slider, (options) => (Object.assign(Object.assign({}, filterDataByDomain(options, - // Set nice to false to avoid modify domain. - // Only update domain of current slider / scrollbar. - { [channel0]: { domain: domain0, nice: false } }, prefix, hasState, channel0, channel1)), { paddingLeft, - paddingTop, - paddingBottom, - paddingRight }))); - yield update(); - filtering = false; - }), wait, { leading, trailing }); - const emitHandler = (event) => { - const { nativeEvent } = event; - if (nativeEvent) - return; - const { data } = event; - const { selection } = data; - const [X, Y] = selection; - // Update data. - slider.dispatchEvent(new g_1.CustomEvent('valuechange', { - data, - nativeEvent: false, - })); - // Update slider. - const V = isX ? (0, scale_1.abstractOf)(X, scaleX) : (0, scale_1.abstractOf)(Y, scaleY); - setValue(slider, V); - }; - emitter.on(eventName, emitHandler); - slider.addEventListener('valuechange', onValueChange); - sliderHandler.set(slider, onValueChange); - emitHandlers.add([eventName, emitHandler]); - const values = getInitValues(slider); - if (values) { - // Init values. - slider.dispatchEvent(new g_1.CustomEvent('valuechange', { - detail: { - value: values, - }, - nativeEvent: false, - initValue: true, - })); - } - } - return () => { - for (const [slider, handler] of sliderHandler) { - slider.removeEventListener('valuechange', handler); - } - for (const [name, handler] of emitHandlers) { - emitter.off(name, handler); - } - }; - }; -} -exports.SliderFilter = SliderFilter; -//# sourceMappingURL=sliderFilter.js.map -}, function(modId) { var map = {"../utils/coordinate":1751263815882,"../utils/scale":1751263816057}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816142, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScrollbarFilter = exports.SCROLLBAR_CLASS_NAME = void 0; -const sliderFilter_1 = require("./sliderFilter"); -exports.SCROLLBAR_CLASS_NAME = 'g2-scrollbar'; -function ScrollbarFilter(options = {}) { - return (context, _, emitter) => { - const { view, container } = context; - const scrollbars = container.getElementsByClassName(exports.SCROLLBAR_CLASS_NAME); - if (!scrollbars.length) - return () => { }; - const { scale } = view; - const { x: scaleX, y: scaleY } = scale; - // The filtered domain, computed by the ratio attribute. - const initDomain = { - x: [...scaleX.getOptions().domain], - y: [...scaleY.getOptions().domain], - }; - // The ordinal domain for each channel. - scaleX.update({ domain: scaleX.getOptions().expectedDomain }); - scaleY.update({ domain: scaleY.getOptions().expectedDomain }); - const interaction = (0, sliderFilter_1.SliderFilter)(Object.assign(Object.assign({}, options), { initDomain, className: exports.SCROLLBAR_CLASS_NAME, prefix: 'scrollbar', hasState: true, setValue: (component, values) => component.setValue(values[0]), getInitValues: (scrollbar) => { - const values = scrollbar.slider.attributes.values; - if (values[0] !== 0) - return values; - } })); - return interaction(context, _, emitter); - }; -} -exports.ScrollbarFilter = ScrollbarFilter; -//# sourceMappingURL=scrollbarFilter.js.map -}, function(modId) { var map = {"./sliderFilter":1751263816141}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816143, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Poptip = void 0; -const g_1 = require("@antv/g"); -const string_1 = require("../utils/string"); -const helper_1 = require("../utils/helper"); -function dom(tag, children, style) { - return `<${tag} style="${Object.entries(style) - .map(([key, value]) => `${(0, string_1.kebabCase)(key)}:${value}`) - .join(';')}">${children}`; -} -const defaultTipStyle = { - backgroundColor: 'rgba(0,0,0,0.75)', - color: '#fff', - width: 'max-content', - padding: '1px 4px', - fontSize: '12px', - borderRadius: '2.5px', - boxShadow: '0 3px 6px -4px rgba(0,0,0,0.12), 0 6px 16px 0 rgba(0,0,0,0.08), 0 9px 28px 8px rgba(0,0,0,0.05)', -}; -function isTipText(element) { - if (element.nodeName !== 'text') - return false; - if (element.isOverflowing()) - return true; - return false; -} -function Poptip(_a) { - var { offsetX = 8, offsetY = 8 } = _a, style = __rest(_a, ["offsetX", "offsetY"]); - return (context) => { - const { container } = context; - const [x0, y0] = container.getBounds().min; - const tipStyle = (0, helper_1.subObject)(style, 'tip'); - const tips = new Set(); - const pointerover = (e) => { - const { target } = e; - if (!isTipText(target)) { - e.stopPropagation(); - return; - } - const { offsetX: mouseX, offsetY: mouseY } = e; - const x = mouseX + offsetX - x0; - const y = mouseY + offsetY - y0; - if (target.tip) { - target.tip.style.x = x; - target.tip.style.y = y; - return; - } - const { text } = target.style; - const tipELement = new g_1.HTML({ - className: 'poptip', - style: { - innerHTML: dom('div', text, Object.assign(Object.assign({}, defaultTipStyle), tipStyle)), - x, - y, - }, - }); - container.appendChild(tipELement); - target.tip = tipELement; - tips.add(tipELement); - }; - const pointerout = (e) => { - const { target } = e; - if (!isTipText(target)) { - e.stopPropagation(); - return; - } - if (!target.tip) - return; - target.tip.remove(); - target.tip = null; - tips.delete(target.tip); - }; - container.addEventListener('pointerover', pointerover); - container.addEventListener('pointerout', pointerout); - return () => { - container.removeEventListener('pointerover', pointerover); - container.removeEventListener('pointerout', pointerout); - tips.forEach((tip) => tip.remove()); - }; - }; -} -exports.Poptip = Poptip; -Poptip.props = { - reapplyWhenUpdate: true, -}; -//# sourceMappingURL=poptip.js.map -}, function(modId) { var map = {"../utils/string":1751263815900,"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816144, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TreemapDrillDown = void 0; -const g_1 = require("@antv/g"); -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const runtime_1 = require("../runtime"); -const selection_1 = require("../utils/selection"); -const treeDataTransform_1 = require("../utils/treeDataTransform"); -const legendFilter_1 = require("./legendFilter"); -const utils_1 = require("./utils"); -function selectPlotArea(root) { - return (0, selection_1.select)(root).select(`.${runtime_1.PLOT_CLASS_NAME}`).node(); -} -// Default breadCrumb config. -const DEFAULT_BREADCRUMB_STYLE = { - breadCrumbFill: 'rgba(0, 0, 0, 0.85)', - breadCrumbFontSize: 12, - breadCrumbY: 12, - activeFill: 'rgba(0, 0, 0, 0.5)', -}; -/** - * TreemapDrillDown interaction. - */ -function TreemapDrillDown(drillDownOptions = {}) { - const { originData = [], layout } = drillDownOptions, style = __rest(drillDownOptions, ["originData", "layout"]); - const breadCrumb = (0, util_1.deepMix)({}, DEFAULT_BREADCRUMB_STYLE, style); - const breadCrumbStyle = (0, helper_1.subObject)(breadCrumb, 'breadCrumb'); - const breadCrumbActiveStyle = (0, helper_1.subObject)(breadCrumb, 'active'); - return (context) => { - const { update, setState, container, options } = context; - const plotArea = selectPlotArea(container); - const mark = options.marks[0]; - const { state } = mark; - // Create breadCrumbTextsGroup,save textSeparator、drillTexts. - const textGroup = new g_1.Group(); - plotArea.appendChild(textGroup); - // Modify the data and scale according to the path and the level of the current click, so as to achieve the effect of drilling down and drilling up and initialization. - const drillDownClick = (path, depth) => __awaiter(this, void 0, void 0, function* () { - // Clear text. - textGroup.removeChildren(); - // More path creation text. - if (depth) { - let name = ''; - let y = breadCrumbStyle.y; - let x = 0; - const textPath = []; - const maxWidth = plotArea.getBBox().width; - // Create path: 'type1 / type2 / type3' -> '/ type1 / type2 / type3'. - const drillTexts = path.map((text, index) => { - name = `${name}${text}/`; - textPath.push(text); - const drillText = new g_1.Text({ - name: name.replace(/\/$/, ''), - style: Object.assign(Object.assign({ text, - x, - // @ts-ignore - path: [...textPath], depth: index }, breadCrumbStyle), { y }), - }); - textGroup.appendChild(drillText); - x += drillText.getBBox().width; - const textSeparator = new g_1.Text({ - style: Object.assign(Object.assign({ x, text: ' / ' }, breadCrumbStyle), { y }), - }); - textGroup.appendChild(textSeparator); - x += textSeparator.getBBox().width; - /** - * Page width exceeds maximum, line feed. - * | ----maxWidth---- | - * | / tyep1 / tyep2 / type3 | - * -> - * | ----maxWidth---- | - * | / tyep1 / tyep2 | - * | / type3 | - */ - if (x > maxWidth) { - y = textGroup.getBBox().height + breadCrumbStyle.y; - x = 0; - drillText.attr({ - x, - y, - }); - x += drillText.getBBox().width; - textSeparator.attr({ - x, - y, - }); - x += textSeparator.getBBox().width; - } - if (index === (0, util_1.size)(path) - 1) { - textSeparator.remove(); - } - return drillText; - }); - // Add Active, Add TreemapDrillDown - drillTexts.forEach((item, index) => { - // Last drillText - if (index === (0, util_1.size)(drillTexts) - 1) - return; - const originalAttrs = Object.assign({}, item.attributes); - item.attr('cursor', 'pointer'); - item.addEventListener('mouseenter', () => { - item.attr(breadCrumbActiveStyle); - }); - item.addEventListener('mouseleave', () => { - item.attr(originalAttrs); - }); - item.addEventListener('click', () => { - drillDownClick((0, util_1.get)(item, ['style', 'path']), (0, util_1.get)(item, ['style', 'depth'])); - }); - }); - } - // LegendFilter interaction and treemapDrillDown clash. - (0, legendFilter_1.legendClearSetState)(container, setState); - // Update marks. - setState('treemapDrillDown', (viewOptions) => { - const { marks } = viewOptions; - // Add filter transform for every marks, - // which will skip for mark without color channel. - const strPath = path.join('/'); - const newMarks = marks.map((mark) => { - if (mark.type !== 'rect') - return mark; - let newData = originData; - if (depth) { - const filterData = originData - .filter((item) => { - const id = (0, util_1.get)(item, ['id']); - return id && (id.match(`${strPath}/`) || strPath.match(id)); - }) - .map((item) => ({ - value: item.height === 0 ? (0, util_1.get)(item, ['value']) : undefined, - name: (0, util_1.get)(item, ['id']), - })); - const { paddingLeft, paddingBottom, paddingRight } = layout; - // New drill layout for calculation x y and filtration data. - const newLayout = Object.assign(Object.assign({}, layout), { paddingTop: (layout.paddingTop || textGroup.getBBox().height + 10) / - (depth + 1), paddingLeft: paddingLeft / (depth + 1), paddingBottom: paddingBottom / (depth + 1), paddingRight: paddingRight / (depth + 1), path: (d) => d.name, layer: (d) => d.depth === depth + 1 }); - // Transform the new matrix tree data. - newData = (0, treeDataTransform_1.treeDataTransform)(filterData, newLayout, { - value: 'value', - })[0]; - } - else { - newData = originData.filter((item) => { - return item.depth === 1; - }); - } - const colorDomain = []; - newData.forEach(({ path }) => { - colorDomain.push((0, util_1.last)(path)); - }); - // TreemapDrillDown by filtering the data and scale. - return (0, util_1.deepMix)({}, mark, { - data: newData, - scale: { - color: { domain: colorDomain }, - }, - }); - }); - return Object.assign(Object.assign({}, viewOptions), { marks: newMarks }); - }); - // The second argument is to allow the legendFilter event to be re-added; the update method itself causes legend to lose the interaction event. - yield update(undefined, ['legendFilter']); - }); - // - const keyofLabel = (d) => d.attributes.key.split('-')[0]; - const keyofRect = (d) => (0, util_1.get)(d, ['__data__', 'key']); - // Elements and BreadCrumb click. - const createDrillClick = (e) => { - const item = e.target; - const { markType, nodeName, attributes } = item || {}; - if (markType !== 'rect' && nodeName !== g_1.Shape.TEXT) - return; - const key = nodeName === g_1.Shape.TEXT && (0, util_1.get)(attributes, 'isTreemapLabel') === true - ? keyofLabel(item) - : keyofRect(item); - const node = (0, util_1.find)(originData, (d) => d.id === key); - // Node height = 0 no children - if ((0, util_1.get)(node, 'height')) { - drillDownClick((0, util_1.get)(node, 'path'), (0, util_1.get)(node, 'depth')); - } - }; - // Add click drill interaction. - plotArea.addEventListener('click', createDrillClick); - // Change attributes keys. - const changeStyleKey = (0, util_1.keys)(Object.assign(Object.assign({}, state.active), state.inactive)); - const createActive = () => { - const elements = (0, utils_1.getElements)(plotArea); - elements.forEach((element) => { - const cursor = (0, util_1.get)(element, ['style', 'cursor']); - const node = (0, util_1.find)(originData, (d) => d.id === (0, util_1.get)(element, ['__data__', 'key'])); - if (cursor !== 'pointer' && (node === null || node === void 0 ? void 0 : node.height)) { - element.style.cursor = 'pointer'; - const originalAttrs = (0, util_1.pick)(element.attributes, changeStyleKey); - element.addEventListener('mouseenter', () => { - element.attr(state.active); - }); - element.addEventListener('mouseleave', () => { - element.attr((0, util_1.deepMix)(originalAttrs, state.inactive)); - }); - } - }); - }; - createActive(); - // Animate elements update, Add active. - plotArea.addEventListener('mousemove', createActive); - return () => { - textGroup.remove(); - plotArea.removeEventListener('click', createDrillClick); - plotArea.removeEventListener('mousemove', createActive); - }; - }; -} -exports.TreemapDrillDown = TreemapDrillDown; -//# sourceMappingURL=treemapDrillDown.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"../runtime":1751263816081,"../utils/selection":1751263815883,"../utils/treeDataTransform":1751263816005,"./legendFilter":1751263816132,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816145, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ElementPointMove = void 0; -const g_1 = require("@antv/g"); -const util_1 = require("@antv/util"); -const helper_1 = require("../utils/helper"); -const utils_1 = require("./utils"); -const DEFAULT_STYLE = { - pointR: 6, - pointStrokeWidth: 1, - pointStroke: '#888', - pointActiveStroke: '#f5f5f5', - pathStroke: '#888', - pathLineDash: [3, 4], - labelFontSize: 12, - labelFill: '#888', - labelStroke: '#fff', - labelLineWidth: 1, - labelY: -6, - labelX: 2, -}; -// point shape name. -const MOVE_POINT_NAME = 'movePoint'; -// Element mouseenter change style. -const elementMouseenter = (e) => { - const element = e.target; - const { markType } = element; - // Mark line. - if (markType === 'line') { - element.attr('_lineWidth', element.attr('lineWidth') || 1); - element.attr('lineWidth', element.attr('_lineWidth') + 3); - } - // Mark interval. - if (markType === 'interval') { - element.attr('_opacity', element.attr('opacity') || 1); - element.attr('opacity', 0.7 * element.attr('_opacity')); - } -}; -// Element mouseleave change style. -const elementMouseleave = (e) => { - const element = e.target; - const { markType } = element; - // Mark line. - if (markType === 'line') { - element.attr('lineWidth', element.attr('_lineWidth')); - } - // Mark interval. - if (markType === 'interval') { - element.attr('opacity', element.attr('_opacity')); - } -}; -// Get the latest overall data based on the individual data changes. -const getNewData = (newChangeData, data, encode) => { - return data.map((d) => { - const isUpdate = ['x', 'color'].reduce((v, key) => { - const field = encode[key]; - if (!field) - return v; - if (d[field] !== newChangeData[field]) - return false; - return v; - }, true); - return isUpdate ? Object.assign(Object.assign({}, d), newChangeData) : d; - }); -}; -// Find mark interval origin element data. -const getIntervalDataRatioTransformFn = (element) => { - const y = (0, util_1.get)(element, ['__data__', 'y']); - const y1 = (0, util_1.get)(element, ['__data__', 'y1']); - const v = y1 - y; - const { __data__: { data, encode, transform }, childNodes, } = element.parentNode; - const isNormalizeY = (0, util_1.find)(transform, ({ type }) => type === 'normalizeY'); - const yField = (0, util_1.get)(encode, ['y', 'field']); - const value = data[childNodes.indexOf(element)][yField]; - return (newValue, isTheta = false) => { - if (isNormalizeY || isTheta) { - return (newValue / (1 - newValue) / (v / (1 - v))) * value; - } - return newValue; - }; -}; -// Find origin path data. -const getPathDataRatioTransformFn = (element, index) => { - const v = (0, util_1.get)(element, ['__data__', 'seriesItems', index, '0', 'value']); - const i = (0, util_1.get)(element, ['__data__', 'seriesIndex', index]); - const { __data__: { data, encode, transform }, } = element.parentNode; - const isNormalizeY = (0, util_1.find)(transform, ({ type }) => type === 'normalizeY'); - const yField = (0, util_1.get)(encode, ['y', 'field']); - const value = data[i][yField]; - return (newValue) => { - if (isNormalizeY) { - if (v === 1) { - return newValue; - } - return (newValue / (1 - newValue) / (v / (1 - v))) * value; - } - return newValue; - }; -}; -// Point shape select change style. -const selectedPointsStyle = (pointsShape, selection, defaultStyle) => { - pointsShape.forEach((shape, index) => { - shape.attr('stroke', selection[1] === index - ? defaultStyle['activeStroke'] - : defaultStyle['stroke']); - }); -}; -// Create help show message shape. -const createHelpShape = (group, circle, pathStyle, labelStyle) => { - const pathShape = new g_1.Path({ - style: pathStyle, - }); - const labelShape = new g_1.Text({ - style: labelStyle, - }); - circle.appendChild(labelShape); - group.appendChild(pathShape); - return [pathShape, labelShape]; -}; -// Get color scale type. -const getColorType = (scaleColor, color) => { - const indexOf = (0, util_1.get)(scaleColor, ['options', 'range', 'indexOf']); - if (!indexOf) - return; - const i = scaleColor.options.range.indexOf(color); - return scaleColor.sortedDomain[i]; -}; -// Get the same direction new point. -const getSamePointPosition = (center, point, target) => { - const oldR = (0, utils_1.getPointsR)(center, point); - const newR = (0, utils_1.getPointsR)(center, target); - const ratio = newR / oldR; - const newX = center[0] + (point[0] - center[0]) * ratio; - const newY = center[1] + (point[1] - center[1]) * ratio; - return [newX, newY]; -}; -/** - * ElementPointMove interaction. - */ -function ElementPointMove(elementPointMoveOptions = {}) { - const { selection = [], precision = 2 } = elementPointMoveOptions, style = __rest(elementPointMoveOptions, ["selection", "precision"]); - const defaultStyle = Object.assign(Object.assign({}, DEFAULT_STYLE), (style || {})); - // Shape default style. - const pathDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'path'); - const labelDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'label'); - const pointDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'point'); - return (context, _, emitter) => { - const { update, setState, container, view, options: { marks, coordinate: coordinateOptions }, } = context; - const plotArea = (0, utils_1.selectPlotArea)(container); - let elements = (0, utils_1.getElements)(plotArea); - let newState; - let newSelection = selection; - const { transform = [], type: coordinateType } = coordinateOptions; - const isTranspose = !!(0, util_1.find)(transform, ({ type }) => type === 'transpose'); - const isPolar = coordinateType === 'polar'; - const isTheta = coordinateType === 'theta'; - const isArea = !!(0, util_1.find)(elements, ({ markType }) => markType === 'area'); - if (isArea) { - elements = elements.filter(({ markType }) => markType === 'area'); - } - // Create points - const pointsGroup = new g_1.Group({ - style: { - // Tooltip point need down. - zIndex: 2, - }, - }); - plotArea.appendChild(pointsGroup); - const selectedChange = () => { - emitter.emit('element-point:select', { - nativeEvent: true, - data: { - selection: newSelection, - }, - }); - }; - const dataChange = (changeData, data) => { - emitter.emit('element-point:moved', { - nativeEvent: true, - data: { - changeData, - data, - }, - }); - }; - // Element click change style. - const elementClick = (e) => { - const element = e.target; - newSelection = [element.parentNode.childNodes.indexOf(element)]; - selectedChange(); - createPoints(element); - }; - const elementSelect = (d) => { - const { data: { selection }, nativeEvent, } = d; - if (nativeEvent) - return; - newSelection = selection; - const element = (0, util_1.get)(elements, [newSelection === null || newSelection === void 0 ? void 0 : newSelection[0]]); - if (element) { - createPoints(element); - } - }; - // Create select element points. - const createPoints = (element) => { - const { attributes, markType, __data__: data } = element; - const { stroke: fill } = attributes; - const { points, seriesTitle, color, title, seriesX, y1 } = data; - // Transpose Currently only do mark interval; - if (isTranspose && markType !== 'interval') - return; - const { scale, coordinate } = (newState === null || newState === void 0 ? void 0 : newState.view) || view; - const { color: scaleColor, y: scaleY, x: scaleX } = scale; - const center = coordinate.getCenter(); - pointsGroup.removeChildren(); - let downPoint; - const updateView = (x, y, color, markTypes) => __awaiter(this, void 0, void 0, function* () { - setState('elementPointMove', (viewOptions) => { - var _a; - // Update marks. - const newMarks = (((_a = newState === null || newState === void 0 ? void 0 : newState.options) === null || _a === void 0 ? void 0 : _a.marks) || marks).map((mark) => { - if (!markTypes.includes(mark.type)) - return mark; - const { data, encode } = mark; - const encodeKeys = Object.keys(encode); - // Get change new one element data. - const newChangeData = encodeKeys.reduce((value, key) => { - const dataKey = encode[key]; - if (key === 'x') { - value[dataKey] = x; - } - if (key === 'y') { - value[dataKey] = y; - } - if (key === 'color') { - value[dataKey] = color; - } - return value; - }, {}); - // Get change new all data. - const newData = getNewData(newChangeData, data, encode); - dataChange(newChangeData, newData); - return (0, util_1.deepMix)({}, mark, { - data: newData, - // No need animate - animate: false, - }); - }); - return Object.assign(Object.assign({}, viewOptions), { marks: newMarks }); - }); - return yield update('elementPointMove'); - }); - if (['line', 'area'].includes(markType)) { - points.forEach((p, index) => { - const title = scaleX.invert(seriesX[index]); - // Area points have bottom point. - if (!title) - return; - const circle = new g_1.Circle({ - name: MOVE_POINT_NAME, - style: Object.assign({ cx: p[0], cy: p[1], fill }, pointDefaultStyle), - }); - const ratioTransform = getPathDataRatioTransformFn(element, index); - circle.addEventListener('mousedown', (e) => { - const oldPoint = coordinate.output([seriesX[index], 0]); - const pathLength = seriesTitle === null || seriesTitle === void 0 ? void 0 : seriesTitle.length; - container.attr('cursor', 'move'); - if (newSelection[1] !== index) { - newSelection[1] = index; - selectedChange(); - } - selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle); - const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle); - // Point move change text - const pointMousemove = (e) => { - const newCy = p[1] + e.clientY - downPoint[1]; - // Area/Radar chart. - if (isArea) { - // Radar chart. - if (isPolar) { - const newCx = p[0] + e.clientX - downPoint[0]; - const [newX, newY] = getSamePointPosition(center, oldPoint, [ - newCx, - newCy, - ]); - const [, initY] = coordinate.output([1, scaleY.output(0)]); - const [, y] = coordinate.invert([ - newX, - initY - (points[index + pathLength][1] - newY), - ]); - const nextIndex = (index + 1) % pathLength; - const lastIndex = (index - 1 + pathLength) % pathLength; - const newPath = (0, utils_1.getPointsPath)([ - points[lastIndex], - [newX, newY], - seriesTitle[nextIndex] && points[nextIndex], - ]); - labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cx', newX); - circle.attr('cy', newY); - } - else { - // Area chart. - const [, initY] = coordinate.output([1, scaleY.output(0)]); - const [, y] = coordinate.invert([ - p[0], - initY - (points[index + pathLength][1] - newCy), - ]); - const newPath = (0, utils_1.getPointsPath)([ - points[index - 1], - [p[0], newCy], - seriesTitle[index + 1] && points[index + 1], - ]); - labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cy', newCy); - } - } - else { - // Line chart. - const [, y] = coordinate.invert([p[0], newCy]); - const newPath = (0, utils_1.getPointsPath)([ - points[index - 1], - [p[0], newCy], - points[index + 1], - ]); - labelShape.attr('text', scaleY.invert(y).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cy', newCy); - } - }; - downPoint = [e.clientX, e.clientY]; - window.addEventListener('mousemove', pointMousemove); - const mouseupFn = () => __awaiter(this, void 0, void 0, function* () { - container.attr('cursor', 'default'); - window.removeEventListener('mousemove', pointMousemove); - container.removeEventListener('mouseup', mouseupFn); - if ((0, util_1.isUndefined)(labelShape.attr('text'))) - return; - const y = Number(labelShape.attr('text')); - const colorType = getColorType(scaleColor, color); - newState = yield updateView(title, y, colorType, [ - 'line', - 'area', - ]); - labelShape.remove(); - pathShape.remove(); - createPoints(element); - }); - container.addEventListener('mouseup', mouseupFn); - }); - pointsGroup.appendChild(circle); - }); - selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle); - } - else if (markType === 'interval') { - // Column chart point. - let circlePoint = [(points[0][0] + points[1][0]) / 2, points[0][1]]; - // Bar chart point. - if (isTranspose) { - circlePoint = [points[0][0], (points[0][1] + points[1][1]) / 2]; - } - else if (isTheta) { - // Pie chart point. - circlePoint = points[0]; - } - const ratioTransform = getIntervalDataRatioTransformFn(element); - const circle = new g_1.Circle({ - name: MOVE_POINT_NAME, - style: Object.assign(Object.assign({ cx: circlePoint[0], cy: circlePoint[1], fill }, pointDefaultStyle), { stroke: pointDefaultStyle['activeStroke'] }), - }); - circle.addEventListener('mousedown', (e) => { - container.attr('cursor', 'move'); - const colorType = getColorType(scaleColor, color); - const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle); - // Point move change text - const pointMousemove = (e) => { - if (isTranspose) { - // Bar chart. - const newCx = circlePoint[0] + e.clientX - downPoint[0]; - const [initX] = coordinate.output([ - scaleY.output(0), - scaleY.output(0), - ]); - const [, x] = coordinate.invert([ - initX + (newCx - points[2][0]), - circlePoint[1], - ]); - const newPath = (0, utils_1.getPointsPath)([ - [newCx, points[0][1]], - [newCx, points[1][1]], - points[2], - points[3], - ], true); - labelShape.attr('text', ratioTransform(scaleY.invert(x)).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cx', newCx); - } - else if (isTheta) { - // Pie chart. - const newCy = circlePoint[1] + e.clientY - downPoint[1]; - const newCx = circlePoint[0] + e.clientX - downPoint[0]; - const [newXOut, newYOut] = getSamePointPosition(center, [newCx, newCy], circlePoint); - const [newXIn, newYIn] = getSamePointPosition(center, [newCx, newCy], points[1]); - const lastPercent = coordinate.invert([newXOut, newYOut])[1]; - const percent = y1 - lastPercent; - if (percent < 0) - return; - const newPath = (0, utils_1.getThetaPath)(center, [[newXOut, newYOut], [newXIn, newYIn], points[2], points[3]], percent > 0.5 ? 1 : 0); - labelShape.attr('text', ratioTransform(percent, true).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cx', newXOut); - circle.attr('cy', newYOut); - } - else { - // Column chart. - const newCy = circlePoint[1] + e.clientY - downPoint[1]; - const [, initY] = coordinate.output([1, scaleY.output(0)]); - const [, y] = coordinate.invert([ - circlePoint[0], - initY - (points[2][1] - newCy), - ]); - const newPath = (0, utils_1.getPointsPath)([ - [points[0][0], newCy], - [points[1][0], newCy], - points[2], - points[3], - ], true); - labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision)); - pathShape.attr('d', newPath); - circle.attr('cy', newCy); - } - }; - downPoint = [e.clientX, e.clientY]; - window.addEventListener('mousemove', pointMousemove); - // Change mosueup change data and update 、clear shape. - const mouseupFn = () => __awaiter(this, void 0, void 0, function* () { - container.attr('cursor', 'default'); - container.removeEventListener('mouseup', mouseupFn); - window.removeEventListener('mousemove', pointMousemove); - if ((0, util_1.isUndefined)(labelShape.attr('text'))) - return; - const y = Number(labelShape.attr('text')); - newState = yield updateView(title, y, colorType, [markType]); - labelShape.remove(); - pathShape.remove(); - createPoints(element); - }); - container.addEventListener('mouseup', mouseupFn); - }); - pointsGroup.appendChild(circle); - } - }; - // Add EventListener. - elements.forEach((element, index) => { - if (newSelection[0] === index) { - createPoints(element); - } - element.addEventListener('click', elementClick); - element.addEventListener('mouseenter', elementMouseenter); - element.addEventListener('mouseleave', elementMouseleave); - }); - const rootClick = (e) => { - const element = e === null || e === void 0 ? void 0 : e.target; - if (!element || - (element.name !== MOVE_POINT_NAME && !elements.includes(element))) { - newSelection = []; - selectedChange(); - pointsGroup.removeChildren(); - } - }; - emitter.on('element-point:select', elementSelect); - emitter.on('element-point:unselect', rootClick); - container.addEventListener('mousedown', rootClick); - // Remove EventListener. - return () => { - pointsGroup.remove(); - emitter.off('element-point:select', elementSelect); - emitter.off('element-point:unselect', rootClick); - container.removeEventListener('mousedown', rootClick); - elements.forEach((element) => { - element.removeEventListener('click', elementClick); - element.removeEventListener('mouseenter', elementMouseenter); - element.removeEventListener('mouseleave', elementMouseleave); - }); - }; - }; -} -exports.ElementPointMove = ElementPointMove; -//# sourceMappingURL=elementPointMove.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829,"./utils":1751263816080}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816146, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EMA = exports.Log = exports.Venn = exports.KDE = exports.Slice = exports.Join = exports.WordCloud = exports.Arc = exports.Sankey = exports.Tree = exports.Cluster = exports.Map = exports.Custom = exports.Inline = exports.SortBy = exports.Rename = exports.Pick = exports.Sort = exports.Filter = exports.Fold = exports.Fetch = void 0; -var fetch_1 = require("./fetch"); -Object.defineProperty(exports, "Fetch", { enumerable: true, get: function () { return fetch_1.Fetch; } }); -var fold_1 = require("./fold"); -Object.defineProperty(exports, "Fold", { enumerable: true, get: function () { return fold_1.Fold; } }); -var filter_1 = require("./filter"); -Object.defineProperty(exports, "Filter", { enumerable: true, get: function () { return filter_1.Filter; } }); -var sort_1 = require("./sort"); -Object.defineProperty(exports, "Sort", { enumerable: true, get: function () { return sort_1.Sort; } }); -var pick_1 = require("./pick"); -Object.defineProperty(exports, "Pick", { enumerable: true, get: function () { return pick_1.Pick; } }); -var rename_1 = require("./rename"); -Object.defineProperty(exports, "Rename", { enumerable: true, get: function () { return rename_1.Rename; } }); -var sortBy_1 = require("./sortBy"); -Object.defineProperty(exports, "SortBy", { enumerable: true, get: function () { return sortBy_1.SortBy; } }); -var inline_1 = require("./inline"); -Object.defineProperty(exports, "Inline", { enumerable: true, get: function () { return inline_1.Inline; } }); -var custom_1 = require("./custom"); -Object.defineProperty(exports, "Custom", { enumerable: true, get: function () { return custom_1.Custom; } }); -var map_1 = require("./map"); -Object.defineProperty(exports, "Map", { enumerable: true, get: function () { return map_1.Map; } }); -var cluster_1 = require("./cluster"); -Object.defineProperty(exports, "Cluster", { enumerable: true, get: function () { return cluster_1.Cluster; } }); -var tree_1 = require("./tree"); -Object.defineProperty(exports, "Tree", { enumerable: true, get: function () { return tree_1.Tree; } }); -var sankey_1 = require("./sankey"); -Object.defineProperty(exports, "Sankey", { enumerable: true, get: function () { return sankey_1.Sankey; } }); -var arc_1 = require("./arc"); -Object.defineProperty(exports, "Arc", { enumerable: true, get: function () { return arc_1.Arc; } }); -var wordCloud_1 = require("./wordCloud"); -Object.defineProperty(exports, "WordCloud", { enumerable: true, get: function () { return wordCloud_1.WordCloud; } }); -var join_1 = require("./join"); -Object.defineProperty(exports, "Join", { enumerable: true, get: function () { return join_1.Join; } }); -var slice_1 = require("./slice"); -Object.defineProperty(exports, "Slice", { enumerable: true, get: function () { return slice_1.Slice; } }); -var kde_1 = require("./kde"); -Object.defineProperty(exports, "KDE", { enumerable: true, get: function () { return kde_1.KDE; } }); -var venn_1 = require("./venn"); -Object.defineProperty(exports, "Venn", { enumerable: true, get: function () { return venn_1.Venn; } }); -var log_1 = require("./log"); -Object.defineProperty(exports, "Log", { enumerable: true, get: function () { return log_1.Log; } }); -var ema_1 = require("./ema"); -Object.defineProperty(exports, "EMA", { enumerable: true, get: function () { return ema_1.EMA; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./fetch":1751263816147,"./fold":1751263816148,"./filter":1751263816149,"./sort":1751263816150,"./pick":1751263816151,"./rename":1751263816152,"./sortBy":1751263816153,"./inline":1751263816155,"./custom":1751263816156,"./map":1751263816157,"./cluster":1751263816012,"./tree":1751263816011,"./sankey":1751263815992,"./arc":1751263815999,"./wordCloud":1751263816158,"./join":1751263816161,"./slice":1751263816162,"./kde":1751263816163,"./venn":1751263816164,"./log":1751263816176,"./ema":1751263816177}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816147, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Fetch = void 0; -const d3_dsv_1 = require("@antv/vendor/d3-dsv"); -const helper_1 = require("../utils/helper"); -const Fetch = (options) => { - const { value, format = value.split('.').pop(), delimiter = ',', autoType = true, } = options; - return () => __awaiter(void 0, void 0, void 0, function* () { - const response = yield fetch(value); - if (format === 'csv') { - // @see: https://github.com/d3/d3-dsv#dsv_parse - const str = yield response.text(); - return (0, d3_dsv_1.dsvFormat)(delimiter).parse(str, autoType ? d3_dsv_1.autoType : helper_1.identity); - } - else if (format === 'json') { - return yield response.json(); - } - throw new Error(`Unknown format: ${format}.`); - }); -}; -exports.Fetch = Fetch; -exports.Fetch.props = {}; -//# sourceMappingURL=fetch.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816148, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Fold = exports.isEmpty = void 0; -function isEmpty(obj) { - return !obj || Object.keys(obj).length === 0; -} -exports.isEmpty = isEmpty; -/** - * Collapses (or “folds”) one or more data fields into two - * properties: `key` (contains the original data field name) - * and `value` (contains the original data value.) - */ -const Fold = (options) => { - const { fields, key = 'key', value = 'value' } = options; - return (data) => { - if (isEmpty(fields)) - return data; - return data.flatMap((d) => fields.map((f) => (Object.assign(Object.assign({}, d), { [key]: f, [value]: d[f] })))); - }; -}; -exports.Fold = Fold; -exports.Fold.props = {}; -//# sourceMappingURL=fold.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816149, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Filter = exports.defined = void 0; -function defined(d) { - return d !== undefined && d !== null && !Number.isNaN(d); -} -exports.defined = defined; -/** - * Filter data by specified fields and filter callback for each fields. - * It saves datum with every fields defined by default. - */ -const Filter = (options) => { - const { callback = defined } = options; - return (data) => data.filter(callback); -}; -exports.Filter = Filter; -exports.Filter.props = {}; -//# sourceMappingURL=filter.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816150, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Sort = exports.defined = void 0; -function defined(d) { - return d !== undefined && d !== null && !Number.isNaN(d); -} -exports.defined = defined; -/** - * Sort data similar with Array.prototypo.sort. - */ -const Sort = (options) => { - const { callback } = options; - return (data) => (Array.isArray(data) ? [...data].sort(callback) : data); -}; -exports.Sort = Sort; -exports.Sort.props = {}; -//# sourceMappingURL=sort.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816151, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Pick = void 0; -function pick(v, fields = []) { - return fields.reduce((datum, field) => { - // Pick the data deeply. - if (field in v) { - datum[field] = v[field]; - } - return datum; - }, {}); -} -/** - * Immutable data pick by specified fields. - */ -const Pick = (options) => { - const { fields } = options; - return (data) => data.map((d) => pick(d, fields)); -}; -exports.Pick = Pick; -exports.Pick.props = {}; -//# sourceMappingURL=pick.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816152, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Rename = exports.isEmpty = void 0; -function isEmpty(obj) { - return Object.keys(obj).length === 0; -} -exports.isEmpty = isEmpty; -/** - * Immutable data rename by specified fields. - */ -const Rename = (options) => { - return (data) => { - if (!options || isEmpty(options)) - return data; - const rename = (v) => Object.entries(v).reduce((datum, [key, value]) => ((datum[options[key] || key] = value), datum), {}); - return data.map(rename); - }; -}; -exports.Rename = Rename; -exports.Rename.props = {}; -//# sourceMappingURL=rename.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816153, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SortBy = void 0; -const fields_1 = require("./utils/fields"); -/** - * Immutable data sort by specified fields. - */ -const SortBy = (options) => { - const { fields: F = [] } = options; - const normalizedF = (0, fields_1.normalizeFields)(F, true); - return (data) => { - const comparator = (a, b) => normalizedF.reduce((ret, [field, order = true]) => { - if (ret !== 0) { - return ret; - } - if (order) { - return a[field] < b[field] ? -1 : +(a[field] !== b[field]); - } - else { - return a[field] > b[field] ? -1 : +(a[field] !== b[field]); - } - }, 0); - return [...data].sort(comparator); - }; -}; -exports.SortBy = SortBy; -exports.SortBy.props = {}; -//# sourceMappingURL=sortBy.js.map -}, function(modId) { var map = {"./utils/fields":1751263816154}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816154, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.normalizeFields = void 0; -/** - * - * @description Converts a random format array into a regular two-dimensional array - * @example ['a', 'b', ['c', value]] => [['a', defaultValue], ['b', defaultValue], ['c', value]] - */ -function normalizeFields(fields, defaultValue) { - return fields.map((d) => { - if (Array.isArray(d)) { - const [field, value = defaultValue] = d; - return [field, value]; - } - return [d, defaultValue]; - }); -} -exports.normalizeFields = normalizeFields; -//# sourceMappingURL=fields.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816155, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Inline = void 0; -const Inline = (options) => { - const { value } = options; - return () => value; -}; -exports.Inline = Inline; -exports.Inline.props = {}; -//# sourceMappingURL=inline.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816156, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Custom = void 0; -const helper_1 = require("../utils/helper"); -/** - * Connector transfom by function. - */ -const Custom = (options) => { - const { callback = helper_1.identity } = options; - return (data) => callback(data); -}; -exports.Custom = Custom; -exports.Custom.props = {}; -//# sourceMappingURL=custom.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816157, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Map = void 0; -const helper_1 = require("../utils/helper"); -/** - * Map transform by function. - */ -const Map = (options) => { - const { callback = helper_1.identity } = options; - return (data) => (Array.isArray(data) ? data.map(callback) : data); -}; -exports.Map = Map; -exports.Map.props = {}; -//# sourceMappingURL=map.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816158, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WordCloud = exports.normalizeFontSize = exports.processImageMask = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const flow_1 = require("./utils/flow"); -const d3_cloud_1 = require("./utils/d3-cloud"); -const DEFAULT_OPTIONS = { - fontSize: [20, 60], - font: 'Impact', - padding: 2, - rotate: function () { - return (~~(Math.random() * 6) - 3) * 30; - }, -}; -/** - * Process the image mask of wordCloud. - * @param img - * @returns - */ -function processImageMask(img) { - return new Promise((res, rej) => { - if (img instanceof HTMLImageElement) { - res(img); - return; - } - if (typeof img === 'string') { - const image = new Image(); - image.crossOrigin = 'anonymous'; - image.src = img; - image.onload = () => res(image); - image.onerror = () => { - console.error(`'image ${img} load failed !!!'`); - rej(); - }; - return; - } - rej(); - }); -} -exports.processImageMask = processImageMask; -/** - * normalize fontSize range to d3-cloud fontSize function. - * @param fontSize - * @param range - * @returns - */ -function normalizeFontSize(fontSize, range) { - if (typeof fontSize === 'function') - return fontSize; - if (Array.isArray(fontSize)) { - const [fMin, fMax] = fontSize; - if (!range) - return () => (fMax + fMin) / 2; - const [min, max] = range; - if (max === min) - return () => (fMax + fMin) / 2; - return ({ value }) => ((fMax - fMin) / (max - min)) * (value - min) + fMin; - } - return () => fontSize; -} -exports.normalizeFontSize = normalizeFontSize; -const WordCloud = (options, context) => { - return (data) => __awaiter(void 0, void 0, void 0, function* () { - const cloudOptions = Object.assign({}, DEFAULT_OPTIONS, options, { - canvas: context.createCanvas, - }); - const layout = (0, d3_cloud_1.tagCloud)(); - yield (0, flow_1.flow)(layout, cloudOptions) - .set('fontSize', (v) => { - const arr = data.map((d) => d.value); - return normalizeFontSize(v, [(0, d3_array_1.min)(arr), (0, d3_array_1.max)(arr)]); - }) - .set('font') - .set('fontStyle') - .set('fontWeight') - .set('padding') - .set('rotate') - .set('size') - .set('spiral') - .set('timeInterval') - .set('random') - .set('text') - .set('on') - .set('canvas') - .setAsync('imageMask', processImageMask, layout.createMask); - layout.words([...data]); - const result = layout.start(); - const [cw, ch] = cloudOptions.size; - const defaultBounds = [ - { x: 0, y: 0 }, - { x: cw, y: ch }, - ]; - const { _bounds: bounds = defaultBounds, _tags, hasImage } = result; - const tags = _tags.map((_a) => { - var { x, y, font } = _a, rest = __rest(_a, ["x", "y", "font"]); - return (Object.assign(Object.assign({}, rest), { x: x + cw / 2, y: y + ch / 2, fontFamily: font })); - }); - // Append two data to replace the corner of top-left and bottom-right, avoid calculate the actual bounds will occur some error. - const [{ x: tlx, y: tly }, { x: brx, y: bry }] = bounds; - const invisibleText = { text: '', value: 0, opacity: 0, fontSize: 0 }; - tags.push(Object.assign(Object.assign({}, invisibleText), { x: hasImage ? 0 : tlx, y: hasImage ? 0 : tly }), Object.assign(Object.assign({}, invisibleText), { x: hasImage ? cw : brx, y: hasImage ? ch : bry })); - return tags; - }); -}; -exports.WordCloud = WordCloud; -exports.WordCloud.props = {}; -//# sourceMappingURL=wordCloud.js.map -}, function(modId) { var map = {"./utils/flow":1751263816159,"./utils/d3-cloud":1751263816160}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816159, function(require, module, exports) { - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.flow = void 0; -/** - * @todo Combine with the `Container` util - */ -function flow(target, source) { - return { - set(key, normalize, callback) { - if (source[key] === undefined) - return this; - const value = normalize ? normalize.call(null, source[key]) : source[key]; - if (callback) - callback.call(null, value); - else if (typeof target[key] === 'function') - target[key](value); - else - target[key] = value; - return this; - }, - setAsync(key, normalize, callback) { - return __awaiter(this, void 0, void 0, function* () { - if (source[key] === undefined) - return this; - const value = normalize - ? yield normalize.call(null, source[key]) - : source[key]; - if (callback) - callback.call(null, value); - else if (typeof target[key] === 'function') - target[key](value); - else - target[key] = value; - return this; - }); - }, - }; -} -exports.flow = flow; -//# sourceMappingURL=flow.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816160, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.tagCloud = void 0; -const cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11; -function cloudText(d) { - return d.text; -} -function cloudFont() { - return 'serif'; -} -function cloudFontNormal() { - return 'normal'; -} -function cloudFontSize(d) { - return d.value; -} -function cloudRotate() { - return ~~(Math.random() * 2) * 90; -} -function cloudPadding() { - return 1; -} -function cloudDispatch() { - return; -} -// Fetches a monochrome sprite bitmap for the specified text. -// Load in batches for speed. -function cloudSprite(contextAndRatio, d, data, di) { - if (d.sprite) - return; - const c = contextAndRatio.context, ratio = contextAndRatio.ratio; - c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); - let x = 0, y = 0, maxh = 0; - const n = data.length; - --di; - while (++di < n) { - d = data[di]; - c.save(); - c.font = - d.style + - ' ' + - d.weight + - ' ' + - ~~((d.size + 1) / ratio) + - 'px ' + - d.font; - let w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1; - if (d.rotate) { - const sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr; - w = - ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5; - h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); - } - else { - w = ((w + 0x1f) >> 5) << 5; - } - if (h > maxh) - maxh = h; - if (x + w >= cw << 5) { - x = 0; - y += maxh; - maxh = 0; - } - if (y + h >= ch) - break; - c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); - if (d.rotate) - c.rotate(d.rotate * cloudRadians); - c.fillText(d.text, 0, 0); - if (d.padding) { - c.lineWidth = 2 * d.padding; - c.strokeText(d.text, 0, 0); - } - c.restore(); - d.width = w; - d.height = h; - d.xoff = x; - d.yoff = y; - d.x1 = w >> 1; - d.y1 = h >> 1; - d.x0 = -d.x1; - d.y0 = -d.y1; - d.hasText = true; - x += w; - } - const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = []; - while (--di >= 0) { - d = data[di]; - if (!d.hasText) - continue; - const w = d.width, w32 = w >> 5; - let h = d.y1 - d.y0; - // Zero the buffer - for (let i = 0; i < h * w32; i++) - sprite[i] = 0; - x = d.xoff; - if (x == null) - return; - y = d.yoff; - let seen = 0, seenRow = -1; - for (let j = 0; j < h; j++) { - for (let i = 0; i < w; i++) { - const k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] - ? 1 << (31 - (i % 32)) - : 0; - sprite[k] |= m; - seen |= m; - } - if (seen) - seenRow = j; - else { - d.y0++; - h--; - j--; - y++; - } - } - d.y1 = d.y0 + seenRow; - d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); - } -} -// Use mask-based collision detection. -function cloudCollide(tag, board, sw) { - sw >>= 5; - const sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0; - let x = (tag.y + tag.y0) * sw + (lx >> 5), last; - for (let j = 0; j < h; j++) { - last = 0; - for (let i = 0; i <= w; i++) { - if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & - board[x + i]) - return true; - } - x += sw; - } - return false; -} -function cloudBounds(bounds, d) { - const b0 = bounds[0], b1 = bounds[1]; - if (d.x + d.x0 < b0.x) - b0.x = d.x + d.x0; - if (d.y + d.y0 < b0.y) - b0.y = d.y + d.y0; - if (d.x + d.x1 > b1.x) - b1.x = d.x + d.x1; - if (d.y + d.y1 > b1.y) - b1.y = d.y + d.y1; -} -function collideRects(a, b) { - return (a.x + a.x1 > b[0].x && - a.x + a.x0 < b[1].x && - a.y + a.y1 > b[0].y && - a.y + a.y0 < b[1].y); -} -function archimedeanSpiral(size) { - const e = size[0] / size[1]; - return function (t) { - return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)]; - }; -} -function rectangularSpiral(size) { - const dy = 4, dx = (dy * size[0]) / size[1]; - let x = 0, y = 0; - return function (t) { - const sign = t < 0 ? -1 : 1; - // See triangular numbers: T_n = n * (n + 1) / 2. - switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) { - case 0: - x += dx; - break; - case 1: - y += dy; - break; - case 2: - x -= dx; - break; - default: - y -= dy; - break; - } - return [x, y]; - }; -} -// TODO reuse arrays? -function zeroArray(n) { - const a = []; - let i = -1; - while (++i < n) - a[i] = 0; - return a; -} -function cloudCanvas() { - return document.createElement('canvas'); -} -function functor(d) { - return typeof d === 'function' - ? d - : function () { - return d; - }; -} -const spirals = { - archimedean: archimedeanSpiral, - rectangular: rectangularSpiral, -}; -function tagCloud() { - let size = [256, 256], text = cloudText, font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, random = Math.random, event = cloudDispatch, words = [], timer = null, timeInterval = Infinity, canvas = cloudCanvas; - const fontStyle = cloudFontNormal; - const cloud = {}; - cloud.start = function () { - const [width, height] = size; - const contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words - .map(function (d, i, data) { - d.text = text.call(this, d, i, data); - d.font = font.call(this, d, i, data); - d.style = fontStyle.call(this, d, i, data); - d.weight = fontWeight.call(this, d, i, data); - d.rotate = rotate.call(this, d, i, data); - d.size = ~~fontSize.call(this, d, i, data); - d.padding = padding.call(this, d, i, data); - return d; - }) - .sort(function (a, b) { - return b.size - a.size; - }); - let i = -1, bounds = !cloud.board - ? undefined - : [ - { - x: 0, - y: 0, - }, - { - x: width, - y: height, - }, - ]; - if (timer) - clearInterval(timer); - timer = setInterval(step, 0); - step(); - function step() { - const start = Date.now(); - while (Date.now() - start < timeInterval && ++i < n) { - const d = data[i]; - d.x = (width * (random() + 0.5)) >> 1; - d.y = (height * (random() + 0.5)) >> 1; - cloudSprite(contextAndRatio, d, data, i); - if (d.hasText && place(board, d, bounds)) { - event.call(null, 'word', { cloud, word: d }); - tags.push(d); - if (bounds) { - if (!cloud.hasImage) { - // update bounds if image mask not set - cloudBounds(bounds, d); - } - } - else { - bounds = [ - { x: d.x + d.x0, y: d.y + d.y0 }, - { x: d.x + d.x1, y: d.y + d.y1 }, - ]; - } - // Temporary hack - d.x -= size[0] >> 1; - d.y -= size[1] >> 1; - } - } - cloud._tags = tags; - cloud._bounds = bounds; - if (i >= n) { - cloud.stop(); - event.call(null, 'end', { cloud, words: tags, bounds }); - } - } - return cloud; - }; - cloud.stop = function () { - if (timer) { - clearInterval(timer); - timer = null; - } - return cloud; - }; - function getContext(canvas) { - canvas.width = canvas.height = 1; - const ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2); - canvas.width = (cw << 5) / ratio; - canvas.height = ch / ratio; - const context = canvas.getContext('2d'); - context.fillStyle = context.strokeStyle = 'red'; - context.textAlign = 'center'; - context.textBaseline = 'middle'; - return { context, ratio }; - } - function place(board, tag, bounds) { - // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }], - const startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1; - let dxdy, t = -dt, dx, dy; - while ((dxdy = s((t += dt)))) { - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) - break; - tag.x = startX + dx; - tag.y = startY + dy; - if (tag.x + tag.x0 < 0 || - tag.y + tag.y0 < 0 || - tag.x + tag.x1 > size[0] || - tag.y + tag.y1 > size[1]) - continue; - // TODO only check for collisions within current bounds. - if (!bounds || !cloudCollide(tag, board, size[0])) { - if (!bounds || collideRects(tag, bounds)) { - const sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0; - let last, x = (tag.y + tag.y0) * sw + (lx >> 5); - for (let j = 0; j < h; j++) { - last = 0; - for (let i = 0; i <= w; i++) { - board[x + i] |= - (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); - } - x += sw; - } - delete tag.sprite; - return true; - } - } - } - return false; - } - cloud.createMask = (img) => { - const can = document.createElement('canvas'); - const [width, height] = size; - // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错 - if (!width || !height) { - return; - } - const w32 = width >> 5; - const board = zeroArray((width >> 5) * height); - can.width = width; - can.height = height; - const cxt = can.getContext('2d'); - cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height); - const imageData = cxt.getImageData(0, 0, width, height).data; - for (let j = 0; j < height; j++) { - for (let i = 0; i < width; i++) { - const k = w32 * j + (i >> 5); - const tmp = (j * width + i) << 2; - const flag = imageData[tmp] >= 250 && - imageData[tmp + 1] >= 250 && - imageData[tmp + 2] >= 250; - const m = flag ? 1 << (31 - (i % 32)) : 0; - board[k] |= m; - } - } - cloud.board = board; - cloud.hasImage = true; - }; - cloud.timeInterval = function (_) { - timeInterval = _ == null ? Infinity : _; - }; - cloud.words = function (_) { - words = _; - }; - cloud.size = function (_ = []) { - size = [+_[0], +_[1]]; - }; - cloud.text = function (_) { - text = functor(_); - }; - cloud.font = function (_) { - font = functor(_); - }; - cloud.fontWeight = function (_) { - fontWeight = functor(_); - }; - cloud.rotate = function (_) { - rotate = functor(_); - }; - cloud.canvas = function (_) { - canvas = functor(_); - }; - cloud.spiral = function (_) { - spiral = spirals[_] || _; - }; - cloud.fontSize = function (_) { - fontSize = functor(_); - }; - cloud.padding = function (_) { - padding = functor(_); - }; - cloud.random = function (_) { - random = functor(_); - }; - cloud.on = function (_) { - event = functor(_); - }; - return cloud; -} -exports.tagCloud = tagCloud; -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816161, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Join = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -function field(key) { - return typeof key === 'string' ? (d) => d[key] : key; -} -/** - * Join data with another dataset by SQL style. - */ -const Join = (options) => { - // const { fromKey, from, key, unknown = NaN, ...rest } = options; - const { join, on, select = [], as = select, unknown = NaN } = options; - const [key, fromKey] = on; - const fk = field(fromKey); - const k = field(key); - const keyData = (0, d3_array_1.rollup)(join, ([d]) => d, // Get the first matched. - (d) => fk(d)); - return (data) => data.map((d) => { - const source = keyData.get(k(d)); - return Object.assign(Object.assign({}, d), select.reduce((prev, key, idx) => ((prev[as[idx]] = source ? source[key] : unknown), prev), {})); - }); -}; -exports.Join = Join; -exports.Join.props = {}; -//# sourceMappingURL=join.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816162, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Slice = void 0; -/** - * Slice data between `start` ~ `end`. - * Same with https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice - */ -const Slice = (options) => { - const { start, end } = options; - return (data) => data.slice(start, end); -}; -exports.Slice = Slice; -exports.Slice.props = {}; -//# sourceMappingURL=slice.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816163, function(require, module, exports) { - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.KDE = exports.defined = void 0; -const pdfast_1 = __importDefault(require("pdfast")); -const d3_array_1 = require("@antv/vendor/d3-array"); -function defined(d) { - return d !== undefined && d !== null && !Number.isNaN(d); -} -exports.defined = defined; -/** - * Kernel Density Estimation base on [pdfast](https://www.npmjs.com/package/pdfast), - * generating probability density function (pdf) using triangular kernel, - * optimized to run in O(N + K). - */ -const KDE = (options) => { - const { field, groupBy, as = ['y', 'size'], min, max, size = 10, width, } = options; - const [yField, sizeField] = as; - return (data) => { - const gs = Array.from((0, d3_array_1.group)(data, (d) => groupBy.map((gb) => d[gb]).join('-')).values()); - return gs.map((g) => { - const pdfResult = pdfast_1.default.create(g.map((i) => i[field]), { - min, - max, - size, - width, - }); - const _y = pdfResult.map((result) => result.x); - const _size = pdfResult.map((result) => result.y); - return Object.assign(Object.assign({}, g[0]), { [yField]: _y, [sizeField]: _size }); - }); - }; -}; -exports.KDE = KDE; -exports.KDE.props = {}; -//# sourceMappingURL=kde.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816164, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Venn = void 0; -const venn_1 = require("./utils/venn"); -/** - * Layout venn data, get the path string for each set. - */ -const Venn = (options) => { - const { sets = 'sets', size = 'size', as = ['key', 'path'], padding = 0, } = options; - const [key, path] = as; - return (data) => { - // Transform the data, venn layout use `sets` and `size` field. - const vennData = data.map((d) => (Object.assign(Object.assign({}, d), { sets: d[sets], size: d[size], [key]: d.sets.join('&') }))); - // Sort data, avoid data occlusion. - vennData.sort((a, b) => a.sets.length - b.sets.length); - // Layout venn data. - const solution = (0, venn_1.venn)(vennData); - let circles; - return vennData.map((datum) => { - const setsValue = datum[sets]; - const pathFunc = ({ width, height }) => { - circles = circles - ? circles - : (0, venn_1.scaleSolution)(solution, width, height, padding); - const setCircles = setsValue.map((set) => circles[set]); - let p = (0, venn_1.intersectionAreaPath)(setCircles); - // Close the path for event picker. - if (!/[zZ]$/.test(p)) - p += ' Z'; - return p; - }; - return Object.assign(Object.assign({}, datum), { [path]: pathFunc }); - }); - }; -}; -exports.Venn = Venn; -exports.Venn.props = {}; -//# sourceMappingURL=venn.js.map -}, function(modId) { var map = {"./utils/venn":1751263816165}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816165, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.intersectionAreaPath = exports.venn = exports.scaleSolution = void 0; -/** - * Code from https://github.com/benfred/venn.js/blob/master/src/. - */ -var layout_1 = require("./layout"); -Object.defineProperty(exports, "scaleSolution", { enumerable: true, get: function () { return layout_1.scaleSolution; } }); -Object.defineProperty(exports, "venn", { enumerable: true, get: function () { return layout_1.venn; } }); -var diagram_1 = require("./diagram"); -Object.defineProperty(exports, "intersectionAreaPath", { enumerable: true, get: function () { return diagram_1.intersectionAreaPath; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./layout":1751263816166,"./diagram":1751263816175}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816166, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.scaleSolution = exports.normalizeSolution = exports.disjointCluster = exports.lossFunction = exports.greedyLayout = exports.constrainedMDSLayout = exports.bestInitialLayout = exports.getDistanceMatrices = exports.distanceFromIntersectArea = exports.venn = void 0; -const fmin_1 = require("./fmin"); -const circleintersection_1 = require("./circleintersection"); -/** given a list of set objects, and their corresponding overlaps. -updates the (x, y, radius) attribute on each set such that their positions -roughly correspond to the desired overlaps */ -function venn(areas, parameters) { - parameters = parameters || {}; - parameters.maxIterations = parameters.maxIterations || 500; - const initialLayout = parameters.initialLayout || bestInitialLayout; - const loss = parameters.lossFunction || lossFunction; - // add in missing pairwise areas as having 0 size - areas = addMissingAreas(areas); - // initial layout is done greedily - const circles = initialLayout(areas, parameters); - // transform x/y coordinates to a vector to optimize - const initial = [], setids = []; - let setid; - for (setid in circles) { - // eslint-disable-next-line - if (circles.hasOwnProperty(setid)) { - initial.push(circles[setid].x); - initial.push(circles[setid].y); - setids.push(setid); - } - } - // optimize initial layout from our loss function - const solution = (0, fmin_1.nelderMead)(function (values) { - const current = {}; - for (let i = 0; i < setids.length; ++i) { - const setid = setids[i]; - current[setid] = { - x: values[2 * i], - y: values[2 * i + 1], - radius: circles[setid].radius, - }; - } - return loss(current, areas); - }, initial, parameters); - // transform solution vector back to x/y points - const positions = solution.x; - for (let i = 0; i < setids.length; ++i) { - setid = setids[i]; - circles[setid].x = positions[2 * i]; - circles[setid].y = positions[2 * i + 1]; - } - return circles; -} -exports.venn = venn; -const SMALL = 1e-10; -/** Returns the distance necessary for two circles of radius r1 + r2 to -have the overlap area 'overlap' */ -function distanceFromIntersectArea(r1, r2, overlap) { - // handle complete overlapped circles - if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) { - return Math.abs(r1 - r2); - } - return (0, fmin_1.bisect)(function (distance) { - return (0, circleintersection_1.circleOverlap)(r1, r2, distance) - overlap; - }, 0, r1 + r2); -} -exports.distanceFromIntersectArea = distanceFromIntersectArea; -/** Missing pair-wise intersection area data can cause problems: - treating as an unknown means that sets will be laid out overlapping, - which isn't what people expect. To reflect that we want disjoint sets - here, set the overlap to 0 for all missing pairwise set intersections */ -function addMissingAreas(areas) { - areas = areas.slice(); - // two circle intersections that aren't defined - const ids = [], pairs = {}; - let i, j, a, b; - for (i = 0; i < areas.length; ++i) { - const area = areas[i]; - if (area.sets.length == 1) { - ids.push(area.sets[0]); - } - else if (area.sets.length == 2) { - a = area.sets[0]; - b = area.sets[1]; - // @ts-ignore - pairs[[a, b]] = true; - // @ts-ignore - pairs[[b, a]] = true; - } - } - ids.sort((a, b) => { - return a > b ? 1 : -1; - }); - for (i = 0; i < ids.length; ++i) { - a = ids[i]; - for (j = i + 1; j < ids.length; ++j) { - b = ids[j]; - // @ts-ignore - if (!([a, b] in pairs)) { - areas.push({ sets: [a, b], size: 0 }); - } - } - } - return areas; -} -/// Returns two matrices, one of the euclidean distances between the sets -/// and the other indicating if there are subset or disjoint set relationships -function getDistanceMatrices(areas, sets, setids) { - // initialize an empty distance matrix between all the points - const distances = (0, fmin_1.zerosM)(sets.length, sets.length), constraints = (0, fmin_1.zerosM)(sets.length, sets.length); - // compute required distances between all the sets such that - // the areas match - areas - .filter(function (x) { - return x.sets.length == 2; - }) - .map(function (current) { - const left = setids[current.sets[0]], right = setids[current.sets[1]], r1 = Math.sqrt(sets[left].size / Math.PI), r2 = Math.sqrt(sets[right].size / Math.PI), distance = distanceFromIntersectArea(r1, r2, current.size); - distances[left][right] = distances[right][left] = distance; - // also update constraints to indicate if its a subset or disjoint - // relationship - let c = 0; - if (current.size + 1e-10 >= Math.min(sets[left].size, sets[right].size)) { - c = 1; - } - else if (current.size <= 1e-10) { - c = -1; - } - constraints[left][right] = constraints[right][left] = c; - }); - return { distances: distances, constraints: constraints }; -} -exports.getDistanceMatrices = getDistanceMatrices; -/// computes the gradient and loss simulatenously for our constrained MDS optimizer -function constrainedMDSGradient(x, fxprime, distances, constraints) { - let loss = 0, i; - for (i = 0; i < fxprime.length; ++i) { - fxprime[i] = 0; - } - for (i = 0; i < distances.length; ++i) { - const xi = x[2 * i], yi = x[2 * i + 1]; - for (let j = i + 1; j < distances.length; ++j) { - const xj = x[2 * j], yj = x[2 * j + 1], dij = distances[i][j], constraint = constraints[i][j]; - const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance = Math.sqrt(squaredDistance), delta = squaredDistance - dij * dij; - if ((constraint > 0 && distance <= dij) || - (constraint < 0 && distance >= dij)) { - continue; - } - loss += 2 * delta * delta; - fxprime[2 * i] += 4 * delta * (xi - xj); - fxprime[2 * i + 1] += 4 * delta * (yi - yj); - fxprime[2 * j] += 4 * delta * (xj - xi); - fxprime[2 * j + 1] += 4 * delta * (yj - yi); - } - } - return loss; -} -/// takes the best working variant of either constrained MDS or greedy -function bestInitialLayout(areas, params) { - let initial = greedyLayout(areas, params); - const loss = params.lossFunction || lossFunction; - // greedylayout is sufficient for all 2/3 circle cases. try out - // constrained MDS for higher order problems, take its output - // if it outperforms. (greedy is aesthetically better on 2/3 circles - // since it axis aligns) - if (areas.length >= 8) { - const constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas); - if (constrainedLoss + 1e-8 < greedyLoss) { - initial = constrained; - } - } - return initial; -} -exports.bestInitialLayout = bestInitialLayout; -/// use the constrained MDS variant to generate an initial layout -function constrainedMDSLayout(areas, params) { - params = params || {}; - const restarts = params.restarts || 10; - // bidirectionally map sets to a rowid (so we can create a matrix) - const sets = [], setids = {}; - let i; - for (i = 0; i < areas.length; ++i) { - const area = areas[i]; - if (area.sets.length == 1) { - setids[area.sets[0]] = sets.length; - sets.push(area); - } - } - const matrices = getDistanceMatrices(areas, sets, setids); - let distances = matrices.distances; - const constraints = matrices.constraints; - // keep distances bounded, things get messed up otherwise. - // TODO: proper preconditioner? - const norm = (0, fmin_1.norm2)(distances.map(fmin_1.norm2)) / distances.length; - distances = distances.map(function (row) { - return row.map(function (value) { - return value / norm; - }); - }); - const obj = function (x, fxprime) { - return constrainedMDSGradient(x, fxprime, distances, constraints); - }; - let best, current; - for (i = 0; i < restarts; ++i) { - const initial = (0, fmin_1.zeros)(distances.length * 2).map(Math.random); - current = (0, fmin_1.conjugateGradient)(obj, initial, params); - if (!best || current.fx < best.fx) { - best = current; - } - } - const positions = best.x; - // translate rows back to (x,y,radius) coordinates - const circles = {}; - for (i = 0; i < sets.length; ++i) { - const set = sets[i]; - circles[set.sets[0]] = { - x: positions[2 * i] * norm, - y: positions[2 * i + 1] * norm, - radius: Math.sqrt(set.size / Math.PI), - }; - } - if (params.history) { - for (i = 0; i < params.history.length; ++i) { - (0, fmin_1.scale)(params.history[i].x, norm); - } - } - return circles; -} -exports.constrainedMDSLayout = constrainedMDSLayout; -/** Lays out a Venn diagram greedily, going from most overlapped sets to -least overlapped, attempting to position each new set such that the -overlapping areas to already positioned sets are basically right */ -function greedyLayout(areas, params) { - const loss = params && params.lossFunction ? params.lossFunction : lossFunction; - // define a circle for each set - const circles = {}, setOverlaps = {}; - let set; - for (let i = 0; i < areas.length; ++i) { - const area = areas[i]; - if (area.sets.length == 1) { - set = area.sets[0]; - circles[set] = { - x: 1e10, - y: 1e10, - // rowid: circles.length, // fix to -> - rowid: Object.keys(circles).length, - size: area.size, - radius: Math.sqrt(area.size / Math.PI), - }; - setOverlaps[set] = []; - } - } - areas = areas.filter(function (a) { - return a.sets.length == 2; - }); - // map each set to a list of all the other sets that overlap it - for (let i = 0; i < areas.length; ++i) { - const current = areas[i]; - // eslint-disable-next-line - let weight = current.hasOwnProperty('weight') ? current.weight : 1.0; - const left = current.sets[0], right = current.sets[1]; - // completely overlapped circles shouldn't be positioned early here - if (current.size + SMALL >= - Math.min(circles[left].size, circles[right].size)) { - weight = 0; - } - setOverlaps[left].push({ set: right, size: current.size, weight: weight }); - setOverlaps[right].push({ set: left, size: current.size, weight: weight }); - } - // get list of most overlapped sets - const mostOverlapped = []; - for (set in setOverlaps) { - // eslint-disable-next-line - if (setOverlaps.hasOwnProperty(set)) { - let size = 0; - for (let i = 0; i < setOverlaps[set].length; ++i) { - size += setOverlaps[set][i].size * setOverlaps[set][i].weight; - } - mostOverlapped.push({ set: set, size: size }); - } - } - // sort by size desc - function sortOrder(a, b) { - return b.size - a.size; - } - mostOverlapped.sort(sortOrder); - // keep track of what sets have been laid out - const positioned = {}; - function isPositioned(element) { - return element.set in positioned; - } - // adds a point to the output - function positionSet(point, index) { - circles[index].x = point.x; - circles[index].y = point.y; - positioned[index] = true; - } - // add most overlapped set at (0,0) - positionSet({ x: 0, y: 0 }, mostOverlapped[0].set); - // get distances between all points. TODO, necessary? - // answer: probably not - // var distances = venn.getDistanceMatrices(circles, areas).distances; - for (let i = 1; i < mostOverlapped.length; ++i) { - const setIndex = mostOverlapped[i].set, overlap = setOverlaps[setIndex].filter(isPositioned); - set = circles[setIndex]; - overlap.sort(sortOrder); - if (overlap.length === 0) { - // this shouldn't happen anymore with addMissingAreas - throw 'ERROR: missing pairwise overlap information'; - } - const points = []; - for (let j = 0; j < overlap.length; ++j) { - // get appropriate distance from most overlapped already added set - const p1 = circles[overlap[j].set], d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size); - // sample positions at 90 degrees for maximum aesthetics - points.push({ x: p1.x + d1, y: p1.y }); - points.push({ x: p1.x - d1, y: p1.y }); - points.push({ y: p1.y + d1, x: p1.x }); - points.push({ y: p1.y - d1, x: p1.x }); - // if we have at least 2 overlaps, then figure out where the - // set should be positioned analytically and try those too - for (let k = j + 1; k < overlap.length; ++k) { - const p2 = circles[overlap[k].set], d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size); - const extraPoints = (0, circleintersection_1.circleCircleIntersection)({ x: p1.x, y: p1.y, radius: d1 }, { x: p2.x, y: p2.y, radius: d2 }); - for (let l = 0; l < extraPoints.length; ++l) { - points.push(extraPoints[l]); - } - } - } - // we have some candidate positions for the set, examine loss - // at each position to figure out where to put it at - let bestLoss = 1e50, bestPoint = points[0]; - for (let j = 0; j < points.length; ++j) { - circles[setIndex].x = points[j].x; - circles[setIndex].y = points[j].y; - const localLoss = loss(circles, areas); - if (localLoss < bestLoss) { - bestLoss = localLoss; - bestPoint = points[j]; - } - } - positionSet(bestPoint, setIndex); - } - return circles; -} -exports.greedyLayout = greedyLayout; -/** Given a bunch of sets, and the desired overlaps between these sets - computes -the distance from the actual overlaps to the desired overlaps. Note that -this method ignores overlaps of more than 2 circles */ -function lossFunction(sets, overlaps) { - let output = 0; - function getCircles(indices) { - return indices.map(function (i) { - return sets[i]; - }); - } - for (let i = 0; i < overlaps.length; ++i) { - const area = overlaps[i]; - let overlap; - if (area.sets.length == 1) { - continue; - } - else if (area.sets.length == 2) { - const left = sets[area.sets[0]], right = sets[area.sets[1]]; - overlap = (0, circleintersection_1.circleOverlap)(left.radius, right.radius, (0, circleintersection_1.distance)(left, right)); - } - else { - overlap = (0, circleintersection_1.intersectionArea)(getCircles(area.sets)); - } - // eslint-disable-next-line - const weight = area.hasOwnProperty('weight') ? area.weight : 1.0; - output += weight * (overlap - area.size) * (overlap - area.size); - } - return output; -} -exports.lossFunction = lossFunction; -// orientates a bunch of circles to point in orientation -function orientateCircles(circles, orientation, orientationOrder) { - if (orientationOrder === null) { - circles.sort(function (a, b) { - return b.radius - a.radius; - }); - } - else { - circles.sort(orientationOrder); - } - let i; - // shift circles so largest circle is at (0, 0) - if (circles.length > 0) { - const largestX = circles[0].x, largestY = circles[0].y; - for (i = 0; i < circles.length; ++i) { - circles[i].x -= largestX; - circles[i].y -= largestY; - } - } - if (circles.length == 2) { - // if the second circle is a subset of the first, arrange so that - // it is off to one side. hack for https://github.com/benfred/venn.js/issues/120 - const dist = (0, circleintersection_1.distance)(circles[0], circles[1]); - if (dist < Math.abs(circles[1].radius - circles[0].radius)) { - circles[1].x = - circles[0].x + circles[0].radius - circles[1].radius - 1e-10; - circles[1].y = circles[0].y; - } - } - // rotate circles so that second largest is at an angle of 'orientation' - // from largest - if (circles.length > 1) { - const rotation = Math.atan2(circles[1].x, circles[1].y) - orientation; - let x, y; - const c = Math.cos(rotation), s = Math.sin(rotation); - for (i = 0; i < circles.length; ++i) { - x = circles[i].x; - y = circles[i].y; - circles[i].x = c * x - s * y; - circles[i].y = s * x + c * y; - } - } - // mirror solution if third solution is above plane specified by - // first two circles - if (circles.length > 2) { - let angle = Math.atan2(circles[2].x, circles[2].y) - orientation; - while (angle < 0) { - angle += 2 * Math.PI; - } - while (angle > 2 * Math.PI) { - angle -= 2 * Math.PI; - } - if (angle > Math.PI) { - const slope = circles[1].y / (1e-10 + circles[1].x); - for (i = 0; i < circles.length; ++i) { - const d = (circles[i].x + slope * circles[i].y) / (1 + slope * slope); - circles[i].x = 2 * d - circles[i].x; - circles[i].y = 2 * d * slope - circles[i].y; - } - } - } -} -function disjointCluster(circles) { - // union-find clustering to get disjoint sets - circles.map(function (circle) { - circle.parent = circle; - }); - // path compression step in union find - function find(circle) { - if (circle.parent !== circle) { - circle.parent = find(circle.parent); - } - return circle.parent; - } - function union(x, y) { - const xRoot = find(x), yRoot = find(y); - xRoot.parent = yRoot; - } - // get the union of all overlapping sets - for (let i = 0; i < circles.length; ++i) { - for (let j = i + 1; j < circles.length; ++j) { - const maxDistance = circles[i].radius + circles[j].radius; - if ((0, circleintersection_1.distance)(circles[i], circles[j]) + 1e-10 < maxDistance) { - union(circles[j], circles[i]); - } - } - } - // find all the disjoint clusters and group them together - const disjointClusters = {}; - let setid; - for (let i = 0; i < circles.length; ++i) { - setid = find(circles[i]).parent.setid; - if (!(setid in disjointClusters)) { - disjointClusters[setid] = []; - } - disjointClusters[setid].push(circles[i]); - } - // cleanup bookkeeping - circles.map(function (circle) { - delete circle.parent; - }); - // return in more usable form - const ret = []; - for (setid in disjointClusters) { - // eslint-disable-next-line - if (disjointClusters.hasOwnProperty(setid)) { - ret.push(disjointClusters[setid]); - } - } - return ret; -} -exports.disjointCluster = disjointCluster; -function getBoundingBox(circles) { - const minMax = function (d) { - const hi = Math.max.apply(null, circles.map(function (c) { - return c[d] + c.radius; - })), lo = Math.min.apply(null, circles.map(function (c) { - return c[d] - c.radius; - })); - return { max: hi, min: lo }; - }; - return { xRange: minMax('x'), yRange: minMax('y') }; -} -function normalizeSolution(solution, orientation, orientationOrder) { - if (orientation === null) { - orientation = Math.PI / 2; - } - // work with a list instead of a dictionary, and take a copy so we - // don't mutate input - let circles = [], i, setid; - for (setid in solution) { - // eslint-disable-next-line - if (solution.hasOwnProperty(setid)) { - const previous = solution[setid]; - circles.push({ - x: previous.x, - y: previous.y, - radius: previous.radius, - setid: setid, - }); - } - } - // get all the disjoint clusters - const clusters = disjointCluster(circles); - // orientate all disjoint sets, get sizes - for (i = 0; i < clusters.length; ++i) { - orientateCircles(clusters[i], orientation, orientationOrder); - const bounds = getBoundingBox(clusters[i]); - clusters[i].size = - (bounds.xRange.max - bounds.xRange.min) * - (bounds.yRange.max - bounds.yRange.min); - clusters[i].bounds = bounds; - } - clusters.sort(function (a, b) { - return b.size - a.size; - }); - // orientate the largest at 0,0, and get the bounds - circles = clusters[0]; - // @ts-ignore fixme 从逻辑上看似乎是不对的,后续看看 - let returnBounds = circles.bounds; - const spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50; - function addCluster(cluster, right, bottom) { - if (!cluster) - return; - const bounds = cluster.bounds; - let xOffset, yOffset, centreing; - if (right) { - xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing; - } - else { - xOffset = returnBounds.xRange.max - bounds.xRange.max; - centreing = - (bounds.xRange.max - bounds.xRange.min) / 2 - - (returnBounds.xRange.max - returnBounds.xRange.min) / 2; - if (centreing < 0) - xOffset += centreing; - } - if (bottom) { - yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing; - } - else { - yOffset = returnBounds.yRange.max - bounds.yRange.max; - centreing = - (bounds.yRange.max - bounds.yRange.min) / 2 - - (returnBounds.yRange.max - returnBounds.yRange.min) / 2; - if (centreing < 0) - yOffset += centreing; - } - for (let j = 0; j < cluster.length; ++j) { - cluster[j].x += xOffset; - cluster[j].y += yOffset; - circles.push(cluster[j]); - } - } - let index = 1; - while (index < clusters.length) { - addCluster(clusters[index], true, false); - addCluster(clusters[index + 1], false, true); - addCluster(clusters[index + 2], true, true); - index += 3; - // have one cluster (in top left). lay out next three relative - // to it in a grid - returnBounds = getBoundingBox(circles); - } - // convert back to solution form - const ret = {}; - for (i = 0; i < circles.length; ++i) { - ret[circles[i].setid] = circles[i]; - } - return ret; -} -exports.normalizeSolution = normalizeSolution; -/** Scales a solution from venn.venn or venn.greedyLayout such that it fits in -a rectangle of width/height - with padding around the borders. also -centers the diagram in the available space at the same time */ -function scaleSolution(solution, width, height, padding) { - const circles = [], setids = []; - for (const setid in solution) { - // eslint-disable-next-line - if (solution.hasOwnProperty(setid)) { - setids.push(setid); - circles.push(solution[setid]); - } - } - width -= 2 * padding; - height -= 2 * padding; - const bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange; - if (xRange.max == xRange.min || yRange.max == yRange.min) { - console.log('not scaling solution: zero size detected'); - return solution; - } - const xScaling = width / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), - // while we're at it, center the diagram too - xOffset = (width - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2; - const scaled = {}; - for (let i = 0; i < circles.length; ++i) { - const circle = circles[i]; - scaled[setids[i]] = { - radius: scaling * circle.radius, - x: padding + xOffset + (circle.x - xRange.min) * scaling, - y: padding + yOffset + (circle.y - yRange.min) * scaling, - }; - } - return scaled; -} -exports.scaleSolution = scaleSolution; -//# sourceMappingURL=layout.js.map -}, function(modId) { var map = {"./fmin":1751263816167,"./circleintersection":1751263816174}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816167, function(require, module, exports) { - -/** - * Copyright 2016, Ben Frederickson - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of the author nor the names of contributors may be used to - * endorse or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.scale = exports.weightedSum = exports.norm2 = exports.zerosM = exports.zeros = exports.gradientDescentLineSearch = exports.gradientDescent = exports.conjugateGradientSolve = exports.conjugateGradient = exports.nelderMead = exports.bisect = void 0; -var bisect_1 = require("./bisect"); -Object.defineProperty(exports, "bisect", { enumerable: true, get: function () { return bisect_1.bisect; } }); -var nelderMead_1 = require("./nelderMead"); -Object.defineProperty(exports, "nelderMead", { enumerable: true, get: function () { return nelderMead_1.nelderMead; } }); -var conjugateGradient_1 = require("./conjugateGradient"); -Object.defineProperty(exports, "conjugateGradient", { enumerable: true, get: function () { return conjugateGradient_1.conjugateGradient; } }); -Object.defineProperty(exports, "conjugateGradientSolve", { enumerable: true, get: function () { return conjugateGradient_1.conjugateGradientSolve; } }); -var gradientDescent_1 = require("./gradientDescent"); -Object.defineProperty(exports, "gradientDescent", { enumerable: true, get: function () { return gradientDescent_1.gradientDescent; } }); -Object.defineProperty(exports, "gradientDescentLineSearch", { enumerable: true, get: function () { return gradientDescent_1.gradientDescentLineSearch; } }); -var blas1_1 = require("./blas1"); -Object.defineProperty(exports, "zeros", { enumerable: true, get: function () { return blas1_1.zeros; } }); -Object.defineProperty(exports, "zerosM", { enumerable: true, get: function () { return blas1_1.zerosM; } }); -Object.defineProperty(exports, "norm2", { enumerable: true, get: function () { return blas1_1.norm2; } }); -Object.defineProperty(exports, "weightedSum", { enumerable: true, get: function () { return blas1_1.weightedSum; } }); -Object.defineProperty(exports, "scale", { enumerable: true, get: function () { return blas1_1.scale; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./bisect":1751263816168,"./nelderMead":1751263816169,"./conjugateGradient":1751263816171,"./gradientDescent":1751263816173,"./blas1":1751263816170}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816168, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.bisect = void 0; -/** finds the zeros of a function, given two starting points (which must - * have opposite signs */ -function bisect(f, a, b, parameters) { - parameters = parameters || {}; - const maxIterations = parameters.maxIterations || 100; - const tolerance = parameters.tolerance || 1e-10; - const fA = f(a); - const fB = f(b); - let delta = b - a; - if (fA * fB > 0) { - throw 'Initial bisect points must have opposite signs'; - } - if (fA === 0) - return a; - if (fB === 0) - return b; - for (let i = 0; i < maxIterations; ++i) { - delta /= 2; - const mid = a + delta; - const fMid = f(mid); - if (fMid * fA >= 0) { - a = mid; - } - if (Math.abs(delta) < tolerance || fMid === 0) { - return mid; - } - } - return a + delta; -} -exports.bisect = bisect; -//# sourceMappingURL=bisect.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816169, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.nelderMead = void 0; -const blas1_1 = require("./blas1"); -/** minimizes a function using the downhill simplex method */ -function nelderMead(f, x0, parameters) { - parameters = parameters || {}; - const maxIterations = parameters.maxIterations || x0.length * 200; - const nonZeroDelta = parameters.nonZeroDelta || 1.05; - const zeroDelta = parameters.zeroDelta || 0.001; - const minErrorDelta = parameters.minErrorDelta || 1e-6; - const minTolerance = parameters.minErrorDelta || 1e-5; - const rho = parameters.rho !== undefined ? parameters.rho : 1; - const chi = parameters.chi !== undefined ? parameters.chi : 2; - const psi = parameters.psi !== undefined ? parameters.psi : -0.5; - const sigma = parameters.sigma !== undefined ? parameters.sigma : 0.5; - let maxDiff; - // initialize simplex. - const N = x0.length; - const simplex = new Array(N + 1); - simplex[0] = x0; - simplex[0].fx = f(x0); - simplex[0].id = 0; - for (let i = 0; i < N; ++i) { - const point = x0.slice(); - point[i] = point[i] ? point[i] * nonZeroDelta : zeroDelta; - simplex[i + 1] = point; - simplex[i + 1].fx = f(point); - simplex[i + 1].id = i + 1; - } - function updateSimplex(value) { - for (let i = 0; i < value.length; i++) { - simplex[N][i] = value[i]; - } - simplex[N].fx = value.fx; - } - const sortOrder = (a, b) => a.fx - b.fx; - const centroid = x0.slice(); - const reflected = x0.slice(); - const contracted = x0.slice(); - const expanded = x0.slice(); - for (let iteration = 0; iteration < maxIterations; ++iteration) { - simplex.sort(sortOrder); - if (parameters.history) { - // copy the simplex (since later iterations will mutate) and - // sort it to have a consistent order between iterations - const sortedSimplex = simplex.map((x) => { - const state = x.slice(); - state.fx = x.fx; - state.id = x.id; - return state; - }); - sortedSimplex.sort((a, b) => a.id - b.id); - parameters.history.push({ - x: simplex[0].slice(), - fx: simplex[0].fx, - simplex: sortedSimplex, - }); - } - maxDiff = 0; - for (let i = 0; i < N; ++i) { - maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i] - simplex[1][i])); - } - if (Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta && - maxDiff < minTolerance) { - break; - } - // compute the centroid of all but the worst point in the simplex - for (let i = 0; i < N; ++i) { - centroid[i] = 0; - for (let j = 0; j < N; ++j) { - centroid[i] += simplex[j][i]; - } - centroid[i] /= N; - } - // reflect the worst point past the centroid and compute loss at reflected - // point - const worst = simplex[N]; - (0, blas1_1.weightedSum)(reflected, 1 + rho, centroid, -rho, worst); - reflected.fx = f(reflected); - // if the reflected point is the best seen, then possibly expand - if (reflected.fx < simplex[0].fx) { - (0, blas1_1.weightedSum)(expanded, 1 + chi, centroid, -chi, worst); - expanded.fx = f(expanded); - if (expanded.fx < reflected.fx) { - updateSimplex(expanded); - } - else { - updateSimplex(reflected); - } - } - // if the reflected point is worse than the second worst, we need to - // contract - else if (reflected.fx >= simplex[N - 1].fx) { - let shouldReduce = false; - if (reflected.fx > worst.fx) { - // do an inside contraction - (0, blas1_1.weightedSum)(contracted, 1 + psi, centroid, -psi, worst); - contracted.fx = f(contracted); - if (contracted.fx < worst.fx) { - updateSimplex(contracted); - } - else { - shouldReduce = true; - } - } - else { - // do an outside contraction - (0, blas1_1.weightedSum)(contracted, 1 - psi * rho, centroid, psi * rho, worst); - contracted.fx = f(contracted); - if (contracted.fx < reflected.fx) { - updateSimplex(contracted); - } - else { - shouldReduce = true; - } - } - if (shouldReduce) { - // if we don't contract here, we're done - if (sigma >= 1) - break; - // do a reduction - for (let i = 1; i < simplex.length; ++i) { - (0, blas1_1.weightedSum)(simplex[i], 1 - sigma, simplex[0], sigma, simplex[i]); - simplex[i].fx = f(simplex[i]); - } - } - } - else { - updateSimplex(reflected); - } - } - simplex.sort(sortOrder); - return { fx: simplex[0].fx, x: simplex[0] }; -} -exports.nelderMead = nelderMead; -//# sourceMappingURL=nelderMead.js.map -}, function(modId) { var map = {"./blas1":1751263816170}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816170, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.gemv = exports.weightedSum = exports.scale = exports.norm2 = exports.dot = exports.zerosM = exports.zeros = void 0; -// need some basic operations on vectors, rather than adding a dependency, -// just define here -function zeros(x) { - const r = new Array(x); - for (let i = 0; i < x; ++i) { - r[i] = 0; - } - return r; -} -exports.zeros = zeros; -function zerosM(x, y) { - return zeros(x).map(() => zeros(y)); -} -exports.zerosM = zerosM; -function dot(a, b) { - let ret = 0; - for (let i = 0; i < a.length; ++i) { - ret += a[i] * b[i]; - } - return ret; -} -exports.dot = dot; -function norm2(a) { - return Math.sqrt(dot(a, a)); -} -exports.norm2 = norm2; -function scale(ret, value, c) { - for (let i = 0; i < value.length; ++i) { - ret[i] = value[i] * c; - } -} -exports.scale = scale; -function weightedSum(ret, w1, v1, w2, v2) { - for (let j = 0; j < ret.length; ++j) { - ret[j] = w1 * v1[j] + w2 * v2[j]; - } -} -exports.weightedSum = weightedSum; -function gemv(output, A, x) { - for (let i = 0; i < output.length; ++i) { - output[i] = dot(A[i], x); - } -} -exports.gemv = gemv; -//# sourceMappingURL=blas1.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816171, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.conjugateGradientSolve = exports.conjugateGradient = void 0; -const blas1_1 = require("./blas1"); -const linesearch_1 = require("./linesearch"); -function conjugateGradient(f, initial, params) { - // allocate all memory up front here, keep out of the loop for perfomance - // reasons - let current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - let next = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - const yk = initial.slice(); - let temp; - let a = 1; - params = params || {}; - const maxIterations = params.maxIterations || initial.length * 20; - current.fx = f(current.x, current.fxprime); - const pk = current.fxprime.slice(); - (0, blas1_1.scale)(pk, current.fxprime, -1); - for (let i = 0; i < maxIterations; ++i) { - a = (0, linesearch_1.wolfeLineSearch)(f, pk, current, next, a); - // todo: history in wrong spot? - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - alpha: a, - }); - } - if (!a) { - // faiiled to find point that satifies wolfe conditions. - // reset direction for next iteration - (0, blas1_1.scale)(pk, current.fxprime, -1); - } - else { - // update direction using Polak–Ribiere CG method - (0, blas1_1.weightedSum)(yk, 1, next.fxprime, -1, current.fxprime); - const delta_k = (0, blas1_1.dot)(current.fxprime, current.fxprime); - const beta_k = Math.max(0, (0, blas1_1.dot)(yk, next.fxprime) / delta_k); - (0, blas1_1.weightedSum)(pk, beta_k, pk, -1, next.fxprime); - temp = current; - current = next; - next = temp; - } - if ((0, blas1_1.norm2)(current.fxprime) <= 1e-5) { - break; - } - } - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - alpha: a, - }); - } - return current; -} -exports.conjugateGradient = conjugateGradient; -/// Solves a system of lienar equations Ax =b for x -/// using the conjugate gradient method. -function conjugateGradientSolve(A, b, x, history) { - const r = x.slice(); - const Ap = x.slice(); - let rsold; - let rsnew; - let alpha; - // r = b - A*x - (0, blas1_1.gemv)(Ap, A, x); - (0, blas1_1.weightedSum)(r, 1, b, -1, Ap); - const p = r.slice(); - rsold = (0, blas1_1.dot)(r, r); - for (let i = 0; i < b.length; ++i) { - (0, blas1_1.gemv)(Ap, A, p); - alpha = rsold / (0, blas1_1.dot)(p, Ap); - if (history) { - history.push({ x: x.slice(), p: p.slice(), alpha: alpha }); - } - //x=x+alpha*p; - (0, blas1_1.weightedSum)(x, 1, x, alpha, p); - // r=r-alpha*Ap; - (0, blas1_1.weightedSum)(r, 1, r, -alpha, Ap); - rsnew = (0, blas1_1.dot)(r, r); - if (Math.sqrt(rsnew) <= 1e-10) - break; - // p=r+(rsnew/rsold)*p; - (0, blas1_1.weightedSum)(p, 1, r, rsnew / rsold, p); - rsold = rsnew; - } - if (history) { - history.push({ x: x.slice(), p: p.slice(), alpha: alpha }); - } - return x; -} -exports.conjugateGradientSolve = conjugateGradientSolve; -//# sourceMappingURL=conjugateGradient.js.map -}, function(modId) { var map = {"./blas1":1751263816170,"./linesearch":1751263816172}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816172, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.wolfeLineSearch = void 0; -const blas1_1 = require("./blas1"); -/// searches along line 'pk' for a point that satifies the wolfe conditions -/// See 'Numerical Optimization' by Nocedal and Wright p59-60 -/// f : objective function -/// pk : search direction -/// current: object containing current gradient/loss -/// next: output: contains next gradient/loss -/// returns a: step size taken -function wolfeLineSearch(f, pk, current, next, a, c1, c2) { - const phi0 = current.fx; - const phiPrime0 = (0, blas1_1.dot)(current.fxprime, pk); - let phi = phi0; - let phi_old = phi0; - let phiPrime = phiPrime0; - let a0 = 0; - a = a || 1; - c1 = c1 || 1e-6; - c2 = c2 || 0.1; - function zoom(a_lo, a_high, phi_lo) { - for (let iteration = 0; iteration < 16; ++iteration) { - a = (a_lo + a_high) / 2; - (0, blas1_1.weightedSum)(next.x, 1.0, current.x, a, pk); - phi = next.fx = f(next.x, next.fxprime); - phiPrime = (0, blas1_1.dot)(next.fxprime, pk); - if (phi > phi0 + c1 * a * phiPrime0 || phi >= phi_lo) { - a_high = a; - } - else { - if (Math.abs(phiPrime) <= -c2 * phiPrime0) { - return a; - } - if (phiPrime * (a_high - a_lo) >= 0) { - a_high = a_lo; - } - a_lo = a; - phi_lo = phi; - } - } - return 0; - } - for (let iteration = 0; iteration < 10; ++iteration) { - (0, blas1_1.weightedSum)(next.x, 1.0, current.x, a, pk); - phi = next.fx = f(next.x, next.fxprime); - phiPrime = (0, blas1_1.dot)(next.fxprime, pk); - if (phi > phi0 + c1 * a * phiPrime0 || (iteration && phi >= phi_old)) { - return zoom(a0, a, phi_old); - } - if (Math.abs(phiPrime) <= -c2 * phiPrime0) { - return a; - } - if (phiPrime >= 0) { - return zoom(a, a0, phi); - } - phi_old = phi; - a0 = a; - a *= 2; - } - return a; -} -exports.wolfeLineSearch = wolfeLineSearch; -//# sourceMappingURL=linesearch.js.map -}, function(modId) { var map = {"./blas1":1751263816170}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816173, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.gradientDescentLineSearch = exports.gradientDescent = void 0; -const blas1_1 = require("./blas1"); -const linesearch_1 = require("./linesearch"); -function gradientDescent(f, initial, params) { - params = params || {}; - const maxIterations = params.maxIterations || initial.length * 100; - const learnRate = params.learnRate || 0.001; - const current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - for (let i = 0; i < maxIterations; ++i) { - current.fx = f(current.x, current.fxprime); - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - }); - } - (0, blas1_1.weightedSum)(current.x, 1, current.x, -learnRate, current.fxprime); - if ((0, blas1_1.norm2)(current.fxprime) <= 1e-5) { - break; - } - } - return current; -} -exports.gradientDescent = gradientDescent; -function gradientDescentLineSearch(f, initial, params) { - params = params || {}; - let current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - let next = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - const maxIterations = params.maxIterations || initial.length * 100; - let learnRate = params.learnRate || 1; - const pk = initial.slice(); - const c1 = params.c1 || 1e-3; - const c2 = params.c2 || 0.1; - let temp; - let functionCalls = []; - if (params.history) { - // wrap the function call to track linesearch samples - const inner = f; - f = (x, fxprime) => { - functionCalls.push(x.slice()); - return inner(x, fxprime); - }; - } - current.fx = f(current.x, current.fxprime); - for (let i = 0; i < maxIterations; ++i) { - (0, blas1_1.scale)(pk, current.fxprime, -1); - learnRate = (0, linesearch_1.wolfeLineSearch)(f, pk, current, next, learnRate, c1, c2); - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - functionCalls: functionCalls, - learnRate: learnRate, - alpha: learnRate, - }); - functionCalls = []; - } - temp = current; - current = next; - next = temp; - if (learnRate === 0 || (0, blas1_1.norm2)(current.fxprime) < 1e-5) - break; - } - return current; -} -exports.gradientDescentLineSearch = gradientDescentLineSearch; -//# sourceMappingURL=gradientDescent.js.map -}, function(modId) { var map = {"./blas1":1751263816170,"./linesearch":1751263816172}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816174, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getCenter = exports.circleCircleIntersection = exports.circleOverlap = exports.distance = exports.circleArea = exports.containedInCircles = exports.intersectionArea = void 0; -const SMALL = 1e-10; -/** - * Returns the intersection area of a bunch of circles (where each circle - * is an object having an x,y and radius property) - */ -function intersectionArea(circles, stats) { - // Get all the intersection points of the circles - const intersectionPoints = getIntersectionPoints(circles); - // Filter out points that aren't included in all the circles - const innerPoints = intersectionPoints.filter(function (p) { - return containedInCircles(p, circles); - }); - let arcArea = 0, polygonArea = 0, i; - const arcs = []; - // If we have intersection points that are within all the circles, - // then figure out the area contained by them - if (innerPoints.length > 1) { - // Sort the points by angle from the center of the polygon, which lets - // us just iterate over points to get the edges - const center = getCenter(innerPoints); - for (i = 0; i < innerPoints.length; ++i) { - const p = innerPoints[i]; - p.angle = Math.atan2(p.x - center.x, p.y - center.y); - } - innerPoints.sort(function (a, b) { - return b.angle - a.angle; - }); - // Iterate over all points, get arc between the points - // and update the areas - let p2 = innerPoints[innerPoints.length - 1]; - for (i = 0; i < innerPoints.length; ++i) { - const p1 = innerPoints[i]; - // Polygon area updates easily ... - polygonArea += (p2.x + p1.x) * (p1.y - p2.y); - // Updating the arc area is a little more involved - const midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 }; - let arc = null; - for (let j = 0; j < p1.parentIndex.length; ++j) { - if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) { - // Figure out the angle halfway between the two points - // on the current circle - const circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y); - let angleDiff = a2 - a1; - if (angleDiff < 0) { - angleDiff += 2 * Math.PI; - } - // and use that angle to figure out the width of the - // arc - const a = a2 - angleDiff / 2; - let width = distance(midPoint, { - x: circle.x + circle.radius * Math.sin(a), - y: circle.y + circle.radius * Math.cos(a), - }); - // Clamp the width to the largest is can actually be - // (sometimes slightly overflows because of FP errors) - if (width > circle.radius * 2) { - width = circle.radius * 2; - } - // Pick the circle whose arc has the smallest width - if (arc === null || arc.width > width) { - arc = { circle: circle, width: width, p1: p1, p2: p2 }; - } - } - } - if (arc !== null) { - arcs.push(arc); - arcArea += circleArea(arc.circle.radius, arc.width); - p2 = p1; - } - } - } - else { - // No intersection points, is either disjoint - or is completely - // overlapped. figure out which by examining the smallest circle - let smallest = circles[0]; - for (i = 1; i < circles.length; ++i) { - if (circles[i].radius < smallest.radius) { - smallest = circles[i]; - } - } - // Make sure the smallest circle is completely contained in all - // the other circles - let disjoint = false; - for (i = 0; i < circles.length; ++i) { - if (distance(circles[i], smallest) > - Math.abs(smallest.radius - circles[i].radius)) { - disjoint = true; - break; - } - } - if (disjoint) { - arcArea = polygonArea = 0; - } - else { - arcArea = smallest.radius * smallest.radius * Math.PI; - arcs.push({ - circle: smallest, - p1: { x: smallest.x, y: smallest.y + smallest.radius }, - p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius }, - width: smallest.radius * 2, - }); - } - } - polygonArea /= 2; - if (stats) { - stats.area = arcArea + polygonArea; - stats.arcArea = arcArea; - stats.polygonArea = polygonArea; - stats.arcs = arcs; - stats.innerPoints = innerPoints; - stats.intersectionPoints = intersectionPoints; - } - return arcArea + polygonArea; -} -exports.intersectionArea = intersectionArea; -/** - * Returns whether a point is contained by all of a list of circles - */ -function containedInCircles(point, circles) { - for (let i = 0; i < circles.length; ++i) { - if (distance(point, circles[i]) > circles[i].radius + SMALL) { - return false; - } - } - return true; -} -exports.containedInCircles = containedInCircles; -/** Gets all intersection points between a bunch of circles */ -function getIntersectionPoints(circles) { - const ret = []; - for (let i = 0; i < circles.length; ++i) { - for (let j = i + 1; j < circles.length; ++j) { - const intersect = circleCircleIntersection(circles[i], circles[j]); - for (let k = 0; k < intersect.length; ++k) { - const p = intersect[k]; - p.parentIndex = [i, j]; - ret.push(p); - } - } - } - return ret; -} -/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */ -function circleArea(r, width) { - return (r * r * Math.acos(1 - width / r) - - (r - width) * Math.sqrt(width * (2 * r - width))); -} -exports.circleArea = circleArea; -/** Euclidean distance between two points */ -function distance(p1, p2) { - return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); -} -exports.distance = distance; -/** Returns the overlap area of two circles of radius r1 and r2 - that -have their centers separated by distance d. Simpler faster -circle intersection for only two circles */ -function circleOverlap(r1, r2, d) { - // no overlap - if (d >= r1 + r2) { - return 0; - } - // Completely overlapped - if (d <= Math.abs(r1 - r2)) { - return Math.PI * Math.min(r1, r2) * Math.min(r1, r2); - } - const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d), w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d); - return circleArea(r1, w1) + circleArea(r2, w2); -} -exports.circleOverlap = circleOverlap; -/** Given two circles (containing a x/y/radius attributes), -returns the intersecting points if possible. -note: doesn't handle cases where there are infinitely many -intersection points (circles are equivalent):, or only one intersection point*/ -function circleCircleIntersection(p1, p2) { - const d = distance(p1, p2), r1 = p1.radius, r2 = p2.radius; - // If to far away, or self contained - can't be done - if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) { - return []; - } - const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + (a * (p2.x - p1.x)) / d, y0 = p1.y + (a * (p2.y - p1.y)) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d); - return [ - { x: x0 + rx, y: y0 - ry }, - { x: x0 - rx, y: y0 + ry }, - ]; -} -exports.circleCircleIntersection = circleCircleIntersection; -/** Returns the center of a bunch of points */ -function getCenter(points) { - const center = { x: 0, y: 0 }; - for (let i = 0; i < points.length; ++i) { - center.x += points[i].x; - center.y += points[i].y; - } - center.x /= points.length; - center.y /= points.length; - return center; -} -exports.getCenter = getCenter; -//# sourceMappingURL=circleintersection.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816175, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.intersectionAreaPath = void 0; -const circleintersection_1 = require("./circleintersection"); -/** - * 根据圆心(x, y) 半径 r 返回圆的绘制 path - * @param x 圆心点 x - * @param y 圆心点 y - * @param r 圆的半径 - * @returns 圆的 path - */ -function circlePath(x, y, r) { - const ret = []; - // ret.push('\nM', x, y); - // ret.push('\nm', -r, 0); - // ret.push('\na', r, r, 0, 1, 0, r * 2, 0); - // ret.push('\na', r, r, 0, 1, 0, -r * 2, 0); - const x0 = x - r; - const y0 = y; - ret.push('M', x0, y0); - ret.push('A', r, r, 0, 1, 0, x0 + 2 * r, y0); - ret.push('A', r, r, 0, 1, 0, x0, y0); - return ret.join(' '); -} -/** returns a svg path of the intersection area of a bunch of circles */ -function intersectionAreaPath(circles) { - const stats = {}; - (0, circleintersection_1.intersectionArea)(circles, stats); - const arcs = stats.arcs; - if (arcs.length === 0) { - return 'M 0 0'; - } - else if (arcs.length == 1) { - const circle = arcs[0].circle; - return circlePath(circle.x, circle.y, circle.radius); - } - else { - // draw path around arcs - const ret = ['\nM', arcs[0].p2.x, arcs[0].p2.y]; - for (let i = 0; i < arcs.length; ++i) { - const arc = arcs[i], r = arc.circle.radius, wide = arc.width > r; - ret.push('\nA', r, r, 0, wide ? 1 : 0, 1, arc.p1.x, arc.p1.y); - } - return ret.join(' '); - } -} -exports.intersectionAreaPath = intersectionAreaPath; -//# sourceMappingURL=diagram.js.map -}, function(modId) { var map = {"./circleintersection":1751263816174}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816176, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Log = void 0; -/** - * Console.log the data section for dev debugger. - */ -const Log = () => { - return (data) => { - console.log('G2 data section:', data); - return data; - }; -}; -exports.Log = Log; -exports.Log.props = {}; -//# sourceMappingURL=log.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816177, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EMA = exports.ema = void 0; -function ema(values, alpha) { - if (alpha < 0 || alpha > 1) { - throw new Error('alpha must be between 0 and 1.'); - } - if (values.length === 0) { - return []; - } - let last = values[0]; - const smoothed = []; - for (const point of values) { - if (point === null || point === undefined) { - // 如果没有数据的话,使用最近的值 - smoothed.push(point); - console.warn('EMA:The value is null or undefined', values); - continue; - } - if (last === null || last === undefined) { - last = point; - } - const smoothedVal = last * alpha + (1 - alpha) * point; - smoothed.push(smoothedVal); - last = smoothedVal; - } - return smoothed; -} -exports.ema = ema; -/** - * https://en.wikipedia.org/wiki/Exponential_smoothing - * @param options - * @returns - */ -const EMA = (options) => { - const { field = 'y', alpha = 0.6, as = field } = options; - return (data) => { - const values = data.map((d) => { - return d[field]; - }); - const out = ema(values, alpha); - return data.map((d, i) => { - return Object.assign(Object.assign({}, d), { [as]: out[i] }); - }); - }; -}; -exports.EMA = EMA; -exports.EMA.props = {}; -//# sourceMappingURL=ema.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816178, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExceedAdjust = exports.OverflowHide = exports.ContrastReverse = exports.OverlapDodgeY = exports.OverlapHide = void 0; -var overlapHide_1 = require("./overlapHide"); -Object.defineProperty(exports, "OverlapHide", { enumerable: true, get: function () { return overlapHide_1.OverlapHide; } }); -var overlapDodgeY_1 = require("./overlapDodgeY"); -Object.defineProperty(exports, "OverlapDodgeY", { enumerable: true, get: function () { return overlapDodgeY_1.OverlapDodgeY; } }); -var contrastReverse_1 = require("./contrastReverse"); -Object.defineProperty(exports, "ContrastReverse", { enumerable: true, get: function () { return contrastReverse_1.ContrastReverse; } }); -var overflowHide_1 = require("./overflowHide"); -Object.defineProperty(exports, "OverflowHide", { enumerable: true, get: function () { return overflowHide_1.OverflowHide; } }); -var exceedAdjust_1 = require("./exceedAdjust"); -Object.defineProperty(exports, "ExceedAdjust", { enumerable: true, get: function () { return exceedAdjust_1.ExceedAdjust; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./overlapHide":1751263816179,"./overlapDodgeY":1751263816181,"./contrastReverse":1751263816182,"./overflowHide":1751263816184,"./exceedAdjust":1751263816185}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816179, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OverlapHide = void 0; -const bounds_1 = require("../utils/bounds"); -const style_1 = require("../utils/style"); -/** - * Hide the label when overlap. - */ -const OverlapHide = (options) => { - const { priority } = options; - return (labels) => { - const displayLabels = []; - // When overlap, will hide the next label. - if (priority) - labels.sort(priority); - labels.forEach((l) => { - (0, style_1.show)(l); - const b1 = l.getLocalBounds(); - const overlaping = displayLabels.some((dl) => (0, bounds_1.isOverlap)((0, bounds_1.parseAABB)(b1), (0, bounds_1.parseAABB)(dl.getLocalBounds()))); - if (overlaping) - (0, style_1.hide)(l); - else - displayLabels.push(l); - }); - return labels; - }; -}; -exports.OverlapHide = OverlapHide; -//# sourceMappingURL=overlapHide.js.map -}, function(modId) { var map = {"../utils/bounds":1751263816180,"../utils/style":1751263816122}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816180, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isOverlap = exports.isOverflow = exports.isInBounds = exports.parseAABB = void 0; -// There is a certain error in the calculation of text bounds. -const EPSILON = 1e-2; -function parseAABB(min2) { - const { min, max } = min2; - return [ - [min[0], min[1]], - [max[0], max[1]], - ]; -} -exports.parseAABB = parseAABB; -/** - * Whether the `point` in `bounds`. - * @param point - * @param bounds - * @param threshold - */ -function isInBounds(point, bounds, threshold = EPSILON) { - const [x, y] = point; - const [min, max] = bounds; - return (x >= min[0] - threshold && - x <= max[0] + threshold && - y >= min[1] - threshold && - y <= max[1] + threshold); -} -exports.isInBounds = isInBounds; -/** - * Whether `b1` is overflow from `b2`. - * @param b1 - * @param b2 - * @param threshold The threshold to determine whether the bounds is overflowed, default is 0. - */ -function isOverflow(b1, b2, threshold = EPSILON) { - const [min, max] = b1; - return !(isInBounds(min, b2, threshold) && isInBounds(max, b2, threshold)); -} -exports.isOverflow = isOverflow; -/** - * Whether `b1` is overlap with `b2`. - * @param b1 - * @param b2 - * @returns - */ -function isOverlap(b1, b2) { - const [min1, max1] = b1; - const [min2, max2] = b2; - return (min1[0] < max2[0] && - max1[0] > min2[0] && - min1[1] < max2[1] && - max1[1] > min2[1]); -} -exports.isOverlap = isOverlap; -//# sourceMappingURL=bounds.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816181, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OverlapDodgeY = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -function isSegmentIntersect([a, b], [c, d]) { - return d > a && b > c; -} -function useMap() { - const map = new Map(); - const get = (key) => map.get(key); - const set = (key, value) => map.set(key, value); - return [get, set]; -} -function getBoundsWithoutConnector(shape) { - const node = shape.cloneNode(true); - const connectorShape = node.getElementById('connector'); - connectorShape && node.removeChild(connectorShape); - const { min, max } = node.getRenderBounds(); - node.destroy(); - return { min, max }; -} -/** - * An iterative dodge method avoids label overlap. (n * log(n)) - */ -const OverlapDodgeY = (options) => { - const { maxIterations = 10, maxError = 0.1, padding = 1 } = options; - return (labels) => { - const n = labels.length; - if (n <= 1) - return labels; - // Index y, x0, x, height, by label. - const [y0, setY0] = useMap(); - const [y, setY] = useMap(); - const [h, setH] = useMap(); - const [xx, setXX] = useMap(); - for (const label of labels) { - const { min, max } = getBoundsWithoutConnector(label); - const [x0, y0] = min; - const [x1, y1] = max; - setY0(label, y0); - setY(label, y0); - setH(label, y1 - y0); - setXX(label, [x0, x1]); - } - // Offsets position Y. - for (let iter = 0; iter < maxIterations; iter++) { - labels.sort((a, b) => (0, d3_array_1.ascending)(y(a), y(b))); - let error = 0; - for (let i = 0; i < n - 1; i++) { - const l0 = labels[i]; - let j = i + 1; - let l1; - // Find the next label overlapping with the current label in x direction. - while ((l1 = labels[j]) && !isSegmentIntersect(xx(l0), xx(l1))) - j += 1; - if (l1) { - const y0 = y(l0); - const h0 = h(l0); - const y1 = y(l1); - const delta = y1 - (y0 + h0); - if (delta < padding) { - const newDelta = (padding - delta) / 2; - error = Math.max(error, newDelta); - setY(l0, y0 - newDelta); - setY(l1, y1 + newDelta); - } - } - } - if (error < maxError) - break; - } - for (const label of labels) { - label.style.y += y(label) - y0(label); - } - return labels; - }; -}; -exports.OverlapDodgeY = OverlapDodgeY; -//# sourceMappingURL=overlapDodgeY.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816182, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ContrastReverse = void 0; -const d3_array_1 = require("@antv/vendor/d3-array"); -const color_1 = require("../utils/color"); -function getsRGB(s) { - let c = s / 255; - c = c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4); - return c; -} -function getL(r, g, b) { - return 0.2126 * getsRGB(r) + 0.7152 * getsRGB(g) + 0.0722 * getsRGB(b); -} -/** - * Calculate the contrast. see https://webaim.org/resources/contrastchecker/ - * @param foreground - * @param background - */ -function contrast(foreground, background) { - if (!foreground || !background || foreground === background) - return 1; - const { r, g, b } = foreground; - const { r: rb, g: gb, b: bb } = background; - const L1 = getL(r, g, b); - const L2 = getL(rb, gb, bb); - return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05); -} -/** - * Reverse color for max contrast. - */ -function mostContrast(color, palette) { - const i = (0, d3_array_1.maxIndex)(palette, (c) => contrast(color, (0, color_1.parseToRGB)(c))); - return palette[i]; -} -/** - * Reverse the label color when the contrast is lower then `threshold`. - * The default value of `threshold` is 4.5. - * More about contract, see https://webaim.org/resources/contrastchecker/ - */ -const ContrastReverse = (options) => { - const { threshold = 4.5, palette = ['#000', '#fff'] } = options; - return (labels) => { - labels.forEach((l) => { - const background = l.attr('dependentElement').parsedStyle.fill; - const foreground = l.parsedStyle.fill; - const c = contrast(foreground, background); - if (c < threshold) - l.attr('fill', mostContrast(background, palette)); - }); - return labels; - }; -}; -exports.ContrastReverse = ContrastReverse; -//# sourceMappingURL=contrastReverse.js.map -}, function(modId) { var map = {"../utils/color":1751263816183}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816183, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseToRGB = void 0; -const g_1 = require("@antv/g"); -function parseToRGB(c) { - if (typeof c === 'object') - return c; - return (0, g_1.parseColor)(c); -} -exports.parseToRGB = parseToRGB; -//# sourceMappingURL=color.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816184, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OverflowHide = void 0; -const bounds_1 = require("../utils/bounds"); -const style_1 = require("../utils/style"); -/** - * Hide the label when the label is overflowed from the element. - */ -const OverflowHide = () => { - return (labels) => { - labels.forEach((l) => { - (0, style_1.show)(l); - const bounds = l.attr('bounds'); - const b = l.getLocalBounds(); - const overflow = (0, bounds_1.isOverflow)((0, bounds_1.parseAABB)(b), bounds); - if (overflow) - (0, style_1.hide)(l); - }); - return labels; - }; -}; -exports.OverflowHide = OverflowHide; -//# sourceMappingURL=overflowHide.js.map -}, function(modId) { var map = {"../utils/bounds":1751263816180,"../utils/style":1751263816122}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816185, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExceedAdjust = void 0; -const style_1 = require("../utils/style"); -const adjustPosition = (target, edge) => { - const [[minEdgeX, minEdgeY], [maxEdgeX, maxEdgeY]] = edge; - const [[minX, minY], [maxX, maxY]] = target; - let changeX = 0, changeY = 0; - // x-axis - if (minX < minEdgeX) { - changeX = minEdgeX - minX; - } - else if (maxX > maxEdgeX) { - changeX = maxEdgeX - maxX; - } - // y-axis - if (minY < minEdgeY) { - changeY = minEdgeY - minY; - } - else if (maxY > maxEdgeY) { - changeY = maxEdgeY - maxY; - } - return [changeX, changeY]; -}; -/** - * adjust the label when exceed the plot - */ -const ExceedAdjust = () => { - return (labels, { canvas, layout }) => { - labels.forEach((l) => { - (0, style_1.show)(l); - const { max, min } = l.getRenderBounds(); - const [xMax, yMax] = max, [xMin, yMin] = min; - const changeValue = adjustPosition([ - [xMin, yMin], - [xMax, yMax], - ], - // Prevent label overlap in multiple charts by calculating layouts separately to avoid collisions. - [ - [layout.x, layout.y], - [layout.x + layout.width, layout.y + layout.height], - ]); - // For label with connectorPoints - if (l.style.connector && l.style.connectorPoints) { - l.style.connectorPoints[0][0] -= changeValue[0]; - l.style.connectorPoints[0][1] -= changeValue[1]; - } - l.style.x += changeValue[0]; - l.style.y += changeValue[1]; - }); - return labels; - }; -}; -exports.ExceedAdjust = ExceedAdjust; -//# sourceMappingURL=exceedAdjust.js.map -}, function(modId) { var map = {"../utils/style":1751263816122}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816186, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.geolib = void 0; -const geoView_1 = require("../composition/geoView"); -const geoPath_1 = require("../composition/geoPath"); -function geolib() { - return { - 'composition.geoView': geoView_1.GeoView, - 'composition.geoPath': geoPath_1.GeoPath, - }; -} -exports.geolib = geolib; -//# sourceMappingURL=geo.js.map -}, function(modId) { var map = {"../composition/geoView":1751263816111,"../composition/geoPath":1751263816110}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816187, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.graphlib = void 0; -const mark_1 = require("../mark"); -const data_1 = require("../data"); -function graphlib() { - return { - 'data.arc': data_1.Arc, - 'data.cluster': data_1.Cluster, - 'mark.forceGraph': mark_1.ForceGraph, - 'mark.tree': mark_1.Tree, - 'mark.pack': mark_1.Pack, - 'mark.sankey': mark_1.Sankey, - 'mark.chord': mark_1.Chord, - 'mark.treemap': mark_1.Treemap, - }; -} -exports.graphlib = graphlib; -//# sourceMappingURL=graph.js.map -}, function(modId) { var map = {"../mark":1751263815821,"../data":1751263816146}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816188, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.plotlib = void 0; -const mark_1 = require("../mark"); -const data_1 = require("../data"); -function plotlib() { - return { - 'data.venn': data_1.Venn, - 'mark.boxplot': mark_1.Boxplot, - 'mark.gauge': mark_1.Gauge, - 'mark.wordCloud': mark_1.WordCloud, - 'mark.liquid': mark_1.Liquid, - }; -} -exports.plotlib = plotlib; -//# sourceMappingURL=plot.js.map -}, function(modId) { var map = {"../mark":1751263815821,"../data":1751263816146}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816189, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.stdlib = void 0; -const core_1 = require("./core"); -const geo_1 = require("./geo"); -const graph_1 = require("./graph"); -const plot_1 = require("./plot"); -function stdlib() { - return Object.assign(Object.assign(Object.assign(Object.assign({}, (0, geo_1.geolib)()), (0, graph_1.graphlib)()), (0, plot_1.plotlib)()), (0, core_1.corelib)()); -} -exports.stdlib = stdlib; -//# sourceMappingURL=std.js.map -}, function(modId) { var map = {"./core":1751263815804,"./geo":1751263816186,"./graph":1751263816187,"./plot":1751263816188}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816190, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.litelib = void 0; -const coordinate_1 = require("../coordinate"); -const encode_1 = require("../encode"); -const mark_1 = require("../mark"); -const palette_1 = require("../palette"); -const scale_1 = require("../scale"); -const theme_1 = require("../theme"); -const component_1 = require("../component"); -const animation_1 = require("../animation"); -const interaction_1 = require("../interaction"); -const composition_1 = require("../composition"); -const shape_1 = require("../shape"); -const data_1 = require("../data"); -/** - * In test stage, don't use it. - */ -function litelib() { - return { - 'data.inline': data_1.Inline, - 'coordinate.cartesian': coordinate_1.Cartesian, - 'encode.constant': encode_1.Constant, - 'encode.field': encode_1.Field, - 'encode.transform': encode_1.Transform, - 'encode.column': encode_1.Column, - 'mark.interval': mark_1.Interval, - 'shape.label.label': shape_1.LabelShape, - 'palette.category10': palette_1.Category10, - 'palette.category20': palette_1.Category20, - 'scale.linear': scale_1.Linear, - 'scale.ordinal': scale_1.Ordinal, - 'scale.band': scale_1.Band, - 'scale.identity': scale_1.Identity, - 'scale.point': scale_1.Point, - 'scale.time': scale_1.Time, - 'scale.log': scale_1.Log, - 'scale.pow': scale_1.Pow, - 'scale.sqrt': scale_1.Sqrt, - 'scale.threshold': scale_1.Threshold, - 'scale.quantile': scale_1.Quantile, - 'scale.quantize': scale_1.Quantize, - 'scale.sequential': scale_1.Sequential, - 'scale.constant': scale_1.Constant, - 'theme.classic': theme_1.Classic, - 'component.axisX': component_1.AxisX, - 'component.axisY': component_1.AxisY, - 'component.axisRadar': component_1.AxisRadar, - 'component.axisLinear': component_1.AxisLinear, - 'component.axisArc': component_1.AxisArc, - 'component.legendCategory': component_1.LegendCategory, - 'component.legendContinuous': component_1.LegendContinuous, - 'component.legendContinuousBlock': component_1.LegendContinuousBlock, - 'component.legendContinuousBlockSize': component_1.LegendContinuousBlockSize, - 'component.legendContinuousSize': component_1.LegendContinuousSize, - 'component.legends': component_1.Legends, - 'component.title': component_1.TitleComponent, - 'component.sliderX': component_1.SliderX, - 'component.sliderY': component_1.SliderY, - 'component.scrollbarX': component_1.ScrollbarX, - 'component.scrollbarY': component_1.ScrollbarY, - 'animation.scaleInX': animation_1.ScaleInX, - 'animation.scaleOutX': animation_1.ScaleOutX, - 'animation.scaleInY': animation_1.ScaleInY, - 'animation.scaleOutY': animation_1.ScaleOutY, - 'animation.waveIn': animation_1.WaveIn, - 'animation.fadeIn': animation_1.FadeIn, - 'animation.fadeOut': animation_1.FadeOut, - 'animation.morphing': animation_1.Morphing, - 'interaction.tooltip': interaction_1.Tooltip, - 'interaction.legendFilter': interaction_1.LegendFilter, - 'interaction.legendHighlight': interaction_1.LegendHighlight, - 'interaction.sliderFilter': interaction_1.SliderFilter, - 'interaction.scrollbarFilter': interaction_1.ScrollbarFilter, - 'interaction.poptip': interaction_1.Poptip, - 'interaction.event': interaction_1.Event, - 'composition.mark': composition_1.Mark, - 'composition.view': composition_1.View, - }; -} -exports.litelib = litelib; -//# sourceMappingURL=lite.js.map -}, function(modId) { var map = {"../coordinate":1751263815805,"../encode":1751263815816,"../mark":1751263815821,"../palette":1751263816018,"../scale":1751263816021,"../theme":1751263816036,"../component":1751263816043,"../animation":1751263816063,"../interaction":1751263816078,"../composition":1751263816099,"../shape":1751263815879,"../data":1751263816146}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816191, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.extend = exports.Runtime = exports.register = exports.Chart = void 0; -var chart_1 = require("./chart"); -Object.defineProperty(exports, "Chart", { enumerable: true, get: function () { return chart_1.Chart; } }); -var library_1 = require("./library"); -Object.defineProperty(exports, "register", { enumerable: true, get: function () { return library_1.register; } }); -var runtime_1 = require("./runtime"); -Object.defineProperty(exports, "Runtime", { enumerable: true, get: function () { return runtime_1.Runtime; } }); -var extend_1 = require("./extend"); -Object.defineProperty(exports, "extend", { enumerable: true, get: function () { return extend_1.extend; } }); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./chart":1751263816192,"./library":1751263816194,"./runtime":1751263816195,"./extend":1751263816193}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816192, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Chart = void 0; -const extend_1 = require("./extend"); -const library_1 = require("./library"); -const runtime_1 = require("./runtime"); -exports.Chart = (0, extend_1.extend)(runtime_1.Runtime, library_1.library); -//# sourceMappingURL=chart.js.map -}, function(modId) { var map = {"./extend":1751263816193,"./library":1751263816194,"./runtime":1751263816195}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816193, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.extend = void 0; -function extend(Runtime, library) { - class Chart extends Runtime { - constructor(options) { - super(Object.assign(Object.assign({}, options), { lib: library })); - } - } - return Chart; -} -exports.extend = extend; -//# sourceMappingURL=extend.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816194, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = exports.library = void 0; -const marker_1 = require("../utils/marker"); -exports.library = {}; -// @todo Warn if override existing key. -function register(key, component) { - if (key.startsWith('symbol.')) - (0, marker_1.registerSymbol)(key.split('.').pop(), component); - else - Object.assign(exports.library, { [key]: component }); -} -exports.register = register; -//# sourceMappingURL=library.js.map -}, function(modId) { var map = {"../utils/marker":1751263815899}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816195, function(require, module, exports) { - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Runtime = exports.G2_CHART_KEY = void 0; -const g_1 = require("@antv/g"); -const g_canvas_1 = require("@antv/g-canvas"); -const g_plugin_dragndrop_1 = require("@antv/g-plugin-dragndrop"); -const util_1 = require("@antv/util"); -const event_emitter_1 = __importDefault(require("@antv/event-emitter")); -const d3_array_1 = require("@antv/vendor/d3-array"); -const runtime_1 = require("../runtime"); -const event_1 = require("../utils/event"); -const tooltip_1 = require("../interaction/tooltip"); -const utils_1 = require("../interaction/utils"); -const utils_2 = require("./utils"); -const composition_1 = require("./composition"); -const define_1 = require("./define"); -const mark_1 = require("./mark"); -const library_1 = require("./library"); -exports.G2_CHART_KEY = 'G2_CHART_KEY'; -class Runtime extends composition_1.CompositionNode { - constructor(options) { - const { container, canvas, renderer, plugins, lib, createCanvas } = options, rest = __rest(options, ["container", "canvas", "renderer", "plugins", "lib", "createCanvas"]); - super(rest, 'view'); - // Identifies whether bindAutoFit. - this._hasBindAutoFit = false; - this._rendering = false; - this._trailing = false; - this._trailingResolve = null; - this._trailingReject = null; - this._previousDefinedType = null; - this._onResize = (0, util_1.debounce)(() => { - this.forceFit(); - }, 300); - this._renderer = renderer || new g_canvas_1.Renderer(); - this._plugins = plugins || []; - this._container = (0, utils_2.normalizeContainer)(container); - this._emitter = new event_emitter_1.default(); - this._context = { - library: Object.assign(Object.assign({}, lib), library_1.library), - emitter: this._emitter, - canvas, - createCanvas, - }; - this._create(); - } - render() { - if (this._rendering) - return this._addToTrailing(); - if (!this._context.canvas) - this._createCanvas(); - this._bindAutoFit(); - this._rendering = true; - // @fixme The cancel render is not marked, which will cause additional rendered event. - // @ref src/runtime/render.ts - const finished = new Promise((resolve, reject) => (0, runtime_1.render)(this._computedOptions(), this._context, this._createResolve(resolve), this._createReject(reject))); - const [finished1, resolve, reject] = (0, utils_2.createEmptyPromise)(); - finished - .then(resolve) - .catch(reject) - .then(() => this._renderTrailing()); - return finished1; - } - /** - * @overload - * @param {G2ViewTree} [options] - * @returns {Runtime|Spec} - */ - options(options) { - if (arguments.length === 0) - return (0, utils_2.optionsOf)(this); - const { type } = options; - if (type) - this._previousDefinedType = type; - (0, utils_2.updateRoot)(this, options, this._previousDefinedType, this._marks, this._compositions); - return this; - } - getContainer() { - return this._container; - } - getContext() { - return this._context; - } - on(event, callback, once) { - this._emitter.on(event, callback, once); - return this; - } - once(event, callback) { - this._emitter.once(event, callback); - return this; - } - emit(event, ...args) { - this._emitter.emit(event, ...args); - return this; - } - off(event, callback) { - this._emitter.off(event, callback); - return this; - } - clear() { - const options = this.options(); - this.emit(event_1.ChartEvent.BEFORE_CLEAR); - this._reset(); - (0, runtime_1.destroy)(options, this._context, false); - this.emit(event_1.ChartEvent.AFTER_CLEAR); - } - destroy() { - const options = this.options(); - this.emit(event_1.ChartEvent.BEFORE_DESTROY); - this._unbindAutoFit(); - this._reset(); - (0, runtime_1.destroy)(options, this._context, true); - if (this._container[utils_2.REMOVE_FLAG]) - (0, utils_2.removeContainer)(this._container); - this.emit(event_1.ChartEvent.AFTER_DESTROY); - } - forceFit() { - // Don't fit if size do not change. - this.options['autoFit'] = true; - const { width, height } = (0, utils_2.sizeOf)(this.options(), this._container); - if (width === this._width && height === this._height) { - return Promise.resolve(this); - } - // Don't call changeSize to prevent update width and height of options. - this.emit(event_1.ChartEvent.BEFORE_CHANGE_SIZE); - const finished = this.render(); - finished.then(() => { - this.emit(event_1.ChartEvent.AFTER_CHANGE_SIZE); - }); - return finished; - } - changeSize(width, height) { - if (width === this._width && height === this._height) { - return Promise.resolve(this); - } - this.emit(event_1.ChartEvent.BEFORE_CHANGE_SIZE); - this.attr('width', width); - this.attr('height', height); - const finished = this.render(); - finished.then(() => { - this.emit(event_1.ChartEvent.AFTER_CHANGE_SIZE); - }); - return finished; - } - getDataByXY(point, options = {}) { - const { shared = false, series, facet = false, startX = 0, startY = 0, } = options; - const { canvas, views } = this._context; - const { document } = canvas; - const { x, y } = point; - // Temporarily do not handle the multi - view situation. - const { coordinate, scale, markState, data: dataMap, key } = views[0]; - const elements = document.getElementsByClassName(runtime_1.ELEMENT_CLASS_NAME); - const groupKey = shared ? (element) => element.__data__.x : (d) => d; - const keyGroup = (0, d3_array_1.group)(elements, groupKey); - const container = document.getElementsByClassName(runtime_1.VIEW_CLASS_NAME)[0]; - const root = (0, utils_1.selectPlotArea)(container); - const hasSeriesInteraction = (markState) => { - return Array.from(markState.values()).some((d) => { - var _a, _b; - return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a['seriesTooltip']) || - ((_b = d.channels) === null || _b === void 0 ? void 0 : _b.some((c) => c.name === 'series' && c.values !== undefined)); - }); - }; - const isSeries = (0, tooltip_1.maybeValue)(series, hasSeriesInteraction(markState)); - const getElementData = (el) => (0, util_1.get)(el, '__data__.data', null); - const getElementsData = (els) => els.map(getElementData); - try { - // For non-facet and series chart. - if (isSeries && - hasSeriesInteraction(markState) && - !facet) { - const { selectedData } = (0, tooltip_1.findSeriesElement)({ - root, - event: { offsetX: x, offsetY: y }, - elements, - coordinate, - scale, - startX, - startY, - }); - const viewData = dataMap.get(`${key}-0`); - return selectedData.map(({ index }) => viewData[index]); - } - // For single chart. - const element = (0, tooltip_1.findSingleElement)({ - root, - event: { offsetX: x, offsetY: y }, - elements, - coordinate, - scale, - shared, - }); - const k = groupKey(element); - const groupElements = keyGroup.get(k); - return groupElements ? getElementsData(groupElements) : []; - } - catch (e) { - const topMostElement = canvas.document.elementFromPointSync(x, y); - return topMostElement ? getElementData(topMostElement) : []; - } - } - _create() { - const { library } = this._context; - // @todo After refactor component as mark, remove this. - const isMark = (key) => key.startsWith('mark.') || - key === 'component.axisX' || - key === 'component.axisY' || - key === 'component.legends'; - const marks = [ - 'mark.mark', - ...Object.keys(library).filter(isMark), - ]; - // Create mark generators. - this._marks = {}; - for (const key of marks) { - const name = key.split('.').pop(); - class Mark extends mark_1.MarkNode { - constructor() { - super({}, name); - } - } - this._marks[name] = Mark; - this[name] = function (composite) { - const node = this.append(Mark); - if (name === 'mark') - node.type = composite; - return node; - }; - } - // Create composition generators. - const compositions = [ - 'composition.view', - ...Object.keys(library).filter((key) => key.startsWith('composition.') && key !== 'composition.mark'), - ]; - this._compositions = Object.fromEntries(compositions.map((key) => { - const name = key.split('.').pop(); - let Composition = class Composition extends composition_1.CompositionNode { - constructor() { - super({}, name); - } - }; - Composition = __decorate([ - (0, define_1.defineProps)((0, define_1.nodeProps)(this._marks)) - ], Composition); - return [name, Composition]; - })); - for (const Ctor of Object.values(this._compositions)) { - (0, define_1.defineProps)((0, define_1.nodeProps)(this._compositions))(Ctor); - } - for (const key of compositions) { - const name = key.split('.').pop(); - this[name] = function () { - const Composition = this._compositions[name]; - this.type = null; - return this.append(Composition); - }; - } - } - _reset() { - const KEYS = ['theme', 'type', 'width', 'height', 'autoFit']; - this.type = 'view'; - this.value = Object.fromEntries(Object.entries(this.value).filter(([key]) => key.startsWith('margin') || - key.startsWith('padding') || - key.startsWith('inset') || - KEYS.includes(key))); - this.children = []; - } - _renderTrailing() { - if (!this._trailing) - return; - this._trailing = false; - this.render() - .then(() => { - const trailingResolve = this._trailingResolve.bind(this); - this._trailingResolve = null; - trailingResolve(this); - }) - .catch((error) => { - const trailingReject = this._trailingReject.bind(this); - this._trailingReject = null; - trailingReject(error); - }); - } - _createResolve(resolve) { - return () => { - this._rendering = false; - resolve(this); - }; - } - _createReject(reject) { - return (error) => { - this._rendering = false; - reject(error); - }; - } - // Update actual size and key. - _computedOptions() { - const options = this.options(); - const { key = exports.G2_CHART_KEY } = options; - const { width, height, depth } = (0, utils_2.sizeOf)(options, this._container); - this._width = width; - this._height = height; - this._key = key; - return Object.assign(Object.assign({ key: this._key }, options), { width, height, depth }); - } - // Create canvas if it does not exist. - // DragAndDropPlugin is for interaction. - // It is OK to register more than one time, G will handle this. - _createCanvas() { - const { width, height } = (0, utils_2.sizeOf)(this.options(), this._container); - this._plugins.push(new g_plugin_dragndrop_1.Plugin()); - this._plugins.forEach((d) => this._renderer.registerPlugin(d)); - this._context.canvas = new g_1.Canvas({ - container: this._container, - width, - height, - renderer: this._renderer, - }); - } - _addToTrailing() { - var _a; - // Resolve previous promise, and give up this task. - (_a = this._trailingResolve) === null || _a === void 0 ? void 0 : _a.call(this, this); - // Create new task. - this._trailing = true; - const promise = new Promise((resolve, reject) => { - this._trailingResolve = resolve; - this._trailingReject = reject; - }); - return promise; - } - _bindAutoFit() { - const options = this.options(); - const { autoFit } = options; - if (this._hasBindAutoFit) { - // If it was bind before, unbind it now. - if (!autoFit) - this._unbindAutoFit(); - return; - } - if (autoFit) { - this._hasBindAutoFit = true; - window.addEventListener('resize', this._onResize); - } - } - _unbindAutoFit() { - if (this._hasBindAutoFit) { - this._hasBindAutoFit = false; - window.removeEventListener('resize', this._onResize); - } - } -} -exports.Runtime = Runtime; -//# sourceMappingURL=runtime.js.map -}, function(modId) { var map = {"../runtime":1751263816081,"../utils/event":1751263816091,"../interaction/tooltip":1751263816131,"../interaction/utils":1751263816080,"./utils":1751263816196,"./composition":1751263816199,"./define":1751263816200,"./mark":1751263816202,"./library":1751263816194}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816196, function(require, module, exports) { - -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createEmptyPromise = exports.updateRoot = exports.optionsOf = exports.sizeOf = exports.valueOf = exports.normalizeRoot = exports.removeContainer = exports.normalizeContainer = exports.MIN_CHART_HEIGHT = exports.MIN_CHART_WIDTH = exports.CALLBACK_NODE = exports.REMOVE_FLAG = exports.VIEW_KEYS = void 0; -const util_1 = require("@antv/util"); -const size_1 = require("../utils/size"); -const helper_1 = require("../utils/helper"); -const node_1 = require("./node"); -// Keys can specified by new Chart({...}). -// Keys can bubble form mark-level options to view-level options. -exports.VIEW_KEYS = [ - 'width', - 'height', - 'depth', - 'padding', - 'paddingLeft', - 'paddingRight', - 'paddingBottom', - 'paddingTop', - 'inset', - 'insetLeft', - 'insetRight', - 'insetTop', - 'insetBottom', - 'margin', - 'marginLeft', - 'marginRight', - 'marginTop', - 'marginBottom', - 'autoFit', - 'theme', - 'title', - 'interaction', -]; -exports.REMOVE_FLAG = '__remove__'; -exports.CALLBACK_NODE = '__callback__'; -/** Minimum chart width */ -exports.MIN_CHART_WIDTH = 1; -/** Minimum chart height */ -exports.MIN_CHART_HEIGHT = 1; -function normalizeContainer(container) { - if (container === undefined) { - const container = document.createElement('div'); - container[exports.REMOVE_FLAG] = true; - return container; - } - if (typeof container === 'string') { - const node = document.getElementById(container); - return node; - } - return container; -} -exports.normalizeContainer = normalizeContainer; -function removeContainer(container) { - const parent = container.parentNode; - if (parent) { - parent.removeChild(container); - } -} -exports.removeContainer = removeContainer; -function normalizeRoot(node) { - if (node.type !== null) - return node; - const root = node.children[node.children.length - 1]; - for (const key of exports.VIEW_KEYS) - root.attr(key, node.attr(key)); - return root; -} -exports.normalizeRoot = normalizeRoot; -function valueOf(node) { - return Object.assign(Object.assign({}, node.value), { type: node.type }); -} -exports.valueOf = valueOf; -function sizeOf(options, container) { - const { width, height, autoFit, depth = 0 } = options; - let effectiveWidth = 640; - let effectiveHeight = 480; - if (autoFit) { - const { width: containerWidth, height: containerHeight } = (0, size_1.getContainerSize)(container); - effectiveWidth = containerWidth || effectiveWidth; - effectiveHeight = containerHeight || effectiveHeight; - } - effectiveWidth = width || effectiveWidth; - effectiveHeight = height || effectiveHeight; - return { - width: Math.max((0, util_1.isNumber)(effectiveWidth) ? effectiveWidth : exports.MIN_CHART_WIDTH, exports.MIN_CHART_WIDTH), - height: Math.max((0, util_1.isNumber)(effectiveHeight) ? effectiveHeight : exports.MIN_CHART_HEIGHT, exports.MIN_CHART_HEIGHT), - depth, - }; -} -exports.sizeOf = sizeOf; -function optionsOf(node) { - const root = normalizeRoot(node); - const discovered = [root]; - const nodeValue = new Map(); - nodeValue.set(root, valueOf(root)); - while (discovered.length) { - const node = discovered.pop(); - const value = nodeValue.get(node); - const { children = [] } = node; - for (const child of children) { - if (child.type === exports.CALLBACK_NODE) { - value.children = child.value; - } - else { - const childValue = valueOf(child); - const { children = [] } = value; - children.push(childValue); - discovered.push(child); - nodeValue.set(child, childValue); - value.children = children; - } - } - } - return nodeValue.get(root); -} -exports.optionsOf = optionsOf; -function isMark(type, mark) { - if (typeof type === 'function') - return true; - return new Set(Object.keys(mark)).has(type); -} -function isComposition(type, composition) { - return (typeof type !== 'function' && new Set(Object.keys(composition)).has(type)); -} -function normalizeRootOptions(node, options, previousType, marks, composition) { - const { type: oldType } = node; - const { type = previousType || oldType } = options; - if (isComposition(type, composition)) { - for (const key of exports.VIEW_KEYS) { - if (node.attr(key) !== undefined && options[key] === undefined) { - options[key] = node.attr(key); - } - } - return options; - } - if (isMark(type, marks)) { - const view = { type: 'view' }; - const mark = Object.assign({}, options); - for (const key of exports.VIEW_KEYS) { - if (mark[key] !== undefined) { - view[key] = mark[key]; - delete mark[key]; - } - } - return Object.assign(Object.assign({}, view), { children: [mark] }); - } - return options; -} -function typeCtor(type, mark, composition) { - if (typeof type === 'function') - return mark.mark; - const node = Object.assign(Object.assign({}, mark), composition); - const ctor = node[type]; - if (!ctor) - throw new Error(`Unknown mark: ${type}.`); - return ctor; -} -// Create node from options. -function createNode(options, mark, composition) { - if (typeof options === 'function') { - const node = new node_1.Node(); - node.value = options; - node.type = exports.CALLBACK_NODE; - return node; - } - const { type, children } = options, value = __rest(options, ["type", "children"]); - const Ctor = typeCtor(type, mark, composition); - const node = new Ctor(); - node.value = value; - // @ts-ignore - node.type = type; - return node; -} -// Update node by options. -function updateNode(node, newOptions) { - const { type, children } = newOptions, value = __rest(newOptions, ["type", "children"]); - if (node.type === type || type === undefined) { - // Update node. - (0, helper_1.deepAssign)(node.value, value); - } - else if (typeof type === 'string') { - // Transform node. - node.type = type; - node.value = value; - } -} -// Create a nested node tree from newOptions, and append it to the parent. -function appendNode(parent, newOptions, mark, composition) { - if (!parent) - return; - const discovered = [[parent, newOptions]]; - while (discovered.length) { - const [parent, nodeOptions] = discovered.shift(); - const node = createNode(nodeOptions, mark, composition); - if (Array.isArray(parent.children)) - parent.push(node); - const { children } = nodeOptions; - if (Array.isArray(children)) { - for (const child of children) { - discovered.push([node, child]); - } - } - else if (typeof children === 'function') { - discovered.push([node, children]); - } - } -} -// Update node tree from options. -function updateRoot(node, options, definedType, mark, composition) { - const rootOptions = normalizeRootOptions(node, options, definedType, mark, composition); - const discovered = [[null, node, rootOptions]]; - while (discovered.length) { - const [parent, oldNode, newNode] = discovered.shift(); - // If there is no oldNode, create a node tree directly. - if (!oldNode) { - appendNode(parent, newNode, mark, composition); - } - else if (!newNode) { - oldNode.remove(); - } - else { - updateNode(oldNode, newNode); - const { children: newChildren } = newNode; - const { children: oldChildren } = oldNode; - if (Array.isArray(newChildren) && Array.isArray(oldChildren)) { - // Only update node specified in newChildren, - // the extra oldChildren will remain still. - const n = Math.max(newChildren.length, oldChildren.length); - for (let i = 0; i < n; i++) { - const newChild = newChildren[i]; - const oldChild = oldChildren[i]; - discovered.push([oldNode, oldChild, newChild]); - } - } - else if (typeof newChildren === 'function') { - discovered.push([oldNode, null, newChildren]); - } - } - } -} -exports.updateRoot = updateRoot; -function createEmptyPromise() { - let reject; - let resolve; - const cloned = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - return [cloned, resolve, reject]; -} -exports.createEmptyPromise = createEmptyPromise; -//# sourceMappingURL=utils.js.map -}, function(modId) { var map = {"../utils/size":1751263816197,"../utils/helper":1751263815829,"./node":1751263816198}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816197, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getBBoxSize = exports.getContainerSize = void 0; -const parseInt10 = (d) => (d ? parseInt(d) : 0); -/** - * @description Get the element's bounding size. - * @param container dom element. - * @returns the element width and height - */ -function getContainerSize(container) { - // size = width/height - padding. - const style = getComputedStyle(container); - const wrapperWidth = container.clientWidth || parseInt10(style.width); - const wrapperHeight = container.clientHeight || parseInt10(style.height); - const widthPadding = parseInt10(style.paddingLeft) + parseInt10(style.paddingRight); - const heightPadding = parseInt10(style.paddingTop) + parseInt10(style.paddingBottom); - return { - width: wrapperWidth - widthPadding, - height: wrapperHeight - heightPadding, - }; -} -exports.getContainerSize = getContainerSize; -/** - * @description Calculate the real canvas size by view options. - */ -function getBBoxSize(options) { - const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 0, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options; - // @todo Add this padding to theme. - // 30 is default size for padding, which defined in runtime. - const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding); - const finalWidth = width - - maybeAuto(paddingLeft) - - maybeAuto(paddingRight) - - marginLeft - - marginRight - - insetLeft - - insetRight; - const finalHeight = height - - maybeAuto(paddingTop) - - maybeAuto(paddingBottom) - - marginTop - - marginBottom - - insetTop - - insetBottom; - return { width: finalWidth, height: finalHeight }; -} -exports.getBBoxSize = getBBoxSize; -//# sourceMappingURL=size.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816198, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Node = void 0; -/** - * BFS nodes and execute callback. - */ -function bfs(node, callback) { - const discovered = [node]; - while (discovered.length) { - const currentNode = discovered.shift(); - callback && callback(currentNode); - const children = currentNode.children || []; - for (const child of children) { - discovered.push(child); - } - } -} -/** - * Hierarchy container. - */ -class Node { - constructor(value = {}, type) { - // The parent node. - this.parentNode = null; - // The children nodes. - this.children = []; - // The index of parent children. - this.index = 0; - this.type = type; - this.value = value; - } - /** - * Apply specified transform to current value. Mount the node - * to replace the original one in the tree and then return it. - */ - map(transform = (x) => x) { - const newValue = transform(this.value); - this.value = newValue; - return this; - } - /** - * Set or get the specified attribute. It the value is specified, update - * the attribute of current value and return the node. Otherwise - * return the the attribute of current value. - */ - attr(key, value) { - if (arguments.length === 1) - return this.value[key]; - return this.map((v) => ((v[key] = value), v)); - } - /** - * Create a new node and append to children nodes. - */ - append(Ctor) { - const node = new Ctor({}); - node.children = []; - this.push(node); - return node; - } - push(node) { - node.parentNode = this; - node.index = this.children.length; - this.children.push(node); - return this; - } - /** - * Remove current node from parentNode. - */ - remove() { - const parent = this.parentNode; - if (parent) { - const { children } = parent; - const index = children.findIndex((item) => item === this); - children.splice(index, 1); - } - return this; - } - getNodeByKey(key) { - let targetNode = null; - const callback = (node) => { - if (key === node.attr('key')) { - targetNode = node; - } - }; - bfs(this, callback); - return targetNode; - } - getNodesByType(type) { - const nodes = []; - const callback = (node) => { - if (type === node.type) { - nodes.push(node); - } - }; - bfs(this, callback); - return nodes; - } - getNodeByType(type) { - let node = null; - bfs(this, (current) => { - if (node) - return; - if (type === current.type) - node = current; - }); - return node; - } - /** - * Apply specified callback to the node value. - */ - call(callback, ...params) { - callback(this.map(), ...params); - return this; - } - getRoot() { - // Find the root chart and render. - let root = this; - while (root && root.parentNode) { - root = root.parentNode; - } - return root; - } -} -exports.Node = Node; -//# sourceMappingURL=node.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816199, function(require, module, exports) { - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompositionNode = void 0; -const style_1 = require("../utils/style"); -const node_1 = require("./node"); -const define_1 = require("./define"); -const props_1 = require("./props"); -let CompositionNode = class CompositionNode extends node_1.Node { - /** - * Change current node data and its children data. - */ - changeData(data) { - var _a; - const chart = this.getRoot(); - if (!chart) - return; - this.attr('data', data); - if ((_a = this.children) === null || _a === void 0 ? void 0 : _a.length) { - this.children.forEach((child) => { - child.attr('data', data); - }); - } - return chart === null || chart === void 0 ? void 0 : chart.render(); - } - /** - * Get view instance by key. - */ - getView() { - const chart = this.getRoot(); - const { views } = chart.getContext(); - if (!(views === null || views === void 0 ? void 0 : views.length)) - return undefined; - return views.find((view) => view.key === this._key); - } - getScale() { - var _a; - return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.scale; - } - getScaleByChannel(channel) { - const scale = this.getScale(); - if (scale) - return scale[channel]; - return; - } - getCoordinate() { - var _a; - return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.coordinate; - } - getTheme() { - var _a; - return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.theme; - } - getGroup() { - const key = this._key; - if (!key) - return undefined; - const chart = this.getRoot(); - const chartGroup = chart.getContext().canvas.getRoot(); - return chartGroup.getElementById(key); - } - /** - * Show the view. - */ - show() { - const group = this.getGroup(); - if (!group) - return; - !group.isVisible() && (0, style_1.show)(group); - } - /** - * Hide the view. - */ - hide() { - const group = this.getGroup(); - if (!group) - return; - group.isVisible() && (0, style_1.hide)(group); - } -}; -CompositionNode = __decorate([ - (0, define_1.defineProps)(props_1.compositionProps) -], CompositionNode); -exports.CompositionNode = CompositionNode; -//# sourceMappingURL=composition.js.map -}, function(modId) { var map = {"../utils/style":1751263816122,"./node":1751263816198,"./define":1751263816200,"./props":1751263816201}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816200, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.nodeProps = exports.defineProps = void 0; -const helper_1 = require("../utils/helper"); -function defineValueProp(Node, name, { key = name }) { - Node.prototype[name] = function (value) { - if (arguments.length === 0) - return this.attr(key); - return this.attr(key, value); - }; -} -function defineArrayProp(Node, name, { key = name }) { - Node.prototype[name] = function (value) { - if (arguments.length === 0) - return this.attr(key); - if (Array.isArray(value)) - return this.attr(key, value); - const array = [...(this.attr(key) || []), value]; - return this.attr(key, array); - }; -} -function defineObjectProp(Node, name, { key: k = name }) { - Node.prototype[name] = function (key, value) { - if (arguments.length === 0) - return this.attr(k); - if (arguments.length === 1 && typeof key !== 'string') { - return this.attr(k, key); - } - const obj = this.attr(k) || {}; - obj[key] = arguments.length === 1 ? true : value; - return this.attr(k, obj); - }; -} -function defineMixProp(Node, name, descriptor) { - Node.prototype[name] = function (key) { - if (arguments.length === 0) - return this.attr(name); - if (Array.isArray(key)) - return this.attr(name, { items: key }); - if ((0, helper_1.isStrictObject)(key) && - (key.title !== undefined || key.items !== undefined)) { - return this.attr(name, key); - } - if (key === null || key === false) - return this.attr(name, key); - const obj = this.attr(name) || {}; - const { items = [] } = obj; - items.push(key); - obj.items = items; - return this.attr(name, obj); - }; -} -function defineNodeProp(Node, name, { ctor }) { - Node.prototype[name] = function (hocMark) { - const node = this.append(ctor); - if (name === 'mark') { - node.type = hocMark; - } - return node; - }; -} -function defineContainerProp(Node, name, { ctor }) { - Node.prototype[name] = function () { - this.type = null; - return this.append(ctor); - }; -} -/** - * A decorator to define different type of attribute setter or - * getter for current node. - */ -function defineProps(descriptors) { - return (Node) => { - for (const [name, descriptor] of Object.entries(descriptors)) { - const { type } = descriptor; - if (type === 'value') - defineValueProp(Node, name, descriptor); - else if (type === 'array') - defineArrayProp(Node, name, descriptor); - else if (type === 'object') - defineObjectProp(Node, name, descriptor); - else if (type === 'node') - defineNodeProp(Node, name, descriptor); - else if (type === 'container') - defineContainerProp(Node, name, descriptor); - else if (type === 'mix') - defineMixProp(Node, name, descriptor); - } - return Node; - }; -} -exports.defineProps = defineProps; -function nodeProps(node) { - return Object.fromEntries(Object.entries(node).map(([name, ctor]) => [name, { type: 'node', ctor }])); -} -exports.nodeProps = nodeProps; -//# sourceMappingURL=define.js.map -}, function(modId) { var map = {"../utils/helper":1751263815829}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816201, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.compositionProps = exports.markProps = exports.commonProps = void 0; -exports.commonProps = { - encode: { type: 'object' }, - scale: { type: 'object' }, - data: { type: 'value' }, - transform: { type: 'array' }, - style: { type: 'object' }, - animate: { type: 'object' }, - coordinate: { type: 'object' }, - interaction: { type: 'object' }, - label: { type: 'array', key: 'labels' }, - axis: { type: 'object' }, - legend: { type: 'object' }, - slider: { type: 'object' }, - scrollbar: { type: 'object' }, - state: { type: 'object' }, - layout: { type: 'object' }, - theme: { type: 'object' }, - title: { type: 'value' }, -}; -exports.markProps = Object.assign(Object.assign({}, exports.commonProps), { tooltip: { type: 'mix' }, viewStyle: { type: 'object' } }); -exports.compositionProps = Object.assign(Object.assign({}, exports.commonProps), { labelTransform: { type: 'array' } }); -//# sourceMappingURL=props.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816202, function(require, module, exports) { - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MarkNode = void 0; -const node_1 = require("./node"); -const define_1 = require("./define"); -const props_1 = require("./props"); -let MarkNode = class MarkNode extends node_1.Node { - changeData(data) { - const chart = this.getRoot(); - if (!chart) - return; - this.attr('data', data); - return chart === null || chart === void 0 ? void 0 : chart.render(); - } - /** - * Get mark from chart views. - */ - getMark() { - var _a; - const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView(); - if (!chartView) - return undefined; - const { markState } = chartView; - const markKey = Array.from(markState.keys()).find((item) => item.key === this.attr('key')); - return markState.get(markKey); - } - /** - * Get all scales instance. - */ - getScale() { - var _a; - const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView(); - if (!chartView) - return undefined; - return chartView === null || chartView === void 0 ? void 0 : chartView.scale; - } - /** - * Get the scale instance by channel. - */ - getScaleByChannel(channel) { - var _a, _b; - const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView(); - if (!chartView) - return undefined; - return (_b = chartView === null || chartView === void 0 ? void 0 : chartView.scale) === null || _b === void 0 ? void 0 : _b[channel]; - } - /** - * Get canvas group. - */ - getGroup() { - const key = this.attr('key'); - if (!key) - return undefined; - const chart = this.getRoot(); - const chartGroup = chart.getContext().canvas.getRoot(); - return chartGroup.getElementById(key); - } -}; -MarkNode = __decorate([ - (0, define_1.defineProps)(props_1.markProps) -], MarkNode); -exports.MarkNode = MarkNode; -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {"./node":1751263816198,"./define":1751263816200,"./props":1751263816201}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816203, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ClassicDark = exports.Classic = exports.Academy = exports.Dark = exports.Light = exports.LinearAxis = exports.selectPlotArea = exports.selectG2Elements = exports.seriesOf = exports.dataOf = exports.Selection = exports.select = exports.ChartEvent = exports.extend = exports.Runtime = exports.register = exports.MASK_CLASS_NAME = exports.AREA_CLASS_NAME = exports.LABEL_CLASS_NAME = exports.COMPONENT_CLASS_NAME = exports.PLOT_CLASS_NAME = exports.VIEW_CLASS_NAME = exports.ELEMENT_CLASS_NAME = exports.LABEL_LAYER_CLASS_NAME = exports.MAIN_LAYER_CLASS_NAME = exports.renderToMountedElement = exports.render = void 0; -var runtime_1 = require("./runtime"); -Object.defineProperty(exports, "render", { enumerable: true, get: function () { return runtime_1.render; } }); -Object.defineProperty(exports, "renderToMountedElement", { enumerable: true, get: function () { return runtime_1.renderToMountedElement; } }); -Object.defineProperty(exports, "MAIN_LAYER_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.MAIN_LAYER_CLASS_NAME; } }); -Object.defineProperty(exports, "LABEL_LAYER_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.LABEL_LAYER_CLASS_NAME; } }); -Object.defineProperty(exports, "ELEMENT_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.ELEMENT_CLASS_NAME; } }); -Object.defineProperty(exports, "VIEW_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.VIEW_CLASS_NAME; } }); -Object.defineProperty(exports, "PLOT_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.PLOT_CLASS_NAME; } }); -Object.defineProperty(exports, "COMPONENT_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.COMPONENT_CLASS_NAME; } }); -Object.defineProperty(exports, "LABEL_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.LABEL_CLASS_NAME; } }); -Object.defineProperty(exports, "AREA_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.AREA_CLASS_NAME; } }); -Object.defineProperty(exports, "MASK_CLASS_NAME", { enumerable: true, get: function () { return runtime_1.MASK_CLASS_NAME; } }); -var api_1 = require("./api"); -Object.defineProperty(exports, "register", { enumerable: true, get: function () { return api_1.register; } }); -Object.defineProperty(exports, "Runtime", { enumerable: true, get: function () { return api_1.Runtime; } }); -Object.defineProperty(exports, "extend", { enumerable: true, get: function () { return api_1.extend; } }); -var event_1 = require("./utils/event"); -Object.defineProperty(exports, "ChartEvent", { enumerable: true, get: function () { return event_1.ChartEvent; } }); -__exportStar(require("./spec"), exports); -var selection_1 = require("./utils/selection"); -Object.defineProperty(exports, "select", { enumerable: true, get: function () { return selection_1.select; } }); -Object.defineProperty(exports, "Selection", { enumerable: true, get: function () { return selection_1.Selection; } }); -var helper_1 = require("./utils/helper"); -Object.defineProperty(exports, "dataOf", { enumerable: true, get: function () { return helper_1.dataOf; } }); -Object.defineProperty(exports, "seriesOf", { enumerable: true, get: function () { return helper_1.seriesOf; } }); -var utils_1 = require("./interaction/utils"); -Object.defineProperty(exports, "selectG2Elements", { enumerable: true, get: function () { return utils_1.selectG2Elements; } }); -Object.defineProperty(exports, "selectPlotArea", { enumerable: true, get: function () { return utils_1.selectPlotArea; } }); -__exportStar(require("./transform"), exports); -var axis_1 = require("./component/axis"); -Object.defineProperty(exports, "LinearAxis", { enumerable: true, get: function () { return axis_1.LinearAxis; } }); -var theme_1 = require("./theme"); -Object.defineProperty(exports, "Light", { enumerable: true, get: function () { return theme_1.Light; } }); -Object.defineProperty(exports, "Dark", { enumerable: true, get: function () { return theme_1.Dark; } }); -Object.defineProperty(exports, "Academy", { enumerable: true, get: function () { return theme_1.Academy; } }); -Object.defineProperty(exports, "Classic", { enumerable: true, get: function () { return theme_1.Classic; } }); -Object.defineProperty(exports, "ClassicDark", { enumerable: true, get: function () { return theme_1.ClassicDark; } }); -//# sourceMappingURL=exports.js.map -}, function(modId) { var map = {"./runtime":1751263816081,"./api":1751263816191,"./utils/event":1751263816091,"./spec":1751263816204,"./utils/selection":1751263815883,"./utils/helper":1751263815829,"./interaction/utils":1751263816080,"./transform":1751263815823,"./component/axis":1751263816044,"./theme":1751263816036}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816204, function(require, module, exports) { - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./animate"), exports); -__exportStar(require("./component"), exports); -__exportStar(require("./composition"), exports); -__exportStar(require("./coordinate"), exports); -__exportStar(require("./coordinateTransform"), exports); -__exportStar(require("./data"), exports); -__exportStar(require("./dataTransform"), exports); -__exportStar(require("./encode"), exports); -__exportStar(require("./interaction"), exports); -__exportStar(require("./labelTransform"), exports); -__exportStar(require("./mark"), exports); -__exportStar(require("./scale"), exports); -__exportStar(require("./palette"), exports); -__exportStar(require("./theme"), exports); -__exportStar(require("./transform"), exports); -//# sourceMappingURL=index.js.map -}, function(modId) { var map = {"./animate":1751263816205,"./component":1751263816206,"./composition":1751263816207,"./coordinate":1751263816208,"./coordinateTransform":1751263816209,"./data":1751263816210,"./dataTransform":1751263816211,"./encode":1751263816212,"./interaction":1751263816213,"./labelTransform":1751263816214,"./mark":1751263816215,"./scale":1751263816216,"./palette":1751263816217,"./theme":1751263816218,"./transform":1751263816219}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816205, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=animate.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816206, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=component.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816207, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=composition.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816208, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=coordinate.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816209, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=coordinateTransform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816210, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=data.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816211, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=dataTransform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816212, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=encode.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816213, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=interaction.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816214, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=labelTransform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816215, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=mark.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816216, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=scale.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816217, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=palette.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816218, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=theme.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816219, function(require, module, exports) { - -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=transform.js.map -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -return __REQUIRE__(1751263815802); -})() -//miniprogram-npm-outsideDeps=["@antv/util","@antv/vendor/d3-array","@antv/scale","@antv/vendor/d3-shape","@antv/g","@antv/vendor/d3-path","@antv/component","flru","@antv/vendor/d3-hierarchy","@antv/vendor/d3-force","@antv/vendor/d3-format","@antv/g-canvas","@antv/g-plugin-dragndrop","@antv/event-emitter","@antv/expr","@antv/coord","@antv/vendor/d3-geo","@antv/vendor/d3-scale-chromatic","@antv/vendor/d3-dsv","pdfast"] -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/miniprogram_npm/@antv/g2/index.js.map b/miniprogram_npm/@antv/g2/index.js.map deleted file mode 100644 index 8c9689d..0000000 --- a/miniprogram_npm/@antv/g2/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["index.js","lib/index.js","lib/core.js","coordinate/index.js","coordinate/cartesian.js","coordinate/polar.js","utils/angle.js","coordinate/helix.js","coordinate/transpose.js","coordinate/theta.js","coordinate/radial.js","coordinate/parallel.js","coordinate/fisheye.js","coordinate/radar.js","encode/index.js","encode/constant.js","encode/transform.js","encode/field.js","encode/column.js","mark/index.js","mark/interval.js","transform/index.js","transform/maybeZeroY1.js","transform/utils/helper.js","transform/maybeStackY.js","transform/stackY.js","transform/utils/order.js","utils/helper.js","utils/array.js","transform/maybeTitle.js","utils/dateFormat.js","transform/maybeZeroX.js","transform/maybeZeroY.js","transform/maybeZeroZ.js","transform/maybeSize.js","transform/maybeKey.js","transform/maybeSeries.js","transform/maybeTupleY.js","transform/maybeTupleX.js","transform/maybeIdentityY.js","transform/maybeIdentityX.js","transform/maybeDefaultX.js","transform/maybeDefaultY.js","transform/maybeTooltip.js","transform/maybeZeroPadding.js","transform/maybeVisualPosition.js","transform/maybeFunctionAttribute.js","transform/maybeTuple.js","transform/maybeGradient.js","transform/dodgeX.js","transform/stackEnter.js","transform/normalizeY.js","transform/jitter.js","transform/jitterX.js","transform/jitterY.js","transform/symmetryY.js","transform/diffY.js","transform/select.js","transform/selectX.js","transform/selectY.js","transform/groupX.js","transform/group.js","transform/groupN.js","transform/groupY.js","transform/groupColor.js","transform/sortX.js","transform/sort.js","transform/sortColor.js","transform/sortY.js","transform/flexX.js","transform/pack.js","utils/vector.js","transform/binX.js","transform/bin.js","transform/sample.js","transform/utils/lttb.js","transform/filter.js","shape/index.js","shape/interval/rect.js","shape/interval/color.js","utils/coordinate.js","utils/selection.js","utils/number.js","shape/utils.js","shape/interval/hollow.js","shape/interval/funnel.js","shape/interval/pyramid.js","shape/line/line.js","shape/line/curve.js","utils/createElement.js","shape/line/smooth.js","shape/line/hv.js","shape/line/vh.js","shape/line/hvh.js","shape/line/trail.js","shape/point/hollowBowtie.js","shape/point/color.js","utils/marker.js","utils/string.js","shape/point/hollowDiamond.js","shape/point/hollowHexagon.js","shape/point/hollow.js","shape/point/hollowSquare.js","shape/point/hollowTriangle.js","shape/point/hollowTriangleDown.js","shape/point/hollowCircle.js","shape/point/circle.js","shape/point/bowtie.js","shape/point/cross.js","shape/point/diamond.js","shape/point/hexagon.js","shape/point/hyphen.js","shape/point/line.js","shape/point/plus.js","shape/point/point.js","shape/point/square.js","shape/point/tick.js","shape/point/triangle.js","shape/point/triangleDown.js","shape/vector/vector.js","shape/text/text.js","shape/text/advance.js","shape/text/badge.js","shape/text/tag.js","shape/area/area.js","shape/area/curve.js","shape/area/smooth.js","shape/area/hvh.js","shape/area/vh.js","shape/area/hv.js","shape/link/link.js","shape/link/smooth.js","shape/link/vhv.js","shape/link/arc.js","shape/image/image.js","mark/utils.js","shape/polygon/polygon.js","shape/polygon/ribbon.js","shape/box/box.js","shape/box/violin.js","shape/lineXY/line.js","shape/connector/connector.js","shape/label/label.js","shape/label/position/index.js","shape/label/position/area.js","shape/label/position/bottom.js","shape/label/position/default.js","shape/label/position/bottomLeft.js","shape/label/position/bottomRight.js","shape/label/position/inside.js","shape/label/position/left.js","shape/label/position/outside.js","shape/label/position/right.js","shape/label/position/spider.js","shape/label/position/utils.js","shape/label/position/surround.js","shape/label/position/top.js","shape/label/position/topLeft.js","shape/label/position/topRight.js","shape/path/path.js","shape/path/color.js","shape/path/hollow.js","shape/density/density.js","shape/heatmap/heatmap.js","shape/heatmap/renderer/index.js","utils/lru.js","shape/heatmap/renderer/gradient.js","shape/shape/shape.js","shape/liquid/liquid.js","shape/liquid/wave.js","shape/liquid/shapes.js","shape/gauge/round.js","mark/rect.js","mark/line.js","mark/point.js","mark/text.js","mark/cell.js","mark/area.js","mark/link.js","mark/image.js","mark/polygon.js","mark/box.js","mark/vector.js","mark/lineY.js","mark/lineX.js","mark/connector.js","mark/range.js","mark/rangeX.js","mark/rangeY.js","mark/sankey.js","data/sankey.js","data/utils/d3-sankey/index.js","data/utils/d3-sankey/sankey.js","data/utils/d3-sankey/align.js","data/utils/d3-sankey/constant.js","utils/mark.js","mark/chord.js","data/arc.js","data/utils/arc/index.js","data/utils/arc/arc.js","data/utils/arc/sort.js","mark/path.js","mark/treemap.js","utils/treeDataTransform.js","mark/pack.js","mark/boxplot.js","mark/shape.js","mark/forceGraph.js","mark/tree.js","data/tree.js","data/cluster.js","mark/wordCloud.js","mark/gauge.js","mark/density.js","mark/heatmap.js","mark/liquid.js","palette/index.js","palette/category10.js","palette/category20.js","scale/index.js","scale/band.js","scale/linear.js","scale/ordinal.js","scale/identity.js","scale/point.js","scale/time.js","scale/log.js","scale/pow.js","scale/threshold.js","scale/quantile.js","scale/quantize.js","scale/sqrt.js","scale/sequential.js","scale/constant.js","theme/index.js","theme/classic.js","theme/light.js","theme/create.js","theme/classicDark.js","theme/dark.js","theme/academy.js","component/index.js","component/axis.js","component/utils.js","component/axisX.js","component/axisY.js","component/axisRadar.js","component/legendCategory.js","component/legendContinuous.js","component/legendContinuousBlock.js","component/legendContinuousBlockSize.js","component/legendContinuousSize.js","component/title.js","component/sliderX.js","component/slider.js","utils/scale.js","component/sliderY.js","component/scrollbarX.js","component/scrollbar.js","component/scrollbarY.js","component/legends.js","animation/index.js","animation/scaleInX.js","animation/scaleOutX.js","animation/scaleInY.js","animation/scaleOutY.js","animation/fadeIn.js","animation/fadeOut.js","animation/morphing.js","animation/utils.js","animation/waveIn.js","animation/zoomIn.js","animation/zoomOut.js","animation/pathIn.js","animation/growInX.js","animation/growInY.js","interaction/index.js","interaction/elementHighlight.js","interaction/utils.js","runtime/index.js","runtime/constant.js","runtime/types/common.js","runtime/types/component.js","runtime/types/options.js","runtime/types/transform.js","runtime/types/encode.js","runtime/types/mark.js","runtime/types/data.js","runtime/render.js","utils/event.js","utils/expr.js","runtime/plot.js","runtime/component.js","component/constant.js","runtime/coordinate.js","runtime/library.js","lib/builtinlib.js","composition/index.js","composition/spaceLayer.js","composition/utils.js","composition/spaceFlex.js","composition/view.js","composition/mark.js","composition/facetRect.js","utils/container.js","composition/repeatMatrix.js","composition/facetCircle.js","composition/timingKeyframe.js","composition/geoPath.js","composition/geoView.js","composition/d3Projection.js","interaction/event.js","runtime/scale.js","runtime/types/scale.js","runtime/layout.js","runtime/mark.js","runtime/transform.js","runtime/option-preprocess/index.js","utils/flow.js","runtime/option-preprocess/style.js","utils/style.js","utils/traverse-elements.js","interaction/elementHighlightByX.js","interaction/elementHighlightByColor.js","interaction/elementSelect.js","interaction/elementSelectByX.js","interaction/elementSelectByColor.js","interaction/chartIndex.js","interaction/fisheye.js","interaction/tooltip.js","interaction/legendFilter.js","interaction/legendHighlight.js","interaction/brushHighlight.js","interaction/brushXHighlight.js","interaction/brushYHighlight.js","interaction/brushAxisHighlight.js","interaction/brushFilter.js","interaction/brushXFilter.js","interaction/brushYFilter.js","interaction/sliderFilter.js","interaction/scrollbarFilter.js","interaction/poptip.js","interaction/treemapDrillDown.js","interaction/elementPointMove.js","data/index.js","data/fetch.js","data/fold.js","data/filter.js","data/sort.js","data/pick.js","data/rename.js","data/sortBy.js","data/utils/fields.js","data/inline.js","data/custom.js","data/map.js","data/wordCloud.js","data/utils/flow.js","data/utils/d3-cloud/index.js","data/join.js","data/slice.js","data/kde.js","data/venn.js","data/utils/venn/index.js","data/utils/venn/layout.js","data/utils/venn/fmin/index.js","data/utils/venn/fmin/bisect.js","data/utils/venn/fmin/nelderMead.js","data/utils/venn/fmin/blas1.js","data/utils/venn/fmin/conjugateGradient.js","data/utils/venn/fmin/linesearch.js","data/utils/venn/fmin/gradientDescent.js","data/utils/venn/circleintersection.js","data/utils/venn/diagram.js","data/log.js","data/ema.js","label-transform/index.js","label-transform/overlapHide.js","utils/bounds.js","label-transform/overlapDodgeY.js","label-transform/contrastReverse.js","utils/color.js","label-transform/overflowHide.js","label-transform/exceedAdjust.js","lib/geo.js","lib/graph.js","lib/plot.js","lib/std.js","lib/lite.js","api/index.js","api/chart.js","api/extend.js","api/library.js","api/runtime.js","api/utils.js","utils/size.js","api/node.js","api/composition.js","api/define.js","api/props.js","api/mark.js","exports.js","spec/index.js","spec/animate.js","spec/component.js","spec/composition.js","spec/coordinate.js","spec/coordinateTransform.js","spec/data.js","spec/dataTransform.js","spec/encode.js","spec/interaction.js","spec/labelTransform.js","spec/mark.js","spec/scale.js","spec/palette.js","spec/theme.js","spec/transform.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA,ACHA;ADIA,ACHA;ADIA,ACHA;ADIA,AENA,ADGA;ADIA,AENA,ADGA;ADIA,AENA,ADGA;AELA,AHSA,AENA,ADGA;AELA,AHSA,AENA,ADGA;AELA,AHSA,AENA,ADGA;AGRA,ADGA,AHSA,AENA,ADGA;AGRA,ADGA,AHSA,AENA,ADGA;AGRA,ADGA,AHSA,AENA,ADGA;AGRA,ADGA,AENA,ALeA,AENA,ADGA;AGRA,ADGA,AENA,ALeA,AENA,ADGA;AGRA,ADGA,AENA,ALeA,AENA,ADGA;AGRA,ADGA,AENA,ALeA,AENA,ADGA,AKfA;AFOA,ADGA,AENA,ALeA,AENA,AIZA;AFOA,ADGA,AENA,ALeA,AENA,AIZA;AFOA,AGTA,AJYA,AENA,ALeA,AENA,AIZA;ACFA,AJYA,AENA,ALeA,AENA,AIZA;ACFA,AJYA,AENA,ALeA,AENA,AIZA;ACFA,AJYA,AENA,AGTA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AGTA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AGTA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AIZA,ADGA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AIZA,ADGA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AIZA,ADGA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AKfA,ADGA,ADGA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AKfA,ADGA,ADGA,ARwBA,AENA,AIZA;ACFA,AJYA,AENA,AKfA,ADGA,ADGA,ANkBA,AIZA;ACFA,AJYA,AQxBA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;ACFA,AIZA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;ACFA,AIZA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;AMjBA,ADGA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;AMjBA,ADGA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;AMjBA,ADGA,ANkBA,AKfA,ADGA,ADGA,ANkBA,AIZA;AMjBA,ADGA,ANkBA,AQxBA,AHSA,ADGA,APqBA,AIZA;AMjBA,ADGA,ANkBA,AQxBA,AHSA,ADGA,APqBA,AIZA;AMjBA,ADGA,ANkBA,AQxBA,AHSA,ADGA,APqBA,AIZA;AMjBA,ADGA,ANkBA,AQxBA,AHSA,ADGA,AKfA,AZoCA,AIZA;AMjBA,APqBA,AQxBA,AHSA,ADGA,AKfA,AZoCA,AIZA;AMjBA,APqBA,AQxBA,AHSA,ADGA,AKfA,AZoCA,AIZA;AMjBA,APqBA,AQxBA,AHSA,ADGA,AMlBA,ADGA,AZoCA,AIZA;AOpBA,AHSA,ADGA,AMlBA,ADGA,AZoCA,AIZA;AOpBA,AHSA,ADGA,AMlBA,ADGA,AZoCA,AIZA;AOpBA,AHSA,ADGA,AMlBA,ADGA,AENA,Ad0CA,AIZA;AOpBA,AHSA,ADGA,AMlBA,ADGA,AENA,Ad0CA;AWhCA,AHSA,ADGA,AMlBA,ADGA,AENA,Ad0CA;AWhCA,AHSA,ADGA,AMlBA,AENA,AHSA,AENA,Ad0CA;AWhCA,AHSA,ADGA,AMlBA,AENA,AHSA,AENA,Ad0CA;AWhCA,AHSA,ADGA,AMlBA,AENA,AHSA,AENA,Ad0CA;AWhCA,AHSA,ADGA,AS3BA,AHSA,AENA,ADGA,Ad0CA;AWhCA,AHSA,AQxBA,AHSA,AENA,ADGA,Ad0CA;AWhCA,AHSA,AQxBA,AHSA,AENA,ADGA,Ad0CA;AQvBA,AQxBA,ADGA,ADGA,Ad0CA,AiBnDA;AT4BA,AQxBA,ADGA,ADGA,Ad0CA,AiBnDA;AT4BA,AQxBA,ADGA,ADGA,Ad0CA,AiBnDA;ADIA,ADGA,ADGA,Ad0CA,AiBnDA,ACHA;AFOA,ADGA,ADGA,Ad0CA,AiBnDA,ACHA;AFOA,ADGA,Af6CA,AiBnDA,ACHA;AFOA,AhBgDA,AiBnDA,ACHA,ACHA;AHUA,AhBgDA,AiBnDA,ACHA,ACHA;AHUA,AhBgDA,AiBnDA,ACHA,ACHA;AnB0DA,AiBnDA,ACHA,ACHA,ACHA;ApB6DA,AiBnDA,ACHA,ACHA,ACHA;ApB6DA,AiBnDA,ACHA,ACHA,ACHA;ApB6DA,AiBnDA,ACHA,ACHA,ACHA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,ACHA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,ACHA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,ACHA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA;ArBgEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA;AxByEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA;AxByEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA;AxByEA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,ACHA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,ACHA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,ACHA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AFMA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,APqBA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,APqBA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,APqBA,AGTA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,APqBA,AGTA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AJYA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AJYA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ANkBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ANkBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ANkBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,APqBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,APqBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,APqBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AGTA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AavCA,AV8BA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AavCA,AV8BA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,AavCA,AV8BA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ADGA,AV8BA,AKfA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ADGA,ALeA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ADGA,ALeA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AENA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AQxBA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,AENA,AHSA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AQxBA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AQxBA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,Ac1CA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AkBtDA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AkBtDA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AkBtDA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,ANkBA,ACHA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AmBzDA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,ALeA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AmBzDA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,ALeA,ACHA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AmBzDA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,AJYA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AoB5DA,ADGA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,AJYA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AiBnDA,ACHA,ACHA,AoB5DA,ADGA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,AJYA,ARwBA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ADGA,ADGA,AJYA,ACHA,AFMA,ALeA,AS3BA,ADGA,AZoCA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ACHA,APqBA,AS3BA,ADGA,AZoCA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ACHA,APqBA,AS3BA,ADGA,AZoCA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ACHA,APqBA,AS3BA,ADGA,AZoCA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ALeA,ADGA,AZoCA,AFMA,AGTA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ALeA,ADGA,AZoCA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ALeA,AbuCA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ALeA,AMlBA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ALeA,AMlBA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,ACHA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,ANkBA,Ac1CA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,AQxBA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AFMA,ADGA,AJYA,AQxBA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AIZA,ANkBA,ADGA,AJYA,AQxBA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AIZA,ANkBA,ALeA,AQxBA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AkBtDA,ACHA,AoB5DA,ACHA,AIZA,ANkBA,ALeA,AQxBA,AENA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,ANkBA,AGTA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,AHSA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,AHSA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,AmBzDA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,ADGA,AnByDA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AKfA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AKfA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AKfA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,AoB5DA,ACHA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,A+B7FA,AV8BA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,A+B7FA,AV8BA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,A5BoFA,A+B7FA,AV8BA,AIZA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,ACHA,AENA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,APqBA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,APqBA,AENA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ALeA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AIZA,AFMA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AENA,AMlBA,ADGA,AzB2EA,AGTA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AENA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AENA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,A+C7IA,AGTA,ACHA,ACHA,ANkBA,ALeA,AENA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,ANkBA,ALeA,AENA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,ANkBA,AHSA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,ANkBA,AHSA,AMlBA,ADGA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,ANkBA,AHSA,AMlBA,AMlBA,APqBA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,ANkBA,AHSA,AMlBA,AMlBA,APqBA,AzB2EA,A8B1FA,A3BiFA,ADGA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,APqBA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ARwBA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ARwBA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ARwBA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AGTA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AWjCA,ARwBA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AWjCA,ARwBA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;AzB4EA,AsDlKA,APqBA,AWjCA,ARwBA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;A6BtFA,APqBA,AYpCA,ADGA,ARwBA,ACHA,ACHA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;A6BtFA,APqBA,AYpCA,ADGA,ARwBA,ACHA,ACHA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;A6BtFA,APqBA,AYpCA,ADGA,ARwBA,ACHA,ACHA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AzB2EA,A8B1FA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,ARwBA,ACHA,ACHA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,ARwBA,ACHA,ACHA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,ARwBA,AENA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,AGTA,AXiCA,AENA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,AGTA,AXiCA,AENA,AHSA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AFMA,AGTA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,AFMA,AGTA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AT2BA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AMlBA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AMlBA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AMlBA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,ACHA,ACHA,AOrBA,ADGA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,AENA,AOrBA,ADGA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,AENA,AOrBA,ADGA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,ACHA,AXiCA,ADGA,AMlBA,AENA,AOrBA,ACHA,AFMA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,AV8BA,ADGA,AMlBA,AS3BA,ACHA,AFMA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,AV8BA,ADGA,AMlBA,AS3BA,ACHA,AFMA,Af6CA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,AGTA,AFMA,AV8BA,ADGA,AMlBA,AS3BA,ACHA,AFMA,AGTA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AV8BA,ADGA,AMlBA,AS3BA,ACHA,AFMA,AGTA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AYpCA,ACHA,AV8BA,ADGA,AMlBA,AS3BA,ACHA,AFMA,AGTA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AoB5DA,ARwBA,ACHA,AXiCA,AMlBA,AS3BA,ACHA,AFMA,AGTA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AoB5DA,ARwBA,ACHA,AXiCA,AMlBA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AoB5DA,ARwBA,ACHA,AXiCA,AMlBA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA;A6BtFA,APqBA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA;AsBjEA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA;AsBjEA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,ACHA,ACHA,AlBsDA,AKfA,A5BoFA,A4CpIA;AtBmEA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,AENA,AlBsDA,AKfA,A5BoFA,A4CpIA;AtBmEA,AoB5DA,APqBA,AXiCA,AmBzDA,AbuCA,AS3BA,AENA,AlBsDA,AKfA,A5BoFA,A4CpIA;ACFA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AENA,AlBsDA,AKfA,A5BoFA,A4CpIA;ACFA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AhBgDA,AKfA,A5BoFA,A4CpIA;ACFA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AJYA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AhBgDA,AKfA,A5BoFA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AhBgDA,AKfA,AoB5DA,AhDgJA,A4CpIA;AELA,ADGA,AHSA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AXiCA,AoB5DA,AhDgJA,A4CpIA;AELA,AJYA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AXiCA,AoB5DA,AhDgJA,A4CpIA;AELA,AGTA,APqBA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AXiCA,AoB5DA,AhDgJA,A4CpIA;AELA,AGTA,APqBA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AELA,AGTA,APqBA,APqBA,AXiCA,AmBzDA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AJYA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AJYA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AJYA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,ACHA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,ACHA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,ACHA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AhDgJA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,APqBA,APqBA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,A4CpIA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AsDlKA,AV8BA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AsDlKA,AV8BA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AsDlKA,AV8BA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,ADGA,ALeA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,ANkBA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AIZA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AIZA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AIZA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AKfA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AKfA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AKfA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,ADGA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,AHSA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,AHSA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,AHSA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,ACHA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ARwBA,AS3BA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,ACHA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,ACHA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ADGA,AENA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,ArD+JA,AuDrKA,ADGA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,ArD+JA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AJYA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,ADGA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,AGTA,AJYA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,AGTA,AJYA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,AGTA,AJYA,AGTA,APqBA,AV8BA,AGTA,Ad0CA,AQxBA,AIZA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA,AV8BA;AMjBA,AENA,AMlBA,ACHA,AENA,AGTA,AJYA,AGTA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,ADGA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,ADGA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,AENA,AHSA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,AENA,AHSA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,AENA,AHSA,AENA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,AENA,AHSA,AIZA,AFMA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AGTA,AENA,AHSA,AIZA,AFMA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,AFMA,AT2BA,AV8BA,AGTA,Ad0CA,AYpCA,ACHA,AKfA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,AFMA,AGTA,AZoCA,AV8BA,AGTA,Ad0CA,AYpCA,AMlBA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,AFMA,AGTA,AZoCA,AV8BA,AGTA,Ad0CA,AYpCA,AMlBA,AS3BA,A9D0LA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,ACHA,AZoCA,AV8BA,AGTA,Ad0CA,AYpCA,AMlBA,ArD+JA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AYpCA,AMlBA,ArD+JA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AKfA,AHSA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AYpCA,AMlBA,ArD+JA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsDlKA;AJaA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA;AJaA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA;AJaA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA;AJaA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AZoCA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,ADGA,AIZA,AhBgDA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,AGTA,AhBgDA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,ACHA,AENA,AENA,AIZA,AENA,AGTA,AhBgDA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AENA,AIZA,AENA,AGTA,ACHA,AjBmDA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AENA,AIZA,AENA,AGTA,ACHA,AjBmDA,AV8BA,AGTA,Ad0CA,AkBtDA,ArD+JA,AsElNA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AGTA,ACHA,AjBmDA,AV8BA,AGTA,Ad0CA,AkBtDA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AjBmDA,AV8BA,AGTA,Ad0CA,AkBtDA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AjBmDA,AV8BA,AGTA,Ad0CA,AkBtDA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AjBmDA,APqBA,Ad0CA,AkBtDA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AENA,AnByDA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AENA,AnByDA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AENA,AnByDA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AFMA,ACHA,AENA,ACHA,ApB4DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,ADGA,AENA,ACHA,ApB4DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,ADGA,AENA,ACHA,ApB4DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,ADGA,AENA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,ACHA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,ACHA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AMlBA,AGTA,AMlBA,AENA,AKfA,AIZA,AHSA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AS3BA,AMlBA,AENA,AS3BA,AHSA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AS3BA,AMlBA,AENA,AS3BA,AHSA,ACHA,ACHA,ArB+DA,APqBA,AIZA,AiBnDA,AhBgDA,AiBnDA;ArBgEA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AS3BA,AHSA,ACHA,ACHA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AS3BA,AFMA,ACHA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AS3BA,AFMA,ACHA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AS3BA,AFMA,ACHA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AS3BA,ADGA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AS3BA,ADGA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,AHSA,ADGA,ArB+DA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,AHSA,AtBkEA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,AHSA,AtBkEA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,AJYA,AtBkEA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,A1B8EA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,A1B8EA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,ACHA,A3BiFA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,ACHA,A3BiFA,AHSA,AiBnDA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,ACHA,A3BiFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AavCA,ADGA,AV8BA,AYpCA,ACHA,ACHA,ACHA,A5BoFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AYpCA,ACHA,ACHA,ACHA,A5BoFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AYpCA,ACHA,ACHA,ACHA,A5BoFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AYpCA,ACHA,ACHA,ACHA,ACHA,A7BuFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AavCA,ACHA,ACHA,ACHA,A7BuFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AavCA,ACHA,ACHA,ACHA,A7BuFA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AavCA,ACHA,ACHA,ACHA,ACHA,A9B0FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ac1CA,ACHA,ACHA,ACHA,A9B0FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ac1CA,ACHA,ACHA,ACHA,A9B0FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ac1CA,ACHA,ACHA,ACHA,ACHA,A/B6FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ae7CA,ACHA,ACHA,ACHA,A/B6FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ae7CA,ACHA,ACHA,ACHA,A/B6FA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,Ae7CA,ACHA,ACHA,ACHA,ACHA,AhCgGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AgBhDA,ACHA,ACHA,ACHA,AhCgGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AgBhDA,ACHA,ACHA,ACHA,AhCgGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AgBhDA,ACHA,ACHA,ACHA,ACHA,AjCmGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AiBnDA,ACHA,ACHA,ACHA,AjCmGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AiBnDA,ACHA,ACHA,ACHA,AjCmGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AiBnDA,ACHA,ACHA,ACHA,ACHA,AlCsGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AkBtDA,ACHA,ACHA,ACHA,AlCsGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AkBtDA,ACHA,ACHA,ACHA,AlCsGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AkBtDA,ACHA,ACHA,ACHA,ACHA,AnCyGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AmBzDA,ACHA,ACHA,ACHA,AnCyGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AmBzDA,ACHA,ACHA,ACHA,AnCyGA,Ac1CA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AV8BA,AmBzDA,ACHA,ACHA,ACHA,AnCyGA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AU9BA,ACHA,ACHA,AnCyGA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AU9BA,ACHA,ACHA,AnCyGA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AU9BA,ACHA,ACHA,AENA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AWjCA,ACHA,AENA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AMlBA,AYpCA,AWjCA,ACHA,AENA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AJaA,AENA,AS3BA,AkBtDA,AWjCA,ACHA,AGTA,ADGA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,AYpCA,AGTA,ADGA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,AYpCA,AGTA,ADGA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,AYpCA,AGTA,ACHA,AFMA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,Ae7CA,ACHA,AFMA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,Ae7CA,ACHA,AFMA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;AFOA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,A7CuIA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,A7CuIA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,A7CuIA,AS3BA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ArC+GA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ArC+GA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ArC+GA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ACHA,AtCkHA,AkBtDA,Ae7CA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ACHA,AtCkHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,ACHA,AtCkHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AtCkHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AtCkHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AtCkHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AENA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A2ChIA,ACHA,AIZA,AFMA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,AiCnGA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,A0C9HA,AT2BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,A0C9HA,AT2BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,A0C9HA,AT2BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AFMA,ADGA,AENA,AxCwHA,A0C9HA,ACHA,AV8BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AENA,AxCwHA,A0C9HA,ACHA,AV8BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AENA,AxCwHA,A0C9HA,ACHA,AV8BA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AENA,AxCwHA,A0C9HA,ACHA,ACHA,AXiCA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AtCkHA,A0C9HA,ACHA,ACHA,AXiCA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AtCkHA,A0C9HA,ACHA,ACHA,AXiCA,ACHA,ACHA,AHSA,ArC+GA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,AIZA,AHSA,AtCkHA,A6CvIA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,ACHA,AtCkHA,A6CvIA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,ACHA,AtCkHA,A6CvIA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,ACHA,AQxBA,A9C0IA,A6CvIA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,ACHA,AQxBA,A9C0IA,A6CvIA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;A4CnIA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AXiCA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AIZA,Af6CA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,ACHA,AQxBA,ADGA,AHSA,ACHA,ACHA,AIZA,Af6CA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,AS3BA,ADGA,AHSA,ACHA,ACHA,AIZA,Af6CA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,AS3BA,ADGA,AHSA,ACHA,ACHA,AIZA,ACHA,AhBgDA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,AS3BA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,ACHA,AxCwHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,AS3BA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,AoC5GA,AtBkEA,AhBgDA;AsDjKA,AV8BA,AavCA,AJYA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,AJYA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,AJYA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,ADGA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,ALeA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AMlBA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AFMA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AFMA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AFMA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AvCqHA,Ac1CA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,ACHA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,ACHA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,ACHA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ADGA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ADGA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ADGA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,AFMA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,AFMA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,AFMA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,ACHA,AHSA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,ACHA,AHSA,AHSA,APqBA,AFMA,ACHA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,ACHA,ACHA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ADGA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ADGA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ADGA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ACHA,AFMA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ACHA,AFMA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AGTA,ACHA,AFMA,AHSA,AHSA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AIZA,AFMA,AHSA,AMlBA,AT2BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,ACHA,AzB2EA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AIZA,AFMA,AHSA,AMlBA,AT2BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AIZA,AFMA,AHSA,AMlBA,AT2BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AENA,AHSA,AMlBA,ACHA,AV8BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,APqBA,AQxBA,AENA,AENA,AHSA,AMlBA,ACHA,AV8BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AMlBA,ACHA,AV8BA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AOrBA,ACHA,AXiCA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AOrBA,ACHA,AXiCA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AOrBA,ACHA,AXiCA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AQxBA,ACHA,AZoCA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AQxBA,ACHA,AZoCA,APqBA,ADGA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AHSA,AQxBA,ACHA,AZoCA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AKfA,ACHA,ACHA,AbuCA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AKfA,ACHA,ACHA,AbuCA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AKfA,ACHA,ACHA,AbuCA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AKfA,AENA,ACHA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AENA,AENA,AKfA,AENA,ACHA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,ACHA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,AFMA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,AFMA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,AFMA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,ACHA,AHSA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,ACHA,AHSA,Ad0CA,ARwBA,AIZA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ACHA,ACHA,AHSA,Ad0CA,AJYA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AENA,ACHA,AJYA,Ad0CA,AJYA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AENA,ACHA,AJYA,Ad0CA,AJYA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AENA,ACHA,AJYA,Ad0CA,AJYA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AGTA,AJYA,Ad0CA,AmBzDA,AvBqEA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AGTA,AJYA,Ad0CA,AmBzDA,AvBqEA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,AGTA,AJYA,Ad0CA,AmBzDA,AvBqEA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ADGA,AvBqEA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ADGA,AvBqEA,ACHA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ADGA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,ACHA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ApB4DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ApB4DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtBkEA,AhBgDA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ApB4DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ArB+DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ArB+DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ArB+DA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,Ad0CA,AoB5DA,ACHA,AFMA,AtCkHA,AxBwEA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,ACHA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,ACHA,AxCwHA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,AENA,ADGA,AMlBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,ACHA,AENA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ARwBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,AGTA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ARwBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,AGTA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ARwBA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AavCA,AGTA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ACHA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AgBhDA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ACHA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AgBhDA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,ACHA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AgBhDA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AgBhDA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AgBhDA,AqB/DA,ACHA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AENA,ACHA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AqC/GA,AS3BA,ARwBA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AqC/GA,AS3BA,ARwBA,AGTA,AFMA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;AsDjKA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;A2FhRA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;A2FhRA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;A2FhRA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;A4FnRA,ADGA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,A4CpIA,ApE4MA,AhBgDA;A4FnRA,ADGA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ADGA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AT2BA,AOrBA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AtBkEA,AIZA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,ArC+GA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A4FnRA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AKfA,AGTA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A+F5RA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A+F5RA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;A+F5RA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AFMA,A9C0IA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,ACHA,AFMA,AGTA,AxCwHA,AV8BA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,AKfA,AJYA,AFMA,AGTA,AlDsJA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AQxBA,Ac1CA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,AKfA,AJYA,AFMA,AGTA,AlDsJA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AHSA,AKfA,AJYA,AFMA,AGTA,AlDsJA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AFMA,AGTA,AlDsJA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AFMA,AGTA,AlDsJA,AqC/GA,AS3BA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AFMA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AhDgJA,AxBwEA,AhBgDA;AgG/RA,ADGA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxEwNA,AhBgDA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxEwNA,AhBgDA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxEwNA,AhBgDA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AlDsJA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxEwNA,AhBgDA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AzD2KA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxEwNA,AhBgDA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AzD2KA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxFwQA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AKfA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AzD2KA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxFwQA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AU9BA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AzD2KA,A8C1IA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxFwQA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AU9BA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA,AxFwQA;AgG/RA,AIZA,ALeA,AGTA,ANkBA,AU9BA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AGTA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AGTA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AGTA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ARwBA,AGTA,AOrBA,AXiCA,ARwBA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,ALeA,AOrBA,AnByDA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,AXiCA,AOrBA,AnByDA,ACHA,AlBsDA,AsBlEA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,AXiCA,AOrBA,AnByDA,ACHA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,AXiCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,AZoCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,AZoCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,AZoCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,AbuCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,AbuCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,AbuCA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,Ad0CA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,Ad0CA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AQvBA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,Ad0CA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AbuCA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,Ad0CA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AbuCA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,Ad0CA,AOrBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AbuCA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,Ad0CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,Ad0CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,Ad0CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,ACHA,Af6CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,ACHA,Af6CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,ACHA,ACHA,Af6CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,ALeA,AJYA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,AFMA,ACHA,Af6CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,AFMA,ACHA,Af6CA,AIZA,ALeA,AS3BA,ANkBA,ANkBA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,AFMA,ACHA,Af6CA,AIZA,ALeA,AS3BA,AZoCA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,ADGA,AT2BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA;AqB9DA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,AV8BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA,A0B9EA;ALgBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,AV8BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AIZA,AENA,ADGA,A0B9EA;ALgBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,ARwBA,AWjCA,AV8BA,AMlBA,AMlBA,ACHA,ACHA,ACHA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;ALgBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AMlBA,AMlBA,AENA,ACHA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;ALgBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AENA,ACHA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;ALgBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AENA,ACHA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AGTA,ACHA,AHSA,ACHA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AGTA,AFMA,ACHA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AGTA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,APqBA,AlBsDA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AQxBA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AQxBA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AQxBA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ADGA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ADGA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ADGA,ALeA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,ACHA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;AELA,APqBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AzB2EA,AMlBA,ADGA,A0B9EA;ALgBA,AS3BA,ACHA,APqBA,ADGA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AavCA,AtCkHA,AKfA,A0B9EA;ALgBA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AavCA,AtCkHA,AKfA,A0B9EA;ALgBA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AavCA,AtCkHA,AKfA,A0B9EA;ALgBA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,A3BiFA,AYpCA,AGTA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A4BpFA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,Ae7CA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AavCA,AtCkHA,AKfA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,A0B9EA,AQxBA;AbwCA,AS3BA,ACHA,ARwBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,A0B9EA,AQxBA;AbwCA,AS3BA,APqBA,Af6CA,AIZA,AwBxEA,AT2BA,AvBqEA,A+B7FA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,A0B9EA,AQxBA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AlCsGA,A+B7FA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,AkCtGA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,AkCtGA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AJYA,AjCmGA,AkCtGA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AbwCA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AbwCA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AbwCA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AbwCA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AjCmGA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AHSA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AKfA,ARwBA,AHSA,AZoCA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AmBzDA,AV8BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AKfA,ARwBA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AWjCA,AKfA,ARwBA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AiBnDA,ANkBA,AKfA,ARwBA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AiBnDA,ANkBA,AKfA,ARwBA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AiBnDA,ANkBA,AKfA,ARwBA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AXiCA,AwBxEA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,AV8BA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,AV8BA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,AV8BA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,A1C8HA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AKfA,A/C6IA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AKfA,A/C6IA,AkCtGA;AOpBA,ApB4DA,AS3BA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AKfA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ADGA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ADGA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ADGA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,AFMA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,AFMA,A/C6IA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,AjDmJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,ACHA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,ACHA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,ACHA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AiBnDA,AENA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AlDsJA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ApD4JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ApD4JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ApD4JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ACHA,ArD+JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ACHA,ArD+JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,ADGA,AENA,ACHA,ArD+JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AENA,AGTA,AJYA,AENA,ACHA,ArD+JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AKfA,AJYA,AENA,ACHA,ArD+JA,AkCtGA;AOpBA,AXiCA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AKfA,AJYA,AENA,ACHA,ArD+JA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AKfA,AJYA,AENA,ACHA,AENA,AvDqKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AMlBA,ACHA,AKfA,AJYA,AGTA,AENA,AvDqKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,AKfA,AJYA,AGTA,AENA,AvDqKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,AKfA,AJYA,AGTA,AENA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,AKfA,AJYA,AKfA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,AKfA,AJYA,AKfA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,AKfA,AJYA,AOrBA,AFMA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,AFMA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,AFMA,ACHA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,AFMA,AGTA,AFMA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,ACHA,AFMA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,Af6CA,AmBzDA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,ACHA,AFMA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,AIZA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,ACHA,ACHA,AHSA,AxDwKA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,AIZA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,ACHA,ACHA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AENA,ACHA,AXiCA,AIZA,ANkBA,AS3BA,AOrBA,ACHA,AOrBA,ACHA,ACHA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AQxBA,AOrBA,ACHA,AENA,ADGA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AQxBA,AQxBA,AENA,ADGA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AgBhDA,AENA,ADGA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AgBhDA,AENA,ACHA,AFMA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AkBtDA,ACHA,AFMA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AkBtDA,ACHA,AFMA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AXiCA,AIZA,ANkBA,AS3BA,AkBtDA,ACHA,ACHA,AHSA,A3DiLA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,APqBA,ANkBA,AS3BA,AkBtDA,ACHA,ACHA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,APqBA,ANkBA,AS3BA,AkBtDA,ACHA,ACHA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,APqBA,ANkBA,AS3BA,AkBtDA,ACHA,AENA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,APqBA,ANkBA,AS3BA,AmBzDA,AENA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,APqBA,ANkBA,AS3BA,AmBzDA,AENA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,AS3BA,AsBlEA,AHSA,AENA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,AS3BA,AsBlEA,ADGA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,AS3BA,AsBlEA,ADGA,ADGA,A9D0LA,AkCtGA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,AS3BA,AsBlEA,ADGA,ADGA,A9D0LA,AiEnMA,A/B6FA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,AS3BA,AsBlEA,ADGA,AENA,A/B6FA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,A+B7FA,ADGA,AENA,A/B6FA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,A+B7FA,ADGA,AGTA,ADGA,A/B6FA;AJaA,APqBA,AavCA,AT2BA,AiBnDA,ANkBA,AKfA,AGTA,AbuCA,A+B7FA,AENA,ADGA,A/B6FA;AJaA,APqBA,AavCA,AT2BA,AWjCA,AKfA,AGTA,AbuCA,A+B7FA,AENA,ADGA;AnC0GA,APqBA,AavCA,AT2BA,AWjCA,AKfA,AGTA,AbuCA,A+B7FA,AENA,ADGA,AENA;ArCgHA,APqBA,AavCA,AT2BA,AWjCA,AKfA,AGTA,AbuCA,AiCnGA,ADGA,AENA;ArCgHA,APqBA,AavCA,AT2BA,AWjCA,AKfA,AGTA,AbuCA,AiCnGA,ADGA,AENA;ArCgHA,APqBA,AavCA,AT2BA,AWjCA,AKfA,AGTA,AbuCA,AiCnGA,AENA,AHSA,AENA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AbuCA,AiCnGA,AENA,AHSA,AENA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AbuCA,AiCnGA,AENA,AHSA,AENA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AbuCA,AiCnGA,AGTA,ADGA,AHSA,AENA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AbuCA,AiCnGA,AGTA,ADGA,AHSA,AENA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AoB5DA,AGTA,ADGA,ADGA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AoB5DA,AGTA,ADGA,AENA,AHSA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AoB5DA,AGTA,ADGA,AENA,AHSA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AoB5DA,AGTA,ADGA,AENA,AHSA;ArCgHA,APqBA,AavCA,AENA,AKfA,AGTA,AyB3EA,ALeA,AGTA,ADGA,AENA,AHSA;ArCgHA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,ALeA,AGTA,ADGA,AENA,AHSA;ArCgHA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AKdA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AKdA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AKdA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AMjBA,ADGA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AMjBA,ADGA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AMjBA,ADGA,A1C8HA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AMjBA,ADGA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AFMA,ADGA,AENA,AHSA;AMjBA,ADGA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AHSA,AENA,AHSA;AMjBA,ADGA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AHSA,AENA,AHSA;AMjBA,AENA,AHSA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,AGTA,AyB3EA,AHSA,AENA,AHSA;AMjBA,AENA,AHSA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AENA,AHSA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AENA,ACHA,AJYA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AENA,ACHA,AJYA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AENA,ACHA,AJYA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AENA,A5CoIA,APqBA,Ae7CA,AKfA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AENA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,AJYA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,AJYA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,AJYA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ALeA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ALeA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ALeA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ACHA,ANkBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ACHA,ANkBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ACHA,ANkBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ACHA,ACHA,APqBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,AFMA,ACHA,AJYA,AMlBA,ACHA,ACHA,ACHA,APqBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,ACHA,ACHA,APqBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,ACHA,ACHA,ACHA,ARwBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,ACHA,ACHA,ACHA,ARwBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,ACHA,ACHA,ACHA,ARwBA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,ACHA,ACHA,ACHA,ACHA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ALeA,AMlBA,ACHA,AENA,ACHA,ACHA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AENA,ACHA,ACHA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AENA,ACHA,AENA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AENA,ACHA,AENA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AGTA,AENA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA;AMjBA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,ADGA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,AGTA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,AGTA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AGTA,ADGA,AGTA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AMlBA,AHSA,ADGA,AGTA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AHSA,AmBzDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AMlBA,AHSA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AGTA,AMlBA,AHSA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AHSA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AHSA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AHSA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AENA,ALeA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AENA,ALeA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AU9BA,ADGA,AENA,ALeA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AYpCA,AFMA,ADGA,AENA,ALeA,AENA,AJYA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AYpCA,AFMA,ADGA,AENA,ALeA,AFMA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AbwCA,AIZA,ACHA,ACHA,AYpCA,AFMA,ADGA,AENA,ALeA,AFMA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,AnByDA,AIZA,ACHA,ACHA,AYpCA,AFMA,ADGA,AENA,ALeA,AFMA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,AnByDA,AIZA,ACHA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,A5CoIA,APqBA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,AnByDA,AIZA,ACHA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ApB4DA,AIZA,ACHA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ApB4DA,AIZA,ACHA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ApB4DA,AIZA,ACHA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ACHA,ArB+DA,AKfA,ACHA,AYpCA,AFMA,ACHA,ALeA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ACHA,ArB+DA,AKfA,ACHA,AYpCA,AFMA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,ACHA,ArB+DA,AKfA,ACHA,AYpCA,AFMA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,ArB+DA,AKfA,ACHA,AYpCA,AFMA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,ArB+DA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,ArB+DA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AMjBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AENA,AgBhDA;AWhCA,ALeA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ALeA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ALeA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,ACHA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AvBqEA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,A3BiFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,A3BiFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,A3BiFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,A5BoFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,A5BoFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ANkBA,AOrBA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,A5BoFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AoB5DA,A4BpFA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,ANkBA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AU9BA,AJYA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AWhCA,ACHA,ACHA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AYnCA,AOrBA,ANkBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AYnCA,AOrBA,ANkBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AYnCA,AOrBA,ANkBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AgDhJA,AHSA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,A6CvIA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,A6CvIA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AoF5PA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AoF5PA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AoF5PA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AvCqHA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AENA,AzC2HA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AXiCA,AENA,ADGA,AENA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AENA,AzC2HA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AT2BA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AENA,AzC2HA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AT2BA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AT2BA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AFMA,AT2BA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AKfA,AT2BA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,ACHA,AIZA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,A1C8HA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AENA,A5CoIA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AENA,A5CoIA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AENA,A5CoIA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AGTA,A7CuIA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AGTA,A7CuIA,AkBtDA;AmBxDA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AGTA,A7CuIA;AqC9GA,ACHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AIZA,A9C0IA;AsCjHA,APqBA,AJYA,AKfA,ACHA,ACHA,ACHA,A9B0FA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AIZA,A9C0IA;AsCjHA,APqBA,AJYA,AKfA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AIZA,A9C0IA;AsCjHA,APqBA,AJYA,AKfA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,AENA,ADGA,AKfA,A/C6IA;A+B5FA,AJYA,AKfA,ACHA,ACHA,A7BuFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AKfA,A/C6IA;A+B5FA,AJYA,AKfA,ACHA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AKfA,A/C6IA;A+B5FA,AJYA,AKfA,ACHA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AMlBA,AhDgJA;A+B5FA,AJYA,AKfA,ACHA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AMlBA,AhDgJA;A+B5FA,AJYA,AKfA,ACHA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AMlBA,AhDgJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AOrBA,AjDmJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AOrBA,AjDmJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,AMlBA,AXiCA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AOrBA,AjDmJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AQxBA,AlDsJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AQxBA,AlDsJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AQxBA,AlDsJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AS3BA,AnDyJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AS3BA,AnDyJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,ACHA,AS3BA,AnDyJA;A+B5FA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA;ArBgEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA;ArBgEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA;ArBgEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AU9BA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AavCA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AavCA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,AavCA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AKfA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AMlBA,A5BoFA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ADGA,AENA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,ADGA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,AJYA,AtBkEA,AmDzJA,A9C0IA,ACHA,ALeA,AnDyJA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,ACHA,AiDnJA,AzG2TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,ACHA,AiDnJA,AzG2TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,ACHA,AiDnJA,AzG2TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,ACHA,AiDnJA,ACHA,A1G8TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,ACHA,A1G8TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,ACHA,A1G8TA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,ACHA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,ACHA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,ACHA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,A3GiUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AoD5JA,ACHA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AGTA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AkDtJA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AqD/JA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,AkBtDA,AJYA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ANkBA,AKfA,AFMA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,AwDxKA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,A2DjLA,AHSA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,A9C0IA,A2DjLA,AHSA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,ADGA,AGTA,ALeA,AFMA,ACHA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,ADGA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,ADGA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,ADGA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ANkBA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA,Ad0CA;AtBmEA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ANkBA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ANkBA,AGTA,ALeA,AFMA,AS3BA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,ACHA,AJYA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AavCA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA,AmEzMA;ApC6GA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,ACHA,Ac1CA,AENA,AHSA,AHSA,AnDyJA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AnDyJA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AnDyJA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AnDyJA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,A3EiOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,A3EiOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,A3EiOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,AENA,A7GuUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,A3GiUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,A3GiUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AHSA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,A3GiUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,AvBqEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,ALeA,AOrBA,ARwBA,A3GiUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,AvBqEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,ARwBA,A3GiUA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,AvBqEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,ACHA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA;A+B5FA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,A1B8EA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA;AlDuJA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,APqBA,AGTA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA,AENA;ApD6JA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,AJYA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA,AENA;ApD6JA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,AJYA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA,AENA;ApD6JA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,AJYA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,AHSA,A5EoOA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AKfA,ACHA,AJYA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AiBnDA,AJYA,AHSA,AMlBA,AJYA,AENA,AnHyVA,AqF/PA,AkCtGA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AnHyVA,AqF/PA,A6CvIA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AnHyVA,AqF/PA,A6CvIA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A6CvIA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AiFnPA,AENA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AENA,AENA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AXiCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AIZA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,AbuCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AIZA,A5BoFA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,AbuCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,AbuCA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,ACHA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,ACHA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,ACHA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ADGA,AENA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ACHA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA,ACHA;ArDgKA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,A9B0FA,A8C1IA,ACHA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A8C1IA,ACHA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AjCmGA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AiBnDA,AlDsJA,Ac1CA,AENA,AoB5DA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AiBnDA,AlDsJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AiBnDA,AlDsJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,ADGA,Ad0CA,AiBnDA,ACHA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,Af6CA,AiBnDA,ACHA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,Af6CA,AiBnDA,ACHA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AENA,Af6CA,AiBnDA,AENA,ADGA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ADGA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ADGA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AoB5DA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA,AmFzPA;ApD6JA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ANkBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ANkBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ANkBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,AENA,AyB3EA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,A8B1FA,AHSA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AavCA,AHSA,AMlBA,AJYA,A8B1FA,AHSA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,AHSA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ACHA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,AJYA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,AJYA,ACHA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,AHSA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AJYA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AJYA,APqBA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AFMA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AQxBA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AQxBA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AQxBA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AKfA,ACHA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AS3BA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AMlBA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AS3BA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AMlBA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AS3BA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,AMlBA,AXiCA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AnDyJA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,A+C7IA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,AkEtMA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,AkEtMA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,A8B1FA,ACHA,AJYA,ALeA,AlDsJA,AkEtMA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AuCrHA,AT2BA,ACHA,AJYA,ALeA,AlDsJA,AkEtMA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AuCrHA,AT2BA,ACHA,AJYA,ALeA,AlDsJA,AkEtMA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AuCrHA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ADGA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ADGA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ADGA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ACHA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AHSA,AwBxEA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ACHA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ACHA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;A+B5FA,A1B8EA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AT2BA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AIZA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AiBnDA,AENA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AIZA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AIZA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ADGA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ADGA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ADGA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,ADGA,ADGA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AbuCA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,AhBgDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,AhBgDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,AhBgDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,AENA,ADGA,AFMA,AKfA,ACHA,AFMA,AGTA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ACHA,AFMA,AS3BA,AJYA,ACHA,AFMA,AGTA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ACHA,AFMA,AS3BA,AJYA,ACHA,AFMA,AGTA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AwCxHA,ADGA,AS3BA,AJYA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AT2BA,ADGA,AS3BA,AJYA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AT2BA,ADGA,AS3BA,AJYA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AT2BA,ADGA,AS3BA,AJYA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AT2BA,ADGA,AS3BA,AENA,ANkBA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AbuCA,AmBzDA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AT2BA,ADGA,AS3BA,AENA,ANkBA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AV8BA,AS3BA,AENA,ANkBA,ACHA,ACHA,ACHA,AjBmDA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AV8BA,AS3BA,AENA,ANkBA,ACHA,ACHA,ACHA,AIZA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AV8BA,AWjCA,ALeA,ACHA,ACHA,AIZA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AJYA,AiDnJA,AV8BA,AWjCA,ALeA,ACHA,ACHA,AIZA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,A6CvIA,AV8BA,AWjCA,AJYA,ACHA,AKfA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,A6CvIA,AV8BA,AWjCA,AJYA,ACHA,AKfA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,A6CvIA,AV8BA,AWjCA,AJYA,ACHA,AKfA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,A6CvIA,AV8BA,AWjCA,AJYA,AOrBA,ANkBA,AKfA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,A6CvIA,AV8BA,AWjCA,AJYA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AmCzGA,AWjCA,AJYA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AmCzGA,Ae7CA,AJYA,AJYA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AJYA,AJYA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,ARwBA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,ACHA,AxBwEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,ACHA,AT2BA,AOrBA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,ACHA,AFMA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,ACHA,AFMA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,ADGA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AKfA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AKfA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AKfA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AMlBA,ADGA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AMlBA,ADGA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AMlBA,ADGA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AMlBA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,ADGA,AFMA,ADGA,AMlBA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AMlBA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AQxBA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AQxBA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AQxBA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AS3BA,ADGA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AS3BA,ADGA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AS3BA,ADGA,AFMA,ACHA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AS3BA,ADGA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AkDtJA,AENA,AHSA,ADGA,AS3BA,ADGA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,ADGA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,AHSA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,AHSA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,AHSA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AENA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AJYA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,AS3BA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,Ae7CA,ANkBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,Ae7CA,ANkBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,Ae7CA,ANkBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,ADGA,Ae7CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AoD5JA,AHSA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AU9BA,AFMA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AiDnJA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,ACHA,AQxBA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,AmDzJA,AU9BA,AMlBA,AiEnMA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AiEnMA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,AFMA,ANkBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AiEnMA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ApF4PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ApF4PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ApF4PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,APqBA,AENA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AKdA,A6DvLA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA;AkErMA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,ADGA,AhBgDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,ACHA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,AGTA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,AGTA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AkGtSA,AGTA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AJYA,AGTA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A/E6OA,A6IvaA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AJYA,AGTA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,ADGA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ANkBA,AKfA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,ADGA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,ADGA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,ADGA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AENA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AENA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AENA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,ALeA,ACHA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,ArF+PA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,A5FoRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,A5FoRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AGTA;A9E2OA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,A5FoRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,ACHA,A7FuRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,ACHA,AJYA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,ACHA,A7FuRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,ACHA,A7FuRA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,ACHA,ACHA,A9F0RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AFMA,AOrBA,ACHA,ACHA,A9F0RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AKfA,ACHA,ACHA,A9F0RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AKfA,ACHA,ACHA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,ALeA,AgBhDA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AKfA,ACHA,ACHA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AKfA,ACHA,ACHA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AKfA,ACHA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;A3EkOA,AMlBA,AkEtMA,AjBmDA,Ac1CA,ACHA,AJYA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AWhCA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AWhCA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,ADGA,AHSA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AWhCA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ADGA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ADGA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ADGA,AtFkQA,AMlBA,AkEtMA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AMlBA,AGTA,AFMA,ACHA,A/F6RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ACHA,AFMA,AtFkQA,AwExNA,AjBmDA,Ac1CA,AHSA,AENA,ADGA,AHSA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AMlBA,AGTA,AFMA,A9F0RA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ACHA,AFMA,AtFkQA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ACHA,AFMA,AtFkQA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ACHA,AFMA,AGTA,AzF2QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AYnCA,ACHA,AFMA,AGTA,AzF2QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,AFMA,AGTA,AzF2QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,A1F8QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,A1F8QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,A1F8QA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AENA,AJYA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA;AatCA,ACHA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AiBnDA;AHUA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AiBnDA;AHUA,ACHA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AiBnDA;AHUA,AIZA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8D1LA,AiBnDA;AHUA,AIZA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;ACFA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ADGA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ADGA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ADGA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,AS3BA,AV8BA,AavCA,AhEgMA,AsGlTA,AGTA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,ARwBA,ArB+DA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AHSA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AFMA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,AHSA,AFMA,AHSA,A7BuFA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AyG3TA,AJYA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A+E7OA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,A3FiRA,AuDrKA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AuFrQA,ADGA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AuFrQA,ADGA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AuFrQA,ADGA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AwFxQA,AFMA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AwFxQA,AFMA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AwFxQA,AFMA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,AqG/SA,AS3BA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AyF3QA,AHSA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AyF3QA,AHSA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AyF3QA,AHSA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A0F9QA,AJYA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A0F9QA,AJYA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A0F9QA,AJYA,APqBA;AELA,ACHA,AENA,AJYA,AGTA,ANkBA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A2FjRA,ALeA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A2FjRA,ALeA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A2FjRA,ALeA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A4FpRA,ANkBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A4FpRA,ANkBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A4FpRA,ANkBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A6FvRA,APqBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A6FvRA,APqBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A6FvRA,APqBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8F1RA,ARwBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8F1RA,ARwBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,A8F1RA,ARwBA,APqBA;AELA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,AS3BA;Ad2CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,AS3BA;Ad2CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,AS3BA;Ad2CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,AU9BA;Af8CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ALeA,AHSA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AsFlQA,AU9BA;Af8CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AgGhSA;Af8CA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AiGnSA;AhBiDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AiGnSA;AhBiDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AnByDA,AMlBA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AiGnSA;AhBiDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AkGtSA;AjBoDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AkGtSA;AjBoDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AkGtSA;AjBoDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,A8G1UA,AhGgSA,AsBlEA,AvBqEA,AqB/DA,AIZA,AmGzSA;AlBuDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,AmGzSA;AlBuDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AIZA,AmGzSA;AlBuDA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AwGxTA;AnB0DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AwGxTA;AnB0DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AwGxTA;AnB0DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AyG3TA;ApB6DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AyG3TA;ApB6DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA,AyG3TA;ApB6DA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AqC/GA,AlEsMA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AavCA,AhEgMA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AENA,AJYA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AqF9PA,ACHA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AsFjQA,AFMA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,A7BuFA,AHSA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,AbuCA,ADGA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AoF3PA,AHSA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,Ac1CA,ARwBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,AnDyJA,Ac1CA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,ACHA,ApC4GA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,AnCyGA,AMlBA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA,AqB/DA;AiFlPA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,AsBlEA,AvBqEA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AWjCA,Ad0CA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AsGjTA,A7BuFA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AhCgGA,AHSA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,ArC+GA,ADGA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AyE1NA,AnCyGA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AsCjHA,AtCkHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Chart = exports.stdlib = exports.geolib = exports.graphlib = exports.plotlib = exports.corelib = exports.litelib = void 0;\nconst lib_1 = require(\"./lib\");\nObject.defineProperty(exports, \"litelib\", { enumerable: true, get: function () { return lib_1.litelib; } });\nObject.defineProperty(exports, \"corelib\", { enumerable: true, get: function () { return lib_1.corelib; } });\nObject.defineProperty(exports, \"plotlib\", { enumerable: true, get: function () { return lib_1.plotlib; } });\nObject.defineProperty(exports, \"graphlib\", { enumerable: true, get: function () { return lib_1.graphlib; } });\nObject.defineProperty(exports, \"geolib\", { enumerable: true, get: function () { return lib_1.geolib; } });\nObject.defineProperty(exports, \"stdlib\", { enumerable: true, get: function () { return lib_1.stdlib; } });\nconst api_1 = require(\"./api\");\n__exportStar(require(\"./exports\"), exports);\n/**\n * G2 standard library initial all the libs except 3D and auto.\n */\nconst library = Object.assign({}, (0, lib_1.stdlib)());\nexports.Chart = (0, api_1.extend)(api_1.Runtime, library);\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.litelib = exports.stdlib = exports.plotlib = exports.graphlib = exports.geolib = exports.corelib = void 0;\nvar core_1 = require(\"./core\");\nObject.defineProperty(exports, \"corelib\", { enumerable: true, get: function () { return core_1.corelib; } });\nvar geo_1 = require(\"./geo\");\nObject.defineProperty(exports, \"geolib\", { enumerable: true, get: function () { return geo_1.geolib; } });\nvar graph_1 = require(\"./graph\");\nObject.defineProperty(exports, \"graphlib\", { enumerable: true, get: function () { return graph_1.graphlib; } });\nvar plot_1 = require(\"./plot\");\nObject.defineProperty(exports, \"plotlib\", { enumerable: true, get: function () { return plot_1.plotlib; } });\nvar std_1 = require(\"./std\");\nObject.defineProperty(exports, \"stdlib\", { enumerable: true, get: function () { return std_1.stdlib; } });\nvar lite_1 = require(\"./lite\");\nObject.defineProperty(exports, \"litelib\", { enumerable: true, get: function () { return lite_1.litelib; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.corelib = void 0;\nconst coordinate_1 = require(\"../coordinate\");\nconst encode_1 = require(\"../encode\");\nconst mark_1 = require(\"../mark\");\nconst palette_1 = require(\"../palette\");\nconst scale_1 = require(\"../scale\");\nconst theme_1 = require(\"../theme\");\nconst component_1 = require(\"../component\");\nconst animation_1 = require(\"../animation\");\nconst interaction_1 = require(\"../interaction\");\nconst composition_1 = require(\"../composition\");\nconst transform_1 = require(\"../transform\");\nconst data_1 = require(\"../data\");\nconst label_transform_1 = require(\"../label-transform\");\nfunction corelib() {\n return {\n 'data.fetch': data_1.Fetch,\n 'data.inline': data_1.Inline,\n 'data.sortBy': data_1.SortBy,\n 'data.sort': data_1.Sort,\n 'data.filter': data_1.Filter,\n 'data.pick': data_1.Pick,\n 'data.rename': data_1.Rename,\n 'data.fold': data_1.Fold,\n 'data.slice': data_1.Slice,\n 'data.custom': data_1.Custom,\n 'data.map': data_1.Map,\n 'data.join': data_1.Join,\n 'data.kde': data_1.KDE,\n 'data.log': data_1.Log,\n 'data.wordCloud': data_1.WordCloud,\n 'data.ema': data_1.EMA,\n 'transform.stackY': transform_1.StackY,\n 'transform.binX': transform_1.BinX,\n 'transform.bin': transform_1.Bin,\n 'transform.dodgeX': transform_1.DodgeX,\n 'transform.jitter': transform_1.Jitter,\n 'transform.jitterX': transform_1.JitterX,\n 'transform.jitterY': transform_1.JitterY,\n 'transform.symmetryY': transform_1.SymmetryY,\n 'transform.diffY': transform_1.DiffY,\n 'transform.stackEnter': transform_1.StackEnter,\n 'transform.normalizeY': transform_1.NormalizeY,\n 'transform.select': transform_1.Select,\n 'transform.selectX': transform_1.SelectX,\n 'transform.selectY': transform_1.SelectY,\n 'transform.groupX': transform_1.GroupX,\n 'transform.groupY': transform_1.GroupY,\n 'transform.groupColor': transform_1.GroupColor,\n 'transform.group': transform_1.Group,\n 'transform.sortX': transform_1.SortX,\n 'transform.sortY': transform_1.SortY,\n 'transform.sortColor': transform_1.SortColor,\n 'transform.flexX': transform_1.FlexX,\n 'transform.pack': transform_1.Pack,\n 'transform.sample': transform_1.Sample,\n 'transform.filter': transform_1.Filter,\n 'coordinate.cartesian': coordinate_1.Cartesian,\n 'coordinate.polar': coordinate_1.Polar,\n 'coordinate.transpose': coordinate_1.Transpose,\n 'coordinate.theta': coordinate_1.Theta,\n 'coordinate.parallel': coordinate_1.Parallel,\n 'coordinate.fisheye': coordinate_1.Fisheye,\n 'coordinate.radial': coordinate_1.Radial,\n 'coordinate.radar': coordinate_1.Radar,\n 'coordinate.helix': coordinate_1.Helix,\n 'encode.constant': encode_1.Constant,\n 'encode.field': encode_1.Field,\n 'encode.transform': encode_1.Transform,\n 'encode.column': encode_1.Column,\n 'mark.interval': mark_1.Interval,\n 'mark.rect': mark_1.Rect,\n 'mark.line': mark_1.Line,\n 'mark.point': mark_1.Point,\n 'mark.text': mark_1.Text,\n 'mark.cell': mark_1.Cell,\n 'mark.area': mark_1.Area,\n 'mark.link': mark_1.Link,\n 'mark.image': mark_1.Image,\n 'mark.polygon': mark_1.Polygon,\n 'mark.box': mark_1.Box,\n 'mark.vector': mark_1.Vector,\n 'mark.lineX': mark_1.LineX,\n 'mark.lineY': mark_1.LineY,\n 'mark.connector': mark_1.Connector,\n 'mark.range': mark_1.Range,\n 'mark.rangeX': mark_1.RangeX,\n 'mark.rangeY': mark_1.RangeY,\n 'mark.path': mark_1.Path,\n 'mark.shape': mark_1.Shape,\n 'mark.density': mark_1.Density,\n 'mark.heatmap': mark_1.Heatmap,\n 'mark.wordCloud': mark_1.WordCloud,\n 'palette.category10': palette_1.Category10,\n 'palette.category20': palette_1.Category20,\n 'scale.linear': scale_1.Linear,\n 'scale.ordinal': scale_1.Ordinal,\n 'scale.band': scale_1.Band,\n 'scale.identity': scale_1.Identity,\n 'scale.point': scale_1.Point,\n 'scale.time': scale_1.Time,\n 'scale.log': scale_1.Log,\n 'scale.pow': scale_1.Pow,\n 'scale.sqrt': scale_1.Sqrt,\n 'scale.threshold': scale_1.Threshold,\n 'scale.quantile': scale_1.Quantile,\n 'scale.quantize': scale_1.Quantize,\n 'scale.sequential': scale_1.Sequential,\n 'scale.constant': scale_1.Constant,\n 'theme.classic': theme_1.Classic,\n 'theme.classicDark': theme_1.ClassicDark,\n 'theme.academy': theme_1.Academy,\n 'theme.light': theme_1.Light,\n 'theme.dark': theme_1.Dark,\n 'component.axisX': component_1.AxisX,\n 'component.axisY': component_1.AxisY,\n 'component.legendCategory': component_1.LegendCategory,\n 'component.legendContinuous': component_1.LegendContinuous,\n 'component.legends': component_1.Legends,\n 'component.title': component_1.TitleComponent,\n 'component.sliderX': component_1.SliderX,\n 'component.sliderY': component_1.SliderY,\n 'component.scrollbarX': component_1.ScrollbarX,\n 'component.scrollbarY': component_1.ScrollbarY,\n 'animation.scaleInX': animation_1.ScaleInX,\n 'animation.scaleOutX': animation_1.ScaleOutX,\n 'animation.scaleInY': animation_1.ScaleInY,\n 'animation.scaleOutY': animation_1.ScaleOutY,\n 'animation.waveIn': animation_1.WaveIn,\n 'animation.fadeIn': animation_1.FadeIn,\n 'animation.fadeOut': animation_1.FadeOut,\n 'animation.zoomIn': animation_1.ZoomIn,\n 'animation.zoomOut': animation_1.ZoomOut,\n 'animation.pathIn': animation_1.PathIn,\n 'animation.morphing': animation_1.Morphing,\n 'animation.growInX': animation_1.GrowInX,\n 'animation.growInY': animation_1.GrowInY,\n 'interaction.elementHighlight': interaction_1.ElementHighlight,\n 'interaction.elementHighlightByX': interaction_1.ElementHighlightByX,\n 'interaction.elementHighlightByColor': interaction_1.ElementHighlightByColor,\n 'interaction.elementSelect': interaction_1.ElementSelect,\n 'interaction.elementSelectByX': interaction_1.ElementSelectByX,\n 'interaction.elementSelectByColor': interaction_1.ElementSelectByColor,\n 'interaction.fisheye': interaction_1.Fisheye,\n 'interaction.chartIndex': interaction_1.ChartIndex,\n 'interaction.tooltip': interaction_1.Tooltip,\n 'interaction.legendFilter': interaction_1.LegendFilter,\n 'interaction.legendHighlight': interaction_1.LegendHighlight,\n 'interaction.brushHighlight': interaction_1.BrushHighlight,\n 'interaction.brushXHighlight': interaction_1.BrushXHighlight,\n 'interaction.brushYHighlight': interaction_1.BrushYHighlight,\n 'interaction.brushAxisHighlight': interaction_1.BrushAxisHighlight,\n 'interaction.brushFilter': interaction_1.BrushFilter,\n 'interaction.brushXFilter': interaction_1.BrushXFilter,\n 'interaction.brushYFilter': interaction_1.BrushYFilter,\n 'interaction.sliderFilter': interaction_1.SliderFilter,\n 'interaction.scrollbarFilter': interaction_1.ScrollbarFilter,\n 'interaction.poptip': interaction_1.Poptip,\n 'interaction.treemapDrillDown': interaction_1.TreemapDrillDown,\n 'interaction.elementPointMove': interaction_1.ElementPointMove,\n 'composition.spaceLayer': composition_1.SpaceLayer,\n 'composition.spaceFlex': composition_1.SpaceFlex,\n 'composition.facetRect': composition_1.FacetRect,\n 'composition.repeatMatrix': composition_1.RepeatMatrix,\n 'composition.facetCircle': composition_1.FacetCircle,\n 'composition.timingKeyframe': composition_1.TimingKeyframe,\n 'labelTransform.overlapHide': label_transform_1.OverlapHide,\n 'labelTransform.overlapDodgeY': label_transform_1.OverlapDodgeY,\n 'labelTransform.overflowHide': label_transform_1.OverflowHide,\n 'labelTransform.contrastReverse': label_transform_1.ContrastReverse,\n 'labelTransform.exceedAdjust': label_transform_1.ExceedAdjust,\n };\n}\nexports.corelib = corelib;\n//# sourceMappingURL=core.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Radar = exports.Fisheye = exports.Parallel = exports.getRadialOptions = exports.Radial = exports.getThetaOptions = exports.Theta = exports.Transpose = exports.Helix = exports.getPolarOptions = exports.Polar = exports.Cartesian = void 0;\nvar cartesian_1 = require(\"./cartesian\");\nObject.defineProperty(exports, \"Cartesian\", { enumerable: true, get: function () { return cartesian_1.Cartesian; } });\nvar polar_1 = require(\"./polar\");\nObject.defineProperty(exports, \"Polar\", { enumerable: true, get: function () { return polar_1.Polar; } });\nObject.defineProperty(exports, \"getPolarOptions\", { enumerable: true, get: function () { return polar_1.getPolarOptions; } });\nvar helix_1 = require(\"./helix\");\nObject.defineProperty(exports, \"Helix\", { enumerable: true, get: function () { return helix_1.Helix; } });\nvar transpose_1 = require(\"./transpose\");\nObject.defineProperty(exports, \"Transpose\", { enumerable: true, get: function () { return transpose_1.Transpose; } });\nvar theta_1 = require(\"./theta\");\nObject.defineProperty(exports, \"Theta\", { enumerable: true, get: function () { return theta_1.Theta; } });\nObject.defineProperty(exports, \"getThetaOptions\", { enumerable: true, get: function () { return theta_1.getThetaOptions; } });\nvar radial_1 = require(\"./radial\");\nObject.defineProperty(exports, \"Radial\", { enumerable: true, get: function () { return radial_1.Radial; } });\nObject.defineProperty(exports, \"getRadialOptions\", { enumerable: true, get: function () { return radial_1.getRadialOptions; } });\nvar parallel_1 = require(\"./parallel\");\nObject.defineProperty(exports, \"Parallel\", { enumerable: true, get: function () { return parallel_1.Parallel; } });\nvar fisheye_1 = require(\"./fisheye\");\nObject.defineProperty(exports, \"Fisheye\", { enumerable: true, get: function () { return fisheye_1.Fisheye; } });\nvar radar_1 = require(\"./radar\");\nObject.defineProperty(exports, \"Radar\", { enumerable: true, get: function () { return radar_1.Radar; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Cartesian = void 0;\n/**\n * Default coordinate transformation for all charts.\n */\nconst Cartesian = () => [['cartesian']];\nexports.Cartesian = Cartesian;\nexports.Cartesian.props = {};\n//# sourceMappingURL=cartesian.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polar = exports.getPolarOptions = void 0;\nconst angle_1 = require(\"../utils/angle\");\nconst getPolarOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n const polarOption = Object.assign(Object.assign({}, defaultOptions), options);\n return Object.assign(Object.assign({}, polarOption), (0, angle_1.convertAngles)(polarOption.startAngle, polarOption.endAngle));\n};\nexports.getPolarOptions = getPolarOptions;\n/**\n * Polar transformation for circular charts using center of canvas as origin.\n * @todo Adjust size of canvas by startAngle and endAngle to make chart as big as possible.\n */\nconst Polar = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getPolarOptions)(options);\n return [\n ['translate', 0, 0.5],\n ['reflect.y'],\n ['translate', 0, -0.5],\n ['polar', startAngle, endAngle, innerRadius, outerRadius],\n ];\n};\nexports.Polar = Polar;\nexports.Polar.props = {};\n//# sourceMappingURL=polar.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertAngles = exports.toDegree = exports.toRadian = void 0;\nfunction toRadian(degree) {\n return (degree * Math.PI) / 180;\n}\nexports.toRadian = toRadian;\nfunction toDegree(radian) {\n return (radian * 180) / Math.PI;\n}\nexports.toDegree = toDegree;\n// convert the angle to the range of 0 to 4*Math.PI\nfunction convertAngles(startAngle, endAngle) {\n startAngle = startAngle % (2 * Math.PI);\n endAngle = endAngle % (2 * Math.PI);\n if (startAngle < 0) {\n startAngle = 2 * Math.PI + startAngle;\n }\n if (endAngle < 0) {\n endAngle = 2 * Math.PI + endAngle;\n }\n if (startAngle >= endAngle) {\n endAngle = endAngle + 2 * Math.PI;\n }\n return {\n startAngle,\n endAngle,\n };\n}\nexports.convertAngles = convertAngles;\n//# sourceMappingURL=angle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helix = void 0;\n/**\n * Helix\n */\nconst Helix = ({ startAngle = 0, endAngle = Math.PI * 6, innerRadius = 0, outerRadius = 1, }) => [\n ['translate', 0.5, 0.5],\n ['reflect.y'],\n ['translate', -0.5, -0.5],\n ['helix', startAngle, endAngle, innerRadius, outerRadius],\n];\nexports.Helix = Helix;\nexports.Helix.props = {};\n//# sourceMappingURL=helix.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transpose = void 0;\n/**\n * Transpose transformation for transposing chart according to center of canvas.\n */\nconst Transpose = () => [\n ['transpose'],\n ['translate', 0.5, 0.5],\n ['reflect.x'],\n ['translate', -0.5, -0.5],\n];\nexports.Transpose = Transpose;\nexports.Transpose.props = { transform: true };\n//# sourceMappingURL=transpose.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Theta = exports.getThetaOptions = void 0;\nconst polar_1 = require(\"./polar\");\nconst transpose_1 = require(\"./transpose\");\nconst getThetaOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n return Object.assign(Object.assign({}, defaultOptions), options);\n};\nexports.getThetaOptions = getThetaOptions;\n/**\n * Theta = Transpose + Polar.\n */\nconst Theta = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getThetaOptions)(options);\n return [\n ...(0, transpose_1.Transpose)(),\n ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nexports.Theta = Theta;\nexports.Theta.props = {};\n//# sourceMappingURL=theta.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Radial = exports.getRadialOptions = void 0;\nconst polar_1 = require(\"./polar\");\nconst getRadialOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n return Object.assign(Object.assign({}, defaultOptions), options);\n};\nexports.getRadialOptions = getRadialOptions;\n/**\n * Radial\n */\nconst Radial = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = (0, exports.getRadialOptions)(options);\n return [\n ['transpose'],\n ['translate', 0.5, 0.5],\n ['reflect'],\n ['translate', -0.5, -0.5],\n ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nexports.Radial = Radial;\nexports.Radial.props = {};\n//# sourceMappingURL=radial.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Parallel = void 0;\n/**\n * Parallel coordinate transformations for parallel coordinate.\n */\nconst Parallel = () => [['parallel', 0, 1, 0, 1]];\nexports.Parallel = Parallel;\nexports.Parallel.props = {};\n//# sourceMappingURL=parallel.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fisheye = void 0;\n/**\n * Fisheye\n */\nconst Fisheye = ({ focusX = 0, focusY = 0, distortionX = 2, distortionY = 2, visual = false, }) => [['fisheye', focusX, focusY, distortionX, distortionY, visual]];\nexports.Fisheye = Fisheye;\nexports.Fisheye.props = { transform: true };\n//# sourceMappingURL=fisheye.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Radar = void 0;\nconst polar_1 = require(\"./polar\");\nconst parallel_1 = require(\"./parallel\");\n/**\n * Radar = Parallel + Polar.\n */\nconst Radar = (options) => {\n const { startAngle = -Math.PI / 2, endAngle = (Math.PI * 3) / 2, innerRadius = 0, outerRadius = 1, } = options;\n return [\n ...(0, parallel_1.Parallel)(),\n ...(0, polar_1.Polar)({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nexports.Radar = Radar;\nexports.Radar.props = {};\n//# sourceMappingURL=radar.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Column = exports.Field = exports.Transform = exports.Constant = void 0;\nvar constant_1 = require(\"./constant\");\nObject.defineProperty(exports, \"Constant\", { enumerable: true, get: function () { return constant_1.Constant; } });\nvar transform_1 = require(\"./transform\");\nObject.defineProperty(exports, \"Transform\", { enumerable: true, get: function () { return transform_1.Transform; } });\nvar field_1 = require(\"./field\");\nObject.defineProperty(exports, \"Field\", { enumerable: true, get: function () { return field_1.Field; } });\nvar column_1 = require(\"./column\");\nObject.defineProperty(exports, \"Column\", { enumerable: true, get: function () { return column_1.Column; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Constant = void 0;\n/**\n * Extract a column of data filled with the specified constant.\n */\nconst Constant = ({ value }) => {\n return (data) => data.map(() => value);\n};\nexports.Constant = Constant;\nexports.Constant.props = {};\n//# sourceMappingURL=constant.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transform = void 0;\n/**\n * Extract a column of data with specified map function from data.\n * Each datum in the array is not visual data by default.\n * Specifying identity scale for related channel explicitly will treat them as visual data.\n */\nconst Transform = ({ value }) => {\n return (data) => data.map(value);\n};\nexports.Transform = Transform;\nexports.Transform.props = {};\n//# sourceMappingURL=transform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Field = void 0;\n/**\n * Extract a column of data with specified field.\n */\nconst Field = ({ value }) => {\n return (data) => data.map((d) => d[value]);\n};\nexports.Field = Field;\nexports.Field.props = {};\n//# sourceMappingURL=field.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Column = void 0;\n/**\n * Extract a column of data specified in encoding.\n */\nconst Column = ({ value }) => {\n return () => value;\n};\nexports.Column = Column;\nexports.Column.props = {};\n//# sourceMappingURL=column.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Liquid = exports.Heatmap = exports.Density = exports.Gauge = exports.WordCloud = exports.Tree = exports.ForceGraph = exports.Shape = exports.Boxplot = exports.Pack = exports.Treemap = exports.Path = exports.Chord = exports.Sankey = exports.RangeY = exports.RangeX = exports.Range = exports.Connector = exports.LineX = exports.LineY = exports.Vector = exports.Box = exports.Polygon = exports.Image = exports.Link = exports.Area = exports.Cell = exports.Text = exports.Point = exports.Line = exports.Rect = exports.Interval = void 0;\nvar interval_1 = require(\"./interval\");\nObject.defineProperty(exports, \"Interval\", { enumerable: true, get: function () { return interval_1.Interval; } });\nvar rect_1 = require(\"./rect\");\nObject.defineProperty(exports, \"Rect\", { enumerable: true, get: function () { return rect_1.Rect; } });\nvar line_1 = require(\"./line\");\nObject.defineProperty(exports, \"Line\", { enumerable: true, get: function () { return line_1.Line; } });\nvar point_1 = require(\"./point\");\nObject.defineProperty(exports, \"Point\", { enumerable: true, get: function () { return point_1.Point; } });\nvar text_1 = require(\"./text\");\nObject.defineProperty(exports, \"Text\", { enumerable: true, get: function () { return text_1.Text; } });\nvar cell_1 = require(\"./cell\");\nObject.defineProperty(exports, \"Cell\", { enumerable: true, get: function () { return cell_1.Cell; } });\nvar area_1 = require(\"./area\");\nObject.defineProperty(exports, \"Area\", { enumerable: true, get: function () { return area_1.Area; } });\nvar link_1 = require(\"./link\");\nObject.defineProperty(exports, \"Link\", { enumerable: true, get: function () { return link_1.Link; } });\nvar image_1 = require(\"./image\");\nObject.defineProperty(exports, \"Image\", { enumerable: true, get: function () { return image_1.Image; } });\nvar polygon_1 = require(\"./polygon\");\nObject.defineProperty(exports, \"Polygon\", { enumerable: true, get: function () { return polygon_1.Polygon; } });\nvar box_1 = require(\"./box\");\nObject.defineProperty(exports, \"Box\", { enumerable: true, get: function () { return box_1.Box; } });\nvar vector_1 = require(\"./vector\");\nObject.defineProperty(exports, \"Vector\", { enumerable: true, get: function () { return vector_1.Vector; } });\nvar lineY_1 = require(\"./lineY\");\nObject.defineProperty(exports, \"LineY\", { enumerable: true, get: function () { return lineY_1.LineY; } });\nvar lineX_1 = require(\"./lineX\");\nObject.defineProperty(exports, \"LineX\", { enumerable: true, get: function () { return lineX_1.LineX; } });\nvar connector_1 = require(\"./connector\");\nObject.defineProperty(exports, \"Connector\", { enumerable: true, get: function () { return connector_1.Connector; } });\nvar range_1 = require(\"./range\");\nObject.defineProperty(exports, \"Range\", { enumerable: true, get: function () { return range_1.Range; } });\nvar rangeX_1 = require(\"./rangeX\");\nObject.defineProperty(exports, \"RangeX\", { enumerable: true, get: function () { return rangeX_1.RangeX; } });\nvar rangeY_1 = require(\"./rangeY\");\nObject.defineProperty(exports, \"RangeY\", { enumerable: true, get: function () { return rangeY_1.RangeY; } });\nvar sankey_1 = require(\"./sankey\");\nObject.defineProperty(exports, \"Sankey\", { enumerable: true, get: function () { return sankey_1.Sankey; } });\nvar chord_1 = require(\"./chord\");\nObject.defineProperty(exports, \"Chord\", { enumerable: true, get: function () { return chord_1.Chord; } });\nvar path_1 = require(\"./path\");\nObject.defineProperty(exports, \"Path\", { enumerable: true, get: function () { return path_1.Path; } });\nvar treemap_1 = require(\"./treemap\");\nObject.defineProperty(exports, \"Treemap\", { enumerable: true, get: function () { return treemap_1.Treemap; } });\nvar pack_1 = require(\"./pack\");\nObject.defineProperty(exports, \"Pack\", { enumerable: true, get: function () { return pack_1.Pack; } });\nvar boxplot_1 = require(\"./boxplot\");\nObject.defineProperty(exports, \"Boxplot\", { enumerable: true, get: function () { return boxplot_1.Boxplot; } });\nvar shape_1 = require(\"./shape\");\nObject.defineProperty(exports, \"Shape\", { enumerable: true, get: function () { return shape_1.Shape; } });\nvar forceGraph_1 = require(\"./forceGraph\");\nObject.defineProperty(exports, \"ForceGraph\", { enumerable: true, get: function () { return forceGraph_1.ForceGraph; } });\nvar tree_1 = require(\"./tree\");\nObject.defineProperty(exports, \"Tree\", { enumerable: true, get: function () { return tree_1.Tree; } });\nvar wordCloud_1 = require(\"./wordCloud\");\nObject.defineProperty(exports, \"WordCloud\", { enumerable: true, get: function () { return wordCloud_1.WordCloud; } });\nvar gauge_1 = require(\"./gauge\");\nObject.defineProperty(exports, \"Gauge\", { enumerable: true, get: function () { return gauge_1.Gauge; } });\nvar density_1 = require(\"./density\");\nObject.defineProperty(exports, \"Density\", { enumerable: true, get: function () { return density_1.Density; } });\nvar heatmap_1 = require(\"./heatmap\");\nObject.defineProperty(exports, \"Heatmap\", { enumerable: true, get: function () { return heatmap_1.Heatmap; } });\nvar liquid_1 = require(\"./liquid\");\nObject.defineProperty(exports, \"Liquid\", { enumerable: true, get: function () { return liquid_1.Liquid; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Interval = void 0;\nconst transform_1 = require(\"../transform\");\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nfunction bandWidth(scale, x) {\n return scale.getBandWidth(scale.invert(x));\n}\nconst shape = {\n rect: shape_1.IntervalShape,\n hollow: shape_1.IntervalHollow,\n funnel: shape_1.IntervalFunnel,\n pyramid: shape_1.IntervalPyramid,\n};\n/**\n * Convert value for each channel to rect shapes.\n * p0 p1\n * ┌────┐\n * │ │\n * │ │\n * p3 └────┘ p2\n */\nconst Interval = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, y1: Y1, series: S, size: SZ } = value;\n // Calc width for each interval.\n // The scales for x and series channels must be band scale.\n const x = scale.x;\n const series = scale.series;\n const [width] = coordinate.getSize();\n const NSZ = SZ ? SZ.map((d) => +d / width) : null;\n const x1x2 = !SZ\n ? (x, w, i) => [x, x + w]\n : (x, w, i) => {\n const mx = x + w / 2;\n const s = NSZ[i];\n return [mx - s / 2, mx + s / 2];\n };\n // Calc the points of bounding box for the interval.\n // They are start from left-top corner in clock wise order.\n const P = Array.from(index, (i) => {\n const groupWidth = bandWidth(x, X[i]);\n const ratio = series ? bandWidth(series, S === null || S === void 0 ? void 0 : S[i]) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x0 = +X[i] + offset;\n const [x1, x2] = x1x2(x0, width, i);\n const y1 = +Y[i];\n const y2 = +Y1[i];\n const p1 = [x1, y1];\n const p2 = [x2, y1];\n const p3 = [x2, y2];\n const p4 = [x1, y2];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nexports.Interval = Interval;\nexports.Interval.props = {\n defaultShape: 'rect',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeZeroY1 },\n { type: transform_1.MaybeZeroX },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()],\n interaction: { shareTooltip: true },\n};\n//# sourceMappingURL=interval.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Filter = exports.Sample = exports.Bin = exports.BinX = exports.Pack = exports.FlexX = exports.SortY = exports.SortColor = exports.SortX = exports.GroupColor = exports.Group = exports.GroupY = exports.GroupX = exports.SelectY = exports.SelectX = exports.Select = exports.DiffY = exports.SymmetryY = exports.JitterY = exports.JitterX = exports.Jitter = exports.NormalizeY = exports.StackEnter = exports.DodgeX = exports.StackY = exports.MaybeGradient = exports.MaybeTuple = exports.MaybeFunctionAttribute = exports.MaybeVisualPosition = exports.MaybeZeroPadding = exports.MaybeTooltip = exports.MaybeDefaultY = exports.MaybeDefaultX = exports.MaybeIdentityX = exports.MaybeIdentityY = exports.MaybeTupleX = exports.MaybeTupleY = exports.MaybeSeries = exports.MaybeKey = exports.MaybeSize = exports.MaybeZeroZ = exports.MaybeZeroY = exports.MaybeZeroX = exports.MaybeTitle = exports.MaybeStackY = exports.MaybeZeroY1 = void 0;\nvar maybeZeroY1_1 = require(\"./maybeZeroY1\");\nObject.defineProperty(exports, \"MaybeZeroY1\", { enumerable: true, get: function () { return maybeZeroY1_1.MaybeZeroY1; } });\nvar maybeStackY_1 = require(\"./maybeStackY\");\nObject.defineProperty(exports, \"MaybeStackY\", { enumerable: true, get: function () { return maybeStackY_1.MaybeStackY; } });\nvar maybeTitle_1 = require(\"./maybeTitle\");\nObject.defineProperty(exports, \"MaybeTitle\", { enumerable: true, get: function () { return maybeTitle_1.MaybeTitle; } });\nvar maybeZeroX_1 = require(\"./maybeZeroX\");\nObject.defineProperty(exports, \"MaybeZeroX\", { enumerable: true, get: function () { return maybeZeroX_1.MaybeZeroX; } });\nvar maybeZeroY_1 = require(\"./maybeZeroY\");\nObject.defineProperty(exports, \"MaybeZeroY\", { enumerable: true, get: function () { return maybeZeroY_1.MaybeZeroY; } });\nvar maybeZeroZ_1 = require(\"./maybeZeroZ\");\nObject.defineProperty(exports, \"MaybeZeroZ\", { enumerable: true, get: function () { return maybeZeroZ_1.MaybeZeroZ; } });\nvar maybeSize_1 = require(\"./maybeSize\");\nObject.defineProperty(exports, \"MaybeSize\", { enumerable: true, get: function () { return maybeSize_1.MaybeSize; } });\nvar maybeKey_1 = require(\"./maybeKey\");\nObject.defineProperty(exports, \"MaybeKey\", { enumerable: true, get: function () { return maybeKey_1.MaybeKey; } });\nvar maybeSeries_1 = require(\"./maybeSeries\");\nObject.defineProperty(exports, \"MaybeSeries\", { enumerable: true, get: function () { return maybeSeries_1.MaybeSeries; } });\nvar maybeTupleY_1 = require(\"./maybeTupleY\");\nObject.defineProperty(exports, \"MaybeTupleY\", { enumerable: true, get: function () { return maybeTupleY_1.MaybeTupleY; } });\nvar maybeTupleX_1 = require(\"./maybeTupleX\");\nObject.defineProperty(exports, \"MaybeTupleX\", { enumerable: true, get: function () { return maybeTupleX_1.MaybeTupleX; } });\nvar maybeIdentityY_1 = require(\"./maybeIdentityY\");\nObject.defineProperty(exports, \"MaybeIdentityY\", { enumerable: true, get: function () { return maybeIdentityY_1.MaybeIdentityY; } });\nvar maybeIdentityX_1 = require(\"./maybeIdentityX\");\nObject.defineProperty(exports, \"MaybeIdentityX\", { enumerable: true, get: function () { return maybeIdentityX_1.MaybeIdentityX; } });\nvar maybeDefaultX_1 = require(\"./maybeDefaultX\");\nObject.defineProperty(exports, \"MaybeDefaultX\", { enumerable: true, get: function () { return maybeDefaultX_1.MaybeDefaultX; } });\nvar maybeDefaultY_1 = require(\"./maybeDefaultY\");\nObject.defineProperty(exports, \"MaybeDefaultY\", { enumerable: true, get: function () { return maybeDefaultY_1.MaybeDefaultY; } });\nvar maybeTooltip_1 = require(\"./maybeTooltip\");\nObject.defineProperty(exports, \"MaybeTooltip\", { enumerable: true, get: function () { return maybeTooltip_1.MaybeTooltip; } });\nvar maybeZeroPadding_1 = require(\"./maybeZeroPadding\");\nObject.defineProperty(exports, \"MaybeZeroPadding\", { enumerable: true, get: function () { return maybeZeroPadding_1.MaybeZeroPadding; } });\nvar maybeVisualPosition_1 = require(\"./maybeVisualPosition\");\nObject.defineProperty(exports, \"MaybeVisualPosition\", { enumerable: true, get: function () { return maybeVisualPosition_1.MaybeVisualPosition; } });\nvar maybeFunctionAttribute_1 = require(\"./maybeFunctionAttribute\");\nObject.defineProperty(exports, \"MaybeFunctionAttribute\", { enumerable: true, get: function () { return maybeFunctionAttribute_1.MaybeFunctionAttribute; } });\nvar maybeTuple_1 = require(\"./maybeTuple\");\nObject.defineProperty(exports, \"MaybeTuple\", { enumerable: true, get: function () { return maybeTuple_1.MaybeTuple; } });\nvar maybeGradient_1 = require(\"./maybeGradient\");\nObject.defineProperty(exports, \"MaybeGradient\", { enumerable: true, get: function () { return maybeGradient_1.MaybeGradient; } });\nvar stackY_1 = require(\"./stackY\");\nObject.defineProperty(exports, \"StackY\", { enumerable: true, get: function () { return stackY_1.StackY; } });\nvar dodgeX_1 = require(\"./dodgeX\");\nObject.defineProperty(exports, \"DodgeX\", { enumerable: true, get: function () { return dodgeX_1.DodgeX; } });\nvar stackEnter_1 = require(\"./stackEnter\");\nObject.defineProperty(exports, \"StackEnter\", { enumerable: true, get: function () { return stackEnter_1.StackEnter; } });\nvar normalizeY_1 = require(\"./normalizeY\");\nObject.defineProperty(exports, \"NormalizeY\", { enumerable: true, get: function () { return normalizeY_1.NormalizeY; } });\nvar jitter_1 = require(\"./jitter\");\nObject.defineProperty(exports, \"Jitter\", { enumerable: true, get: function () { return jitter_1.Jitter; } });\nvar jitterX_1 = require(\"./jitterX\");\nObject.defineProperty(exports, \"JitterX\", { enumerable: true, get: function () { return jitterX_1.JitterX; } });\nvar jitterY_1 = require(\"./jitterY\");\nObject.defineProperty(exports, \"JitterY\", { enumerable: true, get: function () { return jitterY_1.JitterY; } });\nvar symmetryY_1 = require(\"./symmetryY\");\nObject.defineProperty(exports, \"SymmetryY\", { enumerable: true, get: function () { return symmetryY_1.SymmetryY; } });\nvar diffY_1 = require(\"./diffY\");\nObject.defineProperty(exports, \"DiffY\", { enumerable: true, get: function () { return diffY_1.DiffY; } });\nvar select_1 = require(\"./select\");\nObject.defineProperty(exports, \"Select\", { enumerable: true, get: function () { return select_1.Select; } });\nvar selectX_1 = require(\"./selectX\");\nObject.defineProperty(exports, \"SelectX\", { enumerable: true, get: function () { return selectX_1.SelectX; } });\nvar selectY_1 = require(\"./selectY\");\nObject.defineProperty(exports, \"SelectY\", { enumerable: true, get: function () { return selectY_1.SelectY; } });\nvar groupX_1 = require(\"./groupX\");\nObject.defineProperty(exports, \"GroupX\", { enumerable: true, get: function () { return groupX_1.GroupX; } });\nvar groupY_1 = require(\"./groupY\");\nObject.defineProperty(exports, \"GroupY\", { enumerable: true, get: function () { return groupY_1.GroupY; } });\nvar group_1 = require(\"./group\");\nObject.defineProperty(exports, \"Group\", { enumerable: true, get: function () { return group_1.Group; } });\nvar groupColor_1 = require(\"./groupColor\");\nObject.defineProperty(exports, \"GroupColor\", { enumerable: true, get: function () { return groupColor_1.GroupColor; } });\nvar sortX_1 = require(\"./sortX\");\nObject.defineProperty(exports, \"SortX\", { enumerable: true, get: function () { return sortX_1.SortX; } });\nvar sortColor_1 = require(\"./sortColor\");\nObject.defineProperty(exports, \"SortColor\", { enumerable: true, get: function () { return sortColor_1.SortColor; } });\nvar sortY_1 = require(\"./sortY\");\nObject.defineProperty(exports, \"SortY\", { enumerable: true, get: function () { return sortY_1.SortY; } });\nvar flexX_1 = require(\"./flexX\");\nObject.defineProperty(exports, \"FlexX\", { enumerable: true, get: function () { return flexX_1.FlexX; } });\nvar pack_1 = require(\"./pack\");\nObject.defineProperty(exports, \"Pack\", { enumerable: true, get: function () { return pack_1.Pack; } });\nvar binX_1 = require(\"./binX\");\nObject.defineProperty(exports, \"BinX\", { enumerable: true, get: function () { return binX_1.BinX; } });\nvar bin_1 = require(\"./bin\");\nObject.defineProperty(exports, \"Bin\", { enumerable: true, get: function () { return bin_1.Bin; } });\nvar sample_1 = require(\"./sample\");\nObject.defineProperty(exports, \"Sample\", { enumerable: true, get: function () { return sample_1.Sample; } });\nvar filter_1 = require(\"./filter\");\nObject.defineProperty(exports, \"Filter\", { enumerable: true, get: function () { return filter_1.Filter; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeZeroY1 = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add zero constant encode for y1 channel.\n */\nconst MaybeZeroY1 = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y1 } = encode;\n if (y1 !== undefined)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: { y1: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) },\n }),\n ];\n };\n};\nexports.MaybeZeroY1 = MaybeZeroY1;\nexports.MaybeZeroY1.props = {};\n//# sourceMappingURL=maybeZeroY1.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isObject = exports.maybeColumnOf = exports.columnOf = exports.constant = exports.nonConstantColumn = exports.visualColumn = exports.inferredColumn = exports.column = void 0;\nfunction column(value, field) {\n if (value === null)\n return undefined;\n return { type: 'column', value, field };\n}\nexports.column = column;\nfunction inferredColumn(value, field) {\n const c = column(value, field);\n return Object.assign(Object.assign({}, c), { inferred: true });\n}\nexports.inferredColumn = inferredColumn;\nfunction visualColumn(value, field) {\n if (value === null)\n return undefined;\n return { type: 'column', value, field, visual: true };\n}\nexports.visualColumn = visualColumn;\nfunction nonConstantColumn(value, field) {\n const c = column(value, field);\n return Object.assign(Object.assign({}, c), { constant: false });\n}\nexports.nonConstantColumn = nonConstantColumn;\nfunction constant(I, value) {\n const array = [];\n for (const i of I)\n array[i] = value;\n return array;\n}\nexports.constant = constant;\nfunction columnOf(encode, key) {\n const channel = encode[key];\n if (!channel)\n return [null, null];\n const { value, field = null } = channel;\n return [value, field];\n}\nexports.columnOf = columnOf;\nfunction maybeColumnOf(encode, ...K) {\n for (const key of K) {\n if (typeof key === 'string') {\n const [KV, fv] = columnOf(encode, key);\n if (KV !== null)\n return [KV, fv];\n }\n else {\n return [key, null];\n }\n }\n return [null, null];\n}\nexports.maybeColumnOf = maybeColumnOf;\nfunction isObject(d) {\n if (d instanceof Date)\n return false;\n return typeof d === 'object';\n}\nexports.isObject = isObject;\n//# sourceMappingURL=helper.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeStackY = void 0;\nconst stackY_1 = require(\"./stackY\");\n// Avoid duplicate stackY.\n// In most of case only one of stackY and dodgeX is needed.\n// So pass statistic with stackY and dodgeX.\nfunction exclude(transform) {\n const { type } = transform;\n const excludes = ['stackY', 'dodgeX', 'groupX'];\n return typeof type === 'string' && excludes.includes(type);\n}\n/**\n * Add zero constant encode for x channel.\n * This is useful for interval geometry.\n */\nconst MaybeStackY = (options) => {\n return (I, mark, context) => {\n // Skip some transform.\n const { encode, transform = [] } = mark;\n if (transform.some(exclude))\n return [I, mark];\n // StackY need both x and y channel values.\n const { x, y } = encode;\n if (x === undefined || y === undefined)\n return [I, mark];\n const { series } = options;\n const groupBy = series ? ['x', 'series'] : 'x';\n return (0, stackY_1.StackY)({ groupBy })(I, mark, context);\n };\n};\nexports.MaybeStackY = MaybeStackY;\nexports.MaybeStackY.props = {};\n//# sourceMappingURL=maybeStackY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StackY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\n/**\n * The stack transform group marks into series by color channel,\n * and then produce new y channel for each series by specified order,\n * say to form vertical \"stacks\" by specified channels.\n */\nconst StackY = (options = {}) => {\n const { groupBy = 'x', orderBy = null, reverse = false, y: fromY = 'y', y1: fromY1 = 'y1', series = true, } = options;\n return (I, mark) => {\n var _a;\n const { data, encode, style = {} } = mark;\n const [Y, fy] = (0, helper_1.columnOf)(encode, 'y');\n const [Y1, fy1] = (0, helper_1.columnOf)(encode, 'y1');\n const [S] = series\n ? (0, helper_1.maybeColumnOf)(encode, 'series', 'color')\n : (0, helper_1.columnOf)(encode, 'color');\n // Create groups and apply specified order for each group.\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n const createComparator = (_a = (0, order_1.normalizeComparator)(orderBy)) !== null && _a !== void 0 ? _a : (() => null);\n const comparator = createComparator(data, Y, S);\n if (comparator)\n (0, order_1.applyOrder)(groups, comparator);\n // Stack y channels to produce new y and y1 channel.\n const newY = new Array(I.length);\n const newY1 = new Array(I.length);\n const TY = new Array(I.length);\n const F = [];\n const L = [];\n for (const G of groups) {\n if (reverse)\n G.reverse();\n // For range interval with specified y and y1.\n const start = Y1 ? +Y1[G[0]] : 0;\n // Split positive indices of Y and negative Y.\n const PG = [];\n const NG = [];\n for (const i of G) {\n const y = (TY[i] = +Y[i] - start);\n if (y < 0)\n NG.push(i);\n else if (y >= 0)\n PG.push(i);\n }\n // Store the first and last layer.\n const FG = PG.length > 0 ? PG : NG;\n const LG = NG.length > 0 ? NG : PG;\n let i = PG.length - 1;\n let j = 0;\n // Find the last non-zero index.\n while (i > 0 && Y[FG[i]] === 0)\n i--;\n // Find the first non-zero index.\n while (j < LG.length - 1 && Y[LG[j]] === 0)\n j++;\n F.push(FG[i]);\n L.push(LG[j]);\n // Stack negative y in reverse order.\n let ny = start;\n for (const i of NG.reverse()) {\n const y = TY[i];\n ny = newY[i] = (newY1[i] = ny) + y;\n }\n // Stack positive y in input order.\n let py = start;\n for (const i of PG) {\n const y = TY[i];\n if (y > 0)\n py = newY[i] = (newY1[i] = py) + y;\n else\n newY[i] = newY1[i] = py;\n }\n }\n // Only set top radius for the first layer,\n // and set bottom radius for the last layer.\n const FS = new Set(F);\n const LS = new Set(L);\n // Choose new y or y1 channel as the new y channel.\n const V = fromY === 'y' ? newY : newY1;\n const V1 = fromY1 === 'y' ? newY : newY1;\n let newEncode;\n // mark point will compute the actural Y = (y + y1) / 2 if y1 exists\n if (mark.type === 'point') {\n newEncode = {\n y0: (0, helper_1.inferredColumn)(Y, fy),\n y: (0, helper_1.column)(V, fy),\n };\n }\n else {\n newEncode = {\n y0: (0, helper_1.inferredColumn)(Y, fy),\n y: (0, helper_1.column)(V, fy),\n y1: (0, helper_1.column)(V1, fy1),\n };\n }\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: Object.assign({}, newEncode),\n style: Object.assign({ first: (_, i) => FS.has(i), last: (_, i) => LS.has(i) }, style),\n }),\n ];\n };\n};\nexports.StackY = StackY;\nexports.StackY.props = {};\n//# sourceMappingURL=stackY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.domainOf = exports.applyOrder = exports.normalizeComparator = exports.createGroups = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../../utils/helper\");\nconst array_1 = require(\"../../utils/array\");\nconst helper_2 = require(\"./helper\");\nfunction createGroups(groupBy, I, mark) {\n const { encode } = mark;\n if (groupBy === null)\n return [I];\n const G = normalizeGroupBy(groupBy)\n .map((k) => { var _a; return [k, (_a = (0, helper_2.columnOf)(encode, k)) === null || _a === void 0 ? void 0 : _a[0]]; })\n .filter(([, column]) => (0, helper_1.defined)(column));\n const key = (i) => G.map(([, V]) => V[i]).join('-');\n return Array.from((0, d3_array_1.group)(I, key).values());\n}\nexports.createGroups = createGroups;\nfunction normalizeComparator(order) {\n if (Array.isArray(order))\n return createFieldsOrder(order);\n if (typeof order === 'function')\n return createFunctionOrder(order);\n if (order === 'series')\n return createSeriesOrder;\n if (order === 'value')\n return createValueOrder;\n if (order === 'sum')\n return createSumOrder;\n if (order === 'maxIndex')\n return createMaxIndexOrder;\n return null;\n}\nexports.normalizeComparator = normalizeComparator;\nfunction applyOrder(groups, comparator) {\n for (const group of groups) {\n group.sort(comparator);\n }\n}\nexports.applyOrder = applyOrder;\nfunction domainOf(value, scale) {\n return (scale === null || scale === void 0 ? void 0 : scale.domain) || Array.from(new Set(value));\n}\nexports.domainOf = domainOf;\nfunction normalizeGroupBy(groupBy) {\n if (Array.isArray(groupBy))\n return groupBy;\n return [groupBy];\n}\nfunction createSeriesOrder(data, Y, S) {\n return ascendingComparator((i) => S[i]);\n}\nfunction createFunctionOrder(order) {\n return (data, Y, S) => {\n return ascendingComparator((i) => order(data[i]));\n };\n}\nfunction createFieldsOrder(order) {\n return (data, Y, S) => {\n return (i, j) => order.reduce((eq, f) => (eq !== 0 ? eq : (0, d3_array_1.ascending)(data[i][f], data[j][f])), 0);\n };\n}\nfunction createValueOrder(data, Y, S) {\n return ascendingComparator((i) => Y[i]);\n}\nfunction createSumOrder(data, Y, S) {\n const I = (0, array_1.indexOf)(data);\n const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries());\n const seriesSum = new Map(groups.map(([k, GI]) => [k, GI.reduce((s, i) => s + +Y[i])]));\n return ascendingComparator((i) => seriesSum.get(S[i]));\n}\nfunction createMaxIndexOrder(data, Y, S) {\n const I = (0, array_1.indexOf)(data);\n const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries());\n const seriesMaxIndex = new Map(groups.map(([k, GI]) => [k, (0, d3_array_1.maxIndex)(GI, (i) => Y[i])]));\n return ascendingComparator((i) => seriesMaxIndex.get(S[i]));\n}\nfunction ascendingComparator(order) {\n return (i, j) => (0, d3_array_1.ascending)(order(i), order(j));\n}\n//# sourceMappingURL=order.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deepAssign = exports.isUnset = exports.isStrictObject = exports.maybePercentage = exports.omitPrefixObject = exports.filterPrefixObject = exports.prefixObject = exports.maybeSubObject = exports.subObject = exports.appendTransform = exports.useMemo = exports.random = exports.defined = exports.copyAttributes = exports.error = exports.capitalizeFirst = exports.composeAsync = exports.compose = exports.identity = exports.groupNameOf = exports.seriesOf = exports.dataOf = exports.getViewFromElement = void 0;\nconst util_1 = require(\"@antv/util\");\nconst scale_1 = require(\"@antv/scale\");\n/**\n * @description Get element's ancestor view node.\n * @param elemenet G2 element.\n * @returns Element's ancestor view node.\n */\nfunction getViewFromElement(element) {\n var _a;\n let current = element;\n while (current) {\n if (((_a = current.attributes) === null || _a === void 0 ? void 0 : _a.class) === 'view')\n return current;\n current = current.parentNode;\n }\n return null;\n}\nexports.getViewFromElement = getViewFromElement;\n/**\n * @description Get element's original data.\n * @param elemenet G2 element.\n * @param elemenet View data, if not provided, will get from element's ancestor view.\n * @returns The original data of the element.\n */\nfunction dataOf(element, viewData) {\n const view = viewData !== null && viewData !== void 0 ? viewData : getViewFromElement(element).__data__;\n const datum = element.__data__;\n const { markKey, index, seriesIndex } = datum;\n const { markState } = view;\n const selectedMark = Array.from(markState.keys()).find((mark) => mark.key === markKey);\n if (!selectedMark)\n return;\n if (seriesIndex) {\n return seriesIndex.map((i) => selectedMark.data[i]);\n }\n return selectedMark.data[index];\n}\nexports.dataOf = dataOf;\n/**\n * @description Get element's series name.\n * @param elemenet G2 element.\n * @returns The series name of the element.\n */\nfunction seriesOf(elemenet) {\n const viewData = getViewFromElement(elemenet).__data__;\n const { scale } = viewData;\n return groupNameOf(scale, elemenet.__data__);\n}\nexports.seriesOf = seriesOf;\n/**\n * Get group name with view's scale and element's datum.\n */\nfunction groupNameOf(scale, datum) {\n const { color: scaleColor, series: scaleSeries, facet = false } = scale;\n const { color, series } = datum;\n const invertAble = (scale) => {\n return (scale &&\n scale.invert &&\n !(scale instanceof scale_1.Band) &&\n !(scale instanceof scale_1.Constant));\n };\n // For non constant color channel.\n if (invertAble(scaleSeries)) {\n const cloned = scaleSeries.clone();\n return cloned.invert(series);\n }\n if (series &&\n scaleSeries instanceof scale_1.Band &&\n scaleSeries.invert(series) !== color &&\n !facet) {\n return scaleSeries.invert(series);\n }\n if (invertAble(scaleColor)) {\n const name = scaleColor.invert(color);\n // For threshold scale.\n if (Array.isArray(name))\n return null;\n return name;\n }\n return null;\n}\nexports.groupNameOf = groupNameOf;\nfunction identity(x) {\n return x;\n}\nexports.identity = identity;\n/**\n * Composes functions from left to right.\n */\nfunction compose(fns) {\n return fns.reduce((composed, fn) => (x, ...args) => fn(composed(x, ...args), ...args), identity);\n}\nexports.compose = compose;\n/**\n * Composes single-argument async functions from left to right.\n */\nfunction composeAsync(fns) {\n return fns.reduce((composed, fn) => (x) => __awaiter(this, void 0, void 0, function* () {\n const value = yield composed(x);\n return fn(value);\n }), identity);\n}\nexports.composeAsync = composeAsync;\nfunction capitalizeFirst(str) {\n return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase());\n}\nexports.capitalizeFirst = capitalizeFirst;\nfunction error(message = '') {\n throw new Error(message);\n}\nexports.error = error;\nfunction copyAttributes(target, source) {\n const { attributes } = source;\n const exclude = new Set(['id', 'className']);\n for (const [key, value] of Object.entries(attributes)) {\n if (!exclude.has(key)) {\n target.attr(key, value);\n }\n }\n}\nexports.copyAttributes = copyAttributes;\nfunction defined(x) {\n return x !== undefined && x !== null && !Number.isNaN(x);\n}\nexports.defined = defined;\nfunction random(a, b) {\n return a + (b - a) * Math.random();\n}\nexports.random = random;\nfunction useMemo(compute) {\n const map = new Map();\n return (key) => {\n if (map.has(key))\n return map.get(key);\n const value = compute(key);\n map.set(key, value);\n return value;\n };\n}\nexports.useMemo = useMemo;\nfunction appendTransform(node, transform) {\n const { transform: preTransform } = node.style;\n const unset = (d) => d === 'none' || d === undefined;\n const prefix = unset(preTransform) ? '' : preTransform;\n node.style.transform = `${prefix} ${transform}`.trimStart();\n}\nexports.appendTransform = appendTransform;\nfunction subObject(obj, prefix) {\n return maybeSubObject(obj, prefix) || {};\n}\nexports.subObject = subObject;\nfunction maybeSubObject(obj, prefix) {\n const entries = Object.entries(obj || {})\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [(0, util_1.lowerFirst)(key.replace(prefix, '').trim()), value])\n .filter(([key]) => !!key);\n return entries.length === 0 ? null : Object.fromEntries(entries);\n}\nexports.maybeSubObject = maybeSubObject;\nfunction prefixObject(obj, prefix) {\n return Object.fromEntries(Object.entries(obj).map(([key, value]) => {\n return [`${prefix}${(0, util_1.upperFirst)(key)}`, value];\n }));\n}\nexports.prefixObject = prefixObject;\nfunction filterPrefixObject(obj, prefix) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => prefix.find((p) => key.startsWith(p))));\n}\nexports.filterPrefixObject = filterPrefixObject;\nfunction omitPrefixObject(obj, ...prefixes) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => prefixes.every((prefix) => !key.startsWith(prefix))));\n}\nexports.omitPrefixObject = omitPrefixObject;\nfunction maybePercentage(x, size) {\n if (x === undefined)\n return null;\n if (typeof x === 'number')\n return x;\n const px = +x.replace('%', '');\n return Number.isNaN(px) ? null : (px / 100) * size;\n}\nexports.maybePercentage = maybePercentage;\nfunction isStrictObject(d) {\n return (typeof d === 'object' &&\n !(d instanceof Date) &&\n d !== null &&\n !Array.isArray(d));\n}\nexports.isStrictObject = isStrictObject;\nfunction isUnset(value) {\n return value === null || value === false;\n}\nexports.isUnset = isUnset;\nfunction deepAssign(dist, src, maxLevel = 5, level = 0) {\n if (level >= maxLevel)\n return;\n for (const key of Object.keys(src)) {\n const value = src[key];\n if (!(0, util_1.isPlainObject)(value) || !(0, util_1.isPlainObject)(dist[key])) {\n dist[key] = value;\n }\n else {\n deepAssign(dist[key], value, maxLevel, level + 1);\n }\n }\n return dist;\n}\nexports.deepAssign = deepAssign;\n//# sourceMappingURL=helper.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.combine = exports.divide = exports.unique = exports.isFlatArray = exports.lastOf = exports.firstOf = exports.transpose = exports.indexOf = exports.mapObject = void 0;\n/**\n * Calls a defined callback function on each key:value of a object,\n * and returns a object contains the result.\n */\nfunction mapObject(object, callbackfn) {\n return Object.entries(object).reduce((obj, [key, value]) => {\n obj[key] = callbackfn(value, key, object);\n return obj;\n }, {});\n}\nexports.mapObject = mapObject;\nfunction indexOf(array) {\n return array.map((_, i) => i);\n}\nexports.indexOf = indexOf;\n/**\n * @example [[1, 2, 3], ['a', 'b', 'c']] => [[1, 'a'], [2, 'b'], [3, 'c']]\n */\nfunction transpose(matrix) {\n const row = matrix.length;\n const col = matrix[0].length;\n // Note: new Array(col).fill(new Array(row)) is not ok!!!\n // Because in this case it will fill new Array(col) with the same array: new Array(row).\n const transposed = new Array(col).fill(0).map(() => new Array(row));\n for (let i = 0; i < col; i++) {\n for (let j = 0; j < row; j++) {\n transposed[i][j] = matrix[j][i];\n }\n }\n return transposed;\n}\nexports.transpose = transpose;\nfunction firstOf(array) {\n return array[0];\n}\nexports.firstOf = firstOf;\nfunction lastOf(array) {\n return array[array.length - 1];\n}\nexports.lastOf = lastOf;\nfunction isFlatArray(array) {\n return !array.some(Array.isArray);\n}\nexports.isFlatArray = isFlatArray;\nfunction unique(array) {\n return Array.from(new Set(array));\n}\nexports.unique = unique;\nfunction divide(array, callbackfn) {\n const result = [[], []];\n array.forEach((item) => {\n result[callbackfn(item) ? 0 : 1].push(item);\n });\n return result;\n}\nexports.divide = divide;\nfunction comb(array, len = array.length) {\n if (len === 1)\n return array.map((item) => [item]);\n const result = [];\n for (let i = 0; i < array.length; i++) {\n const rest = array.slice(i + 1);\n const restComb = comb(rest, len - 1);\n restComb.forEach((comb) => {\n result.push([array[i], ...comb]);\n });\n }\n return result;\n}\n/**\n * get all combinations of two elements in an array\n * @example [1, 2, 3] => [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]\n * @param array\n * @returns\n */\nfunction combine(array) {\n if (array.length === 1)\n return [array];\n const result = [];\n for (let i = 1; i <= array.length; i++) {\n result.push(...comb(array, i));\n }\n return result;\n}\nexports.combine = combine;\n//# sourceMappingURL=array.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeTitle = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst dateFormat_1 = require(\"../utils/dateFormat\");\nconst helper_2 = require(\"./utils/helper\");\n/**\n * Infer title channel from x-position channel.\n */\nconst MaybeTitle = (options = {}) => {\n const { channel = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const { tooltip } = mark;\n if ((0, helper_1.isUnset)(tooltip))\n return [I, mark];\n const { title } = tooltip;\n if (title !== undefined)\n return [I, mark];\n const titles = Object.keys(encode)\n .filter((key) => key.startsWith(channel))\n .filter((key) => !encode[key].inferred)\n .map((key) => (0, helper_2.columnOf)(encode, key))\n .filter(([T]) => T)\n .map((d) => d[0]);\n if (titles.length === 0)\n return [I, mark];\n const T = [];\n for (const i of I) {\n T[i] = {\n value: titles\n .map((t) => t[i] instanceof Date ? (0, dateFormat_1.dynamicFormatDateTime)(t[i]) : t[i])\n .join(', '),\n };\n }\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n tooltip: {\n title: T,\n },\n }),\n ];\n };\n};\nexports.MaybeTitle = MaybeTitle;\nexports.MaybeTitle.props = {};\n//# sourceMappingURL=maybeTitle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicFormatDateTime = void 0;\nfunction fillZero(digit) {\n if (Math.abs(digit) > 10)\n return String(digit);\n return digit.toString().padStart(2, '0');\n}\nfunction dynamicFormatDateTime(date) {\n const year = date.getFullYear();\n const month = fillZero(date.getMonth() + 1);\n const day = fillZero(date.getDate());\n const yyyyMMDD = `${year}-${month}-${day}`;\n const hour = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n if (hour || minutes || seconds)\n return `${yyyyMMDD} ${fillZero(hour)}:${fillZero(minutes)}:${fillZero(seconds)}`;\n return yyyyMMDD;\n}\nexports.dynamicFormatDateTime = dynamicFormatDateTime;\n//# sourceMappingURL=dateFormat.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeZeroX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add zero constant encode for x channel.\n * This is useful for interval geometry.\n */\nconst MaybeZeroX = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { x } = encode;\n if (x !== undefined)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: { x: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) },\n scale: { x: { guide: null } },\n }),\n ];\n };\n};\nexports.MaybeZeroX = MaybeZeroX;\nexports.MaybeZeroX.props = {};\n//# sourceMappingURL=maybeZeroX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeZeroY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add zero constant encode for y channel.\n */\nconst MaybeZeroY = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y } = encode;\n if (y !== undefined)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: { y: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) },\n scale: { y: { guide: null } },\n }),\n ];\n };\n};\nexports.MaybeZeroY = MaybeZeroY;\nexports.MaybeZeroY.props = {};\n//# sourceMappingURL=maybeZeroY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeZeroZ = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add zero constant encode for z channel.\n */\nconst MaybeZeroZ = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { z } = encode;\n if (z !== undefined)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: { z: (0, helper_1.inferredColumn)((0, helper_1.constant)(I, 0)) },\n scale: { z: { guide: null } },\n }),\n ];\n };\n};\nexports.MaybeZeroZ = MaybeZeroZ;\nexports.MaybeZeroZ.props = {};\n//# sourceMappingURL=maybeZeroZ.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeSize = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeSize = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { size } = encode;\n if (size !== undefined)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, { encode: { size: (0, helper_1.visualColumn)((0, helper_1.constant)(I, 3)) } }),\n ];\n };\n};\nexports.MaybeSize = MaybeSize;\nexports.MaybeSize.props = {};\n//# sourceMappingURL=maybeSize.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeKey = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Infer key for every element.\n */\nconst MaybeKey = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { key } = encode, rest = __rest(encode, [\"key\"]);\n if (key !== undefined)\n return [I, mark];\n const values = Object.values(rest).map(({ value }) => value);\n const K = I.map((i) => values\n .filter(Array.isArray)\n .map((V) => V[i])\n .join('-'));\n return [I, (0, util_1.deepMix)({}, mark, { encode: { key: (0, helper_1.column)(K) } })];\n };\n};\nexports.MaybeKey = MaybeKey;\nexports.MaybeKey.props = {};\n//# sourceMappingURL=maybeKey.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeSeries = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Assume color channel is series channel.\n */\nconst MaybeSeries = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { series, color } = encode;\n if (series !== undefined || color === undefined)\n return [I, mark];\n const [C, fc] = (0, helper_1.columnOf)(encode, 'color');\n return [I, (0, util_1.deepMix)({}, mark, { encode: { series: (0, helper_1.column)(C, fc) } })];\n };\n};\nexports.MaybeSeries = MaybeSeries;\nexports.MaybeSeries.props = {};\n//# sourceMappingURL=maybeSeries.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeTupleY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeTupleY = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(helper_1.isObject))\n return [I, mark];\n return [I, (0, util_1.deepMix)({}, mark, { encode: { y: (0, helper_1.column)(data) } })];\n };\n};\nexports.MaybeTupleY = MaybeTupleY;\nexports.MaybeTupleY.props = {};\n//# sourceMappingURL=maybeTupleY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeTupleX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeTupleX = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(helper_1.isObject))\n return [I, mark];\n return [I, (0, util_1.deepMix)({}, mark, { encode: { x: (0, helper_1.column)(data) } })];\n };\n};\nexports.MaybeTupleX = MaybeTupleX;\nexports.MaybeTupleX.props = {};\n//# sourceMappingURL=maybeTupleX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeIdentityY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeIdentityY = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y1 } = encode;\n if (y1)\n return [I, mark];\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n return [I, (0, util_1.deepMix)({}, mark, { encode: { y1: (0, helper_1.column)([...Y]) } })];\n };\n};\nexports.MaybeIdentityY = MaybeIdentityY;\nexports.MaybeIdentityY.props = {};\n//# sourceMappingURL=maybeIdentityY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeIdentityX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeIdentityX = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { x1 } = encode;\n if (x1)\n return [I, mark];\n const [X] = (0, helper_1.columnOf)(encode, 'x');\n return [I, (0, util_1.deepMix)({}, mark, { encode: { x1: (0, helper_1.column)([...X]) } })];\n };\n};\nexports.MaybeIdentityX = MaybeIdentityX;\nexports.MaybeIdentityX.props = {};\n//# sourceMappingURL=maybeIdentityX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeDefaultX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add a default encode for rangeX\n * when data is just an array\n */\nconst MaybeDefaultX = () => {\n return (I, mark) => {\n const { data } = mark;\n if (Array.isArray(data) &&\n (data.every(Array.isArray) || !data.some(helper_1.isObject))) {\n const extractX = (data, index) => Array.isArray(data[0])\n ? data.map((item) => item[index])\n : [data[index]];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: {\n x: (0, helper_1.column)(extractX(data, 0)),\n x1: (0, helper_1.column)(extractX(data, 1)),\n },\n }),\n ];\n }\n return [I, mark];\n };\n};\nexports.MaybeDefaultX = MaybeDefaultX;\nexports.MaybeDefaultX.props = {};\n//# sourceMappingURL=maybeDefaultX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeDefaultY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add a default encode for rangeY\n * when data is just an array\n */\nconst MaybeDefaultY = () => {\n return (I, mark) => {\n const { data } = mark;\n if (Array.isArray(data) &&\n (data.every(Array.isArray) || !data.some(helper_1.isObject))) {\n const extractY = (data, index) => Array.isArray(data[0])\n ? data.map((item) => item[index])\n : [data[index]];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: {\n y: (0, helper_1.column)(extractY(data, 0)),\n y1: (0, helper_1.column)(extractY(data, 1)),\n },\n }),\n ];\n }\n return [I, mark];\n };\n};\nexports.MaybeDefaultY = MaybeDefaultY;\nexports.MaybeDefaultY.props = {};\n//# sourceMappingURL=maybeDefaultY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeTooltip = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\n/**\n * Infer tooltip channel from specified channel.\n */\nconst MaybeTooltip = (options) => {\n const { channel } = options;\n return (I, mark) => {\n const { encode, tooltip } = mark;\n if ((0, helper_1.isUnset)(tooltip))\n return [I, mark];\n const { items = [] } = tooltip;\n if (!items || items.length > 0)\n return [I, mark];\n const channels = Array.isArray(channel) ? channel : [channel];\n const newItems = channels.flatMap((channel) => Object.keys(encode)\n .filter((key) => key.startsWith(channel))\n .map((key) => {\n const { field, value, inferred = false, aggregate } = encode[key];\n if (inferred)\n return null;\n // Do not show inferred column.\n if (aggregate && value)\n return { channel: key };\n if (field)\n return { field };\n if (value)\n return { channel: key };\n return null;\n })\n .filter((d) => d !== null));\n return [I, (0, util_1.deepMix)({}, mark, { tooltip: { items: newItems } })];\n };\n};\nexports.MaybeTooltip = MaybeTooltip;\nexports.MaybeTooltip.props = {};\n//# sourceMappingURL=maybeTooltip.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeZeroPadding = void 0;\nconst util_1 = require(\"@antv/util\");\n/**\n * Set padding of x and y scale to zero.\n */\nconst MaybeZeroPadding = () => {\n return (I, mark) => {\n return [\n I,\n (0, util_1.deepMix)({ scale: { x: { padding: 0 }, y: { padding: 0 } } }, mark),\n ];\n };\n};\nexports.MaybeZeroPadding = MaybeZeroPadding;\nexports.MaybeZeroPadding.props = {};\n//# sourceMappingURL=maybeZeroPadding.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeVisualPosition = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Set visual position with style.x and style.y.\n * The priority of style.x, style.y is higher than data.\n */\nconst MaybeVisualPosition = () => {\n return (I, mark) => {\n const { data, style = {} } = mark, restMark = __rest(mark, [\"data\", \"style\"]);\n const { x: x0, y: y0 } = style, rest = __rest(style, [\"x\", \"y\"]);\n if (x0 == undefined || y0 == undefined)\n return [I, mark];\n const x = x0 || 0;\n const y = y0 || 0;\n return [\n [0],\n (0, util_1.deepMix)({}, restMark, {\n data: [0],\n cartesian: true,\n encode: {\n x: (0, helper_1.column)([x]),\n y: (0, helper_1.column)([y]),\n },\n scale: {\n x: { type: 'identity', independent: true, guide: null },\n y: { type: 'identity', independent: true, guide: null }, // hide axis\n },\n style: rest,\n }),\n ];\n };\n};\nexports.MaybeVisualPosition = MaybeVisualPosition;\nexports.MaybeVisualPosition.props = {};\n//# sourceMappingURL=maybeVisualPosition.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeFunctionAttribute = void 0;\nconst util_1 = require(\"@antv/util\");\n/**\n * Mark functional attribute constant.\n */\nconst MaybeFunctionAttribute = () => {\n return (I, mark) => {\n const { style = {} } = mark;\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n style: Object.assign(Object.assign({}, style), Object.fromEntries(Object.entries(style)\n .filter(([, v]) => typeof v === 'function')\n .map(([k, v]) => [k, () => v]))),\n }),\n ];\n };\n};\nexports.MaybeFunctionAttribute = MaybeFunctionAttribute;\nexports.MaybeFunctionAttribute.props = {};\n//# sourceMappingURL=maybeFunctionAttribute.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeTuple = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeTuple = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(helper_1.isObject))\n return [I, mark];\n const position = Array.isArray(data[0]) ? data : [data];\n const X = position.map((d) => d[0]);\n const Y = position.map((d) => d[1]);\n return [I, (0, util_1.deepMix)({}, mark, { encode: { x: (0, helper_1.column)(X), y: (0, helper_1.column)(Y) } })];\n };\n};\nexports.MaybeTuple = MaybeTuple;\nexports.MaybeTuple.props = {};\n//# sourceMappingURL=maybeTuple.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaybeGradient = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nconst MaybeGradient = () => {\n return (I, mark) => {\n const { style = {}, encode } = mark;\n const { series } = encode;\n const { gradient } = style;\n if (!gradient || series)\n return [I, mark];\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: {\n series: (0, helper_1.visualColumn)((0, helper_1.constant)(I, undefined)),\n },\n }),\n ];\n };\n};\nexports.MaybeGradient = MaybeGradient;\nexports.MaybeGradient.props = {};\n//# sourceMappingURL=maybeGradient.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DodgeX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\n/**\n * The dodge group marks into series by color or series channel,\n * and then produce new series channel for each series by specified order,\n * say to form horizontal \"columns\" by specified channels.\n */\nconst DodgeX = (options = {}) => {\n const { groupBy = 'x', reverse = false, orderBy, padding } = options, rest = __rest(options, [\"groupBy\", \"reverse\", \"orderBy\", \"padding\"]);\n return (I, mark) => {\n const { data, encode, scale } = mark;\n const { series: scaleSeries } = scale;\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n const [S] = (0, helper_1.maybeColumnOf)(encode, 'series', 'color');\n const domainSeries = (0, order_1.domainOf)(S, scaleSeries);\n const newMark = (0, util_1.deepMix)({}, mark, {\n scale: {\n series: {\n domain: domainSeries,\n paddingInner: padding,\n },\n },\n });\n // Create groups and apply specified order for each group.\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n const createComparator = (0, order_1.normalizeComparator)(orderBy);\n if (!createComparator) {\n return [I, (0, util_1.deepMix)(newMark, { encode: { series: (0, helper_1.column)(S) } })];\n }\n // Sort and Update series for each mark related to series domain.\n const comparator = createComparator(data, Y, S);\n if (comparator)\n (0, order_1.applyOrder)(groups, comparator);\n const newS = new Array(I.length);\n for (const G of groups) {\n if (reverse)\n G.reverse();\n for (let i = 0; i < G.length; i++) {\n newS[G[i]] = domainSeries[i];\n }\n }\n return [\n I,\n (0, util_1.deepMix)(newMark, {\n encode: {\n series: (0, helper_1.column)(orderBy ? newS : S),\n },\n }),\n ];\n };\n};\nexports.DodgeX = DodgeX;\nexports.DodgeX.props = {};\n//# sourceMappingURL=dodgeX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StackEnter = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./utils/helper\");\n/**\n * Group marks by channels into groups and stacking their enterDelay\n * to make marks show up groups by groups.\n * It will update enterDelay channel for each mark by its enterDuration and group.\n * @todo Support orderBy.\n * @todo Sort among groups(e.g. reverse).\n * @todo Stack enter in groups rather than between groups?\n * @todo Auto inter this statistic for scaleInY animation in stacked interval?\n * @todo All the groups shared the enterDuration?\n */\nconst StackEnter = (options) => {\n const { groupBy = ['x'], reducer = (I, V) => V[I[0]], orderBy = null, reverse = false, duration, } = options;\n return (I, mark) => {\n const { encode } = mark;\n // Extract group information by each specified channel,\n // and skip if all values of channels are empty.\n const by = Array.isArray(groupBy) ? groupBy : [groupBy];\n const groupEntries = by.map((k) => [k, (0, helper_1.columnOf)(encode, k)[0]]);\n if (groupEntries.length === 0)\n return [I, mark];\n // Nest group index and flatten them in right order among timeline.\n // [[1, 2, 3, 4, 5, 6]] ->\n // [[1, 2, 3], [4, 5, 6]] ->\n // [[1], [2], [3], [4], [5], [6]]\n let groups = [I];\n for (const [, V] of groupEntries) {\n const newGroups = [];\n for (const I of groups) {\n const G = Array.from((0, d3_array_1.group)(I, (i) => V[i]).values());\n // @todo sort by x.\n newGroups.push(...G);\n }\n groups = newGroups;\n }\n // const {color} = encode;\n if (orderBy) {\n const [V] = (0, helper_1.columnOf)(encode, orderBy);\n if (V)\n groups.sort((I, J) => reducer(I, V) - reducer(J, V));\n if (reverse)\n groups.reverse();\n }\n // Stack delay for each group.\n const t = (duration || 3000) / groups.length;\n const [ED] = duration\n ? [(0, helper_1.constant)(I, t)] // If specified duration, generate enter duration for each.\n : (0, helper_1.maybeColumnOf)(encode, 'enterDuration', (0, helper_1.constant)(I, t));\n const [EDL] = (0, helper_1.maybeColumnOf)(encode, 'enterDelay', (0, helper_1.constant)(I, 0));\n const newEnterDelay = new Array(I.length);\n for (let i = 0, pd = 0; i < groups.length; i++) {\n const I = groups[i];\n const maxDuration = (0, d3_array_1.max)(I, (i) => +ED[i]);\n for (const j of I)\n newEnterDelay[j] = +EDL[j] + pd;\n pd += maxDuration;\n }\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: {\n enterDuration: (0, helper_1.visualColumn)(ED),\n enterDelay: (0, helper_1.visualColumn)(newEnterDelay),\n },\n }),\n ];\n };\n};\nexports.StackEnter = StackEnter;\nexports.StackEnter.props = {};\n//# sourceMappingURL=stackEnter.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NormalizeY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst helper_2 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\nfunction normalizeBasis(basis) {\n if (typeof basis === 'function')\n return basis;\n const registry = {\n min: (I, Y) => (0, d3_array_1.min)(I, (i) => Y[+i]),\n max: (I, Y) => (0, d3_array_1.max)(I, (i) => Y[+i]),\n first: (I, Y) => Y[I[0]],\n last: (I, Y) => Y[I[I.length - 1]],\n mean: (I, Y) => (0, d3_array_1.mean)(I, (i) => Y[+i]),\n median: (I, Y) => (0, d3_array_1.median)(I, (i) => Y[+i]),\n sum: (I, Y) => (0, d3_array_1.sum)(I, (i) => Y[+i]),\n deviation: (I, Y) => (0, d3_array_1.deviation)(I, (i) => Y[+i]),\n };\n return registry[basis] || d3_array_1.max;\n}\n/**\n * Group marks into series by specified channels, and then transform\n * each series's value, say to transform them relative to some basis\n * to apply a moving average.\n */\nconst NormalizeY = (options = {}) => {\n const { groupBy = 'x', basis = 'max' } = options;\n return (I, mark) => {\n const { encode, tooltip } = mark;\n const { x } = encode, rest = __rest(encode, [\"x\"]);\n // Extract and create new channels starts with y, such as y, y1.\n const Yn = Object.entries(rest)\n .filter(([k]) => k.startsWith('y'))\n .map(([k]) => [k, (0, helper_2.columnOf)(encode, k)[0]]);\n const [, Y] = Yn.find(([k]) => k === 'y');\n const newYn = Yn.map(([k]) => [k, new Array(I.length)]);\n // Group marks into series by specified keys.\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n // Transform y channels for each group based on basis.\n const basisFunction = normalizeBasis(basis);\n for (const I of groups) {\n // Compute basis only base on y.\n const basisValue = basisFunction(I, Y);\n for (const i of I) {\n for (let j = 0; j < Yn.length; j++) {\n const [, V] = Yn[j];\n const [, newV] = newYn[j];\n newV[i] = +V[i] / basisValue;\n }\n }\n }\n const specifiedTooltip = (0, helper_1.isUnset)(tooltip) || ((tooltip === null || tooltip === void 0 ? void 0 : tooltip.items) && (tooltip === null || tooltip === void 0 ? void 0 : tooltip.items.length) !== 0);\n return [\n I,\n (0, util_1.deepMix)({}, mark, Object.assign({ encode: Object.fromEntries(newYn.map(([k, v]) => [k, (0, helper_2.column)(v, (0, helper_2.columnOf)(encode, k)[1])])) }, (!specifiedTooltip &&\n encode.y0 && {\n tooltip: { items: [{ channel: 'y0' }] },\n }))),\n ];\n };\n};\nexports.NormalizeY = NormalizeY;\nexports.NormalizeY.props = {};\n//# sourceMappingURL=normalizeY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Jitter = exports.interpolate = exports.rangeOf = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\nfunction rangeOf(value, scaleOptions, padding) {\n if (value === null)\n return [-0.5, 0.5];\n const domain = (0, order_1.domainOf)(value, scaleOptions);\n const scale = new scale_1.Band({ domain, range: [0, 1], padding });\n const step = scale.getBandWidth();\n return [-step / 2, step / 2];\n}\nexports.rangeOf = rangeOf;\nfunction interpolate(t, a, b) {\n return a * (1 - t) + b * t;\n}\nexports.interpolate = interpolate;\n/**\n * The jitter transform produce dx and dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nconst Jitter = (options = {}) => {\n const { padding = 0, paddingX = padding, paddingY = padding, random = Math.random, } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { x: scaleX, y: scaleY } = scale;\n const [X] = (0, helper_1.columnOf)(encode, 'x');\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n const rangeX = rangeOf(X, scaleX, paddingX);\n const rangeY = rangeOf(Y, scaleY, paddingY);\n const DY = I.map(() => interpolate(random(), ...rangeY));\n const DX = I.map(() => interpolate(random(), ...rangeX));\n return [\n I,\n (0, util_1.deepMix)({\n scale: {\n x: { padding: 0.5 },\n y: { padding: 0.5 },\n },\n }, mark, {\n encode: { dy: (0, helper_1.column)(DY), dx: (0, helper_1.column)(DX) },\n }),\n ];\n };\n};\nexports.Jitter = Jitter;\nexports.Jitter.props = {};\n//# sourceMappingURL=jitter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JitterX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst jitter_1 = require(\"./jitter\");\n/**\n * The JitterX transform produce dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nconst JitterX = (options = {}) => {\n const { padding = 0, random = Math.random } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { x: scaleX } = scale;\n const [X] = (0, helper_1.columnOf)(encode, 'x');\n const rangeX = (0, jitter_1.rangeOf)(X, scaleX, padding);\n const DX = I.map(() => (0, jitter_1.interpolate)(random(), ...rangeX));\n return [\n I,\n (0, util_1.deepMix)({ scale: { x: { padding: 0.5 } } }, mark, {\n encode: { dx: (0, helper_1.column)(DX) },\n }),\n ];\n };\n};\nexports.JitterX = JitterX;\nexports.JitterX.props = {};\n//# sourceMappingURL=jitterX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JitterY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst jitter_1 = require(\"./jitter\");\n/**\n * The JitterY transform produce dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nconst JitterY = (options = {}) => {\n const { padding = 0, random = Math.random } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { y: scaleY } = scale;\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n const rangeY = (0, jitter_1.rangeOf)(Y, scaleY, padding);\n const DY = I.map(() => (0, jitter_1.interpolate)(random(), ...rangeY));\n return [\n I,\n (0, util_1.deepMix)({ scale: { y: { padding: 0.5 } } }, mark, {\n encode: { dy: (0, helper_1.column)(DY) },\n }),\n ];\n };\n};\nexports.JitterY = JitterY;\nexports.JitterY.props = {};\n//# sourceMappingURL=jitterY.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SymmetryY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\n/**\n * The SymmetryY transform apply offset for y channels, say to transform\n * them to be symmetry.\n */\nconst SymmetryY = (options = {}) => {\n const { groupBy = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const { x } = encode, rest = __rest(encode, [\"x\"]);\n // Extract and create new channels starts with y, such as y, y1.\n const Yn = Object.entries(rest)\n .filter(([k]) => k.startsWith('y'))\n .map(([k]) => [k, (0, helper_1.columnOf)(encode, k)[0]]);\n const newYn = Yn.map(([k]) => [k, new Array(I.length)]);\n // Group marks into series by specified keys.\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n const MY = new Array(groups.length);\n for (let i = 0; i < groups.length; i++) {\n const I = groups[i];\n const Y = I.flatMap((i) => Yn.map(([, V]) => +V[i]));\n const [minY, maxY] = (0, d3_array_1.extent)(Y);\n MY[i] = (minY + maxY) / 2;\n }\n const maxMiddleY = Math.max(...MY);\n for (let m = 0; m < groups.length; m++) {\n const offset = maxMiddleY - MY[m];\n const I = groups[m];\n for (const i of I) {\n for (let j = 0; j < Yn.length; j++) {\n const [, V] = Yn[j];\n const [, newV] = newYn[j];\n newV[i] = +V[i] + offset;\n }\n }\n }\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: Object.fromEntries(newYn.map(([k, v]) => [k, (0, helper_1.column)(v, (0, helper_1.columnOf)(encode, k)[1])])),\n }),\n ];\n };\n};\nexports.SymmetryY = SymmetryY;\nexports.SymmetryY.props = {};\n//# sourceMappingURL=symmetryY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiffY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\n/**\n * The DiffY transform apply offset for y0 channels.\n * Keep y unchanged, set y1 = max(otherY), if y1 > y, remove the data.\n */\nconst DiffY = (options = {}) => {\n const { groupBy = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n const [_, fy1] = (0, helper_1.columnOf)(encode, 'y1');\n // Create groups and apply specified order for each group.\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n // Only adjust Y1 channel.\n const newY1 = new Array(I.length);\n for (const G of groups) {\n const YG = G.map((i) => +Y[i]);\n // Process each series.\n for (let idx = 0; idx < G.length; idx++) {\n const i = G[idx];\n // Get the max Y of current group with current Y exclude.\n const max = Math.max(...YG.filter((_, _i) => _i !== idx));\n // Diff Y value.\n newY1[i] = +Y[i] > max ? max : Y[i];\n }\n }\n return [\n I,\n (0, util_1.deepMix)({}, mark, {\n encode: {\n y1: (0, helper_1.column)(newY1, fy1),\n },\n }),\n ];\n };\n};\nexports.DiffY = DiffY;\nexports.DiffY.props = {};\n//# sourceMappingURL=diffY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Select = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./utils/helper\");\nconst order_1 = require(\"./utils/order\");\nfunction first(I, V) {\n return [I[0]];\n}\nfunction last(I, V) {\n const i = I.length - 1;\n return [I[i]];\n}\nfunction max(I, V) {\n const i = (0, d3_array_1.maxIndex)(I, (i) => V[i]);\n return [I[i]];\n}\nfunction min(I, V) {\n const i = (0, d3_array_1.minIndex)(I, (i) => V[i]);\n return [I[i]];\n}\nfunction normalizeSelector(selector) {\n if (typeof selector === 'function')\n return selector;\n const registry = { first, last, max, min };\n return registry[selector] || first;\n}\n/**\n * The select transform groups marks with specified channels, and\n * filter index by specified selector for each series, say to\n * pull a single or multiple values out of each series.\n */\nconst Select = (options = {}) => {\n const { groupBy = 'series', channel, selector } = options;\n return (I, mark) => {\n const { encode } = mark;\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n const [V] = (0, helper_1.columnOf)(encode, channel);\n const selectFunction = normalizeSelector(selector);\n return [groups.flatMap((GI) => selectFunction(GI, V)), mark];\n };\n};\nexports.Select = Select;\nexports.Select.props = {};\n//# sourceMappingURL=select.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectX = void 0;\nconst select_1 = require(\"./select\");\n/**\n * The selectX transform filter index by y channel.\n */\nconst SelectX = (options = {}) => {\n const { selector } = options, rest = __rest(options, [\"selector\"]);\n return (0, select_1.Select)(Object.assign({ channel: 'x', selector }, rest));\n};\nexports.SelectX = SelectX;\nexports.SelectX.props = {};\n//# sourceMappingURL=selectX.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectY = void 0;\nconst select_1 = require(\"./select\");\n/**\n * The selectY transform filter index by y channel.\n */\nconst SelectY = (options = {}) => {\n const { selector } = options, rest = __rest(options, [\"selector\"]);\n return (0, select_1.Select)(Object.assign({ channel: 'y', selector }, rest));\n};\nexports.SelectY = SelectY;\nexports.SelectY.props = {};\n//# sourceMappingURL=selectY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupX = void 0;\nconst group_1 = require(\"./group\");\n/**\n * The GroupX transform group data by x channel, and aggregate.\n */\nconst GroupX = (options = {}) => {\n return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['x', 'color', 'series'] }));\n};\nexports.GroupX = GroupX;\nexports.GroupX.props = {};\n//# sourceMappingURL=groupX.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Group = void 0;\nconst order_1 = require(\"./utils/order\");\nconst groupN_1 = require(\"./groupN\");\n/**\n * The Group transform group data by x and y channels, and aggregate.\n */\nconst Group = (options = {}) => {\n const { channels = ['x', 'y'] } = options, rest = __rest(options, [\"channels\"]);\n const groupBy = (I, mark) => (0, order_1.createGroups)(channels, I, mark);\n return (0, groupN_1.GroupN)(Object.assign(Object.assign({}, rest), { groupBy }));\n};\nexports.Group = Group;\nexports.Group.props = {};\n//# sourceMappingURL=group.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupN = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst array_1 = require(\"../utils/array\");\nconst helper_1 = require(\"./utils/helper\");\nfunction builtinFormatter(summary) {\n return (d) => (d === null ? summary : `${summary} of ${d}`);\n}\nfunction normalizeReducer(reducer) {\n if (typeof reducer === 'function')\n return [reducer, null];\n const registry = { mean, max, count, first, last, sum, min, median };\n const reducerFunction = registry[reducer];\n if (!reducerFunction)\n throw new Error(`Unknown reducer: ${reducer}.`);\n return reducerFunction();\n}\nfunction mean() {\n const reducer = (I, V) => (0, d3_array_1.mean)(I, (i) => +V[i]);\n const formatter = builtinFormatter('mean');\n return [reducer, formatter];\n}\nfunction median() {\n const reducer = (I, V) => (0, d3_array_1.median)(I, (i) => +V[i]);\n const formatter = builtinFormatter('median');\n return [reducer, formatter];\n}\nfunction max() {\n const reducer = (I, V) => (0, d3_array_1.max)(I, (i) => +V[i]);\n const formatter = builtinFormatter('max');\n return [reducer, formatter];\n}\nfunction min() {\n const reducer = (I, V) => (0, d3_array_1.min)(I, (i) => +V[i]);\n const formatter = builtinFormatter('min');\n return [reducer, formatter];\n}\nfunction count() {\n const reducer = (I, V) => I.length;\n const formatter = builtinFormatter('count');\n return [reducer, formatter];\n}\nfunction sum() {\n const reducer = (I, V) => (0, d3_array_1.sum)(I, (i) => +V[i]);\n const formatter = builtinFormatter('sum');\n return [reducer, formatter];\n}\nfunction first() {\n const reducer = (I, V) => V[I[0]];\n const formatter = builtinFormatter('first');\n return [reducer, formatter];\n}\nfunction last() {\n const reducer = (I, V) => V[I[I.length - 1]];\n const formatter = builtinFormatter('last');\n return [reducer, formatter];\n}\n/**\n * The Group transform group data by x and y channels, and aggregate.\n */\nconst GroupN = (options = {}) => {\n const { groupBy } = options, rest = __rest(options, [\"groupBy\"]);\n return (I, mark) => {\n const { data, encode } = mark;\n const groups = groupBy(I, mark);\n if (!groups)\n return [I, mark];\n // Extract field from from channel\n // x1 from x, y1 from y, etc,.\n const maybeFrom = (field, reducer) => {\n if (field)\n return field;\n const { from } = reducer;\n if (!from)\n return field;\n const [, field1] = (0, helper_1.columnOf)(encode, from);\n return field1;\n };\n const outputs = Object.entries(rest).map(([channel, reducer]) => {\n const [reducerFunction, formatter] = normalizeReducer(reducer);\n const [V, field] = (0, helper_1.columnOf)(encode, channel);\n const field1 = maybeFrom(field, reducer);\n const RV = groups.map((I) => reducerFunction(I, V !== null && V !== void 0 ? V : data));\n return [\n channel,\n Object.assign(Object.assign({}, (0, helper_1.nonConstantColumn)(RV, (formatter === null || formatter === void 0 ? void 0 : formatter(field1)) || field1)), { aggregate: true }),\n ];\n });\n const reducedColumns = Object.keys(encode).map((key) => {\n const [V, fv] = (0, helper_1.columnOf)(encode, key);\n const GV = groups.map((I) => V[I[0]]);\n return [key, (0, helper_1.column)(GV, fv)];\n });\n const GD = groups.map((I) => data[I[0]]);\n const GI = (0, array_1.indexOf)(groups);\n return [\n GI,\n (0, util_1.deepMix)({}, mark, {\n data: GD,\n encode: Object.fromEntries([...reducedColumns, ...outputs]),\n }),\n ];\n };\n};\nexports.GroupN = GroupN;\nexports.GroupN.props = {};\n//# sourceMappingURL=groupN.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupY = void 0;\nconst group_1 = require(\"./group\");\n/**\n * The GroupY transform group data by x channel, and aggregate.\n */\nconst GroupY = (options = {}) => {\n return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['y', 'color', 'series'] }));\n};\nexports.GroupY = GroupY;\nexports.GroupY.props = {};\n//# sourceMappingURL=groupY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupColor = void 0;\nconst group_1 = require(\"./group\");\n/**\n * The GroupColor transform group data by x channel, and aggregate.\n */\nconst GroupColor = (options = {}) => {\n return (0, group_1.Group)(Object.assign(Object.assign({}, options), { channels: ['color'] }));\n};\nexports.GroupColor = GroupColor;\nexports.GroupColor.props = {};\n//# sourceMappingURL=groupColor.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SortX = void 0;\nconst sort_1 = require(\"./sort\");\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nconst SortX = (options = {}) => {\n return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'x' }));\n};\nexports.SortX = SortX;\nexports.SortX.props = {};\n//# sourceMappingURL=sortX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sort = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./utils/helper\");\nfunction createReducer(channel, options, encode) {\n const { by = channel, reducer = 'max' } = options;\n const [V] = (0, helper_1.columnOf)(encode, by);\n if (typeof reducer === 'function')\n return (GI) => reducer(GI, V);\n if (reducer === 'max')\n return (GI) => (0, d3_array_1.max)(GI, (i) => +V[i]);\n if (reducer === 'min')\n return (GI) => (0, d3_array_1.min)(GI, (i) => +V[i]);\n if (reducer === 'sum')\n return (GI) => (0, d3_array_1.sum)(GI, (i) => +V[i]);\n if (reducer === 'median')\n return (GI) => (0, d3_array_1.median)(GI, (i) => +V[i]);\n if (reducer === 'mean')\n return (GI) => (0, d3_array_1.mean)(GI, (i) => +V[i]);\n if (reducer === 'first')\n return (GI) => V[GI[0]];\n if (reducer === 'last')\n return (GI) => V[GI[GI.length - 1]];\n throw new Error(`Unknown reducer: ${reducer}`);\n}\n// If domain is specified, only sort data in the domain.\nfunction filterIndex(I, values, specifiedDomain) {\n if (!Array.isArray(specifiedDomain))\n return I;\n const domain = new Set(specifiedDomain);\n return I.filter((i) => domain.has(values[i]));\n}\n/**\n * Sort marks groups by groups.\n */\nconst Sort = (options = {}) => {\n return (I, mark) => {\n const { reverse, slice, channel, by, ordinal = true, reducer } = options;\n const { encode, scale = {} } = mark;\n const domain = scale[channel].domain;\n const [V] = (0, helper_1.columnOf)(encode, by !== null && by !== void 0 ? by : channel);\n const [T] = (0, helper_1.columnOf)(encode, channel);\n const normalizeReducer = createReducer(channel, { by, reducer }, encode);\n const SI = filterIndex(I, T, domain);\n const sortedDomain = (0, d3_array_1.groupSort)(SI, normalizeReducer, (i) => T[i]);\n // when ordinal is true, do not change the index of the data.\n const sortedI = !ordinal ? (0, d3_array_1.sort)(I, (i) => V[i]) : I;\n if (reverse) {\n !ordinal && sortedI.reverse();\n sortedDomain.reverse();\n }\n const s = typeof slice === 'number' ? [0, slice] : slice;\n const slicedDomain = slice ? sortedDomain.slice(...s) : sortedDomain;\n return [\n sortedI,\n (0, util_1.deepMix)(mark, { scale: { [channel]: { domain: slicedDomain } } }),\n ];\n };\n};\nexports.Sort = Sort;\nexports.Sort.props = {};\n//# sourceMappingURL=sort.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SortColor = void 0;\nconst sort_1 = require(\"./sort\");\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nconst SortColor = (options = {}) => {\n return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'color' }));\n};\nexports.SortColor = SortColor;\nexports.SortColor.props = {};\n//# sourceMappingURL=sortColor.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SortY = void 0;\nconst sort_1 = require(\"./sort\");\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nconst SortY = (options = {}) => {\n return (0, sort_1.Sort)(Object.assign(Object.assign({}, options), { channel: 'y' }));\n};\nexports.SortY = SortY;\nexports.SortY.props = {};\n//# sourceMappingURL=sortY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlexX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./utils/helper\");\nfunction valueOf(data, field) {\n if (typeof field === 'string')\n return data.map((d) => d[field]);\n return data.map(field);\n}\nfunction createReducer(reducer, V) {\n if (typeof reducer === 'function')\n return (GI) => reducer(GI, V);\n if (reducer === 'sum')\n return (GI) => (0, d3_array_1.sum)(GI, (i) => +V[i]);\n throw new Error(`Unknown reducer: ${reducer}`);\n}\n/**\n * Produce flex options from data for x scale.\n */\nconst FlexX = (options = {}) => {\n const { field, channel = 'y', reducer = 'sum' } = options;\n return (I, mark) => {\n const { data, encode } = mark;\n const [x] = (0, helper_1.columnOf)(encode, 'x');\n const V = field ? valueOf(data, field) : (0, helper_1.columnOf)(encode, channel)[0];\n const reducerFunction = createReducer(reducer, V);\n const flex = (0, d3_array_1.rollups)(I, reducerFunction, (i) => x[i]).map((d) => d[1]);\n return [I, (0, util_1.deepMix)({}, mark, { scale: { x: { flex } } })];\n };\n};\nexports.FlexX = FlexX;\nexports.FlexX.props = {};\n//# sourceMappingURL=flexX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pack = void 0;\nconst util_1 = require(\"@antv/util\");\nconst vector_1 = require(\"../utils/vector\");\nfunction pack(options) {\n const { padding = 0, direction = 'col' } = options;\n return (P, count, layout) => {\n const pcount = P.length;\n if (pcount === 0)\n return [];\n // col * row >= count\n // row is close to col * aspect, so\n // col * (col * aspect) >= count\n const { innerWidth, innerHeight } = layout;\n const aspect = innerHeight / innerWidth;\n let col = Math.ceil(Math.sqrt(count / aspect));\n // Increase col to avoid total height of packed shape\n // being large than height of bbox.\n let size = innerWidth / col;\n let row = Math.ceil(count / col);\n let h0 = row * size;\n while (h0 > innerHeight) {\n col = col + 1;\n size = innerWidth / col;\n row = Math.ceil(count / col);\n h0 = row * size;\n }\n // Some offset to increase the space usage.\n const space = innerHeight - row * size;\n const intervalY = row <= 1 ? 0 : space / (row - 1);\n const [offsetX, offsetY] = row <= 1\n ? [\n (innerWidth - pcount * size) / (pcount - 1),\n (innerHeight - size) / 2,\n ]\n : [0, 0];\n return P.map((points, m) => {\n const [x, y, width, height] = (0, vector_1.calcBBox)(points);\n const i = direction === 'col' ? m % col : Math.floor(m / row);\n const j = direction === 'col' ? Math.floor(m / col) : m % row;\n const newX = i * size;\n const newY = (row - j - 1) * size + space;\n const sx = (size - padding) / width;\n const sy = (size - padding) / height;\n // Translate the shape and mark to make sure the center of\n // shape is overlap before and after scale transformation.\n const tx = newX - x + offsetX * i + (1 / 2) * padding;\n const ty = newY - y - intervalY * j - offsetY + (1 / 2) * padding;\n return `translate(${tx}, ${ty}) scale(${sx}, ${sy})`;\n });\n };\n}\n/**\n * Uniform pack to avid overlap.\n * @todo Improve or change algorithm to increase space usage.\n * @todo Take some special case into account.\n */\nconst Pack = (options) => {\n return (I, mark) => {\n return [I, (0, util_1.deepMix)({}, mark, { modifier: pack(options), axis: false })];\n };\n};\nexports.Pack = Pack;\nexports.Pack.props = {};\n//# sourceMappingURL=pack.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mid = exports.calcBBox = exports.angleBetween = exports.angleWithQuadrant = exports.angle = exports.dist = exports.add = exports.sub = void 0;\nfunction sub([x1, y1], [x2, y2]) {\n return [x1 - x2, y1 - y2];\n}\nexports.sub = sub;\nfunction add([x1, y1], [x2, y2]) {\n return [x1 + x2, y1 + y2];\n}\nexports.add = add;\nfunction dist([x0, y0], [x1, y1]) {\n return Math.sqrt(Math.pow((x0 - x1), 2) + Math.pow((y0 - y1), 2));\n}\nexports.dist = dist;\n/**\n * Calculate angle of vector [x, y].\n */\nfunction angle([x, y]) {\n return Math.atan2(y, x);\n}\nexports.angle = angle;\n/**\n * Calculate angle of [x, y], then + Math.PI / 2.\n * Because of the difference between `Geometric coordinate system` and `Visualization coordinate system`.\n * @returns\n */\nfunction angleWithQuadrant([x, y]) {\n return angle([x, y]) + Math.PI / 2;\n}\nexports.angleWithQuadrant = angleWithQuadrant;\nfunction angleBetween(v0, v1) {\n const a0 = angle(v0);\n const a1 = angle(v1);\n if (a0 < a1)\n return a1 - a0;\n return Math.PI * 2 - (a0 - a1);\n}\nexports.angleBetween = angleBetween;\nfunction calcBBox(points) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const [x, y] of points) {\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n const width = maxX - minX;\n const height = maxY - minY;\n return [minX, minY, width, height];\n}\nexports.calcBBox = calcBBox;\n/**\n * Get the center of two points.\n */\nfunction mid([x1, y1], [x2, y2]) {\n return [(x1 + x2) / 2, (y1 + y2) / 2];\n}\nexports.mid = mid;\n//# sourceMappingURL=vector.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BinX = void 0;\nconst bin_1 = require(\"./bin\");\nconst BinX = (options = {}) => {\n const { thresholds } = options;\n return (0, bin_1.Bin)(Object.assign(Object.assign({}, options), { thresholdsX: thresholds, groupChannels: ['color'], binChannels: ['x'] }));\n};\nexports.BinX = BinX;\nexports.BinX.props = {};\n//# sourceMappingURL=binX.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Bin = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst groupN_1 = require(\"./groupN\");\nconst helper_2 = require(\"./utils/helper\");\nconst THRESHOLD = 'thresholds';\n/**\n * @see https://github.com/observablehq/plot/blob/main/src/transforms/bin.js\n */\nfunction thresholdAuto(values) {\n const [min, max] = (0, d3_array_1.extent)(values);\n return Math.min(200, (0, d3_array_1.thresholdScott)(values, min, max));\n}\n/**\n * The Bin aggregate data.\n * @todo More threshold method.\n * @todo Performance.\n */\nconst Bin = (options = {}) => {\n const { groupChannels = ['color'], binChannels = ['x', 'y'] } = options, rest = __rest(options, [\"groupChannels\", \"binChannels\"]);\n const channelIndexKey = {};\n // Group indexes and update channelIndexKey.\n const groupBy = (I, mark) => {\n const { encode } = mark;\n const binValues = binChannels.map((channel) => {\n const [V] = (0, helper_2.columnOf)(encode, channel);\n return V;\n });\n const thresholds = (0, helper_1.subObject)(rest, THRESHOLD);\n const DI = I.filter((i) => binValues.every((V) => (0, helper_1.defined)(V[i])));\n // Group indexes by both discrete and quantitative channels.\n const groupKeys = [\n // For discrete channels, use value as group key.\n ...groupChannels\n .map((d) => {\n const [V] = (0, helper_2.columnOf)(encode, d);\n return V;\n })\n .filter(helper_1.defined)\n .map((V) => (i) => V[i]),\n // For quantitative channels, use extent of bin as group key.\n ...binChannels.map((d, i) => {\n const V = binValues[i];\n const t = thresholds[d] || thresholdAuto(V);\n const bins = (0, d3_array_1.bin)()\n .thresholds(t)\n .value((i) => +V[i])(DI);\n const indexKey = new Map(bins.flatMap((bin) => {\n const { x0, x1 } = bin;\n const key = `${x0},${x1}`;\n return bin.map((i) => [i, key]);\n }));\n channelIndexKey[d] = indexKey;\n return (i) => indexKey.get(i);\n }),\n ];\n // Group by indexes by channel keys.\n const key = (i) => groupKeys.map((key) => key(i)).join('-');\n return Array.from((0, d3_array_1.group)(DI, key).values());\n };\n return (0, groupN_1.GroupN)(Object.assign(Object.assign(Object.assign({}, Object.fromEntries(Object.entries(rest).filter(([k]) => !k.startsWith(THRESHOLD)))), Object.fromEntries(binChannels.flatMap((channel) => {\n const start = ([i]) => +channelIndexKey[channel].get(i).split(',')[0];\n const end = ([i]) => +channelIndexKey[channel].get(i).split(',')[1];\n end.from = channel;\n return [\n [channel, start],\n [`${channel}1`, end],\n ];\n }))), { groupBy }));\n};\nexports.Bin = Bin;\nexports.Bin.props = {};\n//# sourceMappingURL=bin.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sample = void 0;\n// @ts-ignore medianIndex exist in d3-array@3.2.0, but @types/d3-array Expired.\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst order_1 = require(\"./utils/order\");\nconst helper_1 = require(\"./utils/helper\");\nconst lttb_1 = require(\"./utils/lttb\");\nfunction normalizeSample(strategy) {\n if (typeof strategy === 'function')\n return strategy;\n if (strategy === 'lttb')\n return lttb_1.lttb;\n const strategies = {\n first: (f) => [f[0]],\n last: (f) => [f[f.length - 1]],\n min: (f, X, Y) => [\n f[(0, d3_array_1.minIndex)(f, (i) => Y[i])],\n ],\n max: (f, X, Y) => [\n f[(0, d3_array_1.maxIndex)(f, (i) => Y[i])],\n ],\n median: (f, X, Y) => [\n f[(0, d3_array_1.medianIndex)(f, (i) => Y[i])],\n ],\n };\n const sampleFunction = strategies[strategy] || strategies.median;\n return (I, X, Y, thresholds) => {\n // Sepreate group to frames, then sample each frame.\n // Keep more data as possible.\n const frameSize = Math.max(1, Math.floor(I.length / thresholds));\n const frames = getFrames(I, frameSize);\n return frames.flatMap((frame) => sampleFunction(frame, X, Y));\n };\n}\n/**\n * Split the array into frame with each frameSize.\n */\nfunction getFrames(I, frameSize) {\n const size = I.length;\n const frames = [];\n let i = 0;\n while (i < size) {\n frames.push(I.slice(i, (i += frameSize)));\n }\n return frames;\n}\n/**\n * The sample transform groups marks with specified groupBy fields, and\n * sample data for each group when data.length >= threshold(default = 2000).\n */\nconst Sample = (options = {}) => {\n const { strategy = 'median', thresholds = 2000, groupBy = ['series', 'color'], } = options;\n const sampleFunction = normalizeSample(strategy);\n return (I, mark) => {\n const { encode } = mark;\n const groups = (0, order_1.createGroups)(groupBy, I, mark);\n const [X] = (0, helper_1.columnOf)(encode, 'x');\n const [Y] = (0, helper_1.columnOf)(encode, 'y');\n return [\n groups.flatMap((g) => sampleFunction(g, X, Y, thresholds)),\n mark,\n ];\n };\n};\nexports.Sample = Sample;\nexports.Sample.props = {};\n//# sourceMappingURL=sample.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lttb = void 0;\n/**\n * Sample data with lttb(Largest-Triangle-Three-Buckets) algo (https://github.com/pingec/downsample-lttb).\n * Return the sampled index array.\n */\nfunction lttb(I, X, Y, thresholds) {\n const length = I.length;\n if (thresholds >= length || thresholds === 0) {\n return I;\n }\n const x = (i) => X[I[i]] * 1;\n const y = (i) => Y[I[i]] * 1;\n const sampled = [];\n // Bucket size. Leave room for start and end data points.\n const every = (length - 2) / (thresholds - 2);\n let a = 0; // Initially a is the first point in the triangle.\n let maxArea;\n let area;\n let nextA;\n sampled.push(a); // Always add the first point.\n for (let i = 0; i < thresholds - 2; i++) {\n // Calculate point average for next bucket (containing c).\n let avgX = 0;\n let avgY = 0;\n let start = Math.floor((i + 1) * every) + 1;\n let end = Math.floor((i + 2) * every) + 1;\n end = Math.min(end, length);\n const size = end - start;\n for (; start < end; start++) {\n avgX += x(start);\n avgY += y(start);\n }\n avgX /= size;\n avgY /= size;\n // Get the range for this bucket.\n let frameStart = Math.floor((i + 0) * every) + 1;\n const frameEnd = Math.floor((i + 1) * every) + 1;\n // Point a.\n const pointA = [x(a), y(a)];\n maxArea = area = -1;\n for (; frameStart < frameEnd; frameStart++) {\n // Calculate triangle area over three buckets.\n area =\n Math.abs((pointA[0] - avgX) * (x(frameStart) - pointA[1]) -\n (pointA[0] - y(frameStart)) * (avgY - pointA[0])) * 0.5;\n if (area > maxArea) {\n maxArea = area;\n nextA = frameStart; // Next a is this b.\n }\n }\n sampled.push(nextA); // Pick this point from the bucket.\n a = nextA; // This a is the next a (chosen b).\n }\n sampled.push(length - 1); // Always add last.\n return sampled.map((a) => I[a]);\n}\nexports.lttb = lttb;\n//# sourceMappingURL=lttb.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Filter = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst helper_2 = require(\"./utils/helper\");\nfunction normalizeValue(value) {\n if (typeof value === 'object')\n return [value.value, value.ordinal];\n else\n return [value, true];\n}\nfunction filterWhenNoElements(mark) {\n var _a;\n const { encode } = mark;\n // keep y-axis\n const noElementMark = Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), { y: Object.assign(Object.assign({}, mark.encode.y), { value: [] }) }) });\n const targetField = (_a = encode === null || encode === void 0 ? void 0 : encode.color) === null || _a === void 0 ? void 0 : _a.field;\n if (!encode || !targetField) {\n return noElementMark;\n }\n // 获取color的筛选源\n let filterObject;\n for (const [key, v] of Object.entries(encode)) {\n if ((key === 'x' || key === 'y') && v.field === targetField) {\n filterObject = Object.assign(Object.assign({}, filterObject), { [key]: Object.assign(Object.assign({}, v), { value: [] }) });\n }\n }\n if (!filterObject) {\n return noElementMark;\n }\n return Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), filterObject) });\n}\n/**\n * The Filter transform filter channels.\n */\nconst Filter = (options = {}) => {\n return (I, mark) => {\n const { encode, data } = mark;\n const filters = Object.entries(options)\n .map(([key, v]) => {\n const [V] = (0, helper_2.columnOf)(encode, key);\n // Skip empty channel.\n if (!V)\n return null;\n const [value, ordinal = true] = normalizeValue(v);\n if (typeof value === 'function')\n return (i) => value(V[i]);\n if (ordinal) {\n const expectedValues = Array.isArray(value) ? value : [value];\n // Skip empty expected values.\n if (expectedValues.length === 0)\n return null;\n return (i) => expectedValues.includes(V[i]);\n }\n else {\n const [start, end] = value;\n return (i) => V[i] >= start && V[i] <= end;\n }\n })\n .filter(helper_1.defined);\n // Filter index and channels.\n const totalFilter = (i) => filters.every((f) => f(i));\n const FI = I.filter(totalFilter);\n const newIndex = FI.map((_, i) => i);\n if (filters.length === 0) {\n const targetMark = filterWhenNoElements(mark);\n return [I, targetMark];\n }\n const newEncodes = Object.entries(encode).map(([key, encode]) => {\n return [\n key,\n Object.assign(Object.assign({}, encode), { value: newIndex\n .map((i) => encode.value[FI[i]])\n .filter((v) => v !== undefined) }),\n ];\n });\n return [\n newIndex,\n (0, util_1.deepMix)({}, mark, {\n encode: Object.fromEntries(newEncodes),\n // Filter data for tooltip item.\n data: FI.map((i) => data[i]),\n }),\n ];\n };\n};\nexports.Filter = Filter;\nexports.Filter.props = {};\n//# sourceMappingURL=filter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BoxShape = exports.PolygonRibbon = exports.PolygonShape = exports.ImageShape = exports.LinkArc = exports.LinkVHV = exports.LinkSmooth = exports.LinkShape = exports.AreaHV = exports.AreaVH = exports.AreaHVH = exports.AreaSmooth = exports.AreaShape = exports.TextTag = exports.TextBadge = exports.TextShape = exports.VectorShape = exports.PointCircle = exports.PointTriangleDown = exports.PointTriangle = exports.PointTick = exports.PointSquare = exports.PointShape = exports.PointPlus = exports.PointLine = exports.PointHyphen = exports.PointHexagon = exports.PointDiamond = exports.PointCross = exports.PointBowtie = exports.PointHollowCircle = exports.PointHollowTriangleDown = exports.PointHollowTriangle = exports.PointHollowSquare = exports.PointHollow = exports.PointHollowHexagon = exports.PointHollowDiamond = exports.PointHollowBowtie = exports.LineTrail = exports.LineHVH = exports.LineVH = exports.LineHV = exports.LineSmooth = exports.LineShape = exports.CellHollow = exports.CellShape = exports.IntervalPyramid = exports.IntervalFunnel = exports.IntervalHollow = exports.IntervalShape = void 0;\nexports.GaugeRound = exports.LiquidShape = exports.ShapeShape = exports.RectHollow = exports.RectShape = exports.RangeShape = exports.HeatmapShape = exports.DensityShape = exports.PathHollow = exports.PathShape = exports.LabelShape = exports.ConnectorShape = exports.LineXY = exports.BoxViolin = void 0;\nvar rect_1 = require(\"./interval/rect\");\nObject.defineProperty(exports, \"IntervalShape\", { enumerable: true, get: function () { return rect_1.Rect; } });\nvar hollow_1 = require(\"./interval/hollow\");\nObject.defineProperty(exports, \"IntervalHollow\", { enumerable: true, get: function () { return hollow_1.Hollow; } });\nvar funnel_1 = require(\"./interval/funnel\");\nObject.defineProperty(exports, \"IntervalFunnel\", { enumerable: true, get: function () { return funnel_1.Funnel; } });\nvar pyramid_1 = require(\"./interval/pyramid\");\nObject.defineProperty(exports, \"IntervalPyramid\", { enumerable: true, get: function () { return pyramid_1.Pyramid; } });\nvar rect_2 = require(\"./interval/rect\");\nObject.defineProperty(exports, \"CellShape\", { enumerable: true, get: function () { return rect_2.Rect; } });\nvar hollow_2 = require(\"./interval/hollow\");\nObject.defineProperty(exports, \"CellHollow\", { enumerable: true, get: function () { return hollow_2.Hollow; } });\nvar line_1 = require(\"./line/line\");\nObject.defineProperty(exports, \"LineShape\", { enumerable: true, get: function () { return line_1.Line; } });\nvar smooth_1 = require(\"./line/smooth\");\nObject.defineProperty(exports, \"LineSmooth\", { enumerable: true, get: function () { return smooth_1.Smooth; } });\nvar hv_1 = require(\"./line/hv\");\nObject.defineProperty(exports, \"LineHV\", { enumerable: true, get: function () { return hv_1.HV; } });\nvar vh_1 = require(\"./line/vh\");\nObject.defineProperty(exports, \"LineVH\", { enumerable: true, get: function () { return vh_1.VH; } });\nvar hvh_1 = require(\"./line/hvh\");\nObject.defineProperty(exports, \"LineHVH\", { enumerable: true, get: function () { return hvh_1.HVH; } });\nvar trail_1 = require(\"./line/trail\");\nObject.defineProperty(exports, \"LineTrail\", { enumerable: true, get: function () { return trail_1.Trail; } });\nvar hollowBowtie_1 = require(\"./point/hollowBowtie\");\nObject.defineProperty(exports, \"PointHollowBowtie\", { enumerable: true, get: function () { return hollowBowtie_1.HollowBowtie; } });\nvar hollowDiamond_1 = require(\"./point/hollowDiamond\");\nObject.defineProperty(exports, \"PointHollowDiamond\", { enumerable: true, get: function () { return hollowDiamond_1.HollowDiamond; } });\nvar hollowHexagon_1 = require(\"./point/hollowHexagon\");\nObject.defineProperty(exports, \"PointHollowHexagon\", { enumerable: true, get: function () { return hollowHexagon_1.HollowHexagon; } });\nvar hollow_3 = require(\"./point/hollow\");\nObject.defineProperty(exports, \"PointHollow\", { enumerable: true, get: function () { return hollow_3.HollowPoint; } });\nvar hollowSquare_1 = require(\"./point/hollowSquare\");\nObject.defineProperty(exports, \"PointHollowSquare\", { enumerable: true, get: function () { return hollowSquare_1.HollowSquare; } });\nvar hollowTriangle_1 = require(\"./point/hollowTriangle\");\nObject.defineProperty(exports, \"PointHollowTriangle\", { enumerable: true, get: function () { return hollowTriangle_1.HollowTriangle; } });\nvar hollowTriangleDown_1 = require(\"./point/hollowTriangleDown\");\nObject.defineProperty(exports, \"PointHollowTriangleDown\", { enumerable: true, get: function () { return hollowTriangleDown_1.HollowTriangleDown; } });\nvar hollowCircle_1 = require(\"./point/hollowCircle\");\nObject.defineProperty(exports, \"PointHollowCircle\", { enumerable: true, get: function () { return hollowCircle_1.HollowCircle; } });\nvar bowtie_1 = require(\"./point/bowtie\");\nObject.defineProperty(exports, \"PointBowtie\", { enumerable: true, get: function () { return bowtie_1.Bowtie; } });\nvar cross_1 = require(\"./point/cross\");\nObject.defineProperty(exports, \"PointCross\", { enumerable: true, get: function () { return cross_1.Cross; } });\nvar diamond_1 = require(\"./point/diamond\");\nObject.defineProperty(exports, \"PointDiamond\", { enumerable: true, get: function () { return diamond_1.Diamond; } });\nvar hexagon_1 = require(\"./point/hexagon\");\nObject.defineProperty(exports, \"PointHexagon\", { enumerable: true, get: function () { return hexagon_1.Hexagon; } });\nvar hyphen_1 = require(\"./point/hyphen\");\nObject.defineProperty(exports, \"PointHyphen\", { enumerable: true, get: function () { return hyphen_1.Hyphen; } });\nvar line_2 = require(\"./point/line\");\nObject.defineProperty(exports, \"PointLine\", { enumerable: true, get: function () { return line_2.Line; } });\nvar plus_1 = require(\"./point/plus\");\nObject.defineProperty(exports, \"PointPlus\", { enumerable: true, get: function () { return plus_1.Plus; } });\nvar point_1 = require(\"./point/point\");\nObject.defineProperty(exports, \"PointShape\", { enumerable: true, get: function () { return point_1.Point; } });\nvar square_1 = require(\"./point/square\");\nObject.defineProperty(exports, \"PointSquare\", { enumerable: true, get: function () { return square_1.Square; } });\nvar tick_1 = require(\"./point/tick\");\nObject.defineProperty(exports, \"PointTick\", { enumerable: true, get: function () { return tick_1.Tick; } });\nvar triangle_1 = require(\"./point/triangle\");\nObject.defineProperty(exports, \"PointTriangle\", { enumerable: true, get: function () { return triangle_1.Triangle; } });\nvar triangleDown_1 = require(\"./point/triangleDown\");\nObject.defineProperty(exports, \"PointTriangleDown\", { enumerable: true, get: function () { return triangleDown_1.TriangleDown; } });\nvar circle_1 = require(\"./point/circle\");\nObject.defineProperty(exports, \"PointCircle\", { enumerable: true, get: function () { return circle_1.Circle; } });\nvar vector_1 = require(\"./vector/vector\");\nObject.defineProperty(exports, \"VectorShape\", { enumerable: true, get: function () { return vector_1.Vector; } });\nvar text_1 = require(\"./text/text\");\nObject.defineProperty(exports, \"TextShape\", { enumerable: true, get: function () { return text_1.Text; } });\nvar badge_1 = require(\"./text/badge\");\nObject.defineProperty(exports, \"TextBadge\", { enumerable: true, get: function () { return badge_1.Badge; } });\nvar tag_1 = require(\"./text/tag\");\nObject.defineProperty(exports, \"TextTag\", { enumerable: true, get: function () { return tag_1.Tag; } });\nvar area_1 = require(\"./area/area\");\nObject.defineProperty(exports, \"AreaShape\", { enumerable: true, get: function () { return area_1.Area; } });\nvar smooth_2 = require(\"./area/smooth\");\nObject.defineProperty(exports, \"AreaSmooth\", { enumerable: true, get: function () { return smooth_2.Smooth; } });\nvar hvh_2 = require(\"./area/hvh\");\nObject.defineProperty(exports, \"AreaHVH\", { enumerable: true, get: function () { return hvh_2.HVH; } });\nvar vh_2 = require(\"./area/vh\");\nObject.defineProperty(exports, \"AreaVH\", { enumerable: true, get: function () { return vh_2.VH; } });\nvar hv_2 = require(\"./area/hv\");\nObject.defineProperty(exports, \"AreaHV\", { enumerable: true, get: function () { return hv_2.HV; } });\nvar link_1 = require(\"./link/link\");\nObject.defineProperty(exports, \"LinkShape\", { enumerable: true, get: function () { return link_1.Link; } });\nvar smooth_3 = require(\"./link/smooth\");\nObject.defineProperty(exports, \"LinkSmooth\", { enumerable: true, get: function () { return smooth_3.Smooth; } });\nvar vhv_1 = require(\"./link/vhv\");\nObject.defineProperty(exports, \"LinkVHV\", { enumerable: true, get: function () { return vhv_1.VHV; } });\nvar arc_1 = require(\"./link/arc\");\nObject.defineProperty(exports, \"LinkArc\", { enumerable: true, get: function () { return arc_1.Arc; } });\nvar image_1 = require(\"./image/image\");\nObject.defineProperty(exports, \"ImageShape\", { enumerable: true, get: function () { return image_1.Image; } });\nvar polygon_1 = require(\"./polygon/polygon\");\nObject.defineProperty(exports, \"PolygonShape\", { enumerable: true, get: function () { return polygon_1.Polygon; } });\nvar ribbon_1 = require(\"./polygon/ribbon\");\nObject.defineProperty(exports, \"PolygonRibbon\", { enumerable: true, get: function () { return ribbon_1.Ribbon; } });\nvar box_1 = require(\"./box/box\");\nObject.defineProperty(exports, \"BoxShape\", { enumerable: true, get: function () { return box_1.Box; } });\nvar violin_1 = require(\"./box/violin\");\nObject.defineProperty(exports, \"BoxViolin\", { enumerable: true, get: function () { return violin_1.Violin; } });\nvar line_3 = require(\"./lineXY/line\");\nObject.defineProperty(exports, \"LineXY\", { enumerable: true, get: function () { return line_3.Line; } });\nvar connector_1 = require(\"./connector/connector\");\nObject.defineProperty(exports, \"ConnectorShape\", { enumerable: true, get: function () { return connector_1.Connector; } });\nvar label_1 = require(\"./label/label\");\nObject.defineProperty(exports, \"LabelShape\", { enumerable: true, get: function () { return label_1.Label; } });\nvar path_1 = require(\"./path/path\");\nObject.defineProperty(exports, \"PathShape\", { enumerable: true, get: function () { return path_1.Path; } });\nvar hollow_4 = require(\"./path/hollow\");\nObject.defineProperty(exports, \"PathHollow\", { enumerable: true, get: function () { return hollow_4.Hollow; } });\nvar density_1 = require(\"./density/density\");\nObject.defineProperty(exports, \"DensityShape\", { enumerable: true, get: function () { return density_1.Density; } });\nvar heatmap_1 = require(\"./heatmap/heatmap\");\nObject.defineProperty(exports, \"HeatmapShape\", { enumerable: true, get: function () { return heatmap_1.Heatmap; } });\nvar rect_3 = require(\"./interval/rect\");\nObject.defineProperty(exports, \"RangeShape\", { enumerable: true, get: function () { return rect_3.Rect; } });\nvar rect_4 = require(\"./interval/rect\");\nObject.defineProperty(exports, \"RectShape\", { enumerable: true, get: function () { return rect_4.Rect; } });\nvar hollow_5 = require(\"./interval/hollow\");\nObject.defineProperty(exports, \"RectHollow\", { enumerable: true, get: function () { return hollow_5.Hollow; } });\nvar shape_1 = require(\"./shape/shape\");\nObject.defineProperty(exports, \"ShapeShape\", { enumerable: true, get: function () { return shape_1.Shape; } });\nvar liquid_1 = require(\"./liquid/liquid\");\nObject.defineProperty(exports, \"LiquidShape\", { enumerable: true, get: function () { return liquid_1.Liquid; } });\nvar round_1 = require(\"./gauge/round\");\nObject.defineProperty(exports, \"GaugeRound\", { enumerable: true, get: function () { return round_1.Round; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Rect = void 0;\nconst color_1 = require(\"./color\");\n/**\n * Render rect in different coordinate and using color channel for stroke and fill attribute.\n * The stroke attribute is valid with specified lineWidth attribute which defaults to zero.\n */\nconst Rect = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nexports.Rect = Rect;\nexports.Rect.props = Object.assign(Object.assign({}, color_1.Color.props), { defaultMarker: 'square' });\n//# sourceMappingURL=rect.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color = exports.rect = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst selection_1 = require(\"../../utils/selection\");\nconst vector_1 = require(\"../../utils/vector\");\nconst number_1 = require(\"../../utils/number\");\nconst utils_1 = require(\"../utils\");\n// Render rect in different coordinate.\nfunction rect(document, points, value, coordinate, style = {}) {\n const { inset = 0, radius = 0, insetLeft = inset, insetTop = inset, insetRight = inset, insetBottom = inset, radiusBottomLeft = radius, radiusBottomRight = radius, radiusTopLeft = radius, radiusTopRight = radius, minWidth = -Infinity, maxWidth = Infinity, minHeight = -Infinity } = style, rest = __rest(style, [\"inset\", \"radius\", \"insetLeft\", \"insetTop\", \"insetRight\", \"insetBottom\", \"radiusBottomLeft\", \"radiusBottomRight\", \"radiusTopLeft\", \"radiusTopRight\", \"minWidth\", \"maxWidth\", \"minHeight\"]);\n if (!(0, coordinate_1.isPolar)(coordinate) && !(0, coordinate_1.isHelix)(coordinate)) {\n const tpShape = !!(0, coordinate_1.isTranspose)(coordinate);\n const [p0, , p2] = tpShape ? (0, utils_1.reorder)(points) : points;\n const [x, y] = p0;\n const [width, height] = (0, vector_1.sub)(p2, p0);\n // Deal with width or height is negative.\n const absX = width > 0 ? x : x + width;\n const absY = height > 0 ? y : y + height;\n const absWidth = Math.abs(width);\n const absHeight = Math.abs(height);\n const finalX = absX + insetLeft;\n const finalY = absY + insetTop;\n const finalWidth = absWidth - (insetLeft + insetRight);\n const finalHeight = absHeight - (insetTop + insetBottom);\n const clampWidth = tpShape\n ? (0, number_1.clamp)(finalWidth, minHeight, Infinity)\n : (0, number_1.clamp)(finalWidth, minWidth, maxWidth);\n const clampHeight = tpShape\n ? (0, number_1.clamp)(finalHeight, minWidth, maxWidth)\n : (0, number_1.clamp)(finalHeight, minHeight, Infinity);\n const clampX = tpShape ? finalX : finalX - (clampWidth - finalWidth) / 2;\n const clampY = tpShape\n ? finalY - (clampHeight - finalHeight) / 2\n : finalY - (clampHeight - finalHeight);\n return (0, selection_1.select)(document.createElement('rect', {}))\n .style('x', clampX)\n .style('y', clampY)\n .style('width', clampWidth)\n .style('height', clampHeight)\n .style('radius', [\n radiusTopLeft,\n radiusTopRight,\n radiusBottomRight,\n radiusBottomLeft,\n ])\n .call(utils_1.applyStyle, rest)\n .node();\n }\n // Render path in polar coordinate.\n const { y, y1 } = value;\n const center = coordinate.getCenter();\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]);\n const path = (0, d3_shape_1.arc)()\n .cornerRadius(radius)\n .padAngle((inset * Math.PI) / 180);\n return (0, selection_1.select)(document.createElement('path', {}))\n .style('d', path(arcObject))\n .style('transform', `translate(${center[0]}, ${center[1]})`)\n .style('radius', radius)\n .style('inset', inset)\n .call(utils_1.applyStyle, rest)\n .node();\n}\nexports.rect = rect;\n/**\n * Render rect in different coordinate.\n * Calc arc path based on control points directly rather startAngle, endAngle, innerRadius,\n * outerRadius. This is not accurate and will cause bug when the range of y scale is [1, 0]\n * for cell geometry.\n */\nconst Color = (options, context) => {\n // Render border only when colorAttribute is stroke.\n const { colorAttribute, opacityAttribute = 'fill', first = true, last = true } = options, style = __rest(options, [\"colorAttribute\", \"opacityAttribute\", \"first\", \"last\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, radius: defaultRadius = 0 } = defaults, restDefaults = __rest(defaults, [\"color\", \"radius\"]);\n const defaultLineWidth = restDefaults.lineWidth || 1;\n const { stroke, radius = defaultRadius, radiusTopLeft = radius, radiusTopRight = radius, radiusBottomRight = radius, radiusBottomLeft = radius, innerRadius = 0, innerRadiusTopLeft = innerRadius, innerRadiusTopRight = innerRadius, innerRadiusBottomRight = innerRadius, innerRadiusBottomLeft = innerRadius, lineWidth = colorAttribute === 'stroke' || stroke ? defaultLineWidth : 0, inset = 0, insetLeft = inset, insetRight = inset, insetBottom = inset, insetTop = inset, minWidth, maxWidth, minHeight } = style, rest = __rest(style, [\"stroke\", \"radius\", \"radiusTopLeft\", \"radiusTopRight\", \"radiusBottomRight\", \"radiusBottomLeft\", \"innerRadius\", \"innerRadiusTopLeft\", \"innerRadiusTopRight\", \"innerRadiusBottomRight\", \"innerRadiusBottomLeft\", \"lineWidth\", \"inset\", \"insetLeft\", \"insetRight\", \"insetBottom\", \"insetTop\", \"minWidth\", \"maxWidth\", \"minHeight\"]);\n const { color = defaultColor, opacity } = value;\n // Extended style, which is not supported by native g shape,\n // should apply at first.\n const standardDirRadius = [\n first ? radiusTopLeft : innerRadiusTopLeft,\n first ? radiusTopRight : innerRadiusTopRight,\n last ? radiusBottomRight : innerRadiusBottomRight,\n last ? radiusBottomLeft : innerRadiusBottomLeft,\n ];\n const standardDir = [\n 'radiusTopLeft',\n 'radiusTopRight',\n 'radiusBottomRight',\n 'radiusBottomLeft',\n ];\n // Transpose: rotate it clockwise by 90.\n if ((0, coordinate_1.isTranspose)(coordinate)) {\n standardDir.push(standardDir.shift());\n }\n const extendedStyle = Object.assign(Object.assign({ radius }, Object.fromEntries(standardDir.map((d, i) => [d, standardDirRadius[i]]))), { inset,\n insetLeft,\n insetRight,\n insetBottom,\n insetTop,\n minWidth,\n maxWidth,\n minHeight });\n return ((0, selection_1.select)(rect(document, points, value, coordinate, extendedStyle))\n .call(utils_1.applyStyle, restDefaults)\n .style('fill', 'transparent')\n .style(colorAttribute, color)\n .style((0, utils_1.toOpacityKey)(options), opacity)\n .style('lineWidth', lineWidth)\n .style('stroke', stroke === undefined ? color : stroke)\n // shape.style has higher priority.\n .call(utils_1.applyStyle, rest)\n .node());\n };\n};\nexports.Color = Color;\n// @todo Should Shape have default animations using for ordinal scale?\nexports.Color.props = {\n defaultEnterAnimation: 'scaleInY',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=color.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTransformOptions = exports.angleOf = exports.radiusOf = exports.getRadius = exports.isNonCartesian = exports.isTheta = exports.isCircular = exports.isRadar = exports.isFisheye = exports.isParallel = exports.isHelix = exports.isRadial = exports.isPolar = exports.isTranspose = void 0;\nfunction isTranspose(coordinate) {\n const { transformations } = coordinate.getOptions();\n const transposes = transformations\n .map(([type]) => type)\n .filter((type) => type === 'transpose');\n return transposes.length % 2 !== 0;\n}\nexports.isTranspose = isTranspose;\nfunction isPolar(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'polar');\n}\nexports.isPolar = isPolar;\nfunction isRadial(coordinate) {\n const { transformations } = coordinate.getOptions();\n return (\n // distinguish radial from theta.\n transformations.some(([type]) => type === 'reflect') &&\n transformations.some(([type]) => type.startsWith('transpose')));\n}\nexports.isRadial = isRadial;\nfunction isHelix(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'helix');\n}\nexports.isHelix = isHelix;\nfunction isParallel(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'parallel');\n}\nexports.isParallel = isParallel;\nfunction isFisheye(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'fisheye');\n}\nexports.isFisheye = isFisheye;\nfunction isRadar(coordinate) {\n return isParallel(coordinate) && isPolar(coordinate);\n}\nexports.isRadar = isRadar;\nfunction isCircular(coordinate) {\n return isHelix(coordinate) || isPolar(coordinate);\n}\nexports.isCircular = isCircular;\nfunction isTheta(coordinate) {\n return isPolar(coordinate) && isTranspose(coordinate);\n}\nexports.isTheta = isTheta;\nfunction isNonCartesian(coordinate) {\n return (isPolar(coordinate) ||\n isParallel(coordinate) ||\n isRadial(coordinate) ||\n isTheta(coordinate));\n}\nexports.isNonCartesian = isNonCartesian;\nfunction getRadius(coordinate) {\n if (isCircular(coordinate)) {\n const [width, height] = coordinate.getSize();\n const polar = coordinate\n .getOptions()\n .transformations.find((t) => t[0] === 'polar');\n // coordinate.size * outerRadius.\n if (polar)\n return (Math.max(width, height) / 2) * polar[4];\n }\n return 0;\n}\nexports.getRadius = getRadius;\nfunction radiusOf(coordinate) {\n const { transformations } = coordinate.getOptions();\n const [, , , innerRadius, outerRadius] = transformations.find((d) => d[0] === 'polar');\n return [+innerRadius, +outerRadius];\n}\nexports.radiusOf = radiusOf;\nfunction angleOf(coordinate, isRadius = true) {\n const { transformations } = coordinate.getOptions();\n const [, startAngle, endAngle] = transformations.find((d) => d[0] === 'polar');\n return isRadius\n ? [(+startAngle * 180) / Math.PI, (+endAngle * 180) / Math.PI]\n : [startAngle, endAngle];\n}\nexports.angleOf = angleOf;\nfunction getTransformOptions(coordinate, type) {\n const { transformations } = coordinate.getOptions();\n const [, ...args] = transformations.find((d) => d[0] === type);\n return args;\n}\nexports.getTransformOptions = getTransformOptions;\n//# sourceMappingURL=coordinate.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Selection = exports.select = void 0;\nconst g_1 = require(\"@antv/g\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"./helper\");\nfunction select(node) {\n return new Selection([node], null, node, node.ownerDocument);\n}\nexports.select = select;\n/**\n * A simple implementation of d3-selection for @antv/g.\n * It has the core features of d3-selection and extended ability.\n * Every methods of selection returns new selection if elements\n * are mutated(e.g. append, remove), otherwise return the selection itself(e.g. attr, style).\n * @see https://github.com/d3/d3-selection\n * @see https://github.com/antvis/g\n * @todo Nested selections.\n * @todo More useful functor.\n */\nclass Selection {\n constructor(elements = null, data = null, parent = null, document = null, selections = [\n null,\n null,\n null,\n null,\n null,\n ], transitions = [], updateElements = []) {\n this._elements = Array.from(elements);\n this._data = data;\n this._parent = parent;\n this._document = document;\n this._enter = selections[0];\n this._update = selections[1];\n this._exit = selections[2];\n this._merge = selections[3];\n this._split = selections[4];\n this._transitions = transitions;\n this._facetElements = updateElements;\n }\n selectAll(selector) {\n const elements = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)\n : selector;\n return new Selection(elements, null, this._elements[0], this._document);\n }\n selectFacetAll(selector) {\n const elements = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)\n : selector;\n return new Selection(this._elements, null, this._parent, this._document, undefined, undefined, elements);\n }\n /**\n * @todo Replace with querySelector which has bug now.\n */\n select(selector) {\n const element = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)[0] || null\n : selector;\n return new Selection([element], null, element, this._document);\n }\n append(node) {\n const callback = typeof node === 'function' ? node : () => this.createElement(node);\n const elements = [];\n if (this._data !== null) {\n // For empty selection, append new element to parent.\n // Each element is bind with datum.\n for (let i = 0; i < this._data.length; i++) {\n const d = this._data[i];\n const [datum, from] = Array.isArray(d) ? d : [d, null];\n const newElement = callback(datum, i);\n newElement.__data__ = datum;\n if (from !== null)\n newElement.__fromElements__ = from;\n this._parent.appendChild(newElement);\n elements.push(newElement);\n }\n return new Selection(elements, null, this._parent, this._document);\n }\n else {\n // For non-empty selection, append new element to\n // selected element and return new selection.\n for (let i = 0; i < this._elements.length; i++) {\n const element = this._elements[i];\n const datum = element.__data__;\n const newElement = callback(datum, i);\n element.appendChild(newElement);\n elements.push(newElement);\n }\n return new Selection(elements, null, elements[0], this._document);\n }\n }\n maybeAppend(id, node, className) {\n const element = this._elements[0];\n const child = element.getElementById(id);\n if (child) {\n return new Selection([child], null, this._parent, this._document);\n }\n const newChild = typeof node === 'string' ? this.createElement(node) : node();\n newChild.id = id;\n if (className)\n newChild.className = className;\n element.appendChild(newChild);\n return new Selection([newChild], null, this._parent, this._document);\n }\n /**\n * Bind data to elements, and produce three selection:\n * Enter: Selection with empty elements and data to be bind to elements.\n * Update: Selection with elements to be updated.\n * Exit: Selection with elements to be removed.\n */\n data(data, id = (d) => d, groupId = () => null) {\n // An Array of new data.\n const enter = [];\n // An Array of elements to be updated.\n const update = [];\n // A Set of elements to be removed.\n const exit = new Set(this._elements);\n // An Array of data to be merged into one element.\n const merge = [];\n // A Set of elements to be split into multiple datum.\n const split = new Set();\n // A Map from key to each element.\n const keyElement = new Map(this._elements.map((d, i) => [id(d.__data__, i), d]));\n // A Map from key to exist element. The Update Selection\n // can get element from this map, this is for diff among\n // facets.\n const keyUpdateElement = new Map(this._facetElements.map((d, i) => [id(d.__data__, i), d]));\n // A Map from groupKey to a group of elements.\n const groupKeyElements = (0, d3_array_1.group)(this._elements, (d) => groupId(d.__data__));\n // Diff data with selection(elements with data).\n // !!! Note\n // The switch is strictly ordered, not not change the order of them.\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n const key = id(datum, i);\n const groupKey = groupId(datum, i);\n // Append element to update selection if incoming data has\n // exactly the same key with elements.\n if (keyElement.has(key)) {\n const element = keyElement.get(key);\n element.__data__ = datum;\n element.__facet__ = false;\n update.push(element);\n exit.delete(element);\n keyElement.delete(key);\n // Append element to update selection if incoming data has\n // exactly the same key with updateElements.\n }\n else if (keyUpdateElement.has(key)) {\n const element = keyUpdateElement.get(key);\n element.__data__ = datum;\n // Flag this element should update its parentNode.\n element.__facet__ = true;\n update.push(element);\n keyUpdateElement.delete(key);\n // Append datum to merge selection if existed elements has\n // its key as groupKey.\n }\n else if (groupKeyElements.has(key)) {\n const group = groupKeyElements.get(key);\n merge.push([datum, group]);\n for (const element of group)\n exit.delete(element);\n groupKeyElements.delete(key);\n // Append element to split selection if incoming data has\n // groupKey as its key, and bind to datum for it.\n }\n else if (keyElement.has(groupKey)) {\n const element = keyElement.get(groupKey);\n if (element.__toData__)\n element.__toData__.push(datum);\n else\n element.__toData__ = [datum];\n split.add(element);\n exit.delete(element);\n }\n else {\n // @todo Data with non-unique key.\n enter.push(datum);\n }\n }\n // Create new selection with enter, update and exit.\n const S = [\n new Selection([], enter, this._parent, this._document),\n new Selection(update, null, this._parent, this._document),\n new Selection(exit, null, this._parent, this._document),\n new Selection([], merge, this._parent, this._document),\n new Selection(split, null, this._parent, this._document),\n ];\n return new Selection(this._elements, null, this._parent, this._document, S);\n }\n merge(other) {\n const elements = [...this._elements, ...other._elements];\n const transitions = [...this._transitions, ...other._transitions];\n return new Selection(elements, null, this._parent, this._document, undefined, transitions);\n }\n createElement(type) {\n if (this._document) {\n return this._document.createElement(type, {});\n }\n const Ctor = Selection.registry[type];\n if (Ctor)\n return new Ctor();\n return (0, helper_1.error)(`Unknown node type: ${type}`);\n }\n /**\n * Apply callback for each selection(enter, update, exit)\n * and merge them into one selection.\n */\n join(enter = (d) => d, update = (d) => d, exit = (d) => d.remove(), merge = (d) => d, split = (d) => d.remove()) {\n const newEnter = enter(this._enter);\n const newUpdate = update(this._update);\n const newExit = exit(this._exit);\n const newMerge = merge(this._merge);\n const newSplit = split(this._split);\n return newUpdate\n .merge(newEnter)\n .merge(newExit)\n .merge(newMerge)\n .merge(newSplit);\n }\n remove() {\n // Remove node immediately if there is no transition,\n // otherwise wait until transition finished.\n for (let i = 0; i < this._elements.length; i++) {\n const transition = this._transitions[i];\n if (transition) {\n const T = Array.isArray(transition) ? transition : [transition];\n Promise.all(T.map((d) => d.finished)).then(() => {\n const element = this._elements[i];\n element.remove();\n });\n }\n else {\n const element = this._elements[i];\n element.remove();\n }\n }\n return new Selection([], null, this._parent, this._document, undefined, this._transitions);\n }\n each(callback) {\n for (let i = 0; i < this._elements.length; i++) {\n const element = this._elements[i];\n const datum = element.__data__;\n callback(datum, i, element);\n }\n return this;\n }\n attr(key, value) {\n const callback = typeof value !== 'function' ? () => value : value;\n return this.each(function (d, i, element) {\n if (value !== undefined)\n element[key] = callback(d, i, element);\n });\n }\n style(key, value) {\n const callback = typeof value !== 'function' ? () => value : value;\n return this.each(function (d, i, element) {\n if (value !== undefined)\n element.style[key] = callback(d, i, element);\n });\n }\n transition(value) {\n const callback = typeof value !== 'function' ? () => value : value;\n const { _transitions: T } = this;\n return this.each(function (d, i, element) {\n T[i] = callback(d, i, element);\n });\n }\n on(event, handler) {\n this.each(function (d, i, element) {\n element.addEventListener(event, handler);\n });\n return this;\n }\n call(callback, ...args) {\n callback(this, ...args);\n return this;\n }\n node() {\n return this._elements[0];\n }\n nodes() {\n return this._elements;\n }\n transitions() {\n return this._transitions;\n }\n parent() {\n return this._parent;\n }\n}\nexports.Selection = Selection;\nSelection.registry = {\n g: g_1.Group,\n rect: g_1.Rect,\n circle: g_1.Circle,\n path: g_1.Path,\n text: g_1.Text,\n ellipse: g_1.Ellipse,\n image: g_1.Image,\n line: g_1.Line,\n polygon: g_1.Polygon,\n polyline: g_1.Polyline,\n html: g_1.HTML,\n};\n//# sourceMappingURL=selection.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prettyNumber = exports.clamp = void 0;\n/**\n * Clamp number within the inclusive range within the lower and upper bounds.\n */\nfunction clamp(v, lower, upper) {\n return Math.max(lower, Math.min(v, upper));\n}\nexports.clamp = clamp;\n/**\n * Precision conversion\n */\nfunction prettyNumber(n, precision = 10) {\n if (typeof n !== 'number')\n return n;\n return Math.abs(n) < 1e-15 ? n : parseFloat(n.toFixed(precision));\n}\nexports.prettyNumber = prettyNumber;\n//# sourceMappingURL=number.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOrigin = exports.getTransform = exports.toOpacityKey = exports.getConnectStyle = exports.getArcObject = exports.reorder = exports.computeGradient = exports.appendArc = exports.arrowPoints = exports.appendPolygon = exports.applyStyle = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst array_1 = require(\"../utils/array\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst vector_1 = require(\"../utils/vector\");\nfunction applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\nexports.applyStyle = applyStyle;\n/**\n * Draw polygon path with points.\n * @param path\n * @param points\n */\nfunction appendPolygon(path, points) {\n points.forEach((p, idx) => idx === 0 ? path.moveTo(p[0], p[1]) : path.lineTo(p[0], p[1]));\n path.closePath();\n return path;\n}\nexports.appendPolygon = appendPolygon;\n/**\n * Draw arrow between `from` and `to`.\n * @param from\n * @param to\n * @returns\n */\nfunction arrowPoints(from, to, options) {\n const { arrowSize } = options;\n const size = typeof arrowSize === 'string'\n ? (+parseFloat(arrowSize) / 100) * (0, vector_1.dist)(from, to)\n : arrowSize;\n // TODO Use config from style.\n // Default arrow rotate is 30°.\n const arrowAngle = Math.PI / 6;\n const angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n const arrowAngle1 = Math.PI / 2 - angle - arrowAngle;\n const arrow1 = [\n to[0] - size * Math.sin(arrowAngle1),\n to[1] - size * Math.cos(arrowAngle1),\n ];\n const arrowAngle2 = angle - arrowAngle;\n const arrow2 = [\n to[0] - size * Math.cos(arrowAngle2),\n to[1] - size * Math.sin(arrowAngle2),\n ];\n return [arrow1, arrow2];\n}\nexports.arrowPoints = arrowPoints;\n/**\n * Draw arc by from -> to, with center and radius.\n * @param path\n * @param from\n * @param to\n * @param center\n * @param radius\n */\nfunction appendArc(path, from, to, center, radius) {\n const startAngle = (0, vector_1.angle)((0, vector_1.sub)(center, from)) + Math.PI;\n const endAngle = (0, vector_1.angle)((0, vector_1.sub)(center, to)) + Math.PI;\n path.arc(center[0], center[1], radius, startAngle, endAngle, endAngle - startAngle < 0);\n return path;\n}\nexports.appendArc = appendArc;\n/**\n * @todo Fix wrong key point.\n */\nfunction computeGradient(C, X, Y, from = 'y', mode = 'between', tpShape = false) {\n // The angles of gradients rendering are varies when 'from' and 'tpShape' are different.\n const getTheta = (from, tpShape) => {\n if (from === 'y' || from === true) {\n if (tpShape) {\n return 180;\n }\n else {\n return 90;\n }\n }\n else {\n if (tpShape) {\n return 90;\n }\n else {\n return 0;\n }\n }\n };\n const P = from === 'y' || from === true ? Y : X;\n const theta = getTheta(from, tpShape);\n const I = (0, array_1.indexOf)(P);\n const [min, max] = (0, d3_array_1.extent)(I, (i) => P[i]);\n // This need to improve for non-uniform distributed colors.\n const p = new scale_1.Linear({\n domain: [min, max],\n range: [0, 100],\n });\n const percentage = (i) => (0, util_1.isNumber)(P[i]) && !Number.isNaN(P[i]) ? p.map(P[i]) : 0;\n const gradientMode = {\n // Interpolate the colors for this segment.\n between: (i) => `${C[i]} ${percentage(i)}%`,\n // Use the color of the start point as the color for this segment.\n start: (i) => i === 0\n ? `${C[i]} ${percentage(i)}%`\n : `${C[i - 1]} ${percentage(i)}%, ${C[i]} ${percentage(i)}%`,\n // Use the color of the end point as the color for this segment.\n end: (i) => i === C.length - 1\n ? `${C[i]} ${percentage(i)}%`\n : `${C[i]} ${percentage(i)}%, ${C[i + 1]} ${percentage(i)}%`,\n };\n const gradient = I.sort((a, b) => percentage(a) - percentage(b))\n .map(gradientMode[mode] || gradientMode['between'])\n .join(',');\n return `linear-gradient(${theta}deg, ${gradient})`;\n}\nexports.computeGradient = computeGradient;\nfunction reorder(points) {\n const [p0, p1, p2, p3] = points;\n return [p3, p0, p1, p2];\n}\nexports.reorder = reorder;\nfunction getArcObject(coordinate, points, Y) {\n const [p0, p1, , p3] = (0, coordinate_1.isTranspose)(coordinate) ? reorder(points) : points;\n const [y, y1] = Y;\n const center = coordinate.getCenter();\n const a1 = (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(p0, center));\n const a2 = (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(p1, center));\n // There are two situations that a2 === a1:\n // 1. a1 - a2 = 0\n // 2. |a1 - a2| = Math.PI * 2\n // Distinguish them by y and y1:\n const a3 = a2 === a1 && y !== y1 ? a2 + Math.PI * 2 : a2;\n return {\n startAngle: a1,\n endAngle: a3 - a1 >= 0 ? a3 : Math.PI * 2 + a3,\n innerRadius: (0, vector_1.dist)(p3, center),\n outerRadius: (0, vector_1.dist)(p0, center),\n };\n}\nexports.getArcObject = getArcObject;\n/**\n * Pick connectStyle from style.\n * @param style\n */\nfunction getConnectStyle(style) {\n const PREFIX = 'connect';\n return Object.fromEntries(Object.entries(style)\n .filter(([key]) => key.startsWith(PREFIX))\n .map(([key, value]) => [\n (0, util_1.lowerFirst)(key.replace(PREFIX, '').trim()),\n value,\n ])\n .filter(([key]) => key !== undefined));\n}\nexports.getConnectStyle = getConnectStyle;\nfunction toOpacityKey(options) {\n const { colorAttribute, opacityAttribute = colorAttribute } = options;\n return `${opacityAttribute}Opacity`;\n}\nexports.toOpacityKey = toOpacityKey;\nfunction getTransform(coordinate, value) {\n if (!(0, coordinate_1.isPolar)(coordinate))\n return '';\n const center = coordinate.getCenter();\n const { transform: suffix } = value;\n return `translate(${center[0]}, ${center[1]}) ${suffix || ''}`;\n}\nexports.getTransform = getTransform;\nfunction getOrigin(points) {\n if (points.length === 1)\n return points[0];\n const [[x0, y0, z0 = 0], [x2, y2, z2 = 0]] = points;\n return [(x0 + x2) / 2, (y0 + y2) / 2, (z0 + z2) / 2];\n}\nexports.getOrigin = getOrigin;\n//# sourceMappingURL=utils.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hollow = void 0;\nconst color_1 = require(\"./color\");\n/**\n * Render rect in different coordinate and using color channel for stroke attribute.\n */\nconst Hollow = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke' }, options), context);\n};\nexports.Hollow = Hollow;\nexports.Hollow.props = Object.assign(Object.assign({}, color_1.Color.props), { defaultMarker: 'hollowSquare' });\n//# sourceMappingURL=hollow.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Funnel = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../utils\");\n/**\n * Adjust and return the new `points`.\n */\nfunction getFunnelPoints(points, nextPoints, coordinate) {\n const [p0, p1, p2, p3] = points;\n if ((0, coordinate_1.isTranspose)(coordinate)) {\n const newP1 = [nextPoints ? nextPoints[0][0] : p1[0], p1[1]];\n const newP2 = [nextPoints ? nextPoints[3][0] : p2[0], p2[1]];\n return [p0, newP1, newP2, p3];\n }\n const newP1 = [p1[0], nextPoints ? nextPoints[0][1] : p1[1]];\n const newP2 = [p2[0], nextPoints ? nextPoints[3][1] : p2[1]];\n return [p0, newP1, newP2, p3];\n}\n/**\n * Render funnel in different coordinate and using color channel for stroke and fill attribute.\n */\nconst Funnel = (options, context) => {\n const { adjustPoints = getFunnelPoints } = options, style = __rest(options, [\"adjustPoints\"]);\n const { coordinate, document } = context;\n return (points, value, defaults, point2d) => {\n const { index } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const nextPoints = point2d[index + 1];\n const funnelPoints = adjustPoints(points, nextPoints, coordinate);\n const tpShape = !!(0, coordinate_1.isTranspose)(coordinate);\n const [p0, p1, p2, p3] = tpShape ? (0, utils_1.reorder)(funnelPoints) : funnelPoints;\n const { color = defaultColor, opacity } = value;\n const b = (0, d3_shape_1.line)().curve(d3_shape_1.curveLinearClosed)([p0, p1, p2, p3]);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', b)\n .style('fill', color)\n .style('fillOpacity', opacity)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Funnel = Funnel;\nexports.Funnel.props = {\n defaultMarker: 'square',\n};\n//# sourceMappingURL=funnel.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pyramid = void 0;\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst funnel_1 = require(\"./funnel\");\n/**\n * Adjust and return the new `points`.\n */\nfunction getPyramidPoints(points, nextPoints, coordinate) {\n const [p0, p1, p2, p3] = points;\n if ((0, coordinate_1.isTranspose)(coordinate)) {\n const newP1 = [\n nextPoints ? nextPoints[0][0] : (p1[0] + p2[0]) / 2,\n p1[1],\n ];\n const newP2 = [\n nextPoints ? nextPoints[3][0] : (p1[0] + p2[0]) / 2,\n p2[1],\n ];\n return [p0, newP1, newP2, p3];\n }\n const newP1 = [\n p1[0],\n nextPoints ? nextPoints[0][1] : (p1[1] + p2[1]) / 2,\n ];\n const newP2 = [\n p2[0],\n nextPoints ? nextPoints[3][1] : (p1[1] + p2[1]) / 2,\n ];\n return [p0, newP1, newP2, p3];\n}\n/**\n * Render pyramid in different coordinate and using color channel for stroke and fill attribute.\n */\nconst Pyramid = (options, context) => {\n return (0, funnel_1.Funnel)(Object.assign({ adjustPoints: getPyramidPoints }, options), context);\n};\nexports.Pyramid = Pyramid;\nexports.Pyramid.props = {\n defaultMarker: 'square',\n};\n//# sourceMappingURL=pyramid.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Line = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst curve_1 = require(\"./curve\");\nconst Line = (options, context) => {\n const { coordinate } = context;\n return (...params) => {\n const curve = (0, coordinate_1.isPolar)(coordinate) ? d3_shape_1.curveLinearClosed : d3_shape_1.curveLinear;\n return (0, curve_1.Curve)(Object.assign({ curve }, options), context)(...params);\n };\n};\nexports.Line = Line;\nexports.Line.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'line' });\n//# sourceMappingURL=line.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Curve = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../utils\");\nconst createElement_1 = require(\"../../utils/createElement\");\nconst helper_1 = require(\"../../utils/helper\");\nconst vector_1 = require(\"../../utils/vector\");\nconst DoublePath = (0, createElement_1.createElement)((g) => {\n const { d1, d2, style1, style2 } = g.attributes;\n const document = g.ownerDocument;\n (0, selection_1.select)(g)\n .maybeAppend('line', () => document.createElement('path', {}))\n .style('d', d1)\n .call(utils_1.applyStyle, style1);\n (0, selection_1.select)(g)\n .maybeAppend('line1', () => document.createElement('path', {}))\n .style('d', d2)\n .call(utils_1.applyStyle, style2);\n});\n/**\n * Given a points sequence, split it into an array of defined points\n * and an array of undefined segments.\n *\n * Input - [[1, 2], [3, 4], [null, null], [null, null], [5, 6], [null, null], [7, 8]]\n * Output\n * - [[1, 2], [3, 4], [5, 6], [7, 8]]\n * - [\n * [[3, 4], [5, 6]],\n * [[5, 6], [7, 8]]\n * ]\n */\nfunction segmentation(points, defined) {\n const definedPoints = [];\n const segments = [];\n let m = false; // Is in a undefined sequence.\n let dp = null; // The previous defined point.\n for (const p of points) {\n // If current point is a undefined point,\n // enter a undefined sequence.\n if (!defined(p[0]) || !defined(p[1]))\n m = true;\n else {\n definedPoints.push(p);\n // If current point is a defined point,\n // and is in a undefined sequence, save\n // the two closest defined points as this\n // undefined sequence and exit it.\n if (m) {\n m = false;\n segments.push([dp, p]);\n }\n // Update the previous defined point.\n dp = p;\n }\n }\n return [definedPoints, segments];\n}\nconst Curve = (options, context) => {\n const { curve, gradient = false, \n // The color for each segment.\n gradientColor = 'between', defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, [\"curve\", \"gradient\", \"gradientColor\", \"defined\", \"connect\"]);\n const { coordinate, document } = context;\n return (P, value, defaults) => {\n // Compute styles.\n const { color: defaultColor, lineWidth: defaultSize } = defaults, rest = __rest(defaults, [\"color\", \"lineWidth\"]);\n const { color = defaultColor, size = defaultSize, seriesColor: sc, seriesX: sx, seriesY: sy, } = value;\n const transform = (0, utils_1.getTransform)(coordinate, value);\n const tpShape = (0, coordinate_1.isTranspose)(coordinate);\n const stroke = gradient && sc\n ? (0, utils_1.computeGradient)(sc, sx, sy, gradient, gradientColor, tpShape)\n : color;\n const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, rest), (stroke && { stroke })), (size && { lineWidth: size })), (transform && { transform })), style);\n // Compute points and segments.\n let linePath;\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const center = coordinate.getCenter();\n linePath = (points) => (0, d3_shape_1.lineRadial)()\n .angle((_, idx) => (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(points[idx], center)))\n .radius((_, idx) => (0, vector_1.dist)(points[idx], center))\n .defined(([x, y]) => defined(x) && defined(y))\n .curve(curve)(points);\n }\n else {\n linePath = (0, d3_shape_1.line)()\n .x((d) => d[0])\n .y((d) => d[1])\n .defined(([x, y]) => defined(x) && defined(y))\n .curve(curve);\n }\n const [DP, MS] = segmentation(P, defined);\n const connectStyle = (0, helper_1.subObject)(finalStyle, 'connect');\n const missing = !!MS.length;\n // Draw one path of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return (0, selection_1.select)(document.createElement('path', {}))\n .style('d', linePath(DP) || [])\n .call(utils_1.applyStyle, finalStyle)\n .node();\n }\n // Draw one path of unconnected defined points.\n if (missing && !connectNulls) {\n return (0, selection_1.select)(document.createElement('path', {}))\n .style('d', linePath(P))\n .call(utils_1.applyStyle, finalStyle)\n .node();\n }\n // Draw two path.\n // One for unconnected defined points.\n // One for connected segments.\n const connectPath = (segments) => segments.map(linePath).join(',');\n return (0, selection_1.select)(new DoublePath())\n .style('style1', Object.assign(Object.assign({}, finalStyle), connectStyle))\n .style('style2', finalStyle)\n .style('d1', connectPath(MS))\n .style('d2', linePath(P))\n .node();\n };\n};\nexports.Curve = Curve;\nexports.Curve.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=curve.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createElement = void 0;\nconst g_1 = require(\"@antv/g\");\nfunction createElement(descriptor) {\n const render = typeof descriptor === 'function' ? descriptor : descriptor.render;\n return class extends g_1.CustomElement {\n connectedCallback() {\n this.draw();\n }\n attributeChangedCallback() {\n this.draw();\n }\n draw() {\n render(this);\n }\n };\n}\nexports.createElement = createElement;\n//# sourceMappingURL=createElement.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Smooth = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst curve_1 = require(\"./curve\");\nconst Smooth = (options, context) => {\n const rest = __rest(options, []);\n const { coordinate } = context;\n return (...params) => {\n const curve = (0, coordinate_1.isPolar)(coordinate)\n ? d3_shape_1.curveCatmullRomClosed\n : (0, coordinate_1.isTranspose)(coordinate)\n ? d3_shape_1.curveMonotoneY\n : d3_shape_1.curveMonotoneX;\n return (0, curve_1.Curve)(Object.assign({ curve }, rest), context)(...params);\n };\n};\nexports.Smooth = Smooth;\nexports.Smooth.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'smooth' });\n//# sourceMappingURL=smooth.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HV = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst HV = (options, context) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepAfter }, options), context);\n};\nexports.HV = HV;\nexports.HV.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hv' });\n//# sourceMappingURL=hv.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VH = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst VH = (options, context) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepBefore }, options), context);\n};\nexports.VH = VH;\nexports.VH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'vh' });\n//# sourceMappingURL=vh.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HVH = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst HVH = (options, context) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStep }, options), context);\n};\nexports.HVH = HVH;\nexports.HVH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hvh' });\n//# sourceMappingURL=hvh.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Trail = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../utils\");\nconst vector_1 = require(\"../../utils/vector\");\nconst helper_1 = require(\"../../utils/helper\");\nconst curve_1 = require(\"./curve\");\n/**\n *\n * x9-x0---------x1-x2\n * / |r1 |r2 \\\n *x8---p0---------p1---x3\n * \\ r4| | r3 /\n * x7-x6--------x5-x4\n */\nfunction stroke(path, p0, p1, s0, s1) {\n const v = (0, vector_1.sub)(p1, p0);\n const a = (0, vector_1.angle)(v);\n const a1 = a + Math.PI / 2;\n const r1 = [(s0 / 2) * Math.cos(a1), (s0 / 2) * Math.sin(a1)];\n const r2 = [(s1 / 2) * Math.cos(a1), (s1 / 2) * Math.sin(a1)];\n const r3 = [(s1 / 2) * Math.cos(a), (s1 / 2) * Math.sin(a)];\n const r4 = [(s0 / 2) * Math.cos(a), (s0 / 2) * Math.sin(a)];\n const x0 = (0, vector_1.add)(p0, r1);\n const x1 = (0, vector_1.add)(p1, r2);\n const x2 = (0, vector_1.add)(x1, r3);\n const x3 = (0, vector_1.add)(p1, r3);\n const x4 = (0, vector_1.sub)(x3, r2);\n const x5 = (0, vector_1.sub)(p1, r2);\n const x6 = (0, vector_1.sub)(p0, r1);\n const x7 = (0, vector_1.sub)(x6, r4);\n const x8 = (0, vector_1.sub)(p0, r4);\n const x9 = (0, vector_1.sub)(x0, r4);\n path.moveTo(...x0);\n path.lineTo(...x1);\n path.arcTo(...x2, ...x3, s1 / 2);\n path.arcTo(...x4, ...x5, s1 / 2);\n path.lineTo(...x6);\n path.arcTo(...x7, ...x8, s0 / 2);\n path.arcTo(...x9, ...x0, s0 / 2);\n path.closePath();\n}\n// @todo Support connect and connectStyle.\nconst Trail = (options, context) => {\n const { document } = context;\n return (P, value, defaults) => {\n const { seriesSize, color } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const path = (0, d3_path_1.path)();\n for (let i = 0; i < P.length - 1; i++) {\n const p0 = P[i];\n const p1 = P[i + 1];\n const s0 = seriesSize[i];\n const s1 = seriesSize[i + 1];\n if ([...p0, ...p1].every(helper_1.defined))\n stroke(path, p0, p1, s0, s1);\n }\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('fill', color || defaultColor)\n .style('d', path.toString())\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Trail = Trail;\nexports.Trail.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'line' });\n//# sourceMappingURL=trail.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowBowtie = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ▷◁\n */\nconst HollowBowtie = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'bowtie' }, options), context);\n};\nexports.HollowBowtie = HollowBowtie;\nexports.HollowBowtie.props = Object.assign({ defaultMarker: 'hollowBowtie' }, color_1.Color.props);\n//# sourceMappingURL=hollowBowtie.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color = exports.getRadius = void 0;\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst marker_1 = require(\"../../utils/marker\");\nconst selection_1 = require(\"../../utils/selection\");\nconst string_1 = require(\"../../utils/string\");\nconst utils_1 = require(\"../utils\");\nfunction getRadius(mode, points, value, coordinate) {\n if (points.length === 1)\n return undefined;\n const { size } = value;\n if (mode === 'fixed')\n return size;\n if (mode === 'normal' || (0, coordinate_1.isFisheye)(coordinate)) {\n const [[x0, y0], [x2, y2]] = points;\n const a = Math.abs((x2 - x0) / 2);\n const b = Math.abs((y2 - y0) / 2);\n return Math.max(0, (a + b) / 2);\n }\n return size;\n}\nexports.getRadius = getRadius;\n/**\n * Render point in different coordinate.\n */\nconst Color = (options, context) => {\n // Render border only when colorAttribute is stroke.\n const { colorAttribute, symbol, mode = 'auto' } = options, style = __rest(options, [\"colorAttribute\", \"symbol\", \"mode\"]);\n const path = marker_1.Symbols.get((0, string_1.camelCase)(symbol)) || marker_1.Symbols.get('point');\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { lineWidth, color: defaultColor } = defaults;\n const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth;\n const { color = defaultColor, transform, opacity } = value;\n const [cx, cy] = (0, utils_1.getOrigin)(points);\n const r = getRadius(mode, points, value, coordinate);\n const finalRadius = r || style.r || defaults.r;\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, defaults)\n .style('fill', 'transparent')\n .style('d', path(cx, cy, finalRadius))\n .style('lineWidth', finalLineWidth)\n .style('transform', transform)\n .style('transformOrigin', `${cx - finalRadius} ${cy - finalRadius}`)\n .style('stroke', color)\n .style((0, utils_1.toOpacityKey)(options), opacity)\n .style(colorAttribute, color)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Color = Color;\nexports.Color.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=color.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unregisterSymbol = exports.registerSymbol = exports.useMarker = exports.Symbols = void 0;\nconst g_1 = require(\"@antv/g\");\nconst point = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['A', r, r, 0, 1, 0, x + r, y],\n ['A', r, r, 0, 1, 0, x - r, y],\n ['Z'],\n ];\n};\npoint.style = ['fill'];\nconst hollowPoint = point.bind(undefined);\nhollowPoint.style = ['stroke', 'lineWidth'];\nconst square = (x, y, r) => {\n return [\n ['M', x - r, y - r],\n ['L', x + r, y - r],\n ['L', x + r, y + r],\n ['L', x - r, y + r],\n ['Z'],\n ];\n};\nsquare.style = ['fill'];\nconst rect = square.bind(undefined);\nrect.style = ['fill'];\nconst hollowSquare = square.bind(undefined);\nhollowSquare.style = ['stroke', 'lineWidth'];\nconst diamond = (x, y, r) => {\n const hr = r * 0.618;\n return [\n ['M', x - hr, y],\n ['L', x, y - r],\n ['L', x + hr, y],\n ['L', x, y + r],\n ['Z'],\n ];\n};\ndiamond.style = ['fill'];\nconst hollowDiamond = diamond.bind(undefined);\nhollowDiamond.style = ['stroke', 'lineWidth'];\nconst triangle = (x, y, r) => {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [\n ['M', x - r, y + diffY],\n ['L', x, y - diffY],\n ['L', x + r, y + diffY],\n ['Z'],\n ];\n};\ntriangle.style = ['fill'];\nconst hollowTriangle = triangle.bind(undefined);\nhollowTriangle.style = ['stroke', 'lineWidth'];\nconst triangleDown = (x, y, r) => {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [\n ['M', x - r, y - diffY],\n ['L', x + r, y - diffY],\n ['L', x, y + diffY],\n ['Z'],\n ];\n};\ntriangleDown.style = ['fill'];\nconst hollowTriangleDown = triangleDown.bind(undefined);\nhollowTriangleDown.style = ['stroke', 'lineWidth'];\nconst hexagon = (x, y, r) => {\n const diffX = (r / 2) * Math.sqrt(3);\n return [\n ['M', x, y - r],\n ['L', x + diffX, y - r / 2],\n ['L', x + diffX, y + r / 2],\n ['L', x, y + r],\n ['L', x - diffX, y + r / 2],\n ['L', x - diffX, y - r / 2],\n ['Z'],\n ];\n};\nhexagon.style = ['fill'];\nconst hollowHexagon = hexagon.bind(undefined);\nhollowHexagon.style = ['stroke', 'lineWidth'];\nconst bowtie = (x, y, r) => {\n const diffY = r - 1.5;\n return [\n ['M', x - r, y - diffY],\n ['L', x + r, y + diffY],\n ['L', x + r, y - diffY],\n ['L', x - r, y + diffY],\n ['Z'],\n ];\n};\nbowtie.style = ['fill'];\nconst hollowBowtie = bowtie.bind(undefined);\nhollowBowtie.style = ['stroke', 'lineWidth'];\nconst line = (x, y, r) => {\n return [\n ['M', x, y + r],\n ['L', x, y - r],\n ];\n};\nline.style = ['stroke', 'lineWidth'];\nconst cross = (x, y, r) => {\n return [\n ['M', x - r, y - r],\n ['L', x + r, y + r],\n ['M', x + r, y - r],\n ['L', x - r, y + r],\n ];\n};\ncross.style = ['stroke', 'lineWidth'];\nconst tick = (x, y, r) => {\n return [\n ['M', x - r / 2, y - r],\n ['L', x + r / 2, y - r],\n ['M', x, y - r],\n ['L', x, y + r],\n ['M', x - r / 2, y + r],\n ['L', x + r / 2, y + r],\n ];\n};\ntick.style = ['stroke', 'lineWidth'];\nconst plus = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ['M', x, y - r],\n ['L', x, y + r],\n ];\n};\nplus.style = ['stroke', 'lineWidth'];\nconst hyphen = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\nhyphen.style = ['stroke', 'lineWidth'];\nconst dot = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\ndot.style = ['stroke', 'lineWidth'];\nconst dash = dot.bind(undefined);\ndash.style = ['stroke', 'lineWidth'];\nconst smooth = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['A', r / 2, r / 2, 0, 1, 1, x, y],\n ['A', r / 2, r / 2, 0, 1, 0, x + r, y],\n ];\n};\nsmooth.style = ['stroke', 'lineWidth'];\nconst hv = (x, y, r) => {\n return [\n ['M', x - r - 1, y - 2.5],\n ['L', x, y - 2.5],\n ['L', x, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nhv.style = ['stroke', 'lineWidth'];\nconst vh = (x, y, r) => {\n return [\n ['M', x - r - 1, y + 2.5],\n ['L', x, y + 2.5],\n ['L', x, y - 2.5],\n ['L', x + r + 1, y - 2.5],\n ];\n};\nvh.style = ['stroke', 'lineWidth'];\nconst hvh = (x, y, r) => {\n return [\n ['M', x - (r + 1), y + 2.5],\n ['L', x - r / 2, y + 2.5],\n ['L', x - r / 2, y - 2.5],\n ['L', x + r / 2, y - 2.5],\n ['L', x + r / 2, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nhvh.style = ['stroke', 'lineWidth'];\nconst vhv = (x, y, r) => {\n return [\n ['M', x - 5, y + 2.5],\n ['L', x - 5, y],\n ['L', x, y],\n ['L', x, y - 3],\n ['L', x, y + 3],\n ['L', x + 6.5, y + 3],\n ];\n};\nvhv.style = ['stroke', 'lineWidth'];\nexports.Symbols = new Map([\n ['bowtie', bowtie],\n ['cross', cross],\n ['dash', dash],\n ['diamond', diamond],\n ['dot', dot],\n ['hexagon', hexagon],\n ['hollowBowtie', hollowBowtie],\n ['hollowDiamond', hollowDiamond],\n ['hollowHexagon', hollowHexagon],\n ['hollowPoint', hollowPoint],\n ['hollowSquare', hollowSquare],\n ['hollowTriangle', hollowTriangle],\n ['hollowTriangleDown', hollowTriangleDown],\n ['hv', hv],\n ['hvh', hvh],\n ['hyphen', hyphen],\n ['line', line],\n ['plus', plus],\n ['point', point],\n ['rect', rect],\n ['smooth', smooth],\n ['square', square],\n ['tick', tick],\n ['triangleDown', triangleDown],\n ['triangle', triangle],\n ['vh', vh],\n ['vhv', vhv],\n]);\nfunction useMarker(type, _a) {\n var { d, fill, lineWidth, path, stroke, color } = _a, style = __rest(_a, [\"d\", \"fill\", \"lineWidth\", \"path\", \"stroke\", \"color\"]);\n const symbol = exports.Symbols.get(type) || exports.Symbols.get('point');\n return (...args) => {\n const path = new g_1.Path({\n style: Object.assign(Object.assign({}, style), { d: symbol(...args), stroke: symbol.style.includes('stroke') ? color || stroke : '', fill: symbol.style.includes('fill') ? color || fill : '', lineWidth: symbol.style.includes('lineWidth')\n ? lineWidth || lineWidth || 2\n : 0 }),\n });\n return path;\n };\n}\nexports.useMarker = useMarker;\nfunction registerSymbol(type, marker) {\n exports.Symbols.set(type, marker);\n}\nexports.registerSymbol = registerSymbol;\nfunction unregisterSymbol(type) {\n exports.Symbols.delete(type);\n}\nexports.unregisterSymbol = unregisterSymbol;\n//# sourceMappingURL=marker.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.kebabCase = exports.camelCase = void 0;\n/**\n * camelCase('foo-bar');\n * // => 'fooBar'\n * @param s\n */\nfunction camelCase(s) {\n return s.replace(/-(\\w)/g, function (_, letter) {\n return letter.toUpperCase();\n });\n}\nexports.camelCase = camelCase;\n/**\n * kebabCase('fooBar');\n * // => 'foo-bar'\n * @param s\n */\nfunction kebabCase(s) {\n return s.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\nexports.kebabCase = kebabCase;\n//# sourceMappingURL=string.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowDiamond = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ◇\n */\nconst HollowDiamond = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'diamond' }, options), context);\n};\nexports.HollowDiamond = HollowDiamond;\nexports.HollowDiamond.props = Object.assign({ defaultMarker: 'hollowDiamond' }, color_1.Color.props);\n//# sourceMappingURL=hollowDiamond.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowHexagon = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ⬡\n */\nconst HollowHexagon = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'hexagon' }, options), context);\n};\nexports.HollowHexagon = HollowHexagon;\nexports.HollowHexagon.props = Object.assign({ defaultMarker: 'hollowHexagon' }, color_1.Color.props);\n//# sourceMappingURL=hollowHexagon.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowPoint = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ○\n */\nconst HollowPoint = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'point' }, options), context);\n};\nexports.HollowPoint = HollowPoint;\nexports.HollowPoint.props = Object.assign({ defaultMarker: 'hollowPoint' }, color_1.Color.props);\n//# sourceMappingURL=hollow.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowSquare = void 0;\nconst color_1 = require(\"./color\");\n/**\n * □\n */\nconst HollowSquare = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'square' }, options), context);\n};\nexports.HollowSquare = HollowSquare;\nexports.HollowSquare.props = Object.assign({ defaultMarker: 'hollowSquare' }, color_1.Color.props);\n//# sourceMappingURL=hollowSquare.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowTriangle = void 0;\nconst color_1 = require(\"./color\");\n/**\n * △\n */\nconst HollowTriangle = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle' }, options), context);\n};\nexports.HollowTriangle = HollowTriangle;\nexports.HollowTriangle.props = Object.assign({ defaultMarker: 'hollowTriangle' }, color_1.Color.props);\n//# sourceMappingURL=hollowTriangle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowTriangleDown = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ▽\n */\nconst HollowTriangleDown = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle-down' }, options), context);\n};\nexports.HollowTriangleDown = HollowTriangleDown;\nexports.HollowTriangleDown.props = Object.assign({ defaultMarker: 'hollowTriangleDown' }, color_1.Color.props);\n//# sourceMappingURL=hollowTriangleDown.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HollowCircle = void 0;\nconst circle_1 = require(\"./circle\");\n/**\n * ○\n */\nconst HollowCircle = (options, context) => {\n return (0, circle_1.BaseCircle)(Object.assign({ colorAttribute: 'stroke' }, options), context);\n};\nexports.HollowCircle = HollowCircle;\nexports.HollowCircle.props = Object.assign({ defaultMarker: 'hollowPoint' }, circle_1.Circle.props);\n//# sourceMappingURL=hollowCircle.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Circle = exports.BaseCircle = void 0;\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../utils\");\nconst color_1 = require(\"./color\");\n/**\n * Render point in different coordinate.\n */\nconst BaseCircle = (options, context) => {\n // Render border only when colorAttribute is stroke.\n const { colorAttribute, mode = 'auto' } = options, style = __rest(options, [\"colorAttribute\", \"mode\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { lineWidth, color: defaultColor } = defaults;\n const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth;\n const { color = defaultColor, transform, opacity } = value;\n const [cx, cy] = (0, utils_1.getOrigin)(points);\n const r = (0, color_1.getRadius)(mode, points, value, coordinate);\n const finalRadius = r || style.r || defaults.r;\n return (0, selection_1.select)(document.createElement('circle', {}))\n .call(utils_1.applyStyle, defaults)\n .style('fill', 'transparent')\n .style('cx', cx)\n .style('cy', cy)\n .style('r', finalRadius)\n .style('lineWidth', finalLineWidth)\n .style('transform', transform)\n .style('transformOrigin', `${cx} ${cy}`)\n .style('stroke', color)\n .style((0, utils_1.toOpacityKey)(options), opacity)\n .style(colorAttribute, color)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.BaseCircle = BaseCircle;\n/**\n * ●\n */\nconst Circle = (options, context) => {\n return (0, exports.BaseCircle)(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nexports.Circle = Circle;\nexports.Circle.props = {\n defaultMarker: 'circle',\n defaultEnterAnimation: 'fadeIn',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=circle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Bowtie = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ▶◀\n */\nconst Bowtie = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'bowtie' }, options), context);\n};\nexports.Bowtie = Bowtie;\nexports.Bowtie.props = Object.assign({ defaultMarker: 'bowtie' }, color_1.Color.props);\n//# sourceMappingURL=bowtie.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Cross = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ✕\n */\nconst Cross = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'cross' }, options), context);\n};\nexports.Cross = Cross;\nexports.Cross.props = Object.assign({ defaultMarker: 'cross' }, color_1.Color.props);\n//# sourceMappingURL=cross.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Diamond = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ◆\n */\nconst Diamond = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'diamond' }, options), context);\n};\nexports.Diamond = Diamond;\nexports.Diamond.props = Object.assign({ defaultMarker: 'diamond' }, color_1.Color.props);\n//# sourceMappingURL=diamond.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hexagon = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ⭓\n */\nconst Hexagon = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'hexagon' }, options), context);\n};\nexports.Hexagon = Hexagon;\nexports.Hexagon.props = Object.assign({ defaultMarker: 'hexagon' }, color_1.Color.props);\n//# sourceMappingURL=hexagon.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hyphen = void 0;\nconst color_1 = require(\"./color\");\n/**\n * -\n */\nconst Hyphen = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'hyphen' }, options), context);\n};\nexports.Hyphen = Hyphen;\nexports.Hyphen.props = Object.assign({ defaultMarker: 'hyphen' }, color_1.Color.props);\n//# sourceMappingURL=hyphen.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Line = void 0;\nconst color_1 = require(\"./color\");\n/**\n * |\n */\nconst Line = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'line' }, options), context);\n};\nexports.Line = Line;\nexports.Line.props = Object.assign({ defaultMarker: 'line' }, color_1.Color.props);\n//# sourceMappingURL=line.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Plus = void 0;\nconst color_1 = require(\"./color\");\n/**\n * +\n */\nconst Plus = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'plus' }, options), context);\n};\nexports.Plus = Plus;\nexports.Plus.props = Object.assign({ defaultMarker: 'plus' }, color_1.Color.props);\n//# sourceMappingURL=plus.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Point = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ●\n */\nconst Point = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'point' }, options), context);\n};\nexports.Point = Point;\nexports.Point.props = Object.assign({ defaultMarker: 'point' }, color_1.Color.props);\n//# sourceMappingURL=point.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Square = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ■\n */\nconst Square = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'square' }, options), context);\n};\nexports.Square = Square;\nexports.Square.props = Object.assign({ defaultMarker: 'square' }, color_1.Color.props);\n//# sourceMappingURL=square.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tick = void 0;\nconst color_1 = require(\"./color\");\n/**\n * 工\n */\nconst Tick = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'stroke', symbol: 'tick' }, options), context);\n};\nexports.Tick = Tick;\nexports.Tick.props = Object.assign({ defaultMarker: 'tick' }, color_1.Color.props);\n//# sourceMappingURL=tick.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Triangle = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ▲\n */\nconst Triangle = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'triangle' }, options), context);\n};\nexports.Triangle = Triangle;\nexports.Triangle.props = Object.assign({ defaultMarker: 'triangle' }, color_1.Color.props);\n//# sourceMappingURL=triangle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TriangleDown = void 0;\nconst color_1 = require(\"./color\");\n/**\n * ▼\n */\nconst TriangleDown = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill', symbol: 'triangle-down' }, options), context);\n};\nexports.TriangleDown = TriangleDown;\nexports.TriangleDown.props = Object.assign({ defaultMarker: 'triangleDown' }, color_1.Color.props);\n//# sourceMappingURL=triangleDown.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\n/**\n * Connect 2 points with a single line with arrow.\n * ----->\n */\nconst Vector = (options, context) => {\n const { arrow = true, arrowSize = '40%' } = options, style = __rest(options, [\"arrow\", \"arrowSize\"]);\n const { document } = context;\n return (points, value, defaults) => {\n const { defaultColor } = defaults, rest = __rest(defaults, [\"defaultColor\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n // Draw line\n const path = (0, d3_path_1.path)();\n path.moveTo(...from);\n path.lineTo(...to);\n // Draw 2 arrows.\n if (arrow) {\n // Calculate arrow end point.\n const [arrow1, arrow2] = (0, utils_1.arrowPoints)(from, to, { arrowSize });\n path.moveTo(...arrow1);\n path.lineTo(...to);\n path.lineTo(...arrow2);\n }\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Vector = Vector;\nexports.Vector.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=vector.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Text = void 0;\nconst utils_1 = require(\"../../shape/utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst advance_1 = require(\"./advance\");\n/**\n * @todo autoRotate when in polar coordinate\n */\nconst Text = (options, context) => {\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color, text = '', fontSize, rotate = 0, transform = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n fontSize,\n };\n const [[x0, y0]] = points;\n return (0, selection_1.select)(new advance_1.Advance())\n .style('x', x0)\n .style('y', y0)\n .call(utils_1.applyStyle, defaults)\n .style('transform', `${transform}rotate(${+rotate})`)\n .style('coordCenter', coordinate.getCenter())\n .call(utils_1.applyStyle, textStyle)\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Text = Text;\nexports.Text.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=text.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Advance = void 0;\nconst util_1 = require(\"@antv/util\");\nconst component_1 = require(\"@antv/component\");\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst createElement_1 = require(\"../../utils/createElement\");\nconst utils_1 = require(\"../utils\");\nconst helper_1 = require(\"../../utils/helper\");\nconst selection_1 = require(\"../../utils/selection\");\nconst vector_1 = require(\"../../utils/vector\");\nfunction getConnectorPoint(shape) {\n const { min: [x0, y0], max: [x1, y1], } = shape.getLocalBounds();\n let x = 0;\n let y = 0;\n if (x0 > 0)\n x = x0;\n if (x1 < 0)\n x = x1;\n if (y0 > 0)\n y = y0;\n if (y1 < 0)\n y = y1;\n return [x, y];\n}\nfunction inferBackgroundBounds(textShape, padding = []) {\n const [top = 0, right = 0, bottom = top, left = right] = padding;\n const container = textShape.parentNode;\n const angle = container.getEulerAngles();\n container.setEulerAngles(0);\n const { min, halfExtents } = textShape.getLocalBounds();\n const [x, y] = min;\n const [hw, hh] = halfExtents;\n container.setEulerAngles(angle);\n return {\n x: x - left,\n y: y - top,\n width: hw * 2 + left + right,\n height: hh * 2 + top + bottom,\n };\n}\nconst cos = (p0, p1, p2) => {\n const a = (0, vector_1.dist)(p0, p1);\n const b = (0, vector_1.dist)(p1, p2);\n const c = (0, vector_1.dist)(p2, p0);\n return (Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2)) / (2 * a * b);\n};\n// A path from element to label.\n// Adapted drawLabelLine from https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/spider.ts\nfunction inferConnectorPath(shape, end, control, coordCenter, left = true, top = true) {\n const path = (points) => (0, d3_shape_1.line)()(points);\n if (!end[0] && !end[1])\n return path([getConnectorPoint(shape), end]);\n if (!control.length)\n return path([[0, 0], end]);\n const [inflection, start] = control;\n const p1 = [...start];\n const p2 = [...inflection];\n // Label has been adjusted, so add offset to the label.\n if (start[0] !== inflection[0]) {\n const offset = left ? -4 : 4;\n p1[1] = start[1];\n // For the label in the first quadrant.\n if (top && !left) {\n p1[0] = Math.max(inflection[0], start[0] - offset);\n if (start[1] < inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.max(p2[0], p1[0] - offset);\n }\n }\n // For the label in the second quadrant.\n if (!top && !left) {\n p1[0] = Math.max(inflection[0], start[0] - offset);\n if (start[1] > inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.max(p2[0], p1[0] - offset);\n }\n }\n // For the label in the third quadrant.\n if (!top && left) {\n p1[0] = Math.min(inflection[0], start[0] - offset);\n if (start[1] > inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.min(p2[0], p1[0] - offset);\n }\n }\n // For the label in the fourth quadrant.\n if (top && left) {\n p1[0] = Math.min(inflection[0], start[0] - offset);\n if (start[1] < inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.min(p2[0], p1[0] - offset);\n }\n }\n }\n return path([start, p1, p2, inflection, end]);\n}\nexports.Advance = (0, createElement_1.createElement)((g) => {\n const _a = g.attributes, { className, \n // Do not pass className\n class: _c, transform, rotate, labelTransform, labelTransformOrigin, x, y, x0 = x, y0 = y, text, background, connector, startMarker, endMarker, coordCenter, innerHTML } = _a, rest = __rest(_a, [\"className\", \"class\", \"transform\", \"rotate\", \"labelTransform\", \"labelTransformOrigin\", \"x\", \"y\", \"x0\", \"y0\", \"text\", \"background\", \"connector\", \"startMarker\", \"endMarker\", \"coordCenter\", \"innerHTML\"]);\n g.style.transform = `translate(${x}, ${y})`;\n // Position is invalid, do not render the UI,\n // or clear previous elements.\n if ([x, y, x0, y0].some((v) => !(0, util_1.isNumber)(v))) {\n g.children.forEach((d) => d.remove());\n return;\n }\n const _b = (0, helper_1.subObject)(rest, 'background'), { padding } = _b, backgroundStyle = __rest(_b, [\"padding\"]);\n const _d = (0, helper_1.subObject)(rest, 'connector'), { points: controlPoints = [] } = _d, connectorStyle = __rest(_d, [\"points\"]);\n let textShape;\n if (innerHTML) {\n textShape = (0, selection_1.select)(g)\n .maybeAppend('html', 'html', className)\n .style('zIndex', 0)\n .style('innerHTML', innerHTML)\n .call(utils_1.applyStyle, Object.assign({ transform: labelTransform, transformOrigin: labelTransformOrigin }, rest))\n .node();\n }\n else {\n textShape = (0, selection_1.select)(g)\n .maybeAppend('text', 'text')\n .style('zIndex', 0)\n .style('text', text)\n .call(utils_1.applyStyle, Object.assign({ textBaseline: 'middle', transform: labelTransform, transformOrigin: labelTransformOrigin }, rest))\n .node();\n }\n const rect = (0, selection_1.select)(g)\n .maybeAppend('background', 'rect')\n .style('zIndex', -1)\n .call(utils_1.applyStyle, inferBackgroundBounds(textShape, padding))\n .call(utils_1.applyStyle, background ? backgroundStyle : {})\n .node();\n const left = +x0 < coordCenter[0];\n const top = +y0 < coordCenter[1];\n const end = [+x0 - +x, +y0 - +y];\n const connectorPath = inferConnectorPath(rect, end, controlPoints, coordCenter, left, top);\n const markerStart = startMarker &&\n new component_1.Marker({\n id: 'startMarker',\n style: Object.assign({ x: 0, y: 0 }, (0, helper_1.subObject)(rest, 'startMarker')),\n });\n const markerEnd = endMarker &&\n new component_1.Marker({\n id: 'endMarker',\n style: Object.assign({ x: 0, y: 0 }, (0, helper_1.subObject)(rest, 'endMarker')),\n });\n (0, selection_1.select)(g)\n .maybeAppend('connector', 'path')\n .style('zIndex', 0)\n .style('d', connectorPath)\n .style('markerStart', markerStart)\n .style('markerEnd', markerEnd)\n .call(utils_1.applyStyle, connector ? connectorStyle : {});\n});\n//# sourceMappingURL=advance.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Badge = void 0;\nconst component_1 = require(\"@antv/component\");\nconst createElement_1 = require(\"../../utils/createElement\");\nconst helper_1 = require(\"../../utils/helper\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../../shape/utils\");\n/**\n * Get the path to draw a built-in badge, which is like a balloon.\n */\nfunction getPath(r) {\n const offset = r / Math.sqrt(2);\n const dy = r * Math.sqrt(2);\n const [p0x, p0y] = [-offset, offset - dy];\n const [p1x, p1y] = [0, 0];\n const [p2x, p2y] = [offset, offset - dy];\n return [\n ['M', p0x, p0y],\n ['A', r, r, 0, 1, 1, p2x, p2y],\n ['L', p1x, p1y],\n ['Z'],\n ];\n}\nfunction inferTextPosition(shape) {\n const { min, max } = shape.getLocalBounds();\n return [(min[0] + max[0]) * 0.5, (min[1] + max[1]) * 0.5];\n}\nconst BadgeShape = (0, createElement_1.createElement)((g) => {\n const _a = g.attributes, { class: className, x: x0, y: y0, transform } = _a, rest = __rest(_a, [\"class\", \"x\", \"y\", \"transform\"]);\n const markerStyle = (0, helper_1.subObject)(rest, 'marker');\n const { size = 24 } = markerStyle;\n const symbol = () => getPath(size / 2);\n const bgShape = (0, selection_1.select)(g)\n .maybeAppend('marker', () => new component_1.Marker({}))\n .call((selection) => selection.node().update(Object.assign({ symbol }, markerStyle)))\n .node();\n const [x, y] = inferTextPosition(bgShape);\n (0, selection_1.select)(g)\n .maybeAppend('text', 'text')\n .style('x', x)\n .style('y', y)\n .call(utils_1.applyStyle, rest);\n});\nconst Badge = (options, context) => {\n const style = __rest(options, []);\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, text = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n };\n const [[x0, y0]] = points;\n return (0, selection_1.select)(new BadgeShape())\n .call(utils_1.applyStyle, rest)\n .style('transform', `translate(${x0},${y0})`)\n .call(utils_1.applyStyle, textStyle)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Badge = Badge;\nexports.Badge.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=badge.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tag = void 0;\nconst g_1 = require(\"@antv/g\");\nconst utils_1 = require(\"../../shape/utils\");\nconst selection_1 = require(\"../../utils/selection\");\n/**\n * @todo autoRotate when in polar coordinate\n * Tag shape for Text mark, used in wordCloud plot.\n */\nconst Tag = (options, context) => {\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color, text = '', fontSize, rotate = 0, transform = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n fontSize,\n textAlign: 'center',\n textBaseline: 'middle',\n };\n const [[x0, y0]] = points;\n const n = (0, selection_1.select)(new g_1.Text())\n .style('x', x0)\n .style('y', y0)\n .call(utils_1.applyStyle, defaults)\n .style('transformOrigin', 'center center')\n .style('transform', `${transform}rotate(${rotate}deg)`)\n .style('coordCenter', coordinate.getCenter())\n .call(utils_1.applyStyle, textStyle)\n .call(utils_1.applyStyle, options)\n .node();\n return n;\n };\n};\nexports.Tag = Tag;\nexports.Tag.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=tag.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Area = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst curve_1 = require(\"./curve\");\nconst Area = (options, context) => {\n const { coordinate } = context;\n return (...params) => {\n const curve = (0, coordinate_1.isPolar)(coordinate) ? d3_shape_1.curveLinearClosed : d3_shape_1.curveLinear;\n return (0, curve_1.Curve)(Object.assign({ curve: curve }, options), context)(...params);\n };\n};\nexports.Area = Area;\nexports.Area.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'square' });\n//# sourceMappingURL=area.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Curve = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\nconst utils_1 = require(\"../utils\");\nconst helper_1 = require(\"../../utils/helper\");\nconst createElement_1 = require(\"../../utils/createElement\");\n/**\n * Given a points sequence, split it into an array of defined points\n * and an array of undefined segments.\n *\n * Input - [p0, p1, p2, p3, p4, p5], p1 ~ p2 is `Y1`, p3 ~ p5 is `Y0`.\n * Output - When all of Y1 & Y0 is defined, move into defined points, or else undefined segments.\n */\nfunction segmentation(points, defined) {\n const definedPointsY1 = [];\n const definedPointsY0 = [];\n const segments = [];\n let m = false; // Is in a undefined sequence.\n let dp = null; // The previous defined point.\n const mid = points.length / 2;\n for (let i = 0; i < mid; i++) {\n const y1 = points[i];\n const y0 = points[i + mid];\n // If current point is a undefined point,\n // enter a undefined sequence.\n if ([...y1, ...y0].some((v) => !defined(v)))\n m = true;\n else {\n definedPointsY1.push(y1);\n definedPointsY0.push(y0);\n // If current point is a defined point,\n // and is in a undefined sequence, save\n // the two closest defined points as this\n // undefined sequence and exit it.\n if (m && dp) {\n m = false;\n const [dpy1, dpy0] = dp;\n segments.push([dpy1, y1, dpy0, y0]);\n }\n // Update the previous defined point.\n dp = [y1, y0];\n }\n }\n return [definedPointsY1.concat(definedPointsY0), segments];\n}\nconst DoubleArea = (0, createElement_1.createElement)((g) => {\n const { areaPath, connectPath, areaStyle, connectStyle } = g.attributes;\n const document = g.ownerDocument;\n (0, selection_1.select)(g)\n .maybeAppend('connect-path', () => document.createElement('path', {}))\n .style('d', connectPath)\n .call(utils_1.applyStyle, connectStyle);\n (0, selection_1.select)(g)\n .maybeAppend('area-path', () => document.createElement('path', {}))\n .style('d', areaPath)\n .call(utils_1.applyStyle, areaStyle);\n});\nconst Curve = (options, context) => {\n const { curve, gradient = false, defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, [\"curve\", \"gradient\", \"defined\", \"connect\"]);\n const { coordinate, document } = context;\n return (P, value, defaults) => {\n const { color: defaultColor } = defaults;\n const { color = defaultColor, seriesColor: sc, seriesX: sx, seriesY: sy, } = value;\n const tpShape = (0, coordinate_1.isTranspose)(coordinate);\n const transform = (0, utils_1.getTransform)(coordinate, value);\n const fill = gradient && sc\n ? (0, utils_1.computeGradient)(sc, sx, sy, gradient, undefined, tpShape)\n : color;\n const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), { stroke: fill, fill: fill }), (transform && { transform })), style);\n const [DP, MS] = segmentation(P, defined);\n const connectStyle = (0, helper_1.subObject)(finalStyle, 'connect');\n const missing = !!MS.length;\n const getPathNode = (path) => {\n return (0, selection_1.select)(document.createElement('path', {}))\n .style('d', path || '')\n .call(utils_1.applyStyle, finalStyle)\n .node();\n };\n if (!(0, coordinate_1.isPolar)(coordinate)) {\n /**\n * Draw area shape by points.\n */\n const areaPath = (points) => {\n const Y1 = points.slice(0, points.length / 2);\n const Y0 = points.slice(points.length / 2);\n return tpShape\n ? (0, d3_shape_1.area)()\n .y((_, idx) => Y1[idx][1])\n .x1((_, idx) => Y1[idx][0])\n .x0((_, idx) => Y0[idx][0])\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y1)\n : (0, d3_shape_1.area)()\n .x((_, idx) => Y1[idx][0])\n .y1((_, idx) => Y1[idx][1])\n .y0((_, idx) => Y0[idx][1])\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y1);\n };\n // Draw one area of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return getPathNode(areaPath(DP));\n }\n // Draw one area of unconnected defined points.\n if (missing && !connectNulls) {\n return getPathNode(areaPath(P));\n }\n // Draw two area.\n // One for unconnected defined points.\n // One for connected segments.\n return (0, selection_1.select)(new DoubleArea())\n .style('areaStyle', finalStyle)\n .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style))\n .style('areaPath', areaPath(P))\n .style('connectPath', MS.map(areaPath).join(''))\n .node();\n }\n else {\n /**\n * Draw areaRadial shape by points.\n */\n const areaRadialPath = (points) => {\n const center = coordinate.getCenter();\n const Y1 = points.slice(0, points.length / 2);\n const Y0 = points.slice(points.length / 2);\n return (0, d3_shape_1.areaRadial)()\n .angle((_, idx) => (0, vector_1.angleWithQuadrant)((0, vector_1.sub)(Y1[idx], center)))\n .outerRadius((_, idx) => (0, vector_1.dist)(Y1[idx], center))\n .innerRadius((_, idx) => (0, vector_1.dist)(Y0[idx], center))\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y0);\n };\n // Draw one area of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return getPathNode(areaRadialPath(DP));\n }\n // Draw one area of unconnected defined points.\n if (missing && !connectNulls) {\n return getPathNode(areaRadialPath(P));\n }\n // Draw two area.\n // One for unconnected defined points.\n // One for connected segments.\n return (0, selection_1.select)(new DoubleArea())\n .style('areaStyle', finalStyle)\n .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style))\n .style('areaPath', areaRadialPath(P))\n .style('connectPath', MS.map(areaRadialPath).join(''))\n .node();\n }\n };\n};\nexports.Curve = Curve;\nexports.Curve.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=curve.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Smooth = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst curve_1 = require(\"./curve\");\nconst Smooth = (options, context) => {\n const rest = __rest(options, []);\n const { coordinate } = context;\n return (...params) => {\n const curve = (0, coordinate_1.isPolar)(coordinate)\n ? d3_shape_1.curveCatmullRomClosed\n : (0, coordinate_1.isTranspose)(coordinate)\n ? d3_shape_1.curveMonotoneY\n : d3_shape_1.curveMonotoneX;\n return (0, curve_1.Curve)(Object.assign({ curve }, rest), context)(...params);\n };\n};\nexports.Smooth = Smooth;\nexports.Smooth.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'smooth' });\n//# sourceMappingURL=smooth.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HVH = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst HVH = (options, context) => {\n return (...params) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStep }, options), context)(...params);\n };\n};\nexports.HVH = HVH;\nexports.HVH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hvh' });\n//# sourceMappingURL=hvh.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VH = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst VH = (options, context) => {\n return (...params) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepBefore }, options), context)(...params);\n };\n};\nexports.VH = VH;\nexports.VH.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'vh' });\n//# sourceMappingURL=vh.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HV = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst curve_1 = require(\"./curve\");\nconst HV = (options, context) => {\n return (...params) => {\n return (0, curve_1.Curve)(Object.assign({ curve: d3_shape_1.curveStepAfter }, options), context)(...params);\n };\n};\nexports.HV = HV;\nexports.HV.props = Object.assign(Object.assign({}, curve_1.Curve.props), { defaultMarker: 'hv' });\n//# sourceMappingURL=hv.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Link = void 0;\nconst vector_1 = require(\"../../shape/vector/vector\");\n/**\n * Connect 2 points with a single line with arrow.\n * ----->\n */\nconst Link = (options, context) => {\n const { arrow = false } = options;\n return (...params) => {\n return (0, vector_1.Vector)(Object.assign(Object.assign({}, options), { arrow }), context)(...params);\n };\n};\nexports.Link = Link;\nexports.Link.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=link.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Smooth = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\n/**\n * Connect 2 points with a smooth line, used in tree.\n */\nconst Smooth = (options, context) => {\n const style = __rest(options, []);\n const { document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = (0, d3_path_1.path)();\n path.moveTo(from[0], from[1]);\n path.bezierCurveTo(from[0] / 2 + to[0] / 2, from[1], from[0] / 2 + to[0] / 2, to[1], to[0], to[1]);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Smooth = Smooth;\nexports.Smooth.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=smooth.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VHV = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\n/**\n * Get vhv path in different coordinate.\n */\nfunction getVHVPath(from, to, coordinate, ratio) {\n const path = (0, d3_path_1.path)();\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const center = coordinate.getCenter();\n const a = (0, vector_1.dist)(from, center);\n const b = (0, vector_1.dist)(to, center);\n const radius = (b - a) * ratio + a;\n path.moveTo(from[0], from[1]);\n (0, utils_1.appendArc)(path, from, to, center, radius);\n path.lineTo(to[0], to[1]);\n return path;\n }\n if ((0, coordinate_1.isTranspose)(coordinate)) {\n path.moveTo(from[0], from[1]);\n // VHV in x.\n path.lineTo(from[0] + (to[0] - from[0]) * ratio, from[1]);\n path.lineTo(from[0] + (to[0] - from[0]) * ratio, to[1]);\n path.lineTo(to[0], to[1]);\n return path;\n }\n path.moveTo(from[0], from[1]);\n // VHV in y.\n path.lineTo(from[0], from[1] + (to[1] - from[1]) * ratio);\n path.lineTo(to[0], from[1] + (to[1] - from[1]) * ratio);\n path.lineTo(to[0], to[1]);\n return path;\n}\n/**\n * Connect 2 points with a VHV line, used in tree.\n */\nconst VHV = (options, context) => {\n const { cornerRatio = 1 / 3 } = options, style = __rest(options, [\"cornerRatio\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { defaultColor } = defaults, rest = __rest(defaults, [\"defaultColor\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = getVHVPath(from, to, coordinate, cornerRatio);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.VHV = VHV;\nexports.VHV.props = {\n defaultMarker: 'vhv',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=vhv.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Arc = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\n/**\n * Connect points for 2 points:\n * - In rect, draw half circle.\n * - In polar, draw quadratic curve.\n */\nconst Arc = (options, context) => {\n const style = __rest(options, []);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = (0, d3_path_1.path)();\n path.moveTo(from[0], from[1]);\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const center = coordinate.getCenter();\n path.quadraticCurveTo(center[0], center[1], to[0], to[1]);\n }\n else {\n const center = (0, vector_1.mid)(from, to);\n const raduis = (0, vector_1.dist)(from, to) / 2;\n (0, utils_1.appendArc)(path, from, to, center, raduis);\n }\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Arc = Arc;\nexports.Arc.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=arc.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Image = void 0;\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_2 = require(\"../../mark/utils\");\nconst Image = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, src = '', size = 32, transform = '' } = value;\n let { width = size, height = size } = options;\n const [[x0, y0]] = points;\n // Support percentage width, height.\n const [w, h] = coordinate.getSize();\n width = typeof width === 'string' ? (0, utils_2.p)(width) * w : width;\n height = typeof height === 'string' ? (0, utils_2.p)(height) * h : height;\n const x = x0 - Number(width) / 2;\n const y = y0 - Number(height) / 2;\n return (0, selection_1.select)(document.createElement('image', {}))\n .call(utils_1.applyStyle, rest)\n .style('x', x)\n .style('y', y)\n .style('src', src)\n .style('stroke', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, options)\n .style('width', width)\n .style('height', height)\n .node();\n };\n};\nexports.Image = Image;\nexports.Image.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=image.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.initializeData = exports.valueof = exports.field = exports.visualMark = exports.p = exports.createBandOffset = exports.bandWidth = exports.basePostInference = exports.basePreInference = exports.baseAnnotationChannels = exports.tooltipXd = exports.tooltip1d = exports.tooltip2d = exports.tooltip3d = exports.baseGeometryChannels = exports.baseChannels = void 0;\nconst transform_1 = require(\"../transform\");\nfunction baseChannels(options = {}) {\n const { shapes } = options;\n return [\n { name: 'color' },\n { name: 'opacity' },\n { name: 'shape', range: shapes },\n { name: 'enterType' },\n { name: 'enterDelay', scaleKey: 'enter' },\n { name: 'enterDuration', scaleKey: 'enter' },\n { name: 'enterEasing' },\n { name: 'key', scale: 'identity' },\n { name: 'groupKey', scale: 'identity' },\n { name: 'label', scale: 'identity' },\n ];\n}\nexports.baseChannels = baseChannels;\nfunction baseGeometryChannels(options = {}) {\n return [...baseChannels(options), { name: 'title', scale: 'identity' }];\n}\nexports.baseGeometryChannels = baseGeometryChannels;\nfunction tooltip3d() {\n return [\n { type: transform_1.MaybeTitle, channel: 'color' },\n { type: transform_1.MaybeTooltip, channel: ['x', 'y', 'z'] },\n ];\n}\nexports.tooltip3d = tooltip3d;\nfunction tooltip2d() {\n return [\n { type: transform_1.MaybeTitle, channel: 'color' },\n { type: transform_1.MaybeTooltip, channel: ['x', 'y'] },\n ];\n}\nexports.tooltip2d = tooltip2d;\nfunction tooltip1d() {\n return [\n { type: transform_1.MaybeTitle, channel: 'x' },\n { type: transform_1.MaybeTooltip, channel: ['y'] },\n ];\n}\nexports.tooltip1d = tooltip1d;\nfunction tooltipXd() {\n return [\n { type: transform_1.MaybeTitle, channel: 'color' },\n { type: transform_1.MaybeTooltip, channel: ['position'] },\n ];\n}\nexports.tooltipXd = tooltipXd;\nfunction baseAnnotationChannels(options = {}) {\n return baseChannels(options);\n}\nexports.baseAnnotationChannels = baseAnnotationChannels;\nfunction basePreInference() {\n return [{ type: transform_1.MaybeKey }];\n}\nexports.basePreInference = basePreInference;\nfunction basePostInference() {\n return [];\n}\nexports.basePostInference = basePostInference;\nfunction bandWidth(scale, x) {\n return scale.getBandWidth(scale.invert(x));\n}\nexports.bandWidth = bandWidth;\nfunction createBandOffset(scale, value, options = {}) {\n const { x: X, y: Y, series: S } = value;\n const { x, y, series } = scale;\n const { style: { bandOffset = series ? 0 : 0.5, bandOffsetX = bandOffset, bandOffsetY = bandOffset, } = {}, } = options;\n const isBandX = !!(x === null || x === void 0 ? void 0 : x.getBandWidth);\n const isBandY = !!(y === null || y === void 0 ? void 0 : y.getBandWidth);\n const isSeries = !!(series === null || series === void 0 ? void 0 : series.getBandWidth);\n if (!isBandX && !isBandY)\n return (d) => d;\n return (d, i) => {\n const widthX = isBandX ? bandWidth(x, X[i]) : 0;\n const widthY = isBandY ? bandWidth(y, Y[i]) : 0;\n const f = () => (bandWidth(series, S[i]) / 2 + +S[i]) * widthX;\n const offset = isSeries && S ? f() : 0;\n const [x0, y0] = d;\n return [x0 + bandOffsetX * widthX + offset, y0 + bandOffsetY * widthY];\n };\n}\nexports.createBandOffset = createBandOffset;\nfunction p(d) {\n return parseFloat(d) / 100;\n}\nexports.p = p;\nfunction visualMark(index, scale, value, coordinate) {\n const { x: X, y: Y } = value;\n const { innerWidth, innerHeight } = coordinate.getOptions();\n const P = Array.from(index, (i) => {\n const x0 = X[i];\n const y0 = Y[i];\n const x = typeof x0 === 'string' ? p(x0) * innerWidth : +x0;\n const y = typeof y0 === 'string' ? p(y0) * innerHeight : +y0;\n return [[x, y]];\n });\n return [index, P];\n}\nexports.visualMark = visualMark;\nfunction field(encode) {\n return typeof encode === 'function' ? encode : (d) => d[encode];\n}\nexports.field = field;\nfunction valueof(data, encode) {\n return Array.from(data, field(encode));\n}\nexports.valueof = valueof;\nfunction initializeData(data, encode) {\n const { source = (d) => d.source, target = (d) => d.target, value = (d) => d.value, } = encode;\n const { links, nodes } = data;\n const LS = valueof(links, source);\n const LT = valueof(links, target);\n const LV = valueof(links, value);\n return {\n links: links.map((_, i) => ({\n target: LT[i],\n source: LS[i],\n value: LV[i],\n })),\n nodes: nodes || Array.from(new Set([...LS, ...LT]), (key) => ({ key })),\n };\n}\nexports.initializeData = initializeData;\n//# sourceMappingURL=utils.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polygon = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst vector_1 = require(\"../../utils/vector\");\nfunction getPolygonPath(points, coordinate) {\n const path = (0, d3_path_1.path)();\n // In polar, draw arc.\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const center = coordinate.getCenter();\n const closedPoints = [...points, points[0]];\n // Calculate dist array for cache.\n const dists = closedPoints.map((p) => (0, vector_1.dist)(p, center));\n closedPoints.forEach((curr, idx) => {\n if (idx === 0) {\n path.moveTo(curr[0], curr[1]);\n return;\n }\n const currDist = dists[idx];\n const prev = points[idx - 1];\n const prevDist = dists[idx - 1];\n // When radius is equal, draw 2 point with arc.\n // todo: choose a minimum value.\n if (prevDist !== undefined && Math.abs(currDist - prevDist) < 1e-10) {\n (0, utils_1.appendArc)(path, prev, curr, center, currDist);\n }\n else {\n path.lineTo(curr[0], curr[1]);\n }\n });\n path.closePath();\n return path;\n }\n // In rect, draw polygon.\n return (0, utils_1.appendPolygon)(path, points);\n}\nconst Polygon = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const path = getPolygonPath(points, coordinate);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('fill', color)\n .style('transform', transform)\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Polygon = Polygon;\nexports.Polygon.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=polygon.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Ribbon = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\nfunction getRibbonPath(points, coordinate) {\n const [p0, p1, p2, p3] = points;\n const path = (0, d3_path_1.path)();\n // In polar, draw shape only for Chord.\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const center = coordinate.getCenter();\n const radius = (0, vector_1.dist)(center, p0);\n path.moveTo(p0[0], p0[1]);\n // p0 -> p2\n path.quadraticCurveTo(center[0], center[1], p2[0], p2[1]);\n // p2 -> p3\n (0, utils_1.appendArc)(path, p2, p3, center, radius);\n // p3 -> p1\n path.quadraticCurveTo(center[0], center[1], p1[0], p1[1]);\n // p1 -> p0\n (0, utils_1.appendArc)(path, p1, p0, center, radius);\n path.closePath();\n return path;\n }\n // In Rect, draw shape for Sankey.\n path.moveTo(p0[0], p0[1]);\n path.bezierCurveTo(p0[0] / 2 + p2[0] / 2, p0[1], p0[0] / 2 + p2[0] / 2, p2[1], p2[0], p2[1]);\n path.lineTo(p3[0], p3[1]);\n path.bezierCurveTo(p3[0] / 2 + p1[0] / 2, p3[1], p3[0] / 2 + p1[0] / 2, p1[1], p1[0], p1[1]);\n path.lineTo(p0[0], p0[1]);\n path.closePath();\n return path;\n}\n/**\n * Connect points for 4 points:\n * - In rect, draw ribbon used in Sankey.\n * - In polar, draw arc used in Chord.\n */\nconst Ribbon = (options, context) => {\n const style = __rest(options, []);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const path = getRibbonPath(points, coordinate);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('fill', color || defaultColor)\n .style('stroke', color || defaultColor)\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Ribbon = Ribbon;\nexports.Ribbon.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=ribbon.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Box = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\nfunction getPath(points, coordinate) {\n const path = (0, d3_path_1.path)();\n if (!(0, coordinate_1.isPolar)(coordinate)) {\n path.moveTo(...points[0]);\n path.lineTo(...points[1]);\n path.moveTo(...points[2]);\n path.lineTo(...points[3]);\n path.moveTo(...points[4]);\n path.lineTo(...points[5]);\n path.lineTo(...points[6]);\n path.lineTo(...points[7]);\n path.closePath();\n path.moveTo(...points[8]);\n path.lineTo(...points[9]);\n path.moveTo(...points[10]);\n path.lineTo(...points[11]);\n path.moveTo(...points[12]);\n path.lineTo(...points[13]);\n }\n else {\n // In polar coordinate.\n const center = coordinate.getCenter();\n const [x, y] = center;\n const startAngle = (0, vector_1.angle)((0, vector_1.sub)(points[0], center));\n const endAngle = (0, vector_1.angle)((0, vector_1.sub)(points[1], center));\n const radiusHigh = (0, vector_1.dist)(center, points[2]);\n const radiusQ3 = (0, vector_1.dist)(center, points[3]);\n const radiusMedian = (0, vector_1.dist)(center, points[8]);\n const radiusQ1 = (0, vector_1.dist)(center, points[10]);\n const radiusLow = (0, vector_1.dist)(center, points[11]);\n path.moveTo(...points[0]);\n path.arc(x, y, radiusHigh, startAngle, endAngle);\n path.arc(x, y, radiusHigh, endAngle, startAngle, true);\n path.moveTo(...points[2]);\n path.lineTo(...points[3]);\n path.moveTo(...points[4]);\n path.arc(x, y, radiusQ3, startAngle, endAngle); // 4 -> 5\n path.lineTo(...points[6]); // 5 -> 6\n path.arc(x, y, radiusQ1, endAngle, startAngle, true); // 6 -> 7\n path.closePath();\n path.moveTo(...points[8]);\n path.arc(x, y, radiusMedian, startAngle, endAngle); // 8 -> 9\n path.arc(x, y, radiusMedian, endAngle, startAngle, true); // 9 -> 8\n path.moveTo(...points[10]);\n path.lineTo(...points[11]);\n path.moveTo(...points[12]);\n path.arc(x, y, radiusLow, startAngle, endAngle); // 12 -> 13\n path.arc(x, y, radiusLow, endAngle, startAngle, true); // 13 -> 12\n }\n return path;\n}\nconst Box = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color, transform } = value;\n const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, [\"color\", \"fill\", \"stroke\"]);\n const path = getPath(points, coordinate);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', stroke)\n .style('fill', color || fill)\n .style('transform', transform)\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Box = Box;\nexports.Box.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=box.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Violin = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst vector_1 = require(\"../../utils/vector\");\nfunction getPath(p, coordinate, size = 4) {\n const path = (0, d3_path_1.path)();\n if (!(0, coordinate_1.isPolar)(coordinate)) {\n path.moveTo(...p[2]);\n path.lineTo(...p[3]);\n path.lineTo(p[3][0] - size, p[3][1]);\n path.lineTo(p[10][0] - size, p[10][1]);\n path.lineTo(p[10][0] + size, p[10][1]);\n path.lineTo(p[3][0] + size, p[3][1]);\n path.lineTo(...p[3]);\n path.closePath();\n path.moveTo(...p[10]);\n path.lineTo(...p[11]);\n path.moveTo(p[3][0] + size / 2, p[8][1]);\n path.arc(p[3][0], p[8][1], size / 2, 0, Math.PI * 2);\n path.closePath();\n return path;\n }\n const center = coordinate.getCenter();\n const [x, y] = center;\n const radiusQ3 = (0, vector_1.dist)(center, p[3]);\n const radiusMedian = (0, vector_1.dist)(center, p[8]);\n const radiusQ1 = (0, vector_1.dist)(center, p[10]);\n const middleAngle = (0, vector_1.angle)((0, vector_1.sub)(p[2], center));\n const rectAngle = Math.asin(size / radiusMedian);\n const startAngle = middleAngle - rectAngle;\n const endAngle = middleAngle + rectAngle;\n path.moveTo(...p[2]);\n path.lineTo(...p[3]);\n path.moveTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y);\n path.arc(x, y, radiusQ3, startAngle, endAngle);\n path.lineTo(Math.cos(endAngle) * radiusQ1 + x, Math.sin(endAngle) * radiusQ1 + y);\n path.arc(x, y, radiusQ1, endAngle, startAngle, true);\n path.lineTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y);\n path.closePath();\n path.moveTo(...p[10]);\n path.lineTo(...p[11]);\n const a = (startAngle + endAngle) / 2;\n path.moveTo(Math.cos(a) * (radiusMedian + size / 2) + x, Math.sin(a) * (radiusMedian + size / 2) + y);\n path.arc(Math.cos(a) * radiusMedian + x, Math.sin(a) * radiusMedian + y, size / 2, a, Math.PI * 2 + a);\n path.closePath();\n return path;\n}\nconst Violin = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color, transform } = value;\n // TODO: how to setting it by size channel.\n const size = 4;\n const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, [\"color\", \"fill\", \"stroke\"]);\n const path = getPath(points, coordinate, size);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', stroke)\n .style('fill', color || fill)\n .style('transform', transform)\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Violin = Violin;\nexports.Violin.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=violin.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Line = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst selection_1 = require(\"../../utils/selection\");\nconst vector_1 = require(\"../../utils/vector\");\nconst helper_1 = require(\"../../utils/helper\");\nconst utils_1 = require(\"../utils\");\nfunction getArrowMarker(document, arrowSize, arrowStyle) {\n const arrowMarker = document.createElement('path', {\n style: Object.assign({ d: `M ${arrowSize},${arrowSize} L -${arrowSize},0 L ${arrowSize},-${arrowSize} L 0,0 Z`, transformOrigin: 'center' }, arrowStyle),\n });\n return arrowMarker;\n}\nfunction getPath(points, coordinate) {\n if (!(0, coordinate_1.isPolar)(coordinate))\n return (0, d3_shape_1.line)()\n .x((d) => d[0])\n .y((d) => d[1])(points);\n const center = coordinate.getCenter();\n return (0, d3_shape_1.arc)()({\n startAngle: 0,\n endAngle: Math.PI * 2,\n outerRadius: (0, vector_1.dist)(points[0], center),\n innerRadius: (0, vector_1.dist)(points[1], center),\n });\n}\nfunction getTransform(coordinate, transform) {\n if (!(0, coordinate_1.isPolar)(coordinate))\n return transform;\n const [cx, cy] = coordinate.getCenter();\n return `translate(${cx}, ${cy}) ${transform || ''}`;\n}\nconst Line = (options, context) => {\n const { arrow, arrowSize = 4 } = options, style = __rest(options, [\"arrow\", \"arrowSize\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, lineWidth } = defaults, shapeTheme = __rest(defaults, [\"color\", \"lineWidth\"]);\n const { color = defaultColor, size = lineWidth } = value;\n const arrowMarker = arrow\n ? getArrowMarker(document, arrowSize, Object.assign({ fill: style.stroke || color, stroke: style.stroke || color }, (0, helper_1.subObject)(style, 'arrow')))\n : null;\n const path = getPath(points, coordinate);\n const transform = getTransform(coordinate, value.transform);\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, shapeTheme)\n .style('d', path)\n .style('stroke', color)\n .style('lineWidth', size)\n .style('transform', transform)\n .style('markerEnd', arrowMarker)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Line = Line;\nexports.Line.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=line.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Connector = void 0;\nconst g_1 = require(\"@antv/g\");\nconst component_1 = require(\"@antv/component\");\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst helper_1 = require(\"../../utils/helper\");\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../utils\");\nfunction inferSymbol(x, y, r) {\n return [['M', x, y], ['L', x + 2 * r, y - r], ['L', x + 2 * r, y + r], ['Z']];\n}\n/**\n * @todo support polar later.\n */\nfunction inferConnectorPath(points) {\n return (0, d3_shape_1.line)()\n .x((d) => d[0])\n .y((d) => d[1])(points);\n}\nfunction getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 = 0) {\n const [[x0, y0], [x1, y1]] = points;\n if ((0, coordinate_1.isTranspose)(coordinate)) {\n const X0 = x0 + sourceOffsetY;\n const X1 = x1 + targetOffsetY;\n const X = X0 + length1;\n const Y0 = y0 + sourceOffsetX;\n const Y1 = y1 + targetOffsetX;\n return [\n [X0, Y0],\n [X, Y0],\n [X, Y1],\n [X1, Y1],\n ];\n }\n const Y0 = y0 - sourceOffsetY;\n const Y1 = y1 - targetOffsetY;\n const Y = Y0 - length1;\n const X0 = x0 - sourceOffsetX;\n const X1 = x1 - targetOffsetX;\n return [\n [X0, Y0],\n [X0, Y],\n [X1, Y],\n [X1, Y1],\n ];\n}\nconst Connector = (options, context) => {\n const { offsetX = 0, sourceOffsetX = offsetX, targetOffsetX = offsetX, offsetY = 0, sourceOffsetY = offsetY, targetOffsetY = offsetY, connectLength1: length1, endMarker = true } = options, style = __rest(options, [\"offsetX\", \"sourceOffsetX\", \"targetOffsetX\", \"offsetY\", \"sourceOffsetY\", \"targetOffsetY\", \"connectLength1\", \"endMarker\"]);\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, connectLength1 } = defaults, rest = __rest(defaults, [\"color\", \"connectLength1\"]);\n const { color, transform } = value;\n const P = getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 !== null && length1 !== void 0 ? length1 : connectLength1);\n const makerStyle = (0, helper_1.subObject)(Object.assign(Object.assign({}, style), defaults), 'endMarker');\n return (0, selection_1.select)(new g_1.Path())\n .call(utils_1.applyStyle, rest)\n .style('d', inferConnectorPath(P))\n .style('stroke', color || defaultColor)\n .style('transform', transform)\n .style('markerEnd', endMarker\n ? new component_1.Marker({\n className: 'marker',\n style: Object.assign(Object.assign({}, makerStyle), { symbol: inferSymbol }),\n })\n : null)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Connector = Connector;\nexports.Connector.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=connector.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Label = void 0;\nconst selection_1 = require(\"../../utils/selection\");\nconst utils_1 = require(\"../../shape/utils\");\nconst coordinate_1 = require(\"../../utils/coordinate\");\nconst string_1 = require(\"../../utils/string\");\nconst advance_1 = require(\"../text/advance\");\nconst PositionProcessor = __importStar(require(\"./position\"));\nfunction inferPosition(position, coordinate) {\n if (position !== undefined)\n return position;\n if ((0, coordinate_1.isCircular)(coordinate))\n return 'inside';\n if ((0, coordinate_1.isTranspose)(coordinate))\n return 'right';\n return 'top';\n}\nfunction getDefaultStyle(points, value, coordinate, theme, options, labels) {\n // For non-series mark, calc position for label based on\n // position and the bounds of shape.\n const { position } = value;\n const { render } = options;\n const p = inferPosition(position, coordinate);\n const labelType = render\n ? 'htmlLabel'\n : p === 'inside'\n ? 'innerLabel'\n : 'label';\n const t = theme[labelType];\n const v = Object.assign({}, t, value);\n const processor = PositionProcessor[(0, string_1.camelCase)(p)];\n if (!processor) {\n throw new Error(`Unknown position: ${p}`);\n }\n return Object.assign(Object.assign({}, t), processor(p, points, v, coordinate, options, labels));\n}\n/**\n * Render normal label for each mark.\n * @todo Support position option: middle...\n */\nconst Label = (options, context) => {\n const { coordinate, theme } = context;\n const { render } = options;\n return (points, value, style, labels) => {\n const { text, x, y, transform: specifiedTS = '', transformOrigin, className = '' } = value, overrideStyle = __rest(value, [\"text\", \"x\", \"y\", \"transform\", \"transformOrigin\", \"className\"]);\n const _a = getDefaultStyle(points, value, coordinate, theme, options, labels), { rotate = 0, transform = '' } = _a, defaultStyle = __rest(_a, [\"rotate\", \"transform\"]);\n return (0, selection_1.select)(new advance_1.Advance())\n .call(utils_1.applyStyle, defaultStyle)\n .style('text', `${text}`)\n .style('className', `${className} g2-label`)\n .style('innerHTML', render ? render(text, value.datum, value.index) : undefined)\n .style('labelTransform', `${transform} rotate(${+rotate}) ${specifiedTS}`.trim())\n .style('labelTransformOrigin', transformOrigin)\n .style('coordCenter', coordinate.getCenter())\n .call(utils_1.applyStyle, overrideStyle)\n .node();\n };\n};\nexports.Label = Label;\nexports.Label.props = {\n defaultMarker: 'point',\n};\n//# sourceMappingURL=label.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.topRight = exports.topLeft = exports.top = exports.surround = exports.spider = exports.right = exports.outside = exports.left = exports.inside = exports.bottomRight = exports.bottomLeft = exports.bottom = exports.area = void 0;\nvar area_1 = require(\"./area\");\nObject.defineProperty(exports, \"area\", { enumerable: true, get: function () { return area_1.area; } });\nvar bottom_1 = require(\"./bottom\");\nObject.defineProperty(exports, \"bottom\", { enumerable: true, get: function () { return bottom_1.bottom; } });\nvar bottomLeft_1 = require(\"./bottomLeft\");\nObject.defineProperty(exports, \"bottomLeft\", { enumerable: true, get: function () { return bottomLeft_1.bottomLeft; } });\nvar bottomRight_1 = require(\"./bottomRight\");\nObject.defineProperty(exports, \"bottomRight\", { enumerable: true, get: function () { return bottomRight_1.bottomRight; } });\nvar inside_1 = require(\"./inside\");\nObject.defineProperty(exports, \"inside\", { enumerable: true, get: function () { return inside_1.inside; } });\nvar left_1 = require(\"./left\");\nObject.defineProperty(exports, \"left\", { enumerable: true, get: function () { return left_1.left; } });\nvar outside_1 = require(\"./outside\");\nObject.defineProperty(exports, \"outside\", { enumerable: true, get: function () { return outside_1.outside; } });\nvar right_1 = require(\"./right\");\nObject.defineProperty(exports, \"right\", { enumerable: true, get: function () { return right_1.right; } });\nvar spider_1 = require(\"./spider\");\nObject.defineProperty(exports, \"spider\", { enumerable: true, get: function () { return spider_1.spider; } });\nvar surround_1 = require(\"./surround\");\nObject.defineProperty(exports, \"surround\", { enumerable: true, get: function () { return surround_1.surround; } });\nvar top_1 = require(\"./top\");\nObject.defineProperty(exports, \"top\", { enumerable: true, get: function () { return top_1.top; } });\nvar topLeft_1 = require(\"./topLeft\");\nObject.defineProperty(exports, \"topLeft\", { enumerable: true, get: function () { return topLeft_1.topLeft; } });\nvar topRight_1 = require(\"./topRight\");\nObject.defineProperty(exports, \"topRight\", { enumerable: true, get: function () { return topRight_1.topRight; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.area = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst vector_1 = require(\"../../../utils/vector\");\n/**\n * Only for Area label.\n */\nfunction area(position, points, value, coordinate) {\n const l = points.length / 2;\n const Y1 = points.slice(0, l);\n const Y0 = points.slice(l);\n // Get the maximal space for label.\n let idx = (0, d3_array_1.maxIndex)(Y1, (p, i) => Math.abs(p[1] - Y0[i][1]));\n // Do not show label at first and last.\n idx = Math.max(Math.min(idx, l - 2), 1);\n const mid = (i) => [Y1[i][0], (Y1[i][1] + Y0[i][1]) / 2];\n const point = mid(idx);\n const prev = mid(idx - 1);\n const next = mid(idx + 1);\n // todo: G rotate only support deg.\n const rotate = ((0, vector_1.angle)((0, vector_1.sub)(next, prev)) / Math.PI) * 180;\n return {\n x: point[0],\n y: point[1],\n transform: `rotate(${rotate})`,\n textAlign: 'center',\n textBaseline: 'middle',\n };\n}\nexports.area = area;\n//# sourceMappingURL=area.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bottom = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"bottom\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=bottom.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDefaultStyle = exports.inferIdentityStyle = exports.inferRotation = exports.pointOfArc = exports.inferRadialStyle = exports.inferNonCircularStyle = void 0;\nconst utils_1 = require(\"../../../shape/utils\");\nconst coordinate_1 = require(\"../../../utils/coordinate\");\nconst helper_1 = require(\"../../../utils/helper\");\nconst vector_1 = require(\"../../../utils/vector\");\nfunction inferNonCircularStyle(position, points, value, coordinate) {\n const { bounds } = value;\n const [[x0, y0], [x1, y1]] = bounds;\n const w = x1 - x0;\n const h = y1 - y0;\n const xy = (options) => {\n const { x: ox, y: oy } = options;\n const px = (0, helper_1.maybePercentage)(value.x, w);\n const py = (0, helper_1.maybePercentage)(value.y, h);\n return Object.assign(Object.assign({}, options), { x: (px || ox) + x0, y: (py || oy) + y0 });\n };\n // 4 direction.\n if (position === 'left')\n return xy({ x: 0, y: h / 2, textAlign: 'start', textBaseline: 'middle' });\n if (position === 'right')\n return xy({ x: w, y: h / 2, textAlign: 'end', textBaseline: 'middle' });\n if (position === 'top')\n return xy({ x: w / 2, y: 0, textAlign: 'center', textBaseline: 'top' });\n if (position === 'bottom')\n return xy({ x: w / 2, y: h, textAlign: 'center', textBaseline: 'bottom' });\n // 4 corner position.\n if (position === 'top-left')\n return xy({ x: 0, y: 0, textAlign: 'start', textBaseline: 'top' });\n if (position === 'top-right')\n return xy({ x: w, y: 0, textAlign: 'end', textBaseline: 'top' });\n if (position === 'bottom-left')\n return xy({ x: 0, y: h, textAlign: 'start', textBaseline: 'bottom' });\n if (position === 'bottom-right')\n return xy({ x: w, y: h, textAlign: 'end', textBaseline: 'bottom' });\n // default return 'inside'\n return xy({\n x: w / 2,\n y: h / 2,\n textAlign: 'center',\n textBaseline: 'middle',\n });\n}\nexports.inferNonCircularStyle = inferNonCircularStyle;\nfunction inferRadialStyle(position, points, value, coordinate) {\n const { y, y1, autoRotate, rotateToAlignArc } = value;\n const center = coordinate.getCenter();\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]);\n const { innerRadius, outerRadius, startAngle, endAngle } = arcObject;\n const angle = position === 'inside' ? (startAngle + endAngle) / 2 : endAngle;\n const rotate = inferRotation(angle, autoRotate, rotateToAlignArc);\n const point = (() => {\n const [p0, p1] = points;\n const radius = innerRadius + (outerRadius - innerRadius) * 0.5;\n const [x, y] = position === 'inside' ? pointOfArc(center, angle, radius) : (0, vector_1.mid)(p0, p1);\n return { x, y };\n })();\n return Object.assign(Object.assign({}, point), { textAlign: position === 'inside' ? 'center' : 'start', textBaseline: 'middle', rotate });\n}\nexports.inferRadialStyle = inferRadialStyle;\nfunction pointOfArc(center, angle, radius) {\n return [\n center[0] + Math.sin(angle) * radius,\n center[1] - Math.cos(angle) * radius,\n ];\n}\nexports.pointOfArc = pointOfArc;\nfunction inferRotation(angle, autoRotate, rotateToAlignArc) {\n if (!autoRotate)\n return 0;\n const append = rotateToAlignArc ? 0 : Math.sin(angle) < 0 ? 90 : -90;\n return (angle / Math.PI) * 180 + append;\n}\nexports.inferRotation = inferRotation;\nfunction inferInnerCircularStyle(position, points, value, coordinate) {\n const { y, y1, autoRotate, rotateToAlignArc, radius: radiusRatio = 0.5, offset = 0, } = value;\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]);\n const { startAngle, endAngle } = arcObject;\n const center = coordinate.getCenter();\n const angle = (startAngle + endAngle) / 2;\n const rotate = inferRotation(angle, autoRotate, rotateToAlignArc);\n const textStyle = { textAlign: 'center', textBaseline: 'middle', rotate };\n const { innerRadius, outerRadius } = arcObject;\n const r0 = innerRadius + (outerRadius - innerRadius) * radiusRatio;\n const r1 = r0 + offset;\n const [x0, y0] = pointOfArc(center, angle, r1);\n return Object.assign({ x: x0, y: y0 }, textStyle);\n}\n// Set to null will not be set with default value as below.\n// const { x = 0 } = options;\nfunction maybeUndefined(d) {\n return d === undefined ? null : d;\n}\nfunction inferIdentityStyle(position, points, value, coordinate) {\n const { bounds } = value;\n const [p] = bounds;\n return {\n x: maybeUndefined(p[0]),\n y: maybeUndefined(p[1]),\n };\n}\nexports.inferIdentityStyle = inferIdentityStyle;\nfunction getDefaultStyle(position, points, value, coordinate) {\n const { bounds } = value;\n // When bounds.length = 1\n // For series mark, such as line and area.\n // The bounds for text is defined with only one point.\n // Use this point as the label position.\n if (bounds.length === 1) {\n return inferIdentityStyle(position, points, value, coordinate);\n }\n const inferDefaultStyle = (0, coordinate_1.isRadial)(coordinate)\n ? inferRadialStyle\n : (0, coordinate_1.isCircular)(coordinate)\n ? inferInnerCircularStyle\n : inferNonCircularStyle;\n return inferDefaultStyle(position, points, value, coordinate);\n}\nexports.getDefaultStyle = getDefaultStyle;\n//# sourceMappingURL=default.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bottomLeft = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"bottomLeft\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=bottomLeft.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bottomRight = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"bottomRight\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=bottomRight.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.inside = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"inside\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=inside.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.left = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"left\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=left.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.outside = exports.inferOutsideCircularStyle = exports.angleOf = exports.radiusOf = exports.linePoints = void 0;\nconst utils_1 = require(\"../../../shape/utils\");\nconst coordinate_1 = require(\"../../../utils/coordinate\");\nconst default_1 = require(\"./default\");\nfunction linePoints(center, angle, radius, radius1, offsetX) {\n const [x0, y0] = (0, default_1.pointOfArc)(center, angle, radius);\n const [x1, y1] = (0, default_1.pointOfArc)(center, angle, radius1);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n return [\n [x0, y0],\n [x1, y1],\n [x1 + sign * offsetX, y1],\n ];\n}\nexports.linePoints = linePoints;\nfunction radiusOf(points, value, coordinate) {\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [value.y, value.y1]);\n const { innerRadius, outerRadius } = arcObject;\n return innerRadius + (outerRadius - innerRadius);\n}\nexports.radiusOf = radiusOf;\nfunction angleOf(points, value, coordinate) {\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [value.y, value.y1]);\n const { startAngle, endAngle } = arcObject;\n return (startAngle + endAngle) / 2;\n}\nexports.angleOf = angleOf;\nfunction inferOutsideCircularStyle(position, points, value, coordinate) {\n const { autoRotate, rotateToAlignArc, offset = 0, connector = true, connectorLength = offset, connectorLength2 = 0, connectorDistance = 0, } = value;\n const center = coordinate.getCenter();\n const angle = angleOf(points, value, coordinate);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const rotate = (0, default_1.inferRotation)(angle, autoRotate, rotateToAlignArc);\n const textStyle = {\n textAlign: sign > 0 || (0, coordinate_1.isRadial)(coordinate) ? 'start' : 'end',\n textBaseline: 'middle',\n rotate,\n };\n const radius = radiusOf(points, value, coordinate);\n const radius1 = radius + (connector ? connectorLength : offset);\n const [[x0, y0], [x1, y1], [x2, y2]] = linePoints(center, angle, radius, radius1, connector ? connectorLength2 : 0);\n const dx = connector ? +connectorDistance * sign : 0;\n const x = x2 + dx;\n const y = y2;\n const connectorStyle = {\n connector,\n connectorPoints: [\n [x1 - x, y1 - y],\n [x2 - x, y2 - y],\n ],\n };\n return Object.assign(Object.assign({ x0,\n y0, x: x2 + dx, y: y2 }, textStyle), connectorStyle);\n}\nexports.inferOutsideCircularStyle = inferOutsideCircularStyle;\nfunction outside(position, points, value, coordinate) {\n const { bounds } = value;\n // When bounds.length = 1\n // For series mark, such as line and area.\n // The bounds for text is defined with only one point.\n // Use this point as the label position.\n if (bounds.length === 1) {\n return (0, default_1.inferIdentityStyle)(position, points, value, coordinate);\n }\n const inferDefaultStyle = (0, coordinate_1.isRadial)(coordinate)\n ? default_1.inferRadialStyle\n : (0, coordinate_1.isCircular)(coordinate)\n ? inferOutsideCircularStyle\n : default_1.inferNonCircularStyle;\n return inferDefaultStyle(position, points, value, coordinate);\n}\nexports.outside = outside;\n//# sourceMappingURL=outside.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.right = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"right\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=right.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.spider = void 0;\nconst coordinate_1 = require(\"../../../utils/coordinate\");\nconst outside_1 = require(\"./outside\");\nconst utils_1 = require(\"./utils\");\nconst styleByPoints = new WeakMap();\nfunction compute(points, value, coordinate) {\n const { connectorLength, connectorLength2, connectorDistance } = value;\n const style = __rest((0, outside_1.inferOutsideCircularStyle)('outside', points, value, coordinate), []);\n const center = coordinate.getCenter();\n const radius = (0, outside_1.radiusOf)(points, value, coordinate);\n const angle = (0, outside_1.angleOf)(points, value, coordinate);\n const radius1 = radius + connectorLength + connectorLength2;\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const newX = center[0] + (radius1 + +connectorDistance) * sign;\n const { x: originX } = style;\n const dx = newX - originX;\n style.x += dx;\n style.connectorPoints[0][0] -= dx;\n return style;\n}\n/**\n * Spider label transform only suitable for the labels in polar coordinate,\n * labels should distinguish coordinate type.\n */\nfunction spider(position, points, value, coordinate, options, labels) {\n if (!(0, coordinate_1.isCircular)(coordinate))\n return {};\n if (styleByPoints.has(points))\n return styleByPoints.get(points);\n const computed = labels.map((points) => compute(points, value, coordinate));\n const { width, height } = coordinate.getOptions();\n const left = computed.filter((d) => d.x < width / 2);\n const right = computed.filter((d) => d.x >= width / 2);\n const extendedOptions = Object.assign(Object.assign({}, options), { height });\n (0, utils_1.hideAndDodgeY)(left, extendedOptions);\n (0, utils_1.hideAndDodgeY)(right, extendedOptions);\n computed.forEach((style, i) => styleByPoints.set(labels[i], style));\n return styleByPoints.get(points);\n}\nexports.spider = spider;\n//# sourceMappingURL=spider.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hideAndDodgeY = exports.dodgeY = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\n// Optimize antiCollision from: https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/util.ts\nfunction dodgeY(labels, options = {}) {\n const { labelHeight = 14, height } = options;\n // Sort labels by y and init boxes (one box for each label)\n const sortedLabels = (0, d3_array_1.sort)(labels, (d) => d.y);\n const n = sortedLabels.length;\n const boxes = new Array(n);\n for (let i = 0; i < n; i++) {\n const label = sortedLabels[i];\n const { y } = label;\n boxes[i] = { y, y1: y + labelHeight, labels: [y] };\n }\n // Merge boxes until no overlapping boxes or only one box left.\n // All the boxes should start higher than 0, but maybe higher than height.\n let overlap = true;\n while (overlap) {\n overlap = false;\n // Scan backward because boxes maybe deleted.\n for (let i = boxes.length - 1; i > 0; i--) {\n const box = boxes[i];\n const preBox = boxes[i - 1];\n if (preBox.y1 > box.y) {\n overlap = true;\n preBox.labels.push(...box.labels);\n boxes.splice(i, 1);\n // Compute new y1 to contain the current box.\n preBox.y1 += box.y1 - box.y;\n // Make sure the new box is in the range of [0, height].\n const newHeight = preBox.y1 - preBox.y;\n preBox.y1 = Math.max(Math.min(preBox.y1, height), newHeight);\n preBox.y = preBox.y1 - newHeight;\n }\n }\n }\n let i = 0;\n for (const box of boxes) {\n const { y, labels } = box;\n let prevY = y - labelHeight;\n for (const curY of labels) {\n const label = sortedLabels[i++];\n const expectedY = prevY + labelHeight;\n const dy = expectedY - curY;\n label.connectorPoints[0][1] -= dy;\n label.y = prevY + labelHeight;\n prevY += labelHeight;\n }\n }\n}\nexports.dodgeY = dodgeY;\nfunction hideAndDodgeY(unsorted, options) {\n const labels = (0, d3_array_1.sort)(unsorted, (d) => d.y);\n const { height, labelHeight = 14 } = options;\n const maxCount = Math.ceil(height / labelHeight);\n if (labels.length <= maxCount)\n return dodgeY(labels, options);\n const filtered = [];\n for (let i = 0; i < labels.length; i++) {\n // Hide labels out of range.\n if (i < labels.length - maxCount) {\n labels[i].opacity = 0;\n labels[i].connector = false;\n }\n else\n filtered.push(labels[i]);\n }\n dodgeY(filtered, options);\n}\nexports.hideAndDodgeY = hideAndDodgeY;\n//# sourceMappingURL=utils.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.surround = void 0;\nconst coordinate_1 = require(\"../../../utils/coordinate\");\nconst vector_1 = require(\"../../../utils/vector\");\nconst default_1 = require(\"./default\");\nconst outside_1 = require(\"./outside\");\n/**\n * Surround label transform is used to make labels surround circular.\n */\nfunction surround(position, points, value, coordinate) {\n if (!(0, coordinate_1.isCircular)(coordinate))\n return {};\n const { connectorLength, connectorLength2, connectorDistance } = value;\n const style = __rest((0, outside_1.inferOutsideCircularStyle)('outside', points, value, coordinate), []);\n const { x0, y0 } = style;\n const center = coordinate.getCenter();\n const radius = (0, coordinate_1.getRadius)(coordinate);\n const radius1 = radius + connectorLength;\n const angle = (0, vector_1.angleWithQuadrant)([x0 - center[0], y0 - center[1]]);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const [newX, newY] = (0, default_1.pointOfArc)(center, angle, radius1);\n style.x = newX + (connectorLength2 + connectorDistance) * sign;\n style.y = newY;\n return style;\n}\nexports.surround = surround;\n//# sourceMappingURL=surround.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.top = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"top\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=top.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.topLeft = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"topLeft\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=topLeft.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.topRight = void 0;\nvar default_1 = require(\"./default\");\nObject.defineProperty(exports, \"topRight\", { enumerable: true, get: function () { return default_1.getDefaultStyle; } });\n//# sourceMappingURL=topRight.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Path = void 0;\nconst color_1 = require(\"./color\");\n/**\n * A filled path.\n */\nconst Path = (options, context) => {\n return (0, color_1.Color)(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nexports.Path = Path;\nexports.Path.props = {\n defaultMarker: 'hvh',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=path.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Color = void 0;\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\n/**\n * Draw a filled or hollow path.\n */\nconst Color = (options, context) => {\n const { arrow, colorAttribute } = options, style = __rest(options, [\"arrow\", \"colorAttribute\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, stroke } = defaults, rest = __rest(defaults, [\"color\", \"stroke\"]);\n const { d, color = defaultColor } = value;\n const [width, height] = coordinate.getSize();\n return ((0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n // Path support string, function with parameter { width, height }.\n .style('d', typeof d === 'function' ? d({ width, height }) : d)\n .style(colorAttribute, color)\n .call(utils_1.applyStyle, style)\n .node());\n };\n};\nexports.Color = Color;\nexports.Color.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=color.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hollow = void 0;\nconst color_1 = require(\"./color\");\n/**\n * A hollow path.\n */\nconst Hollow = (options, context) => {\n return (0, color_1.Color)(Object.assign({ fill: 'none', colorAttribute: 'stroke' }, options), context);\n};\nexports.Hollow = Hollow;\nexports.Hollow.props = {\n defaultMarker: 'hvh',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=hollow.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Density = void 0;\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\n/**\n * Draw density shape.\n */\nconst Density = (options, context) => {\n const { document } = context;\n return (points, value, defaults) => {\n const { transform } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor } = value;\n const [first, ...p] = points;\n // todo smooth, hollow\n const path = (0, d3_path_1.path)();\n path.moveTo(...first);\n p.forEach(([x, y]) => {\n path.lineTo(x, y);\n });\n path.closePath();\n return (0, selection_1.select)(document.createElement('path', {}))\n .call(utils_1.applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color || defaultColor) // Always has stroke color.\n .style('fill', color || defaultColor)\n .style('fillOpacity', 0.4)\n .style('transform', transform)\n .call(utils_1.applyStyle, options)\n .node();\n };\n};\nexports.Density = Density;\nexports.Density.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=density.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Heatmap = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst utils_1 = require(\"../utils\");\nconst selection_1 = require(\"../../utils/selection\");\nconst renderer_1 = require(\"./renderer\");\nfunction deleteKey(obj, fn) {\n return Object.keys(obj).reduce((r, k) => {\n const v = obj[k];\n if (!fn(v, k))\n r[k] = v;\n return r;\n }, {});\n}\nconst Heatmap = (options, context) => {\n const { gradient, opacity, maxOpacity, minOpacity, blur, useGradientOpacity } = options, style = __rest(options, [\"gradient\", \"opacity\", \"maxOpacity\", \"minOpacity\", \"blur\", \"useGradientOpacity\"]);\n const { coordinate, createCanvas, document } = context;\n return (points, value, defaults) => {\n const { transform } = value;\n const [width, height] = coordinate.getSize();\n const data = points.map((p) => ({\n x: p[0],\n y: p[1],\n value: p[2],\n radius: p[3],\n }));\n const min = (0, d3_array_1.min)(points, (p) => p[2]);\n const max = (0, d3_array_1.max)(points, (p) => p[2]);\n const options = {\n gradient,\n opacity,\n minOpacity,\n maxOpacity,\n blur,\n useGradientOpacity,\n };\n const ctx = width && height\n ? (0, renderer_1.HeatmapRenderer)(width, height, min, max, data, deleteKey(options, (v) => v === undefined), createCanvas)\n : { canvas: null };\n return (0, selection_1.select)(document.createElement('image', {}))\n .call(utils_1.applyStyle, defaults)\n .style('x', 0)\n .style('y', 0)\n .style('width', width)\n .style('height', height)\n .style('src', ctx.canvas.toDataURL())\n .style('transform', transform)\n .call(utils_1.applyStyle, style)\n .node();\n };\n};\nexports.Heatmap = Heatmap;\nexports.Heatmap.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=heatmap.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HeatmapRenderer = void 0;\nconst lru_1 = require(\"../../../utils/lru\");\nconst gradient_1 = require(\"./gradient\");\nfunction newCanvas(createCanvas, width, height) {\n const c = createCanvas ? createCanvas() : document.createElement('canvas');\n c.width = width;\n c.height = height;\n return c;\n}\n/**\n * Get a point with template.\n * @param radius\n * @param blurFactor\n * @returns\n */\nconst getPointTemplate = (0, lru_1.lru)((radius, blurFactor, createCanvas) => {\n const tplCanvas = newCanvas(createCanvas, radius * 2, radius * 2);\n const tplCtx = tplCanvas.getContext('2d');\n const x = radius;\n const y = radius;\n if (blurFactor === 1) {\n tplCtx.beginPath();\n tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false);\n tplCtx.fillStyle = 'rgba(0,0,0,1)';\n tplCtx.fill();\n }\n else {\n const gradient = tplCtx.createRadialGradient(x, y, radius * blurFactor, x, y, radius);\n gradient.addColorStop(0, 'rgba(0,0,0,1)');\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\n tplCtx.fillStyle = gradient;\n tplCtx.fillRect(0, 0, 2 * radius, 2 * radius);\n }\n return tplCanvas;\n}, (radius) => `${radius}`);\n/**\n * Get a color palette with len = 256 base on gradient.\n * @param gradientConfig\n * @returns\n */\nfunction getColorPalette(gradientConfig, createCanvas) {\n const paletteCanvas = newCanvas(createCanvas, 256, 1);\n const paletteCtx = paletteCanvas.getContext('2d');\n const gradient = paletteCtx.createLinearGradient(0, 0, 256, 1);\n (0, gradient_1.parseGradient)(gradientConfig).forEach(([r, c]) => {\n gradient.addColorStop(r, c);\n });\n paletteCtx.fillStyle = gradient;\n paletteCtx.fillRect(0, 0, 256, 1);\n return paletteCtx.getImageData(0, 0, 256, 1).data;\n}\n/**\n * Draw all circle with alpha.\n */\nfunction drawAlpha(shadowCtx, min, max, data, options, createCanvas) {\n const { blur } = options;\n let len = data.length;\n while (len--) {\n const { x, y, value: v, radius } = data[len];\n // Ff value is bigger than max, use max as value.\n const value = Math.min(v, max);\n const rectX = x - radius;\n const rectY = y - radius;\n const tpl = getPointTemplate(radius, 1 - blur, createCanvas);\n // Value from minimum / value range, => [0, 1].\n const templateAlpha = (value - min) / (max - min);\n // Small values are not visible because globalAlpha < .001 cannot be read from imageData.\n shadowCtx.globalAlpha = Math.max(templateAlpha, 0.001);\n shadowCtx.drawImage(tpl, rectX, rectY);\n }\n return shadowCtx;\n}\nfunction colorize(shadowCtx, maxWidth, maxHeight, palette, options) {\n const { minOpacity, opacity, maxOpacity, useGradientOpacity } = options;\n const x = 0;\n const y = 0;\n const width = maxWidth;\n const height = maxHeight;\n const img = shadowCtx.getImageData(x, y, width, height);\n const imgData = img.data;\n const len = imgData.length;\n for (let i = 3; i < len; i += 4) {\n const alpha = imgData[i];\n const offset = alpha * 4;\n if (!offset) {\n continue;\n }\n // Should be in [min, max], min >= 0.\n const finalAlpha = opacity || Math.max(0, Math.min(maxOpacity, Math.max(minOpacity, alpha)));\n // Update rgba.\n imgData[i - 3] = palette[offset];\n imgData[i - 2] = palette[offset + 1];\n imgData[i - 1] = palette[offset + 2];\n imgData[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha;\n }\n return img;\n}\n/**\n * Render a heatmap with canvas.\n * See [heatmap.js](https://github.com/pa7/heatmap.js/blob/master/src/renderer/canvas2d.js).\n */\nfunction HeatmapRenderer(width, height, min, max, data, options, createCanvas) {\n const opts = Object.assign({ blur: 0.85, minOpacity: 0, opacity: 0.6, maxOpacity: 1, gradient: [\n [0.25, 'rgb(0,0,255)'],\n [0.55, 'rgb(0,255,0)'],\n [0.85, 'yellow'],\n [1.0, 'rgb(255,0,0)'],\n ] }, options);\n opts.minOpacity *= 255;\n opts.opacity *= 255;\n opts.maxOpacity *= 255;\n const shadowCanvas = newCanvas(createCanvas, width, height);\n const shadowCtx = shadowCanvas.getContext('2d');\n const palette = getColorPalette(opts.gradient, createCanvas);\n shadowCtx.clearRect(0, 0, width, height);\n drawAlpha(shadowCtx, min, max, data, opts, createCanvas);\n const img = colorize(shadowCtx, width, height, palette, opts);\n const canvas = newCanvas(createCanvas, width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(img, 0, 0);\n return ctx;\n}\nexports.HeatmapRenderer = HeatmapRenderer;\n//# sourceMappingURL=index.js.map","\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lru = void 0;\nconst flru_1 = __importDefault(require(\"flru\"));\nconst cache = (0, flru_1.default)(3);\n/**\n * A decorator to return new function with LRU cache.\n */\nfunction lru(fn, keyFn = (...args) => `${args[0]}`, maxSize = 16) {\n const cache = (0, flru_1.default)(maxSize);\n return (...args) => {\n const key = keyFn(...args);\n let v = cache.get(key);\n if (cache.has(key))\n return cache.get(key);\n v = fn(...args);\n cache.set(key, v);\n return v;\n };\n}\nexports.lru = lru;\n//# sourceMappingURL=lru.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseGradient = void 0;\n/**\n * Parse heatmap gradient.\n */\nfunction parseGradient(gradient) {\n if (typeof gradient === 'string') {\n return gradient.split(' ').map((stop) => {\n const [r, c] = stop.split(':');\n return [+r, c];\n });\n }\n return gradient;\n}\nexports.parseGradient = parseGradient;\n//# sourceMappingURL=gradient.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Shape = void 0;\n/**\n * Draw a custom shape.\n */\nconst Shape = (options, context) => {\n const { render } = options, rest = __rest(options, [\"render\"]);\n return (points) => {\n const [[x0, y0]] = points;\n return render(Object.assign(Object.assign({}, rest), { x: x0, y: y0 }), context);\n };\n};\nexports.Shape = Shape;\nexports.Shape.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=shape.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Liquid = void 0;\nconst util_1 = require(\"@antv/util\");\nconst wave_1 = require(\"./wave\");\nconst shapes_1 = require(\"./shapes\");\nconst getLiquidShape = (shape = 'circle') => shapes_1.LiquidShapesPath[shape] || shapes_1.LiquidShapesPath.circle;\nconst Liquid = (options, context) => {\n if (!context)\n return;\n const { coordinate } = context;\n const { liquidOptions, styleOptions } = options;\n const { liquidShape, percent } = liquidOptions;\n const { background: backgroundStyle, outline = {}, wave = {} } = styleOptions, attr = __rest(styleOptions, [\"background\", \"outline\", \"wave\"]);\n const { border = 2, distance = 0 } = outline, outlineStyle = __rest(outline, [\"border\", \"distance\"]);\n const { length = 192, count = 3 } = wave;\n return (points, cfg, defaultAttr) => {\n const { document } = context.canvas;\n const { color, fillOpacity } = defaultAttr;\n const attrs = Object.assign(Object.assign({ fill: color }, defaultAttr), attr);\n const g = document.createElement('g', {});\n // Center x/y.\n const [centerX, centerY] = coordinate.getCenter();\n // [width,height].\n const size = coordinate.getSize();\n const radius = Math.min(...size) / 2;\n // 1、Gets the path of the overall shape.\n const buildPath = (0, util_1.isFunction)(liquidShape)\n ? liquidShape\n : getLiquidShape(liquidShape);\n const shapePath = buildPath(centerX, centerY, radius, ...size);\n // 2、Background create.\n if (Object.keys(backgroundStyle).length) {\n const backgroundShape = document.createElement('path', {\n style: Object.assign({ d: shapePath, fill: '#fff' }, backgroundStyle),\n });\n g.appendChild(backgroundShape);\n }\n // Percent > 0 Mapping water waves.\n if (percent > 0) {\n // 3. Clip create.\n const clipShape = document.createElement('path', {\n style: {\n d: shapePath,\n },\n });\n g.appendChild(clipShape);\n g.style.clipPath = clipShape;\n // 4. Wave create.\n (0, wave_1.addWave)(centerX, centerY, 1 - percent, count, attrs, g, clipShape.getBBox().y, radius * 2, length, true, document);\n }\n // 5. Draw distance.\n const distanceShape = document.createElement('path', {\n style: {\n d: shapePath,\n fill: 'transparent',\n lineWidth: border + 2 * distance,\n stroke: '#fff',\n },\n });\n // 6. Draw border.\n const borderShape = document.createElement('path', {\n style: Object.assign(Object.assign(Object.assign({ d: shapePath, stroke: color, strokeOpacity: fillOpacity, lineWidth: border }, attrs), outlineStyle), { fill: 'transparent' }),\n });\n g.appendChild(distanceShape);\n g.appendChild(borderShape);\n return g;\n };\n};\nexports.Liquid = Liquid;\nexports.Liquid.props = {};\n//# sourceMappingURL=liquid.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addWave = void 0;\nconst DURATION = 5000;\n/**\n * A function of linear mapping.\n * @param min\n * @param max\n * @param factor\n */\nfunction lerp(min, max, factor) {\n return min + (max - min) * factor;\n}\n/**\n * Using Bessel curve to simulate sine wave.\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n * c *----* d\n * b *\n * |\n * ... a * ..................\n *\n * Whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1).\n *\n * @param x x position of the left-most point (a).\n * @param stage 0-3, stating which part of the wave it is.\n * @param waveLength wave length of the sine wave.\n * @param amplitude wave amplitude.\n * @return Sinusoidal segment curve.\n */\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n if (stage === 0) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, amplitude],\n [x + waveLength / 4, amplitude],\n ];\n }\n if (stage === 1) {\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), amplitude],\n [\n x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1),\n amplitude / 2,\n ],\n [x + waveLength / 4, 0],\n ];\n }\n if (stage === 2) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, -amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, -amplitude],\n [x + waveLength / 4, -amplitude],\n ];\n }\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), -amplitude],\n [\n x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1),\n -amplitude / 2,\n ],\n [x + waveLength / 4, 0],\n ];\n}\n/**\n * Get wave path.\n * @param radius\n * @param waterLevel water level\n * @param waveLength wave length\n * @param phase\n * @param amplitude\n * @param cx center x\n * @param cy center y\n * @return path path\n */\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n const curves = Math.ceil(((2 * radius) / waveLength) * 4) * 4;\n const path = [];\n let _phase = phase;\n // Map phase to [-Math.PI * 2, 0].\n while (_phase < -Math.PI * 2) {\n _phase += Math.PI * 2;\n }\n while (_phase > 0) {\n _phase -= Math.PI * 2;\n }\n _phase = (_phase / Math.PI / 2) * waveLength;\n const left = cx - radius + _phase - radius * 2;\n /**\n * Top-left corner as start point.\n *\n * Draws this point.\n * |\n * \\|/\n * ~~~~~~~~\n * | |\n * +------+\n */\n path.push(['M', left, waterLevel]);\n /**\n * Top wave.\n *\n * ~~~~~~~~ <- Draws this sine wave.\n * | |\n * +------+\n */\n let waveRight = 0;\n for (let c = 0; c < curves; ++c) {\n const stage = c % 4;\n const pos = getWaterWavePositions((c * waveLength) / 4, stage, waveLength, amplitude);\n path.push([\n 'C',\n pos[0][0] + left,\n -pos[0][1] + waterLevel,\n pos[1][0] + left,\n -pos[1][1] + waterLevel,\n pos[2][0] + left,\n -pos[2][1] + waterLevel,\n ]);\n if (c === curves - 1) {\n waveRight = pos[2][0];\n }\n }\n /**\n * Top-right corner.\n *\n * ~~~~~~~~\n * 3. Draws this line. -> | | <- 1. Draws this line.\n * +------+\n * ^\n * |\n * 2. Draws this line.\n */\n path.push(['L', waveRight + left, cy + radius]);\n path.push(['L', left, cy + radius]);\n path.push(['Z']);\n return path;\n}\n/**\n * Add wave.\n * @param x center x\n * @param y center y\n * @param level wave level 0~1\n * @param waveCount wave count\n * @param waveAttrs style\n * @param group g\n * @param minY Minimum height\n * @param radius radius\n * @param waveLength wave length\n * @param animation animation config\n * @param document\n */\nfunction addWave(x, y, level, waveCount, waveAttrs, group, minY, radius, waveLength, animation, document) {\n // Box property Color width height.\n const { fill, fillOpacity, opacity } = waveAttrs;\n // Number of cyclic waveCount.\n for (let idx = 0; idx < waveCount; idx++) {\n const factor = waveCount <= 1 ? 1 : idx / (waveCount - 1);\n const path = getWaterWavePath(radius, minY + radius * level, waveLength, 0, \n // Amplitude height.\n radius / 40, x, y);\n // Create wave path.\n const wave = document.createElement('path', {\n style: {\n d: path,\n fill,\n opacity: lerp(0.2, 0.9, factor) * Number(opacity || fillOpacity),\n },\n });\n group.appendChild(wave);\n try {\n if (animation === false)\n return;\n const keyframes = [\n {\n transform: 'translate(0, 0)',\n },\n {\n transform: `translate(${waveLength * 2}, 0)`,\n },\n ];\n wave.animate(keyframes, {\n duration: lerp(0.5 * DURATION, DURATION, factor) * 2,\n iterations: Infinity,\n });\n }\n catch (e) {\n console.warn('off-screen group animate error!');\n }\n }\n}\nexports.addWave = addWave;\n//# sourceMappingURL=wave.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LiquidShapesPath = void 0;\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction circle(x, y, r) {\n return `\n M ${x} ${y - r} \n a ${r} ${r} 0 1 0 0 ${r * 2}\n a ${r} ${r} 0 1 0 0 ${-r * 2}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction rect(x, y, r) {\n const GOLDEN_SECTION_RATIO = 0.618;\n const w = r * GOLDEN_SECTION_RATIO;\n return `\n M ${x - w} ${y - r}\n L ${x + w} ${y - r}\n L ${x + w} ${y + r}\n L ${x - w} ${y + r}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction diamond(x, y, r) {\n return `\n M ${x} ${y - r}\n L ${x + r} ${y}\n L ${x} ${y + r}\n L ${x - r} ${y}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction triangle(x, y, r) {\n return `\n M ${x} ${y - r}\n L ${x + r} ${y + r}\n L ${x - r} ${y + r}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction pin(x, y, radius) {\n const w = (radius * 4) / 3;\n const h = Math.max(w, radius * 2);\n const r = w / 2;\n // Attrs of the upper circle.\n const cx = x;\n const cy = r + y - h / 2;\n const theta = Math.asin(r / ((h - r) * 0.85));\n const dy = Math.sin(theta) * r;\n const dx = Math.cos(theta) * r;\n // The start point of the path.\n const x0 = cx - dx;\n const y0 = cy + dy;\n // Control point.\n const cpX = x;\n const cpY = cy + r / Math.sin(theta);\n return `\n M ${x0} ${y0}\n A ${r} ${r} 0 1 1 ${x0 + dx * 2} ${y0}\n Q ${cpX} ${cpY} ${x} ${y + h / 2}\n Q ${cpX} ${cpY} ${x0} ${y0}\n Z \n `;\n}\nexports.LiquidShapesPath = {\n pin,\n rect,\n circle,\n diamond,\n triangle,\n};\n//# sourceMappingURL=shapes.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Round = void 0;\nconst util_1 = require(\"@antv/util\");\n// Get point1 point2 radius.\nconst getR = (point1, point2) => {\n return (Math.sqrt(Math.pow(point1[0] - point2[0], 2) + Math.pow(point1[1] - point2[1], 2)) / 2);\n};\n// Gauge round.\nconst Round = (options, context) => {\n if (!context)\n return;\n const { coordinate } = context;\n if (!(coordinate === null || coordinate === void 0 ? void 0 : coordinate.getCenter))\n return;\n // Get coordinate center point.\n const center = coordinate.getCenter();\n return (points, cfg, defaultCfg) => {\n const { document } = context.canvas;\n const { color, index } = cfg;\n const g = document.createElement('g', {});\n const minR = getR(points[0], points[1]);\n const maxR = getR(points[0], center) * 2;\n /**\n * MinR small circle radius, maxR big circle radius.\n * Draw four arcs.\n * Style lineWidth and stroke for the time being inset.\n */\n const roundPath = document.createElement('path', {\n style: Object.assign(Object.assign(Object.assign({ d: [\n ['M', ...points[0]],\n ['A', minR, minR, 0, 1, 0, ...points[1]],\n ['A', maxR + minR * 2, maxR + minR * 2, 0, 0, 0, ...points[2]],\n ['A', minR, minR, 0, 1, index === 0 ? 0 : 1, ...points[3]],\n ['A', maxR, maxR, 0, 0, 1, ...points[0]],\n ['Z'],\n ] }, defaultCfg), (0, util_1.omit)(options, ['shape', 'last', 'first'])), { fill: color || defaultCfg.color }),\n });\n g.appendChild(roundPath);\n return g;\n };\n};\nexports.Round = Round;\n//# sourceMappingURL=round.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Rect = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n rect: shape_1.RectShape,\n hollow: shape_1.RectHollow,\n};\nconst Rect = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, x1: X1, y: Y, y1: Y1 } = value;\n const P = Array.from(index, (i) => {\n const p1 = [+X[i], +Y[i]];\n const p2 = [+X1[i], +Y[i]];\n const p3 = [+X1[i], +Y1[i]];\n const p4 = [+X[i], +Y1[i]];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nexports.Rect = Rect;\nexports.Rect.props = {\n defaultShape: 'rect',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeZeroY1 }],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()],\n interaction: {\n shareTooltip: true,\n },\n};\n//# sourceMappingURL=rect.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Line = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n line: shape_1.LineShape,\n smooth: shape_1.LineSmooth,\n hv: shape_1.LineHV,\n vh: shape_1.LineVH,\n hvh: shape_1.LineHVH,\n trail: shape_1.LineTrail,\n};\nconst line = (index, scale, value, coordinate) => {\n var _a, _b;\n const { series: S, x: X, y: Y } = value;\n const { x, y } = scale;\n // Because x and y channel is not strictly required in Line.props,\n // it should throw error with empty x or y channels.\n if (X === undefined || Y === undefined) {\n throw new Error('Missing encode for x or y channel.');\n }\n // Group data into series.\n // There is only one series without specified series encode.\n const series = S ? Array.from((0, d3_array_1.group)(index, (i) => S[i]).values()) : [index];\n const I = series.map((group) => group[0]).filter((i) => i !== undefined);\n // A group of data corresponds to one line.\n const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2;\n const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2;\n const P = Array.from(series, (I) => {\n return I.map((i) => coordinate.map([+X[i] + xoffset, +Y[i] + yoffset]));\n });\n return [I, P, series];\n};\nconst parallel = (index, scale, value, coordinate) => {\n // Extract all value for position[number] channels.\n const PV = Object.entries(value)\n .filter(([key]) => key.startsWith('position'))\n .map(([, value]) => value);\n // Because position channel is not strictly required in Line.props,\n // it should throw error with empty position values.\n if (PV.length === 0) {\n throw new Error('Missing encode for position channel.');\n }\n // Close the loop for radar(= parallel + polar) coordinate.\n if ((0, coordinate_1.isPolar)(coordinate))\n PV.push(PV[0]);\n // One data corresponds to one line.\n const P = Array.from(index, (i) => {\n // Transform high dimension vector to a list of two-dimension vectors.\n // [a, b, c] -> [d, e, f, g, h, i]\n const vector = PV.map((pv) => +pv[i]);\n const vectors = coordinate.map(vector);\n // Two-dimension vectors are stored in a flat array, so extract them.\n // [d, e, f, g, h, i] -> [d, e], [f, g], [h, i]\n const points = [];\n for (let i = 0; i < vectors.length; i += 2) {\n points.push([vectors[i], vectors[i + 1]]);\n }\n return points;\n });\n return [index, P];\n};\n/**\n * Convert value for each channel to line shapes.\n */\nconst Line = () => {\n return (index, scale, value, coordinate) => {\n const mark = (0, coordinate_1.isParallel)(coordinate) ? parallel : line;\n return mark(index, scale, value, coordinate);\n };\n};\nexports.Line = Line;\nexports.Line.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x' },\n { name: 'y' },\n { name: 'position', independent: true },\n { name: 'size' },\n { name: 'series', scale: 'band' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n // !!!Note This order is very important.\n { type: transform_1.MaybeGradient },\n { type: transform_1.MaybeSeries },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)(), ...(0, utils_1.tooltipXd)()],\n interaction: {\n shareTooltip: true,\n seriesTooltip: true,\n crosshairs: true,\n },\n};\n//# sourceMappingURL=line.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Point = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n hollow: shape_1.PointHollow,\n hollowDiamond: shape_1.PointHollowDiamond,\n hollowHexagon: shape_1.PointHollowHexagon,\n hollowSquare: shape_1.PointHollowSquare,\n hollowTriangleDown: shape_1.PointHollowTriangleDown,\n hollowTriangle: shape_1.PointHollowTriangle,\n hollowBowtie: shape_1.PointHollowBowtie,\n hollowCircle: shape_1.PointHollowCircle,\n point: shape_1.PointShape,\n plus: shape_1.PointPlus,\n diamond: shape_1.PointDiamond,\n square: shape_1.PointSquare,\n triangle: shape_1.PointTriangle,\n hexagon: shape_1.PointHexagon,\n cross: shape_1.PointCross,\n bowtie: shape_1.PointBowtie,\n hyphen: shape_1.PointHyphen,\n line: shape_1.PointLine,\n tick: shape_1.PointTick,\n triangleDown: shape_1.PointTriangleDown,\n circle: shape_1.PointCircle,\n};\n/**\n * Convert value for each channel to point shapes.\n * Calc the bbox of each point based on x, y and r.\n * This is for allowing their radius can be affected by coordinate(e.g. fisheye).\n */\nconst Point = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, x1: X1, y1: Y1, size: S, dx: DX, dy: DY } = value;\n const [width, height] = coordinate.getSize();\n const offset = (0, utils_1.createBandOffset)(scale, value, options);\n const xy = (i) => {\n const dx = +((DX === null || DX === void 0 ? void 0 : DX[i]) || 0);\n const dy = +((DY === null || DY === void 0 ? void 0 : DY[i]) || 0);\n const x = X1 ? (+X[i] + +X1[i]) / 2 : +X[i];\n const y = Y1 ? (+Y[i] + +Y1[i]) / 2 : +Y[i];\n const cx = x + dx;\n const cy = y + dy;\n return [cx, cy];\n };\n const P = S\n ? Array.from(index, (i) => {\n const [cx, cy] = xy(i);\n const r = +S[i];\n const a = r / width;\n const b = r / height;\n const p1 = [cx - a, cy - b];\n const p2 = [cx + a, cy + b];\n return [\n coordinate.map(offset(p1, i)),\n coordinate.map(offset(p2, i)),\n ];\n })\n : Array.from(index, (i) => [coordinate.map(offset(xy(i), i))]);\n return [index, P];\n };\n};\nexports.Point = Point;\nexports.Point.props = {\n defaultShape: 'hollow',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size', quantitative: 'sqrt' },\n { name: 'dx', scale: 'identity' },\n { name: 'dy', scale: 'identity' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeZeroX },\n { type: transform_1.MaybeZeroY },\n ],\n postInference: [...(0, utils_1.basePostInference)(), { type: transform_1.MaybeSize }, ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=point.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Text = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n text: shape_1.TextShape,\n badge: shape_1.TextBadge,\n tag: shape_1.TextTag,\n};\nconst Text = (options) => {\n const { cartesian = false } = options;\n if (cartesian)\n return utils_1.visualMark;\n return ((index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n });\n};\nexports.Text = Text;\nexports.Text.props = {\n defaultShape: 'text',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'text', scale: 'identity' },\n { name: 'fontSize', scale: 'identity' },\n { name: 'rotate', scale: 'identity' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeTuple },\n { type: transform_1.MaybeVisualPosition },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=text.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Cell = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n cell: shape_1.CellShape,\n hollow: shape_1.CellHollow,\n};\n/**\n * Convert value for each channel to Cell shapes.\n * Calc the bbox of each Cell based on x, y and r.\n * This is for allowing their radius can be affected by coordinate(e.g. fisheye).\n */\nconst Cell = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const x = scale.x;\n const y = scale.y;\n const P = Array.from(index, (i) => {\n const width = x.getBandWidth(x.invert(+X[i]));\n const height = y.getBandWidth(y.invert(+Y[i]));\n const x1 = +X[i];\n const y1 = +Y[i];\n const p1 = [x1, y1];\n const p2 = [x1 + width, y1];\n const p3 = [x1 + width, y1 + height];\n const p4 = [x1, y1 + height];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nexports.Cell = Cell;\nexports.Cell.props = {\n defaultShape: 'cell',\n defaultLabelShape: 'label',\n shape,\n composite: false,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true, scale: 'band' },\n { name: 'y', required: true, scale: 'band' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeZeroX },\n { type: transform_1.MaybeZeroY },\n { type: transform_1.MaybeZeroPadding },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=cell.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Area = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n area: shape_1.AreaShape,\n smooth: shape_1.AreaSmooth,\n hvh: shape_1.AreaHVH,\n vh: shape_1.AreaVH,\n hv: shape_1.AreaHV,\n};\n/*\n * Convert value for each channel to area shapes.\n *\n * ▲\n * │\n * │ y2\n * │\n * │ y1 xxxxxxxxxxxxx\n * │ xxxx x\n * │ xxx x\n * │ xxx x\n * │ y0 xxx x\n * │ xxxxxxx x\n * │ x x\n * │ xx x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * ────┼─────────x───────────────────────────────x──────────────►\n * │ y3 y4 y5\n */\nconst Area = () => {\n return (index, scale, value, coordinate) => {\n var _a, _b;\n const { x: X, y: Y, y1: Y1, series: S } = value;\n const { x, y } = scale;\n // Group data by series field.\n const series = S ? Array.from((0, d3_array_1.group)(index, (i) => S[i]).values()) : [index];\n const I = series.map((group) => group[0]).filter((i) => i !== undefined);\n // A group of data corresponds to one area.\n const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2;\n const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2;\n const P = Array.from(series, (SI) => {\n const l = SI.length;\n const points = new Array(l * 2);\n for (let idx = 0; idx < SI.length; idx++) {\n const i = SI[idx];\n points[idx] = coordinate.map([+X[i] + xoffset, +Y[i] + yoffset]); // y1\n points[l + idx] = coordinate.map([+X[i] + xoffset, +Y1[i] + yoffset]); // y0\n }\n return points;\n });\n return [I, P, series];\n };\n};\nexports.Area = Area;\nexports.Area.props = {\n defaultShape: 'area',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'size' },\n { name: 'series', scale: 'band' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeSeries },\n { type: transform_1.MaybeZeroY1 },\n { type: transform_1.MaybeZeroPadding },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()],\n interaction: {\n shareTooltip: true,\n seriesTooltip: true,\n crosshairs: true,\n },\n};\n//# sourceMappingURL=area.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Link = void 0;\nconst transform_1 = require(\"../transform\");\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n link: shape_1.LinkShape,\n arc: shape_1.LinkArc,\n smooth: shape_1.LinkSmooth,\n vhv: shape_1.LinkVHV,\n};\n/**\n * Connect `start` to `end` with single line.\n */\nconst Link = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, x1: X1 = X, y1: Y1 = Y } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, options);\n const P = index.map((i) => [\n coordinate.map(offset([+X[i], +Y[i]], i)),\n coordinate.map(offset([+X1[i], +Y1[i]], i)),\n ]);\n return [index, P];\n };\n};\nexports.Link = Link;\nexports.Link.props = {\n defaultShape: 'link',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeIdentityY },\n { type: transform_1.MaybeIdentityX },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=link.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Image = void 0;\nconst transform_1 = require(\"../transform\");\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n image: shape_1.ImageShape,\n};\nconst Image = (options) => {\n const { cartesian } = options;\n if (cartesian)\n return utils_1.visualMark;\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n };\n};\nexports.Image = Image;\nexports.Image.props = {\n defaultShape: 'image',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'src', scale: 'identity' },\n { name: 'size' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeTuple },\n { type: transform_1.MaybeVisualPosition },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=image.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polygon = void 0;\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n polygon: shape_1.PolygonShape,\n ribbon: shape_1.PolygonRibbon,\n};\n/**\n * Convert value for each channel to polygon shapes.\n */\nconst Polygon = () => {\n return (index, scale, value, coordinate) => {\n const Xn = Object.entries(value)\n .filter(([key]) => key.startsWith('x'))\n .map(([, value]) => value);\n const Yn = Object.entries(value)\n .filter(([key]) => key.startsWith('y'))\n .map(([, value]) => value);\n const P = index.map((i) => {\n const Pn = [];\n for (let j = 0; j < Xn.length; j++) {\n const x = Xn[j][i];\n if (x === undefined)\n break;\n const y = Yn[j][i];\n Pn.push(coordinate.map([+x, +y]));\n }\n return Pn;\n });\n return [index, P];\n };\n};\nexports.Polygon = Polygon;\nexports.Polygon.props = {\n defaultShape: 'polygon',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)()],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=polygon.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Box = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n box: shape_1.BoxShape,\n violin: shape_1.BoxViolin,\n};\n/**\n * Convert value for each channel to box shapes.\n *\n * p0 p2 p1\n * ──────────┬──────────\n * │\n * │\n * │\n * │\n * │\n * │\n * │ p3\n * p4 ┌─────────┴──────────┐ p5\n * │ │\n * │ │\n * p8 ├────────────────────┤ p9\n * │ │\n * │ p10 │\n * p7 └─────────┬──────────┘ p6\n * │\n * │\n * │\n * │\n * │\n * │\n * │\n * │\n * ───────────┴───────────\n * p12 p11 p13\n */\nconst Box = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, y1: Y1, y2: Y2, y3: Y3, y4: Y4, series: S } = value;\n // Calc width for each box.\n // The scales for x and series channels must be band scale.\n const xScale = scale.x;\n const series = scale.series;\n const P = Array.from(index, (i) => {\n const groupWidth = xScale.getBandWidth(xScale.invert(+X[i]));\n const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x = +X[i] + offset + width / 2;\n const [low, q1, median, q3, high] = [\n +Y[i],\n +Y1[i],\n +Y2[i],\n +Y3[i],\n +Y4[i],\n ];\n const P13 = [\n [x - width / 2, high],\n [x + width / 2, high],\n [x, high],\n [x, q3],\n [x - width / 2, q3],\n [x + width / 2, q3],\n [x + width / 2, q1],\n [x - width / 2, q1],\n [x - width / 2, median],\n [x + width / 2, median],\n [x, q1],\n [x, low],\n [x - width / 2, low],\n [x + width / 2, low],\n ];\n return P13.map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nexports.Box = Box;\nexports.Box.props = {\n defaultShape: 'box',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeZeroX }],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()],\n interaction: {\n shareTooltip: true,\n },\n};\n//# sourceMappingURL=box.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector = void 0;\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n vector: shape_1.VectorShape,\n};\n/**\n * Convert value for each channel to start, end.\n * The angle starts from the X axis(right direction).\n */\nconst Vector = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, size: S, rotate: R } = value;\n const [width, height] = coordinate.getSize();\n const P = index.map((i) => {\n const angle = (+R[i] / 180) * Math.PI;\n const s = +S[i];\n const a = s / width;\n const b = s / height;\n const vx = a * Math.cos(angle);\n const vy = -b * Math.sin(angle);\n return [\n coordinate.map([+X[i] - vx / 2, +Y[i] - vy / 2]),\n coordinate.map([+X[i] + vx / 2, +Y[i] + vy / 2]),\n ];\n });\n return [index, P];\n };\n};\nexports.Vector = Vector;\nexports.Vector.props = {\n defaultShape: 'vector',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'rotate', required: true, scale: 'identity' },\n { name: 'size', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)()],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=vector.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LineY = void 0;\nconst util_1 = require(\"@antv/util\");\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n line: shape_1.LineXY,\n};\nconst LineY = (options) => {\n return (index, scale, value, coordinate) => {\n const { y: Y } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, (0, util_1.deepMix)({ style: { bandOffset: 0 } }, options));\n const P = Array.from(index, (i) => {\n const p1 = [0, Y[i]];\n const p2 = [1, Y[i]];\n return [p1, p2].map((d) => coordinate.map(offset(d, i)));\n });\n return [index, P];\n };\n};\nexports.LineY = LineY;\nexports.LineY.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeTupleY }],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=lineY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LineX = void 0;\nconst util_1 = require(\"@antv/util\");\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n line: shape_1.LineXY,\n};\nconst LineX = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, (0, util_1.deepMix)({ style: { bandOffset: 0 } }, options));\n const P = Array.from(index, (i) => {\n const p1 = [X[i], 1];\n const p2 = [X[i], 0];\n return [p1, p2].map((d) => coordinate.map(offset(d, i)));\n });\n return [index, P];\n };\n};\nexports.LineX = LineX;\nexports.LineX.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeTupleX }],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=lineX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Connector = void 0;\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst link_1 = require(\"./link\");\nconst shape = {\n connector: shape_1.ConnectorShape,\n};\nconst Connector = (...args) => {\n return (0, link_1.Link)(...args);\n};\nexports.Connector = Connector;\nexports.Connector.props = {\n defaultShape: 'connector',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)()],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=connector.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Range = exports.AbstractRange = void 0;\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nfunction extend(channel, extended, value, scale) {\n if (extended)\n return () => [0, 1];\n const { [channel]: C, [`${channel}1`]: C1 } = value;\n return (i) => {\n var _a;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, scale.invert(+C1[i]))) || 0;\n return [C[i], C1[i] + offset];\n };\n}\nfunction AbstractRange(options = {}) {\n const { extendX = false, extendY = false } = options;\n return (index, scale, value, coordinate) => {\n const x = extend('x', extendX, value, scale.x);\n const y = extend('y', extendY, value, scale.y);\n const P = Array.from(index, (i) => {\n const [x1, x2] = x(i);\n const [y1, y2] = y(i);\n const p1 = [x1, y1];\n const p2 = [x2, y1];\n const p3 = [x2, y2];\n const p4 = [x1, y2];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n}\nexports.AbstractRange = AbstractRange;\nconst shape = { range: shape_1.RangeShape };\nconst Range = () => {\n return AbstractRange();\n};\nexports.Range = Range;\nexports.Range.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)()],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=range.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RangeX = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst range_1 = require(\"./range\");\nconst shape = {\n range: shape_1.RangeShape,\n};\nconst RangeX = () => {\n return (0, range_1.AbstractRange)({ extendY: true });\n};\nexports.RangeX = RangeX;\nexports.RangeX.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeDefaultX }],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=rangeX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RangeY = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst range_1 = require(\"./range\");\nconst shape = {\n range: shape_1.RangeShape,\n};\nconst RangeY = () => {\n return (0, range_1.AbstractRange)({ extendX: true });\n};\nexports.RangeY = RangeY;\nexports.RangeY.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseAnnotationChannels)({ shapes: Object.keys(shape) }),\n { name: 'y', required: true },\n ],\n preInference: [...(0, utils_1.basePreInference)(), { type: transform_1.MaybeDefaultY }],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=rangeY.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sankey = void 0;\nconst util_1 = require(\"@antv/util\");\nconst sankey_1 = require(\"../data/sankey\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst utils_1 = require(\"./utils\");\nconst DEFAULT_LAYOUT_OPTIONS = {\n nodeId: (d) => d.key,\n nodeWidth: 0.02,\n nodePadding: 0.02,\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'polygon',\n x: 'x',\n y: 'y',\n },\n scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n },\n style: {\n stroke: '#000',\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'ribbon',\n x: 'x',\n y: 'y',\n },\n style: {\n fillOpacity: 0.5,\n stroke: undefined,\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n textAlign: (d) => (d.x[0] < 0.5 ? 'start' : 'end'),\n position: (d) => (d.x[0] < 0.5 ? 'right' : 'left'),\n fontSize: 10,\n};\n/**\n * @todo Add interaction\n * @todo Add source-link color mode\n */\nconst Sankey = (options) => {\n const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, interaction, } = options;\n // Initialize data, generating nodes by link if is not specified.\n const { links, nodes } = (0, utils_1.initializeData)(data, encode);\n // Extract encode for node and link.\n const nodeEncode = (0, helper_1.subObject)(encode, 'node');\n const linkEncode = (0, helper_1.subObject)(encode, 'link');\n const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode;\n // Transform data, using nodeKey as nodeId.\n const { links: linkData, nodes: nodeData } = (0, sankey_1.Sankey)(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { nodeId: (0, utils_1.field)(nodeKey) }), layout))({ links, nodes });\n // Extract label style and apply defaults.\n const _a = (0, helper_1.subObject)(style, 'label'), { text = nodeKey, spacing = 5 } = _a, labelStyle = __rest(_a, [\"text\", \"spacing\"]);\n const key1 = (0, utils_1.field)(nodeKey);\n const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', {\n title: key1,\n items: [{ field: 'value' }],\n }, true);\n const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', {\n title: '',\n items: [\n (d) => ({ name: 'source', value: key1(d.source) }),\n (d) => ({ name: 'target', value: key1(d.target) }),\n ],\n });\n return [\n (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, {\n data: nodeData,\n encode: Object.assign(Object.assign({}, nodeEncode), { color }),\n scale,\n style: (0, helper_1.subObject)(style, 'node'),\n labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text, dx: (d) => (d.x[0] < 0.5 ? spacing : -spacing) }), labelStyle),\n ...nodeLabels,\n ],\n tooltip: nodeTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'node'),\n axis: false,\n interaction,\n }),\n (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, {\n data: linkData,\n encode: linkEncode,\n labels: linkLabels,\n style: Object.assign({ fill: linkEncode.color ? undefined : '#aaa', lineWidth: 0 }, (0, helper_1.subObject)(style, 'link')),\n tooltip: linkTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'link'),\n interaction,\n }),\n ];\n};\nexports.Sankey = Sankey;\nexports.Sankey.props = {};\n//# sourceMappingURL=sankey.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sankey = void 0;\nconst d3_sankey_1 = require(\"./utils/d3-sankey\");\nconst DEFAULT_OPTIONS = {\n nodeAlign: 'justify',\n nodeWidth: 0.008,\n nodePadding: 0.03,\n nodes: (graph) => graph.nodes,\n links: (graph) => graph.links,\n nodeSort: undefined,\n linkSort: undefined,\n iterations: 6,\n};\nconst ALIGN_METHOD = {\n left: d3_sankey_1.left,\n right: d3_sankey_1.right,\n center: d3_sankey_1.center,\n justify: d3_sankey_1.justify,\n};\nfunction getNodeAlignFunction(nodeAlign) {\n const type = typeof nodeAlign;\n if (type === 'string')\n return ALIGN_METHOD[nodeAlign] || d3_sankey_1.justify;\n if (type === 'function')\n return nodeAlign;\n return d3_sankey_1.justify;\n}\n/**\n * Compute the node and edge position, return a graph representing the Sankey layout. All will be normalized to [[0, 0], [1, 1]]\n * Required graph data (nodes, edges)\n */\nconst Sankey = (options) => {\n return (data) => {\n const { nodeId, nodeSort, nodeAlign, nodeWidth, nodePadding, nodeDepth, nodes: nodeNodes, links: nodeLinks, linkSort, iterations, } = Object.assign({}, DEFAULT_OPTIONS, options);\n const sankeyProcessor = (0, d3_sankey_1.sankey)()\n .nodeSort(nodeSort)\n .linkSort(linkSort)\n .links(nodeLinks)\n .nodes(nodeNodes)\n .nodeWidth(nodeWidth)\n .nodePadding(nodePadding)\n .nodeDepth(nodeDepth)\n .nodeAlign(getNodeAlignFunction(nodeAlign))\n .iterations(iterations)\n .extent([\n [0, 0],\n [1, 1],\n ]);\n if (typeof nodeId === 'function') {\n sankeyProcessor.nodeId(nodeId);\n }\n const layoutData = sankeyProcessor(data);\n const { nodes: N, links: L } = layoutData;\n const nodes = N.map((node) => {\n const { x0, x1, y0, y1 } = node;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n return Object.assign(Object.assign({}, node), { x: [x0, x1, x1, x0], y: [y0, y0, y1, y1] });\n });\n const links = L.map((edge) => {\n const { source, target } = edge;\n const sx = source.x1;\n const tx = target.x0;\n const offset = edge.width / 2;\n return Object.assign(Object.assign({}, edge), { x: [sx, sx, tx, tx], y: [\n edge.y0 + offset,\n edge.y0 - offset,\n edge.y1 + offset,\n edge.y1 - offset,\n ] });\n });\n return { nodes, links };\n };\n};\nexports.Sankey = Sankey;\nexports.Sankey.props = {};\n//# sourceMappingURL=sankey.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sankey = exports.justify = exports.right = exports.left = exports.center = void 0;\n/**\n * Sankey layout, fork from https://github.com/d3/d3-sankey/tree/master/src (todo, optimize algorithm)\n *\n * Major changes:\n *\n * 1. modify some set and map traverse\n * 2. fix some error caused by [empty] array\n * 3. support `nodeDepth` through align method\n */\nconst sankey_1 = require(\"./sankey\");\nObject.defineProperty(exports, \"sankey\", { enumerable: true, get: function () { return sankey_1.Sankey; } });\nvar align_1 = require(\"./align\");\nObject.defineProperty(exports, \"center\", { enumerable: true, get: function () { return align_1.center; } });\nObject.defineProperty(exports, \"left\", { enumerable: true, get: function () { return align_1.left; } });\nObject.defineProperty(exports, \"right\", { enumerable: true, get: function () { return align_1.right; } });\nObject.defineProperty(exports, \"justify\", { enumerable: true, get: function () { return align_1.justify; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sankey = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst align_1 = require(\"./align\");\nconst constant_1 = require(\"./constant\");\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\nfunction value(d) {\n return d.value;\n}\nfunction defaultId(d) {\n return d.index;\n}\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\nfunction defaultLinks(graph) {\n return graph.links;\n}\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node)\n throw new Error('missing: ' + id);\n return node;\n}\nfunction computeLinkBreadths({ nodes }) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\nfunction Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = align_1.justify;\n let depth;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n function sankey(arg) {\n const graph = {\n nodes: nodes(arg),\n links: links(arg),\n };\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n sankey.update = function (graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n sankey.nodeId = function (_) {\n return arguments.length\n ? ((id = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey)\n : id;\n };\n sankey.nodeAlign = function (_) {\n return arguments.length\n ? ((align = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey)\n : align;\n };\n sankey.nodeDepth = function (_) {\n return arguments.length\n ? ((depth = typeof _ === 'function' ? _ : _), sankey)\n : depth;\n };\n sankey.nodeSort = function (_) {\n return arguments.length ? ((sort = _), sankey) : sort;\n };\n sankey.nodeWidth = function (_) {\n return arguments.length ? ((dx = +_), sankey) : dx;\n };\n sankey.nodePadding = function (_) {\n return arguments.length ? ((dy = py = +_), sankey) : dy;\n };\n sankey.nodes = function (_) {\n return arguments.length\n ? ((nodes = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey)\n : nodes;\n };\n sankey.links = function (_) {\n return arguments.length\n ? ((links = typeof _ === 'function' ? _ : (0, constant_1.constant)(_)), sankey)\n : links;\n };\n sankey.linkSort = function (_) {\n return arguments.length ? ((linkSort = _), sankey) : linkSort;\n };\n sankey.size = function (_) {\n return arguments.length\n ? ((x0 = y0 = 0), (x1 = +_[0]), (y1 = +_[1]), sankey)\n : [x1 - x0, y1 - y0];\n };\n sankey.extent = function (_) {\n return arguments.length\n ? ((x0 = +_[0][0]),\n (x1 = +_[1][0]),\n (y0 = +_[0][1]),\n (y1 = +_[1][1]),\n sankey)\n : [\n [x0, y0],\n [x1, y1],\n ];\n };\n sankey.iterations = function (_) {\n return arguments.length ? ((iterations = +_), sankey) : iterations;\n };\n function computeNodeLinks({ nodes, links }) {\n nodes.forEach((node, idx) => {\n node.index = idx;\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n const nodeById = new Map(nodes.map((d) => [id(d), d]));\n links.forEach((link, idx) => {\n link.index = idx;\n let { source, target } = link;\n if (typeof source !== 'object')\n source = link.source = find(nodeById, source);\n if (typeof target !== 'object')\n target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n });\n if (linkSort != null) {\n for (const { sourceLinks, targetLinks } of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n function computeNodeValues({ nodes }) {\n for (const node of nodes) {\n node.value =\n node.fixedValue === undefined\n ? Math.max((0, d3_array_1.sum)(node.sourceLinks, value), (0, d3_array_1.sum)(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n function computeNodeDepths({ nodes }) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set();\n let x = 0;\n while (current.size) {\n current.forEach((node) => {\n node.depth = x;\n for (const { target } of node.sourceLinks) {\n next.add(target);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n // 如果配置了 depth,则设置自定义 depth\n if (depth) {\n const maxDepth = Math.max((0, d3_array_1.max)(nodes, (d) => d.depth) + 1, 0);\n let node;\n for (let i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.depth = depth.call(null, node, maxDepth);\n }\n }\n }\n function computeNodeHeights({ nodes }) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set();\n let x = 0;\n while (current.size) {\n current.forEach((node) => {\n node.height = x;\n for (const { source } of node.targetLinks) {\n next.add(source);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n }\n function computeNodeLayers({ nodes }) {\n const x = Math.max((0, d3_array_1.max)(nodes, (d) => d.depth) + 1, 0);\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x).fill(0).map(() => []);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i])\n columns[i].push(node);\n else\n columns[i] = [node];\n }\n if (sort)\n for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n function initializeNodeBreadths(columns) {\n const ky = (0, d3_array_1.min)(columns, (c) => (y1 - y0 - (c.length - 1) * py) / (0, d3_array_1.sum)(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / ((0, d3_array_1.max)(columns, (c) => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const { source, value } of target.targetLinks) {\n const v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n const dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const { target, value } of source.sourceLinks) {\n const v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n const dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6)\n (node.y0 += dy), (node.y1 += dy);\n y = node.y1 + py;\n }\n }\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6)\n (node.y0 -= dy), (node.y1 -= dy);\n y = node.y0 - py;\n }\n }\n function reorderNodeLinks({ sourceLinks, targetLinks }) {\n if (linkSort === undefined) {\n for (const { source: { sourceLinks }, } of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const { target: { targetLinks }, } of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const { sourceLinks, targetLinks } of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - ((source.sourceLinks.length - 1) * py) / 2;\n for (const { target: node, width } of source.sourceLinks) {\n if (node === target)\n break;\n y += width + py;\n }\n for (const { source: node, width } of target.targetLinks) {\n if (node === source)\n break;\n y -= width;\n }\n return y;\n }\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - ((target.targetLinks.length - 1) * py) / 2;\n for (const { source: node, width } of target.targetLinks) {\n if (node === source)\n break;\n y += width + py;\n }\n for (const { target: node, width } of source.sourceLinks) {\n if (node === target)\n break;\n y -= width;\n }\n return y;\n }\n return sankey;\n}\nexports.Sankey = Sankey;\n//# sourceMappingURL=sankey.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.center = exports.justify = exports.right = exports.left = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nfunction targetDepth(d) {\n return d.target.depth;\n}\nfunction left(node) {\n return node.depth;\n}\nexports.left = left;\nfunction right(node, n) {\n return n - 1 - node.height;\n}\nexports.right = right;\nfunction justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\nexports.justify = justify;\nfunction center(node) {\n return node.targetLinks.length\n ? node.depth\n : node.sourceLinks.length\n ? (0, d3_array_1.min)(node.sourceLinks, targetDepth) - 1\n : 0;\n}\nexports.center = center;\n//# sourceMappingURL=align.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.constant = void 0;\nfunction constant(x) {\n return function () {\n return x;\n };\n}\nexports.constant = constant;\n//# sourceMappingURL=constant.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.maybeAnimation = exports.isFullTooltip = exports.maybeTooltip = exports.subTooltip = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"./helper\");\nfunction subTooltip(tooltip, name, defaults = {}, main = false) {\n if ((0, helper_1.isUnset)(tooltip))\n return tooltip;\n if (Array.isArray(tooltip) && main)\n return tooltip;\n const sub = (0, helper_1.subObject)(tooltip, name);\n return (0, util_1.deepMix)(defaults, sub);\n}\nexports.subTooltip = subTooltip;\nfunction maybeTooltip(tooltip, defaults = {}) {\n if ((0, helper_1.isUnset)(tooltip))\n return tooltip;\n if (Array.isArray(tooltip))\n return tooltip;\n if (!isFullTooltip(tooltip))\n return tooltip;\n return (0, util_1.deepMix)(defaults, tooltip);\n}\nexports.maybeTooltip = maybeTooltip;\nfunction isFullTooltip(tooltip) {\n if (Object.keys(tooltip).length === 0)\n return true;\n const { title, items } = tooltip;\n return title !== undefined || items !== undefined;\n}\nexports.isFullTooltip = isFullTooltip;\nfunction maybeAnimation(animate, sub) {\n return typeof animate === 'object' ? (0, helper_1.subObject)(animate, sub) : animate;\n}\nexports.maybeAnimation = maybeAnimation;\n//# sourceMappingURL=mark.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Chord = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst arc_1 = require(\"../data/arc\");\nconst utils_1 = require(\"./utils\");\nconst DEFAULT_LAYOUT_OPTIONS = {\n y: 0,\n thickness: 0.05,\n marginRatio: 0.1,\n id: (node) => node.key,\n source: (edge) => edge.source,\n target: (edge) => edge.target,\n sourceWeight: (edge) => edge.value || 1,\n targetWeight: (edge) => edge.value || 1,\n sortBy: null, // optional, id | weight | frequency | {function}\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'polygon',\n x: 'x',\n y: 'y',\n },\n scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n },\n style: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1,\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'ribbon',\n x: 'x',\n y: 'y',\n },\n style: {\n opacity: 0.5,\n lineWidth: 1,\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n position: 'outside',\n fontSize: 10,\n};\nconst Chord = (options, context) => {\n const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n // Initialize data, generating nodes by link if is not specified.\n const { nodes, links } = (0, utils_1.initializeData)(data, encode);\n // Extract encode for node and link.\n const nodeEncode = (0, helper_1.subObject)(encode, 'node');\n const linkEncode = (0, helper_1.subObject)(encode, 'link');\n const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode;\n const { linkEncodeColor = (d) => d.source } = linkEncode;\n const { nodeWidthRatio = DEFAULT_LAYOUT_OPTIONS.thickness, nodePaddingRatio = DEFAULT_LAYOUT_OPTIONS.marginRatio } = layout, restLayout = __rest(layout, [\"nodeWidthRatio\", \"nodePaddingRatio\"]);\n const { nodes: nodeData, edges: linkData } = (0, arc_1.Arc)(Object.assign(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { id: (0, utils_1.field)(nodeKey), thickness: nodeWidthRatio, marginRatio: nodePaddingRatio }), restLayout), { weight: true }))({ nodes, edges: links });\n // Extract label style and apply defaults.\n const _a = (0, helper_1.subObject)(style, 'label'), { text = nodeKey } = _a, labelStyle = __rest(_a, [\"text\"]);\n const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', {\n title: '',\n items: [(d) => ({ name: d.key, value: d.value })],\n }, true);\n const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', {\n title: '',\n items: [(d) => ({ name: `${d.source} -> ${d.target}`, value: d.value })],\n });\n const { height, width } = context;\n const minimumLen = Math.min(height, width);\n return [\n (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, {\n data: linkData,\n encode: Object.assign(Object.assign({}, linkEncode), { color: linkEncodeColor }),\n labels: linkLabels,\n style: Object.assign({ fill: linkEncodeColor ? undefined : '#aaa' }, (0, helper_1.subObject)(style, 'link')),\n tooltip: linkTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'link'),\n }),\n (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, {\n data: nodeData,\n encode: Object.assign(Object.assign({}, nodeEncode), { color }),\n scale,\n style: (0, helper_1.subObject)(style, 'node'),\n coordinate: {\n type: 'polar',\n // Leave enough rendering space for the label.\n outerRadius: (minimumLen - 20) / minimumLen,\n startAngle: -Math.PI * 2,\n endAngle: 0,\n },\n labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text }), labelStyle),\n ...nodeLabels,\n ],\n tooltip: nodeTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'node'),\n axis: false,\n }),\n ];\n};\nexports.Chord = Chord;\nexports.Chord.props = {};\n//# sourceMappingURL=chord.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Arc = void 0;\nconst arc_1 = require(\"../data/utils/arc\");\n/**\n * For arc diagram(edge with weight) or chord diagram(with weight)\n */\nconst Arc = (options) => {\n return (data) => {\n return (0, arc_1.Arc)(options)(data);\n };\n};\nexports.Arc = Arc;\nexports.Arc.props = {};\n//# sourceMappingURL=arc.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Arc = void 0;\nvar arc_1 = require(\"./arc\");\nObject.defineProperty(exports, \"Arc\", { enumerable: true, get: function () { return arc_1.Arc; } });\n//# sourceMappingURL=index.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Arc = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../../../utils/helper\");\nconst SortMethods = __importStar(require(\"./sort\"));\nconst DEFAULT_OPTIONS = {\n y: 0,\n thickness: 0.05,\n weight: false,\n marginRatio: 0.1,\n id: (node) => node.id,\n source: (edge) => edge.source,\n target: (edge) => edge.target,\n sourceWeight: (edge) => edge.value || 1,\n targetWeight: (edge) => edge.value || 1,\n sortBy: null,\n};\n/**\n * Layout for Arc / Chord diagram with d3 style.\n */\nfunction Arc(options) {\n const { y, thickness, weight, marginRatio, id, source, target, sourceWeight, targetWeight, sortBy, } = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n function arc(data) {\n // Clone first.\n const nodes = data.nodes.map((n) => (Object.assign({}, n)));\n const edges = data.edges.map((n) => (Object.assign({}, n)));\n // Keep reference in below functions.\n preprocess(nodes, edges);\n sortNodes(nodes, edges);\n layoutNodes(nodes, edges);\n layoutEdges(nodes, edges);\n return { nodes, edges };\n }\n /**\n * Calculate id, value, frequency for node, and source,target for edge.\n */\n function preprocess(nodes, edges) {\n edges.forEach((edge) => {\n edge.source = source(edge);\n edge.target = target(edge);\n edge.sourceWeight = sourceWeight(edge);\n edge.targetWeight = targetWeight(edge);\n });\n // Group edges by source, target.\n const edgesBySource = (0, d3_array_1.group)(edges, (e) => e.source);\n const edgesByTarget = (0, d3_array_1.group)(edges, (e) => e.target);\n nodes.forEach((node) => {\n node.id = id(node);\n const sources = edgesBySource.has(node.id)\n ? edgesBySource.get(node.id)\n : [];\n const targets = edgesByTarget.has(node.id)\n ? edgesByTarget.get(node.id)\n : [];\n node.frequency = sources.length + targets.length;\n node.value =\n (0, d3_array_1.sum)(sources, (d) => d.sourceWeight) +\n (0, d3_array_1.sum)(targets, (d) => d.targetWeight);\n });\n return { nodes, edges };\n }\n function sortNodes(nodes, edges) {\n const method = typeof sortBy === 'function' ? sortBy : SortMethods[sortBy];\n if (method) {\n nodes.sort(method);\n }\n }\n function layoutNodes(nodes, edges) {\n const size = nodes.length;\n if (!size) {\n throw (0, helper_1.error)(\"Invalid nodes: it's empty!\");\n }\n // No weight.\n if (!weight) {\n const deltaX = 1 / size;\n nodes.forEach((node, i) => {\n node.x = (i + 0.5) * deltaX;\n node.y = y;\n });\n return { nodes, edges };\n }\n // todo: marginRatio should be in [0, 1)\n // todo: thickness shoule be in (0, 1)\n const margin = marginRatio / (2 * size);\n const total = nodes.reduce((prev, node) => (prev += node.value), 0);\n nodes.reduce((deltaX, node) => {\n node.weight = node.value / total;\n node.width = node.weight * (1 - marginRatio);\n node.height = thickness;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n const minX = margin + deltaX;\n const maxX = minX + node.width;\n const minY = y - thickness / 2;\n const maxY = minY + thickness;\n node.x = [minX, maxX, maxX, minX];\n node.y = [minY, minY, maxY, maxY];\n // Return next deltaX.\n return deltaX + node.width + 2 * margin;\n }, 0);\n return {\n nodes,\n edges,\n };\n }\n /**\n * Get edge layout information from nodes, and save into edge object.\n */\n function layoutEdges(nodes, edges) {\n const nodesMap = new Map(nodes.map((d) => [d.id, d]));\n if (!weight) {\n edges.forEach((edge) => {\n const sourceId = source(edge);\n const targetId = target(edge);\n const sourceNode = nodesMap.get(sourceId);\n const targetNode = nodesMap.get(targetId);\n // Edge's layout information is Equal with node.\n if (sourceNode && targetNode) {\n edge.x = [sourceNode.x, targetNode.x];\n edge.y = [sourceNode.y, targetNode.y];\n }\n });\n return { nodes, edges };\n }\n // Initial edge.x, edge.y.\n edges.forEach((edge) => {\n edge.x = [0, 0, 0, 0];\n edge.y = [y, y, y, y];\n });\n // Group edges by source, target.\n const edgesBySource = (0, d3_array_1.group)(edges, (e) => e.source);\n const edgesByTarget = (0, d3_array_1.group)(edges, (e) => e.target);\n // When weight = true, we need to calculation the bbox of edge start/end.\n nodes.forEach((node) => {\n const { edges, width, x, y, value, id } = node;\n const sourceEdges = edgesBySource.get(id) || [];\n const targetEdges = edgesByTarget.get(id) || [];\n let offset = 0;\n /* points\n * 0----------2\n * | |\n * 1----------3\n */\n sourceEdges.map((edge) => {\n const w = (edge.sourceWeight / value) * width;\n edge.x[0] = x[0] + offset;\n edge.x[1] = x[0] + offset + w;\n offset += w;\n });\n targetEdges.forEach((edge) => {\n const w = (edge.targetWeight / value) * width;\n edge.x[3] = x[0] + offset;\n edge.x[2] = x[0] + offset + w;\n offset += w;\n });\n });\n }\n return arc;\n}\nexports.Arc = Arc;\n//# sourceMappingURL=arc.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.name = exports.id = exports.frequency = exports.weight = void 0;\nfunction weight(a, b) {\n return b.value - a.value;\n}\nexports.weight = weight;\nfunction frequency(a, b) {\n return b.frequency - a.frequency;\n}\nexports.frequency = frequency;\nfunction id(a, b) {\n return `${a.id}`.localeCompare(`${b.id}`);\n}\nexports.id = id;\nfunction name(a, b) {\n return `${a.name}`.localeCompare(`${b.name}`);\n}\nexports.name = name;\n//# sourceMappingURL=sort.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Path = void 0;\nconst shape_1 = require(\"../shape\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n path: shape_1.PathShape,\n hollow: shape_1.PathHollow,\n};\n/**\n * Draw a path.\n */\nconst Path = (options) => {\n return (index, scale, value, coordinate) => {\n // The points is meaning less for path mark,\n // because the position of path shapes specified\n // by the d option. So set [0, 0] for render pipeline.\n return [index, index.map(() => [[0, 0]])];\n };\n};\nexports.Path = Path;\nexports.Path.props = {\n defaultShape: 'path',\n defaultLabelShape: 'label',\n shape,\n composite: false,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'd', scale: 'identity' },\n ],\n preInference: [...(0, utils_1.basePreInference)()],\n postInference: [...(0, utils_1.basePostInference)()],\n};\n//# sourceMappingURL=path.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Treemap = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst treeDataTransform_1 = require(\"../utils/treeDataTransform\");\n// Defaults\nconst GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({\n tile: 'treemapSquarify',\n ratio: 0.5 * (1 + Math.sqrt(5)),\n size: [width, height],\n round: false,\n ignoreParentValue: true,\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n sort: (a, b) => b.value - a.value,\n layer: 0,\n});\nconst GET_DEFAULT_OPTIONS = (width, height) => ({\n type: 'rect',\n axis: false,\n encode: {\n x: 'x',\n y: 'y',\n key: 'id',\n color: (d) => d.path[1],\n },\n scale: {\n x: { domain: [0, width], range: [0, 1] },\n y: { domain: [0, height], range: [0, 1] },\n },\n style: {\n stroke: '#fff',\n },\n state: {\n active: { opacity: 0.6 },\n inactive: { opacity: 1 },\n },\n});\nconst DEFAULT_LABEL_OPTIONS = {\n fontSize: 10,\n text: (d) => (0, util_1.last)(d.path),\n position: 'inside',\n fill: '#000',\n textOverflow: 'clip',\n wordWrap: true,\n maxLines: 1,\n wordWrapWidth: (d) => d.x1 - d.x0,\n isTreemapLabel: true,\n};\nconst DEFAULT_TOOLTIP_OPTIONS = {\n title: (d) => { var _a, _b; return (_b = (_a = d.path) === null || _a === void 0 ? void 0 : _a.join) === null || _b === void 0 ? void 0 : _b.call(_a, '.'); },\n items: [{ field: 'value' }],\n};\nconst DEFAULT_TOOLTIP_OPTIONS_DRILL = {\n title: (d) => (0, util_1.last)(d.path),\n items: [{ field: 'value' }],\n};\nconst Treemap = (options, context) => {\n const { width, height, options: markOptions } = context;\n const { data, encode = {}, scale, style = {}, layout = {}, labels = [], tooltip = {} } = options, resOptions = __rest(options, [\"data\", \"encode\", \"scale\", \"style\", \"layout\", \"labels\", \"tooltip\"]);\n const treemapDrillDown = (0, util_1.get)(markOptions, [\n 'interaction',\n 'treemapDrillDown',\n ]);\n // Layout\n const layoutOptions = (0, util_1.deepMix)({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout, {\n layer: treemapDrillDown\n ? (d) => {\n return d.depth === 1;\n }\n : layout.layer,\n });\n // Data\n const [transformedData, transformedDataAll] = (0, treeDataTransform_1.treeDataTransform)(data, layoutOptions, encode);\n // Label\n const labelStyle = (0, helper_1.subObject)(style, 'label');\n return (0, util_1.deepMix)({}, GET_DEFAULT_OPTIONS(width, height), Object.assign(Object.assign({ data: transformedData, scale,\n style, labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle), (treemapDrillDown && { cursor: 'pointer' })),\n ...labels,\n ] }, resOptions), { encode, tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false }), treemapDrillDown\n ? {\n interaction: Object.assign(Object.assign({}, resOptions.interaction), { treemapDrillDown: treemapDrillDown\n ? Object.assign(Object.assign({}, treemapDrillDown), { originData: transformedDataAll, layout: layoutOptions }) : undefined }),\n encode: Object.assign({ color: (d) => (0, util_1.last)(d.path) }, encode),\n tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS_DRILL),\n }\n : {});\n};\nexports.Treemap = Treemap;\nexports.Treemap.props = {};\n//# sourceMappingURL=treemap.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.treeDataTransform = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_hierarchy_1 = require(\"@antv/vendor/d3-hierarchy\");\nconst utils_1 = require(\"../mark/utils\");\n/**\n * @description Path need when the data is a flat json structure,\n * and the tree object structure do not need.\n */\nfunction generateHierarchyRoot(data, path) {\n if (Array.isArray(data)) {\n return typeof path === 'function'\n ? (0, d3_hierarchy_1.stratify)().path(path)(data)\n : (0, d3_hierarchy_1.stratify)()(data);\n }\n return (0, d3_hierarchy_1.hierarchy)(data);\n}\nfunction addObjectDataPath(root, path = [root.data.name]) {\n // @ts-ignore\n root.id = root.id || root.data.name;\n root.path = path;\n if (root.children) {\n root.children.forEach((item) => {\n // @ts-ignore\n item.id = `${root.id}/${item.data.name}`;\n item.path = [...path, item.data.name];\n addObjectDataPath(item, item.path);\n });\n }\n}\nfunction addArrayDataPath(root) {\n const name = (0, util_1.get)(root, ['data', 'name']);\n if (name.replaceAll) {\n root.path = name.replaceAll('.', '/').split('/');\n }\n if (root.children) {\n root.children.forEach((item) => {\n addArrayDataPath(item);\n });\n }\n}\nfunction getTileMethod(tile, ratio) {\n const tiles = {\n treemapBinary: d3_hierarchy_1.treemapBinary,\n treemapDice: d3_hierarchy_1.treemapDice,\n treemapSlice: d3_hierarchy_1.treemapSlice,\n treemapSliceDice: d3_hierarchy_1.treemapSliceDice,\n treemapSquarify: d3_hierarchy_1.treemapSquarify,\n treemapResquarify: d3_hierarchy_1.treemapResquarify,\n };\n const tileMethod = tile === 'treemapSquarify' ? tiles[tile].ratio(ratio) : tiles[tile];\n if (!tileMethod) {\n throw new TypeError('Invalid tile method!');\n }\n return tileMethod;\n}\nfunction treeDataTransform(data, layout, encode) {\n const { value } = encode;\n const tileMethod = getTileMethod(layout.tile, layout.ratio);\n const root = generateHierarchyRoot(data, layout.path);\n if ((0, util_1.isArray)(data)) {\n addArrayDataPath(root);\n }\n else {\n addObjectDataPath(root);\n }\n // Calculate the value and sort.\n value\n ? root\n .sum((d) => layout.ignoreParentValue && d.children\n ? 0\n : (0, utils_1.field)(value)(d))\n .sort(layout.sort)\n : root.count();\n (0, d3_hierarchy_1.treemap)()\n .tile(tileMethod)\n // @ts-ignore\n .size(layout.size)\n .round(layout.round)\n .paddingInner(layout.paddingInner)\n .paddingOuter(layout.paddingOuter)\n .paddingTop(layout.paddingTop)\n .paddingRight(layout.paddingRight)\n .paddingBottom(layout.paddingBottom)\n .paddingLeft(layout.paddingLeft)(root);\n const nodes = root.descendants().map((d) => Object.assign(d, {\n id: d.id.replace(/^\\//, ''),\n x: [d.x0, d.x1],\n y: [d.y0, d.y1],\n }));\n const filterData = nodes.filter(typeof layout.layer === 'function'\n ? layout.layer\n : (d) => d.height === layout.layer);\n return [filterData, nodes];\n}\nexports.treeDataTransform = treeDataTransform;\n//# sourceMappingURL=treeDataTransform.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pack = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_hierarchy_1 = require(\"@antv/vendor/d3-hierarchy\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst utils_1 = require(\"./utils\");\nconst GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({\n size: [width, height],\n padding: 0,\n sort: (a, b) => b.value - a.value,\n});\nconst GET_DEFAULT_OPTIONS = (width, height, encode) => ({\n type: 'point',\n axis: false,\n legend: false,\n scale: {\n x: { domain: [0, width] },\n y: { domain: [0, height] },\n size: { type: 'identity' },\n },\n encode: {\n x: 'x',\n y: 'y',\n size: 'r',\n shape: 'point',\n },\n style: {\n fill: !encode.color ? (d) => (d.height === 0 ? '#ddd' : '#fff') : undefined,\n stroke: !encode.color ? (d) => (d.height === 0 ? '' : '#000') : undefined,\n },\n});\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n position: 'inside',\n textOverflow: 'clip',\n wordWrap: true,\n maxLines: 1,\n wordWrapWidth: (d) => d.r * 2,\n};\nconst DEFAULT_TOOLTIP_OPTIONS = {\n title: (d) => d.data.name,\n items: [{ field: 'value' }],\n};\nconst dataTransform = (data, layout, encode) => {\n const { value } = encode;\n const root = (0, util_1.isArray)(data)\n ? (0, d3_hierarchy_1.stratify)().path(layout.path)(data)\n : (0, d3_hierarchy_1.hierarchy)(data);\n value ? root.sum((d) => (0, utils_1.field)(value)(d)).sort(layout.sort) : root.count();\n // @ts-ignore\n (0, d3_hierarchy_1.pack)().size(layout.size).padding(layout.padding)(root);\n return root.descendants();\n};\nconst Pack = (markOptions, context) => {\n const { width, height } = context;\n const { data, encode = {}, scale = {}, style = {}, layout = {}, labels = [], tooltip = {} } = markOptions, resOptions = __rest(markOptions, [\"data\", \"encode\", \"scale\", \"style\", \"layout\", \"labels\", \"tooltip\"]);\n const DEFAULT_OPTIONS = GET_DEFAULT_OPTIONS(width, height, encode);\n const transformedData = dataTransform(data, (0, util_1.deepMix)({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout), (0, util_1.deepMix)({}, DEFAULT_OPTIONS['encode'], encode));\n const labelStyle = (0, helper_1.subObject)(style, 'label');\n return (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign(Object.assign({ data: transformedData, encode,\n scale,\n style, labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle),\n ...labels,\n ] }, resOptions), { tooltip: (0, mark_1.maybeTooltip)(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false }));\n};\nexports.Pack = Pack;\nexports.Pack.props = {};\n//# sourceMappingURL=pack.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Boxplot = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nfunction min(I, V) {\n return (0, d3_array_1.min)(I, (i) => V[i]);\n}\nfunction max(I, V) {\n return (0, d3_array_1.max)(I, (i) => V[i]);\n}\nfunction lower(I, V) {\n const lo = q1(I, V) * 2.5 - q3(I, V) * 1.5;\n return (0, d3_array_1.min)(I, (i) => (V[i] >= lo ? V[i] : NaN));\n}\nfunction q1(I, V) {\n return (0, d3_array_1.quantile)(I, 0.25, (i) => V[i]);\n}\nfunction q2(I, V) {\n return (0, d3_array_1.quantile)(I, 0.5, (i) => V[i]);\n}\nfunction q3(I, V) {\n return (0, d3_array_1.quantile)(I, 0.75, (i) => V[i]);\n}\nfunction upper(I, V) {\n const hi = q3(I, V) * 2.5 - q1(I, V) * 1.5;\n return (0, d3_array_1.max)(I, (i) => (V[i] <= hi ? V[i] : NaN));\n}\n/**\n * Group marks by x and reserve outlier indexes.\n */\nfunction OutlierY() {\n return (I, mark) => {\n const { encode } = mark;\n const { y, x } = encode;\n const { value: V } = y;\n const { value: X } = x;\n const GI = Array.from((0, d3_array_1.group)(I, (i) => X[+i]).values());\n const FI = GI.flatMap((I) => {\n const lo = lower(I, V);\n const hi = upper(I, V);\n return I.filter((i) => V[i] < lo || V[i] > hi);\n });\n return [FI, mark];\n };\n}\nconst Boxplot = (options) => {\n const { data, encode, style = {}, tooltip = {}, transform, animate } = options, rest = __rest(options, [\"data\", \"encode\", \"style\", \"tooltip\", \"transform\", \"animate\"]);\n const { point = true } = style, restStyle = __rest(style, [\"point\"]);\n const { y } = encode;\n const encodeY = { y, y1: y, y2: y, y3: y, y4: y };\n const qy = { y1: q1, y2: q2, y3: q3 };\n // Tooltips.\n const boxTooltip = (0, mark_1.subTooltip)(tooltip, 'box', {\n items: [\n { channel: 'y', name: 'min' },\n { channel: 'y1', name: 'q1' },\n { channel: 'y2', name: 'q2' },\n { channel: 'y3', name: 'q3' },\n { channel: 'y4', name: 'max' },\n ],\n }, true);\n const pointTooltip = (0, mark_1.subTooltip)(tooltip, 'point', {\n title: { channel: 'x' },\n items: [{ name: 'outlier', channel: 'y' }],\n });\n // Only show min and max instead of lower and upper.\n // Only draw a box.\n if (!point) {\n return Object.assign({ type: 'box', data: data, transform: [\n Object.assign(Object.assign({ type: 'groupX', y: min }, qy), { y4: max }),\n ], encode: Object.assign(Object.assign({}, encode), encodeY), style: restStyle, tooltip: boxTooltip }, rest);\n }\n const boxStyle = (0, helper_1.subObject)(restStyle, 'box');\n const pointStyle = (0, helper_1.subObject)(restStyle, 'point');\n return [\n Object.assign({ type: 'box', data: data, transform: [\n Object.assign(Object.assign({ type: 'groupX', y: lower }, qy), { y4: upper }),\n ], encode: Object.assign(Object.assign({}, encode), encodeY), style: boxStyle, tooltip: boxTooltip, animate: (0, mark_1.maybeAnimation)(animate, 'box') }, rest),\n // Draw outliers.\n {\n type: 'point',\n data: data,\n transform: [{ type: OutlierY }],\n encode,\n style: Object.assign({}, pointStyle),\n tooltip: pointTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'point'),\n },\n ];\n};\nexports.Boxplot = Boxplot;\nexports.Boxplot.props = {};\n//# sourceMappingURL=boxplot.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Shape = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n shape: shape_1.ShapeShape,\n};\n/**\n * @todo Unify with text, image and point.\n */\nconst Shape = (options) => {\n const { cartesian } = options;\n if (cartesian)\n return utils_1.visualMark;\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = (0, utils_1.createBandOffset)(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n };\n};\nexports.Shape = Shape;\nexports.Shape.props = {\n defaultShape: 'shape',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeTuple },\n { type: transform_1.MaybeVisualPosition },\n { type: transform_1.MaybeFunctionAttribute },\n ],\n};\n//# sourceMappingURL=shape.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ForceGraph = void 0;\nconst d3_force_1 = require(\"@antv/vendor/d3-force\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst utils_1 = require(\"./utils\");\nconst DEFAULT_LAYOUT_OPTIONS = {\n joint: true,\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'link',\n axis: false,\n legend: false,\n encode: {\n x: [(d) => d.source.x, (d) => d.target.x],\n y: [(d) => d.source.y, (d) => d.target.y],\n },\n style: {\n stroke: '#999',\n strokeOpacity: 0.6,\n },\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'point',\n axis: false,\n legend: false,\n encode: {\n x: 'x',\n y: 'y',\n size: 5,\n color: 'group',\n shape: 'point',\n },\n style: {\n stroke: '#fff',\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n};\nfunction dataTransform(data, layout, encode) {\n const { nodes, links } = data;\n const { joint, nodeStrength, linkStrength } = layout;\n const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = encode;\n const nodeForce = (0, d3_force_1.forceManyBody)();\n const linkForce = (0, d3_force_1.forceLink)(links).id((0, utils_1.field)(linkKey));\n typeof nodeStrength === 'function' && nodeForce.strength(nodeStrength);\n typeof linkStrength === 'function' && linkForce.strength(linkStrength);\n const simulation = (0, d3_force_1.forceSimulation)(nodes)\n .force('link', linkForce)\n .force('charge', nodeForce);\n joint\n ? simulation.force('center', (0, d3_force_1.forceCenter)())\n : simulation.force('x', (0, d3_force_1.forceX)()).force('y', (0, d3_force_1.forceY)());\n simulation.stop();\n const n = Math.ceil(Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay()));\n for (let i = 0; i < n; i++)\n simulation.tick();\n return {\n nodesData: nodes,\n linksData: links,\n };\n}\nconst ForceGraph = (options) => {\n const { data, encode: e = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = e, restEncode = __rest(e, [\"nodeKey\", \"linkKey\"]);\n const encode = Object.assign({ nodeKey, linkKey }, restEncode);\n const nodeEncode = (0, helper_1.subObject)(encode, 'node');\n const linkEncode = (0, helper_1.subObject)(encode, 'link');\n const { links, nodes } = (0, utils_1.initializeData)(data, encode);\n const { nodesData, linksData } = dataTransform({ links, nodes }, (0, util_1.deepMix)({}, DEFAULT_LAYOUT_OPTIONS, layout), encode);\n const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', {\n items: [\n (d) => ({ name: 'source', value: (0, utils_1.field)(linkKey)(d.source) }),\n (d) => ({ name: 'target', value: (0, utils_1.field)(linkKey)(d.target) }),\n ],\n });\n const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', {\n items: [(d) => ({ name: 'key', value: (0, utils_1.field)(nodeKey)(d) })],\n }, true);\n return [\n (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, {\n data: linksData,\n encode: linkEncode,\n labels: linkLabels,\n style: (0, helper_1.subObject)(style, 'link'),\n tooltip: linkTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'link'),\n }),\n (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, {\n data: nodesData,\n encode: Object.assign({}, nodeEncode),\n scale,\n style: (0, helper_1.subObject)(style, 'node'),\n tooltip: nodeTooltip,\n labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), (0, helper_1.subObject)(style, 'label')),\n ...nodeLabels,\n ],\n animate: (0, mark_1.maybeAnimation)(animate, 'link'),\n }),\n ];\n};\nexports.ForceGraph = ForceGraph;\nexports.ForceGraph.props = {};\n//# sourceMappingURL=forceGraph.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tree = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst tree_1 = require(\"../data/tree\");\nconst mark_1 = require(\"../utils/mark\");\nconst DEFAULT_LAYOUT_OPTIONS = {\n sortBy: (a, b) => b.value - a.value,\n};\nconst DEFAULT_NODE_OPTIONS = {\n axis: false,\n legend: false,\n type: 'point',\n encode: {\n x: 'x',\n y: 'y',\n size: 2,\n shape: 'point',\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'link',\n encode: {\n x: 'x',\n y: 'y',\n shape: 'smooth',\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n fontSize: 10,\n};\nconst Tree = (options) => {\n const { data, encode = {}, scale = {}, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n const valueEncode = encode === null || encode === void 0 ? void 0 : encode.value;\n const { nodes, edges } = (0, tree_1.Tree)(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), layout), { field: valueEncode }))(data);\n const nodeTooltip = (0, mark_1.subTooltip)(tooltip, 'node', {\n title: 'name',\n items: ['value'],\n }, true);\n const linkTooltip = (0, mark_1.subTooltip)(tooltip, 'link', {\n title: '',\n items: [\n (d) => ({ name: 'source', value: d.source.name }),\n (d) => ({ name: 'target', value: d.target.name }),\n ],\n });\n return [\n (0, util_1.deepMix)({}, DEFAULT_LINK_OPTIONS, {\n data: edges,\n encode: (0, helper_1.subObject)(encode, 'link'),\n scale: (0, helper_1.subObject)(scale, 'link'),\n labels: linkLabels,\n style: Object.assign({ stroke: '#999' }, (0, helper_1.subObject)(style, 'link')),\n tooltip: linkTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'link'),\n }),\n (0, util_1.deepMix)({}, DEFAULT_NODE_OPTIONS, {\n data: nodes,\n scale: (0, helper_1.subObject)(scale, 'node'),\n encode: (0, helper_1.subObject)(encode, 'node'),\n labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), (0, helper_1.subObject)(style, 'label')),\n ...nodeLabels,\n ],\n style: Object.assign({}, (0, helper_1.subObject)(style, 'node')),\n tooltip: nodeTooltip,\n animate: (0, mark_1.maybeAnimation)(animate, 'node'),\n }),\n ];\n};\nexports.Tree = Tree;\nexports.Tree.props = {};\n//# sourceMappingURL=tree.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tree = void 0;\nconst d3_hierarchy_1 = require(\"@antv/vendor/d3-hierarchy\");\nconst cluster_1 = require(\"./cluster\");\nconst Tree = (options) => {\n return (0, cluster_1.hierarchyFunction)(d3_hierarchy_1.tree)(options);\n};\nexports.Tree = Tree;\nexports.Tree.props = {};\n//# sourceMappingURL=tree.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Cluster = exports.hierarchyFunction = void 0;\nconst d3_hierarchy_1 = require(\"@antv/vendor/d3-hierarchy\");\nconst hierarchyFunction = (layoutFunction) => (options) => {\n return (data) => {\n const { field = 'value', nodeSize, separation, sortBy, as = ['x', 'y'], } = options;\n const [x, y] = as;\n // Process root data.\n const root = (0, d3_hierarchy_1.hierarchy)(data, (d) => d.children)\n .sum((d) => d[field])\n .sort(sortBy);\n // Layout\n const c = layoutFunction();\n c.size([1, 1]);\n if (nodeSize)\n c.nodeSize(nodeSize);\n if (separation)\n c.separation(separation);\n c(root);\n const nodes = [];\n root.each((node) => {\n node[x] = node.x;\n node[y] = node.y;\n node.name = node.data.name;\n nodes.push(node);\n });\n const edges = root.links();\n edges.forEach((edge) => {\n edge[x] = [edge.source[x], edge.target[x]];\n edge[y] = [edge.source[y], edge.target[y]];\n });\n return { nodes, edges };\n };\n};\nexports.hierarchyFunction = hierarchyFunction;\nconst Cluster = (options) => {\n return (0, exports.hierarchyFunction)(d3_hierarchy_1.cluster)(options);\n};\nexports.Cluster = Cluster;\nexports.Cluster.props = {};\n//# sourceMappingURL=cluster.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WordCloud = void 0;\nconst util_1 = require(\"@antv/util\");\nfunction initializeData(data, encode) {\n const { text = 'text', value = 'value' } = encode;\n return data.map((d) => (Object.assign(Object.assign({}, d), { text: d[text], value: d[value] })));\n}\nconst GET_DEFAULT_OPTIONS = () => ({\n axis: false,\n type: 'text',\n encode: {\n x: 'x',\n y: 'y',\n text: 'text',\n rotate: 'rotate',\n fontSize: 'size',\n shape: 'tag',\n },\n scale: {\n x: { range: [0, 1] },\n y: { range: [0, 1] },\n },\n style: {\n fontFamily: (d) => d.fontFamily,\n },\n tooltip: {\n items: [\n (datum) => ({\n name: datum.text,\n value: datum.value,\n }),\n ],\n },\n});\nconst WordCloud = (options, context) => __awaiter(void 0, void 0, void 0, function* () {\n const { width, height } = context;\n const { data, encode = {}, scale, style = {}, layout = {} } = options, resOptions = __rest(options, [\"data\", \"encode\", \"scale\", \"style\", \"layout\"]);\n const initializedData = initializeData(data, encode);\n return (0, util_1.deepMix)({}, GET_DEFAULT_OPTIONS(), Object.assign(Object.assign({ data: {\n value: initializedData,\n transform: [\n Object.assign({ type: 'wordCloud', size: [width, height] }, layout),\n ],\n }, encode,\n scale,\n style }, resOptions), { axis: false }));\n});\nexports.WordCloud = WordCloud;\nexports.WordCloud.props = {};\n//# sourceMappingURL=wordCloud.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Gauge = void 0;\nconst util_1 = require(\"@antv/util\");\nconst g_1 = require(\"@antv/g\");\nconst helper_1 = require(\"../utils/helper\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst coordinate_2 = require(\"../coordinate\");\nconst utils_1 = require(\"../shape/utils\");\nconst selection_1 = require(\"../utils/selection\");\nconst shape_1 = require(\"../shape\");\nconst indicatorShape = (options, context) => {\n const { shape, radius } = options, style = __rest(options, [\"shape\", \"radius\"]);\n const pointerStyle = (0, helper_1.subObject)(style, 'pointer');\n const pinStyle = (0, helper_1.subObject)(style, 'pin');\n const { shape: pointerShape } = pointerStyle, resPointerStyle = __rest(pointerStyle, [\"shape\"]);\n const { shape: pinShape } = pinStyle, resPinStyle = __rest(pinStyle, [\"shape\"]);\n const { coordinate, theme } = context;\n return (points, value) => {\n // Invert points.\n const invertedPoints = points.map((p) => coordinate.invert(p));\n // Get new coordinate.\n const [startAngle, endAngle, innerRadius] = (0, coordinate_1.getTransformOptions)(coordinate, 'polar');\n const newCoordinate = coordinate.clone();\n const { color: stroke } = value;\n const newTransformations = (0, coordinate_2.Radial)({\n startAngle,\n endAngle,\n innerRadius,\n outerRadius: radius,\n });\n newTransformations.push(['cartesian']);\n newCoordinate.update({\n transformations: newTransformations,\n });\n const newPoints = invertedPoints.map((p) => newCoordinate.map(p));\n const [x, y] = (0, utils_1.getOrigin)(newPoints);\n const [cx, cy] = coordinate.getCenter();\n const pointerAttrs = Object.assign(Object.assign({ x1: x, y1: y, x2: cx, y2: cy, stroke }, resPointerStyle), style);\n const pinAttrs = Object.assign(Object.assign({ cx,\n cy,\n stroke }, resPinStyle), style);\n const indicatorGroup = (0, selection_1.select)(new g_1.Group());\n if (!(0, helper_1.isUnset)(pointerShape)) {\n typeof pointerShape === 'function'\n ? indicatorGroup.append(() => pointerShape(newPoints, value, newCoordinate, theme))\n : indicatorGroup.append('line').call(utils_1.applyStyle, pointerAttrs).node();\n }\n if (!(0, helper_1.isUnset)(pinShape)) {\n typeof pinShape === 'function'\n ? indicatorGroup.append(() => pinShape(newPoints, value, newCoordinate, theme))\n : indicatorGroup.append('circle').call(utils_1.applyStyle, pinAttrs).node();\n }\n return indicatorGroup.node();\n };\n};\nconst DEFAULT_OPTIONS = {\n coordinate: {\n type: 'radial',\n innerRadius: 0.9,\n outerRadius: 1,\n startAngle: (-11 / 10) * Math.PI,\n endAngle: (1 / 10) * Math.PI,\n },\n axis: {\n x: false,\n },\n legend: false,\n tooltip: false,\n encode: {\n x: 'x',\n y: 'y',\n color: 'color',\n },\n scale: {\n color: {\n range: ['#30BF78', '#D0D0D0'],\n },\n },\n};\nconst DEFAULT_INDICATOR_OPTIONS = {\n style: {\n shape: indicatorShape,\n lineWidth: 4,\n pointerLineCap: 'round',\n pinR: 10,\n pinFill: '#fff',\n radius: 0.6,\n },\n};\nconst DEFAULT_TEXT_OPTIONS = {\n type: 'text',\n style: {\n x: '50%',\n y: '60%',\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 20,\n fontWeight: 800,\n fill: '#888',\n },\n tooltip: false,\n};\nfunction getGaugeData(data) {\n if ((0, util_1.isNumber)(data)) {\n // Percent range [0, 1].\n const percent = Math.max(0, Math.min(data, 1));\n return {\n percent,\n target: percent,\n total: 1,\n };\n }\n return data;\n}\nfunction dataTransform(data, scale) {\n const { name = 'score', target, total, percent, thresholds = [], } = getGaugeData(data);\n const _target = percent || target;\n const _total = percent ? 1 : total;\n const newScale = Object.assign({ y: {\n domain: [0, _total],\n } }, scale);\n if (!thresholds.length) {\n return {\n targetData: [{ x: name, y: _target, color: 'target' }],\n totalData: [\n { x: name, y: _target, color: 'target' },\n { x: name, y: _total - _target, color: 'total' },\n ],\n target: _target,\n total: _total,\n scale: newScale,\n };\n }\n return {\n targetData: [{ x: name, y: _target, color: 'target' }],\n totalData: thresholds.map((d, i) => ({\n x: name,\n y: i >= 1 ? d - thresholds[i - 1] : d,\n color: i,\n })),\n target: _target,\n total: _total,\n scale: newScale,\n };\n}\nfunction getTextContent(textStyle, { target, total }) {\n const { content } = textStyle;\n return content ? content(target, total) : target.toString();\n}\nconst Gauge = (options) => {\n const { data = {}, scale = {}, style = {}, animate = {}, transform = [] } = options, resOptions = __rest(options, [\"data\", \"scale\", \"style\", \"animate\", \"transform\"]);\n const { targetData, totalData, target, total, scale: newScale, } = dataTransform(data, scale);\n const _a = (0, helper_1.subObject)(style, 'text'), { tooltip } = _a, textStyle = __rest(_a, [\"tooltip\"]);\n // pointer + pin\n const indicatorStyle = (0, helper_1.filterPrefixObject)(style, ['pointer', 'pin']);\n const arcStyle = (0, helper_1.subObject)(style, 'arc');\n const shape = arcStyle.shape;\n return [\n (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', transform: [{ type: 'stackY' }], data: totalData, scale: newScale, style: shape === 'round' ? Object.assign(Object.assign({}, arcStyle), { shape: shape_1.GaugeRound }) : arcStyle, animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'arc') : animate }, resOptions)),\n (0, util_1.deepMix)({}, DEFAULT_OPTIONS, DEFAULT_INDICATOR_OPTIONS, Object.assign({ type: 'point', data: targetData, scale: newScale, style: indicatorStyle, animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'indicator') : animate }, resOptions)),\n (0, util_1.deepMix)({}, DEFAULT_TEXT_OPTIONS, {\n style: Object.assign({ text: getTextContent(textStyle, { target, total }) }, textStyle),\n tooltip,\n animate: typeof animate === 'object' ? (0, helper_1.subObject)(animate, 'text') : animate,\n }),\n ];\n};\nexports.Gauge = Gauge;\nexports.Gauge.props = {};\n//# sourceMappingURL=gauge.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Density = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n density: shape_1.DensityShape,\n};\nconst Density = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, series: S } = value;\n const Yn = Object.entries(value)\n .filter(([key]) => key.startsWith('y'))\n .map(([, value]) => value);\n const SZn = Object.entries(value)\n .filter(([key]) => key.startsWith('size'))\n .map(([, value]) => value);\n // Because x and y channel is not strictly required in Line.props,\n // it should throw error with empty x or y channels.\n if (X === undefined || Yn === undefined || SZn === undefined) {\n throw new Error('Missing encode for x or y or size channel.');\n }\n // Calc width for each box.\n // The scales for x and series channels must be band scale.\n const xScale = scale.x;\n const series = scale.series;\n const P = Array.from(index, (i) => {\n const groupWidth = xScale.getBandWidth(xScale.invert(+X[i]));\n const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x = +X[i] + offset + width / 2;\n const PN = [\n ...Yn.map((_, idx) => [x + +SZn[idx][i] / index.length, +Yn[idx][i]]),\n ...Yn.map((_, idx) => [\n x - +SZn[idx][i] / index.length,\n +Yn[idx][i],\n ]).reverse(), // left\n ];\n return PN.map((p) => coordinate.map(p));\n });\n return [index, P];\n };\n};\nexports.Density = Density;\nexports.Density.props = {\n defaultShape: 'density',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'size', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size', required: true, scale: 'identity' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeZeroY1 },\n { type: transform_1.MaybeZeroX },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip1d)()],\n interaction: { shareTooltip: true },\n};\n//# sourceMappingURL=density.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Heatmap = void 0;\nconst shape_1 = require(\"../shape\");\nconst transform_1 = require(\"../transform\");\nconst utils_1 = require(\"./utils\");\nconst shape = {\n heatmap: shape_1.HeatmapShape,\n};\n/**\n * Draw heatmap with gradient.\n */\nconst Heatmap = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, size: S, color: C } = value;\n const P = Array.from(index, (i) => {\n // Default size = 40.\n const r = S ? +S[i] : 40;\n // Warning: x, y, value, radius.\n return [...coordinate.map([+X[i], +Y[i]]), C[i], r];\n });\n return [[0], [P]];\n };\n};\nexports.Heatmap = Heatmap;\nexports.Heatmap.props = {\n defaultShape: 'heatmap',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...(0, utils_1.baseGeometryChannels)({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'color', scale: 'identity', required: true },\n { name: 'size' },\n ],\n preInference: [\n ...(0, utils_1.basePreInference)(),\n { type: transform_1.MaybeZeroX },\n { type: transform_1.MaybeZeroY },\n ],\n postInference: [...(0, utils_1.basePostInference)(), ...(0, utils_1.tooltip2d)()],\n};\n//# sourceMappingURL=heatmap.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Liquid = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst number_1 = require(\"../utils/number\");\nconst shape_1 = require(\"../shape\");\nconst DEFAULT_OPTIONS = {\n axis: {\n x: false,\n y: false,\n },\n legend: false,\n tooltip: false,\n encode: {\n x: 'type',\n y: 'percent',\n },\n scale: {\n y: {\n domain: [0, 1],\n },\n },\n style: {\n shape: shape_1.LiquidShape,\n },\n animate: {\n enter: {\n type: 'fadeIn',\n },\n },\n};\nconst DEFAULT_TEXT_OPTIONS = {\n type: 'text',\n style: {\n x: '50%',\n y: '50%',\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 20,\n fontWeight: 800,\n fill: '#888',\n },\n animate: {\n enter: {\n type: 'fadeIn',\n },\n },\n};\nconst Liquid = (options) => {\n const { data = {}, style = {}, animate } = options, resOptions = __rest(options, [\"data\", \"style\", \"animate\"]);\n // Compatible with old data structures: { percent: number } and percent >= 0.\n const percent = Math.max(0, (0, util_1.isNumber)(data) ? data : data === null || data === void 0 ? void 0 : data.percent);\n const newData = [{ percent, type: 'liquid' }];\n const contentStyle = Object.assign(Object.assign({}, (0, helper_1.subObject)(style, 'text')), (0, helper_1.subObject)(style, 'content'));\n const outline = (0, helper_1.subObject)(style, 'outline');\n const wave = (0, helper_1.subObject)(style, 'wave');\n const background = (0, helper_1.subObject)(style, 'background');\n return [\n (0, util_1.deepMix)({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', data: newData, style: {\n liquidOptions: {\n percent,\n liquidShape: style === null || style === void 0 ? void 0 : style.shape,\n },\n styleOptions: Object.assign(Object.assign({}, style), { outline,\n wave,\n background }),\n }, animate }, resOptions)),\n (0, util_1.deepMix)({}, DEFAULT_TEXT_OPTIONS, {\n style: Object.assign({ text: `${(0, number_1.prettyNumber)(percent * 100)} %` }, contentStyle),\n animate,\n }),\n ];\n};\nexports.Liquid = Liquid;\nexports.Liquid.props = {};\n//# sourceMappingURL=liquid.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Category20 = exports.Category10 = void 0;\nvar category10_1 = require(\"./category10\");\nObject.defineProperty(exports, \"Category10\", { enumerable: true, get: function () { return category10_1.Category10; } });\nvar category20_1 = require(\"./category20\");\nObject.defineProperty(exports, \"Category20\", { enumerable: true, get: function () { return category20_1.Category20; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Category10 = void 0;\n/**\n * Classic palette of AntV for ordinal data with 10 colors.\n */\nconst Category10 = () => {\n return [\n '#5B8FF9',\n '#5AD8A6',\n '#5D7092',\n '#F6BD16',\n '#6F5EF9',\n '#6DC8EC',\n '#945FB9',\n '#FF9845',\n '#1E9493',\n '#FF99C3',\n ];\n};\nexports.Category10 = Category10;\nexports.Category10.props = {};\n//# sourceMappingURL=category10.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Category20 = void 0;\n/**\n * Classic palette of AntV for ordinal data with 20 colors.\n */\nconst Category20 = () => {\n return [\n '#5B8FF9',\n '#CDDDFD',\n '#5AD8A6',\n '#CDF3E4',\n '#5D7092',\n '#CED4DE',\n '#F6BD16',\n '#FCEBB9',\n '#6F5EF9',\n '#D3CEFD',\n '#6DC8EC',\n '#D3EEF9',\n '#945FB9',\n '#DECFEA',\n '#FF9845',\n '#FFE0C7',\n '#1E9493',\n '#BBDEDE',\n '#FF99C3',\n '#FFE0ED',\n ];\n};\nexports.Category20 = Category20;\nexports.Category20.props = {};\n//# sourceMappingURL=category20.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Constant = exports.Sequential = exports.Sqrt = exports.Quantize = exports.Quantile = exports.Threshold = exports.Pow = exports.Log = exports.Time = exports.Point = exports.Identity = exports.Ordinal = exports.Linear = exports.Band = void 0;\nvar band_1 = require(\"./band\");\nObject.defineProperty(exports, \"Band\", { enumerable: true, get: function () { return band_1.Band; } });\nvar linear_1 = require(\"./linear\");\nObject.defineProperty(exports, \"Linear\", { enumerable: true, get: function () { return linear_1.Linear; } });\nvar ordinal_1 = require(\"./ordinal\");\nObject.defineProperty(exports, \"Ordinal\", { enumerable: true, get: function () { return ordinal_1.Ordinal; } });\nvar identity_1 = require(\"./identity\");\nObject.defineProperty(exports, \"Identity\", { enumerable: true, get: function () { return identity_1.Identity; } });\nvar point_1 = require(\"./point\");\nObject.defineProperty(exports, \"Point\", { enumerable: true, get: function () { return point_1.Point; } });\nvar time_1 = require(\"./time\");\nObject.defineProperty(exports, \"Time\", { enumerable: true, get: function () { return time_1.Time; } });\nvar log_1 = require(\"./log\");\nObject.defineProperty(exports, \"Log\", { enumerable: true, get: function () { return log_1.Log; } });\nvar pow_1 = require(\"./pow\");\nObject.defineProperty(exports, \"Pow\", { enumerable: true, get: function () { return pow_1.Pow; } });\nvar threshold_1 = require(\"./threshold\");\nObject.defineProperty(exports, \"Threshold\", { enumerable: true, get: function () { return threshold_1.Threshold; } });\nvar quantile_1 = require(\"./quantile\");\nObject.defineProperty(exports, \"Quantile\", { enumerable: true, get: function () { return quantile_1.Quantile; } });\nvar quantize_1 = require(\"./quantize\");\nObject.defineProperty(exports, \"Quantize\", { enumerable: true, get: function () { return quantize_1.Quantize; } });\nvar sqrt_1 = require(\"./sqrt\");\nObject.defineProperty(exports, \"Sqrt\", { enumerable: true, get: function () { return sqrt_1.Sqrt; } });\nvar sequential_1 = require(\"./sequential\");\nObject.defineProperty(exports, \"Sequential\", { enumerable: true, get: function () { return sequential_1.Sequential; } });\nvar constant_1 = require(\"./constant\");\nObject.defineProperty(exports, \"Constant\", { enumerable: true, get: function () { return constant_1.Constant; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Band = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Band = (options) => {\n return new scale_1.Band(options);\n};\nexports.Band = Band;\nexports.Band.props = {};\n//# sourceMappingURL=band.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Linear = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Linear = (options) => {\n return new scale_1.Linear(options);\n};\nexports.Linear = Linear;\nexports.Linear.props = {};\n//# sourceMappingURL=linear.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Ordinal = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Ordinal = (options) => {\n return new scale_1.Ordinal(options);\n};\nexports.Ordinal = Ordinal;\nexports.Ordinal.props = {};\n//# sourceMappingURL=ordinal.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Identity = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Identity = (options) => {\n return new scale_1.Identity(options);\n};\nexports.Identity = Identity;\nexports.Identity.props = {};\n//# sourceMappingURL=identity.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Point = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Point = (options) => {\n return new scale_1.Point(options);\n};\nexports.Point = Point;\nexports.Point.props = {};\n//# sourceMappingURL=point.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Time = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Time = (options) => {\n return new scale_1.Time(options);\n};\nexports.Time = Time;\nexports.Time.props = {};\n//# sourceMappingURL=time.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Log = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Log = (options) => {\n return new scale_1.Log(options);\n};\nexports.Log = Log;\nexports.Log.props = {};\n//# sourceMappingURL=log.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pow = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Pow = (options) => {\n return new scale_1.Pow(options);\n};\nexports.Pow = Pow;\nexports.Pow.props = {};\n//# sourceMappingURL=pow.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Threshold = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Threshold = (options) => {\n return new scale_1.Threshold(options);\n};\nexports.Threshold = Threshold;\nexports.Threshold.props = {};\n//# sourceMappingURL=threshold.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quantile = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Quantile = (options) => {\n return new scale_1.Quantile(options);\n};\nexports.Quantile = Quantile;\nexports.Quantile.props = {};\n//# sourceMappingURL=quantile.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quantize = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Quantize = (options) => {\n return new scale_1.Quantize(options);\n};\nexports.Quantize = Quantize;\nexports.Quantize.props = {};\n//# sourceMappingURL=quantize.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sqrt = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Sqrt = (options) => {\n return new scale_1.Sqrt(options);\n};\nexports.Sqrt = Sqrt;\nexports.Sqrt.props = {};\n//# sourceMappingURL=sqrt.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sequential = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Sequential = (options) => {\n return new scale_1.Sequential(options);\n};\nexports.Sequential = Sequential;\nexports.Sequential.props = {};\n//# sourceMappingURL=sequential.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Constant = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst Constant = (options) => {\n return new scale_1.Constant(options);\n};\nexports.Constant = Constant;\nexports.Constant.props = {};\n//# sourceMappingURL=constant.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dark = exports.Light = exports.Academy = exports.ClassicDark = exports.Classic = void 0;\nvar classic_1 = require(\"./classic\");\nObject.defineProperty(exports, \"Classic\", { enumerable: true, get: function () { return classic_1.Classic; } });\nvar classicDark_1 = require(\"./classicDark\");\nObject.defineProperty(exports, \"ClassicDark\", { enumerable: true, get: function () { return classicDark_1.ClassicDark; } });\nvar academy_1 = require(\"./academy\");\nObject.defineProperty(exports, \"Academy\", { enumerable: true, get: function () { return academy_1.Academy; } });\nvar light_1 = require(\"./light\");\nObject.defineProperty(exports, \"Light\", { enumerable: true, get: function () { return light_1.Light; } });\nvar dark_1 = require(\"./dark\");\nObject.defineProperty(exports, \"Dark\", { enumerable: true, get: function () { return dark_1.Dark; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Classic = void 0;\nconst util_1 = require(\"@antv/util\");\nconst light_1 = require(\"./light\");\n/**\n * Default theme.\n */\nconst Classic = (options) => {\n return (0, util_1.deepMix)({}, (0, light_1.Light)(), {\n category10: 'category10',\n category20: 'category20',\n }, options);\n};\nexports.Classic = Classic;\nexports.Classic.props = {};\n//# sourceMappingURL=classic.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Light = exports.tokens = void 0;\nconst util_1 = require(\"@antv/util\");\nconst create_1 = require(\"./create\");\nexports.tokens = {\n colorBlack: '#1D2129',\n colorWhite: '#ffffff',\n colorStroke: '#416180',\n colorDefault: '#1783FF',\n colorBackground: 'transparent',\n category10: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n ],\n category20: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n '#AABA01',\n '#BC7CFC',\n '#237CBC',\n '#2DE379',\n '#CE8032',\n '#FF7AF4',\n '#545FD3',\n '#AFE410',\n '#D8C608',\n '#FFA1E0',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.1,\n};\nconst defaults = (0, create_1.create)(exports.tokens);\n/**\n * Default theme.\n */\nconst Light = (options) => {\n return (0, util_1.deepMix)({}, defaults, options);\n};\nexports.Light = Light;\nexports.Light.props = {};\n//# sourceMappingURL=light.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.create = void 0;\nfunction create({ colorDefault, colorBlack, colorWhite, colorStroke, colorBackground, padding1, padding2, padding3, alpha90, alpha65, alpha45, alpha25, alpha10, category10, category20, sizeDefault = 1, padding = 'auto', margin = 16, }) {\n return {\n padding,\n margin,\n size: sizeDefault,\n color: colorDefault,\n category10,\n category20,\n enter: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n update: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n exit: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n view: {\n viewFill: colorBackground,\n plotFill: 'transparent',\n mainFill: 'transparent',\n contentFill: 'transparent',\n },\n line: {\n line: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 1,\n lineCap: 'round',\n },\n },\n point: {\n point: {\n r: 3,\n fillOpacity: 0.95,\n lineWidth: 0,\n },\n hollow: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 1,\n },\n plus: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 3,\n },\n diamond: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 1,\n },\n },\n interval: {\n rect: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n area: {\n area: {\n fillOpacity: 0.85,\n lineWidth: 0,\n },\n },\n polygon: {\n polygon: {\n fillOpacity: 0.95,\n },\n },\n cell: {\n cell: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n rect: {\n rect: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n link: {\n link: {\n fill: '',\n strokeOpacity: 1,\n },\n },\n vector: {\n vector: {\n fillOpacity: 1,\n },\n },\n box: {\n box: {\n fillOpacity: 0.95,\n stroke: colorBlack,\n lineWidth: 1,\n },\n },\n text: {\n text: {\n fill: '#1D2129',\n fontSize: 12,\n lineWidth: 0,\n connectorStroke: colorStroke,\n connectorStrokeOpacity: 0.45,\n connectorLineWidth: 1,\n backgroundFill: colorStroke,\n backgroundFillOpacity: 0.15,\n backgroundPadding: [2, 4],\n startMarkerSymbol: 'circle',\n startMarkerSize: 4,\n endMarkerSymbol: 'circle',\n endMarkerSize: 4,\n },\n badge: {\n fill: '#1D2129',\n fillOpacity: 0.65,\n lineWidth: 0,\n fontSize: 10,\n textAlign: 'center',\n textBaseline: 'middle',\n markerFill: colorStroke,\n markerFillOpacity: 0.25,\n markerStrokeOpacity: 0,\n },\n },\n lineX: {\n line: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n },\n },\n lineY: {\n line: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n },\n },\n rangeX: {\n range: {\n fill: colorStroke,\n fillOpacity: 0.15,\n lineWidth: 0,\n },\n },\n rangeY: {\n range: {\n fill: colorStroke,\n fillOpacity: 0.15,\n lineWidth: 0,\n },\n },\n connector: {\n connector: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n connectLength1: 12,\n endMarker: true,\n endMarkerSize: 6,\n endMarkerFill: colorStroke,\n endMarkerFillOpacity: 0.95,\n },\n },\n axis: {\n arrow: false,\n gridLineDash: [3, 4],\n gridLineWidth: 0.5,\n gridStroke: colorBlack,\n gridStrokeOpacity: alpha10,\n labelAlign: 'horizontal',\n labelFill: colorBlack,\n labelOpacity: alpha45,\n labelFontSize: 12,\n labelFontWeight: 'normal',\n labelSpacing: padding1,\n line: false,\n lineLineWidth: 0.5,\n lineStroke: colorBlack,\n lineStrokeOpacity: alpha45,\n tickLength: 4,\n tickLineWidth: 1,\n tickStroke: colorBlack,\n tickOpacity: alpha45,\n titleFill: colorBlack,\n titleOpacity: alpha90,\n titleFontSize: 12,\n titleFontWeight: 'normal',\n titleSpacing: 12,\n titleTransformOrigin: 'center',\n lineArrowOffset: 6,\n lineArrowSize: 6,\n },\n axisTop: {\n gridDirection: 'positive',\n labelDirection: 'negative',\n tickDirection: 'negative',\n titlePosition: 'top',\n titleSpacing: 12,\n labelSpacing: 4,\n titleTextBaseline: 'middle',\n },\n axisBottom: {\n gridDirection: 'negative',\n labelDirection: 'positive',\n tickDirection: 'positive',\n titlePosition: 'bottom',\n titleSpacing: 12,\n labelSpacing: 4,\n titleTextBaseline: 'bottom',\n titleTransform: 'translate(0, 8)',\n },\n axisLeft: {\n gridDirection: 'positive',\n labelDirection: 'negative',\n labelSpacing: 4,\n tickDirection: 'negative',\n titlePosition: 'left',\n titleSpacing: 12,\n titleTextBaseline: 'middle',\n titleDirection: 'vertical',\n titleTransform: 'rotate(-90) translate(0, -8)',\n titleTransformOrigin: 'center',\n },\n axisRight: {\n gridDirection: 'negative',\n labelDirection: 'positive',\n labelSpacing: 4,\n tickDirection: 'positive',\n titlePosition: 'right',\n titleSpacing: 12,\n titleTextBaseline: 'top',\n titleDirection: 'vertical',\n titleTransformOrigin: 'center',\n },\n axisLinear: {\n girdClosed: true,\n gridConnect: 'arc',\n gridDirection: 'negative',\n gridType: 'surround',\n titlePosition: 'top',\n titleSpacing: 0,\n },\n axisArc: {\n title: false,\n titlePosition: 'inner',\n line: false,\n tick: true,\n labelSpacing: 4,\n },\n axisRadar: {\n girdClosed: true,\n gridStrokeOpacity: 0.3,\n gridType: 'surround',\n tick: false,\n titlePosition: 'start',\n },\n legendCategory: {\n backgroundFill: 'transparent',\n itemBackgroundFill: 'transparent',\n itemLabelFill: colorBlack,\n itemLabelFillOpacity: alpha90,\n itemLabelFontSize: 12,\n itemLabelFontWeight: 'normal',\n itemMarkerFillOpacity: 1,\n itemMarkerSize: 8,\n itemSpacing: [padding1, padding1],\n itemValueFill: colorBlack,\n itemValueFillOpacity: 0.65,\n itemValueFontSize: 12,\n itemValueFontWeight: 'normal',\n navButtonFill: colorBlack,\n navButtonFillOpacity: 0.65,\n navPageNumFill: colorBlack,\n navPageNumFillOpacity: 0.45,\n navPageNumFontSize: 12,\n padding: 8,\n title: false,\n titleFill: colorBlack,\n titleFillOpacity: 0.65,\n titleFontSize: 12,\n titleFontWeight: 'normal',\n titleSpacing: 4,\n tickStroke: colorBlack,\n tickStrokeOpacity: 0.25,\n rowPadding: padding1,\n colPadding: padding2,\n maxRows: 3,\n maxCols: 3,\n },\n legendContinuous: {\n handleHeight: 12,\n handleLabelFill: colorBlack,\n handleLabelFillOpacity: alpha45,\n handleLabelFontSize: 12,\n handleLabelFontWeight: 'normal',\n handleMarkerFill: colorBlack,\n handleMarkerFillOpacity: 0.6,\n handleMarkerLineWidth: 1,\n handleMarkerStroke: colorBlack,\n handleMarkerStrokeOpacity: 0.25,\n handleWidth: 10,\n labelFill: colorBlack,\n labelFillOpacity: alpha45,\n labelFontSize: 12,\n labelFontWeight: 'normal',\n labelSpacing: 3,\n tick: true,\n tickLength: 12,\n ribbonSize: 12,\n ribbonFill: '#aaa',\n handle: true,\n handleLabel: false,\n handleShape: 'slider',\n handleIconSize: 12 / 1.8,\n indicator: false,\n titleFontSize: 12,\n titleSpacing: 4,\n titleFontWeight: 'normal',\n titleFillOpacity: alpha90,\n tickStroke: colorBlack,\n tickStrokeOpacity: alpha45,\n },\n label: {\n fill: colorBlack,\n fillOpacity: 0.65,\n fontSize: 12,\n fontWeight: 'normal',\n stroke: undefined,\n offset: 12,\n connectorStroke: colorBlack,\n connectorStrokeOpacity: 0.45,\n connectorLineWidth: 1,\n connectorLength: 12,\n connectorLength2: 8,\n connectorDistance: 4,\n },\n innerLabel: {\n fill: colorWhite,\n fontSize: 12,\n fillOpacity: 0.85,\n fontWeight: 'normal',\n stroke: undefined,\n offset: 0,\n },\n htmlLabel: {\n fontSize: 12,\n opacity: 0.65,\n color: colorBlack,\n fontWeight: 'normal',\n },\n slider: {\n trackSize: 16,\n trackFill: colorStroke,\n trackFillOpacity: 1,\n selectionFill: colorDefault,\n selectionFillOpacity: 0.15,\n handleIconSize: 10,\n handleIconFill: '#f7f7f7',\n handleIconFillOpacity: 1,\n handleIconStroke: colorBlack,\n handleIconStrokeOpacity: 0.25,\n handleIconLineWidth: 1,\n handleIconRadius: 2,\n handleLabelFill: colorBlack,\n handleLabelFillOpacity: 0.45,\n handleLabelFontSize: 12,\n handleLabelFontWeight: 'normal',\n },\n scrollbar: {\n padding: [0, 0, 0, 0],\n trackSize: 6,\n isRound: true,\n slidable: true,\n scrollable: true,\n trackFill: '#e5e5e5',\n trackFillOpacity: 0,\n thumbFill: '#000',\n thumbFillOpacity: 0.15,\n thumbHighlightedFillOpacity: 0.2,\n },\n title: {\n spacing: 8,\n titleFill: colorBlack,\n titleFillOpacity: alpha90,\n titleFontSize: 16,\n titleFontWeight: 'bold',\n titleTextBaseline: 'top',\n subtitleFill: colorBlack,\n subtitleFillOpacity: alpha65,\n subtitleFontSize: 12,\n subtitleFontWeight: 'normal',\n subtitleTextBaseline: 'top',\n },\n tooltip: {\n css: {\n '.g2-tooltip': {\n 'font-family': 'sans-serif',\n },\n },\n },\n };\n}\nexports.create = create;\n//# sourceMappingURL=create.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClassicDark = void 0;\nconst dark_1 = require(\"./dark\");\n/**\n * Dark theme.\n */\nconst ClassicDark = (options) => {\n return Object.assign({}, (0, dark_1.Dark)(), {\n category10: 'category10',\n category20: 'category20',\n }, options);\n};\nexports.ClassicDark = ClassicDark;\nexports.ClassicDark.props = {};\n//# sourceMappingURL=classicDark.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dark = exports.tokens = void 0;\nconst util_1 = require(\"@antv/util\");\nconst create_1 = require(\"./create\");\nexports.tokens = {\n colorBlack: '#fff',\n colorWhite: '#000',\n colorStroke: '#416180',\n colorDefault: '#1783FF',\n colorBackground: 'transparent',\n category10: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n ],\n category20: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n '#AABA01',\n '#BC7CFC',\n '#237CBC',\n '#2DE379',\n '#CE8032',\n '#FF7AF4',\n '#545FD3',\n '#AFE410',\n '#D8C608',\n '#FFA1E0',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.25,\n};\nconst defaults = (0, create_1.create)(exports.tokens);\nconst Dark = (options) => {\n return (0, util_1.deepMix)({}, defaults, {\n tooltip: {\n crosshairsStroke: '#fff',\n crosshairsLineWidth: 1,\n crosshairsStrokeOpacity: 0.25,\n css: {\n '.g2-tooltip': {\n background: '#1f1f1f',\n opacity: 0.95,\n },\n '.g2-tooltip-title': {\n color: '#A6A6A6',\n },\n '.g2-tooltip-list-item-name-label': {\n color: '#A6A6A6',\n },\n '.g2-tooltip-list-item-value': {\n color: '#A6A6A6',\n },\n },\n },\n }, options);\n};\nexports.Dark = Dark;\n//# sourceMappingURL=dark.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Academy = exports.tokens = void 0;\nconst util_1 = require(\"@antv/util\");\nconst create_1 = require(\"./create\");\nexports.tokens = {\n colorBlack: '#000',\n colorWhite: '#fff',\n colorStroke: '#888',\n colorDefault: '#4e79a7',\n colorBackground: 'transparent',\n category10: [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n ],\n category20: [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.1,\n};\nconst defaults = (0, create_1.create)(exports.tokens);\nconst Academy = (options) => {\n return (0, util_1.deepMix)({}, defaults, {\n text: { text: { fontSize: 10 } },\n axis: {\n gridLineDash: [0, 0],\n gridLineWidth: 1,\n gridStroke: '#ddd',\n gridStrokeOpacity: 1,\n labelOpacity: 1,\n labelStrokeOpacity: 1,\n labelFontSize: 10,\n line: true,\n lineLineWidth: 1,\n lineStroke: '#888',\n lineStrokeOpacity: 1,\n tickLength: 5,\n tickStrokeOpacity: 1,\n titleOpacity: 1,\n titleStrokeOpacity: 1,\n titleFillOpacity: 1,\n titleFontSize: 11,\n titleFontWeight: 'bold',\n },\n axisLeft: {\n gridFilter: (_, i) => i !== 0,\n },\n axisRight: {\n gridFilter: (_, i) => i !== 0,\n },\n legendCategory: {\n itemLabelFillOpacity: 1,\n itemLabelFontSize: 10,\n itemValueFillOpacity: 1,\n itemValueFontSize: 10,\n titleFillOpacity: 1,\n titleFontSize: 11,\n titleFontWeight: 'bold',\n },\n legendContinuous: {\n handleLabelFontSize: 10,\n labelFillOpacity: 0.45,\n labelFontSize: 10,\n },\n label: {\n fontSize: 10,\n },\n innerLabel: {\n fontSize: 10,\n },\n htmlLabel: {\n fontSize: 10,\n },\n slider: {\n handleLabelFontSize: 10,\n trackFillOpacity: 0.05,\n },\n }, options);\n};\nexports.Academy = Academy;\nexports.Academy.props = {};\n//# sourceMappingURL=academy.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Legends = exports.ScrollbarY = exports.ScrollbarX = exports.SliderY = exports.SliderX = exports.TitleComponent = exports.LegendContinuousSize = exports.LegendContinuousBlockSize = exports.LegendContinuousBlock = exports.LegendContinuous = exports.LegendCategory = exports.AxisRadar = exports.AxisY = exports.AxisX = exports.AxisArc = exports.AxisLinear = void 0;\nvar axis_1 = require(\"./axis\");\nObject.defineProperty(exports, \"AxisLinear\", { enumerable: true, get: function () { return axis_1.LinearAxis; } });\nObject.defineProperty(exports, \"AxisArc\", { enumerable: true, get: function () { return axis_1.ArcAxis; } });\nvar axisX_1 = require(\"./axisX\");\nObject.defineProperty(exports, \"AxisX\", { enumerable: true, get: function () { return axisX_1.AxisX; } });\nvar axisY_1 = require(\"./axisY\");\nObject.defineProperty(exports, \"AxisY\", { enumerable: true, get: function () { return axisY_1.AxisY; } });\nvar axisRadar_1 = require(\"./axisRadar\");\nObject.defineProperty(exports, \"AxisRadar\", { enumerable: true, get: function () { return axisRadar_1.AxisRadar; } });\nvar legendCategory_1 = require(\"./legendCategory\");\nObject.defineProperty(exports, \"LegendCategory\", { enumerable: true, get: function () { return legendCategory_1.LegendCategory; } });\nvar legendContinuous_1 = require(\"./legendContinuous\");\nObject.defineProperty(exports, \"LegendContinuous\", { enumerable: true, get: function () { return legendContinuous_1.LegendContinuous; } });\nvar legendContinuousBlock_1 = require(\"./legendContinuousBlock\");\nObject.defineProperty(exports, \"LegendContinuousBlock\", { enumerable: true, get: function () { return legendContinuousBlock_1.LegendContinuousBlock; } });\nvar legendContinuousBlockSize_1 = require(\"./legendContinuousBlockSize\");\nObject.defineProperty(exports, \"LegendContinuousBlockSize\", { enumerable: true, get: function () { return legendContinuousBlockSize_1.LegendContinuousBlockSize; } });\nvar legendContinuousSize_1 = require(\"./legendContinuousSize\");\nObject.defineProperty(exports, \"LegendContinuousSize\", { enumerable: true, get: function () { return legendContinuousSize_1.LegendContinuousSize; } });\nvar title_1 = require(\"./title\");\nObject.defineProperty(exports, \"TitleComponent\", { enumerable: true, get: function () { return title_1.TitleComponent; } });\nvar sliderX_1 = require(\"./sliderX\");\nObject.defineProperty(exports, \"SliderX\", { enumerable: true, get: function () { return sliderX_1.SliderX; } });\nvar sliderY_1 = require(\"./sliderY\");\nObject.defineProperty(exports, \"SliderY\", { enumerable: true, get: function () { return sliderY_1.SliderY; } });\nvar scrollbarX_1 = require(\"./scrollbarX\");\nObject.defineProperty(exports, \"ScrollbarX\", { enumerable: true, get: function () { return scrollbarX_1.ScrollbarX; } });\nvar scrollbarY_1 = require(\"./scrollbarY\");\nObject.defineProperty(exports, \"ScrollbarY\", { enumerable: true, get: function () { return scrollbarY_1.ScrollbarY; } });\nvar legends_1 = require(\"./legends\");\nObject.defineProperty(exports, \"Legends\", { enumerable: true, get: function () { return legends_1.Legends; } });\n//# sourceMappingURL=index.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ArcAxis = exports.LinearAxis = exports.rotateAxis = void 0;\nconst component_1 = require(\"@antv/component\");\nconst scale_1 = require(\"@antv/scale\");\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst number_1 = require(\"../utils/number\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\nfunction rotateAxis(axis, options) {\n const { eulerAngles, origin } = options;\n if (origin) {\n axis.setOrigin(origin);\n }\n if (eulerAngles) {\n axis.rotate(eulerAngles[0], eulerAngles[1], eulerAngles[2]);\n }\n}\nexports.rotateAxis = rotateAxis;\nfunction sizeOf(coordinate) {\n // @ts-ignore\n const { innerWidth, innerHeight, depth } = coordinate.getOptions();\n return [innerWidth, innerHeight, depth];\n}\nfunction createFisheye(position, coordinate) {\n const { width, height } = coordinate.getOptions();\n return (tick) => {\n if (!(0, coordinate_1.isFisheye)(coordinate))\n return tick;\n const tickPoint = position === 'bottom' ? [tick, 1] : [0, tick];\n const vector = coordinate.map(tickPoint);\n if (position === 'bottom') {\n const v = vector[0];\n const x = new scale_1.Linear({\n domain: [0, width],\n range: [0, 1],\n });\n return x.map(v);\n }\n else if (position === 'left') {\n const v = vector[1];\n const x = new scale_1.Linear({\n domain: [0, height],\n range: [0, 1],\n });\n return x.map(v);\n }\n return tick;\n };\n}\nfunction ticksOf(scale, domain, tickMethod) {\n if (scale.getTicks)\n return scale.getTicks();\n if (!tickMethod)\n return domain;\n const [min, max] = (0, d3_array_1.extent)(domain, (d) => +d);\n const { tickCount } = scale.getOptions();\n return tickMethod(min, max, tickCount);\n}\n// Set inset for axis.\nfunction createInset(position, coordinate) {\n if ((0, coordinate_1.isPolar)(coordinate))\n return (d) => d;\n const options = coordinate.getOptions();\n const { innerWidth, innerHeight, insetTop, insetBottom, insetLeft, insetRight, } = options;\n const [start, end, size] = position === 'left' || position === 'right'\n ? [insetTop, insetBottom, innerHeight]\n : [insetLeft, insetRight, innerWidth];\n const x = new scale_1.Linear({\n domain: [0, 1],\n range: [start / size, 1 - end / size],\n });\n return (i) => x.map(i);\n}\n/**\n * Calc ticks based on scale and coordinate.\n */\nfunction getData(scale, domain, tickCount, defaultTickFormatter, tickFilter, tickMethod, position, coordinate) {\n var _a;\n if (tickCount !== undefined || tickMethod !== undefined) {\n scale.update(Object.assign(Object.assign({}, (tickCount && { tickCount })), (tickMethod && { tickMethod })));\n }\n const ticks = ticksOf(scale, domain, tickMethod);\n const filteredTicks = tickFilter ? ticks.filter(tickFilter) : ticks;\n const toString = (d) => d instanceof Date\n ? String(d)\n : typeof d === 'object' && !!d\n ? d\n : String(d);\n const labelFormatter = defaultTickFormatter || ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || toString;\n const applyInset = createInset(position, coordinate);\n const applyFisheye = createFisheye(position, coordinate);\n const isHorizontal = (position) => ['top', 'bottom', 'center', 'outer'].includes(position);\n const isVertical = (position) => ['left', 'right'].includes(position);\n // @todo GUI should consider the overlap problem for the first\n // and label of arc axis.\n if ((0, coordinate_1.isPolar)(coordinate) || (0, coordinate_1.isTranspose)(coordinate)) {\n return filteredTicks.map((d, i, array) => {\n var _a, _b;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0;\n const tick = applyInset(scale.map(d) + offset);\n const shouldReverse = ((0, coordinate_1.isRadial)(coordinate) && position === 'center') ||\n ((0, coordinate_1.isTranspose)(coordinate) &&\n ((_b = scale.getTicks) === null || _b === void 0 ? void 0 : _b.call(scale)) &&\n isHorizontal(position)) ||\n ((0, coordinate_1.isTranspose)(coordinate) && isVertical(position));\n return {\n value: shouldReverse ? 1 - tick : tick,\n label: toString(labelFormatter((0, number_1.prettyNumber)(d), i, array)),\n id: String(i),\n };\n });\n }\n return filteredTicks.map((d, i, array) => {\n var _a;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0;\n const tick = applyFisheye(applyInset(scale.map(d) + offset));\n const shouldReverse = isVertical(position);\n return {\n value: shouldReverse ? 1 - tick : tick,\n label: toString(labelFormatter((0, number_1.prettyNumber)(d), i, array)),\n id: String(i),\n };\n });\n}\nfunction inferGridLength(position, coordinate, plane = 'xy') {\n const [width, height, depth] = sizeOf(coordinate);\n if (plane === 'xy') {\n if (position.includes('bottom') || position.includes('top'))\n return height;\n return width;\n }\n else if (plane === 'xz') {\n if (position.includes('bottom') || position.includes('top'))\n return depth;\n return width;\n }\n else {\n if (position.includes('bottom') || position.includes('top'))\n return height;\n return depth;\n }\n}\nfunction inferLabelOverlap(transform = [], style) {\n if (transform.length > 0)\n return transform;\n const { labelAutoRotate, labelAutoHide, labelAutoEllipsis, labelAutoWrap } = style;\n const finalTransforms = [];\n const addToTransforms = (overlap, state) => {\n if (state) {\n finalTransforms.push(Object.assign(Object.assign({}, overlap), state));\n }\n };\n addToTransforms({\n type: 'rotate',\n optionalAngles: [0, 15, 30, 45, 60, 90],\n }, labelAutoRotate);\n addToTransforms({ type: 'ellipsis', minLength: 20 }, labelAutoEllipsis);\n addToTransforms({ type: 'hide' }, labelAutoHide);\n addToTransforms({ type: 'wrap', wordWrapWidth: 100, maxLines: 3, recoveryWhenFail: true }, labelAutoWrap);\n return finalTransforms;\n}\nfunction inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate) {\n const { x, y, width, height } = bbox;\n const center = [x + width / 2, y + height / 2];\n const radius = Math.min(width, height) / 2;\n const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate);\n const [w, h] = sizeOf(coordinate);\n const r = Math.min(w, h) / 2;\n const common = {\n center,\n radius,\n startAngle,\n endAngle,\n gridLength: (outerRadius - innerRadius) * r,\n };\n if (position === 'inner') {\n // @ts-ignore\n const { insetLeft, insetTop } = coordinate.getOptions();\n return Object.assign(Object.assign({}, common), { center: [center[0] - insetLeft, center[1] - insetTop], labelAlign: 'perpendicular', labelDirection: 'positive', tickDirection: 'positive', gridDirection: 'negative' });\n }\n // arc outer\n return Object.assign(Object.assign({}, common), { labelAlign: 'parallel', labelDirection: 'negative', tickDirection: 'negative', gridDirection: 'positive' });\n}\nfunction inferGrid(value, coordinate, scale) {\n if ((0, coordinate_1.isTheta)(coordinate) || (0, coordinate_1.isParallel)(coordinate))\n return false;\n // Display axis grid for non-discrete values.\n return value === undefined ? !!scale.getTicks : value;\n}\nfunction infer3DAxisLinearOverrideStyle(coordinate) {\n // @ts-ignore\n const { depth } = coordinate.getOptions();\n return depth\n ? {\n tickIsBillboard: true,\n lineIsBillboard: true,\n labelIsBillboard: true,\n titleIsBillboard: true,\n gridIsBillboard: true,\n }\n : {};\n}\nfunction inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale) {\n const { x, y, width, height } = bbox;\n if (position === 'bottom') {\n return { startPos: [x, y], endPos: [x + width, y] };\n }\n if (position === 'left') {\n return { startPos: [x + width, y + height], endPos: [x + width, y] };\n }\n if (position === 'right') {\n return { startPos: [x, y + height], endPos: [x, y] };\n }\n if (position === 'top') {\n return { startPos: [x, y + height], endPos: [x + width, y + height] };\n }\n // linear axis, maybe in parallel, polar, radial or radar systems.\n if (position === 'center') {\n // axisY\n if (orientation === 'vertical') {\n return {\n startPos: [x, y],\n endPos: [x, y + height],\n };\n }\n // axisX\n else if (orientation === 'horizontal') {\n return {\n startPos: [x, y],\n endPos: [x + width, y],\n };\n }\n // axis with rotate\n else if (typeof orientation === 'number') {\n const [cx, cy] = coordinate.getCenter();\n const [innerRadius, outerRadius] = (0, coordinate_1.radiusOf)(coordinate);\n const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate);\n const r = Math.min(width, height) / 2;\n // @ts-ignore\n const { insetLeft, insetTop } = coordinate.getOptions();\n const innerR = innerRadius * r;\n const outerR = outerRadius * r;\n const [actualCx, actualCy] = [cx + x - insetLeft, cy + y - insetTop];\n const [cos, sin] = [Math.cos(orientation), Math.sin(orientation)];\n const startPos = [\n actualCx + outerR * cos,\n actualCy + outerR * sin,\n ];\n const endPos = [\n actualCx + innerR * cos,\n actualCy + innerR * sin,\n ];\n const getAxisXDomainLength = () => {\n const { domain } = xScale.getOptions();\n return domain.length;\n };\n const controllAngleCount = (0, coordinate_1.isPolar)(coordinate) && xScale ? getAxisXDomainLength() : 3;\n return {\n startPos,\n endPos,\n gridClosed: Math.abs(endAngle - startAngle - 360) < 1e-6,\n gridCenter: [actualCx, actualCy],\n gridControlAngles: new Array(controllAngleCount)\n .fill(0)\n .map((d, i, arr) => ((endAngle - startAngle) / controllAngleCount) * i),\n };\n }\n }\n // position is inner or outer for arc axis won't be here\n return {};\n}\nconst ArcAxisComponent = (options) => {\n const { order, size, position, orientation, labelFormatter, tickFilter, tickCount, tickMethod, important = {}, style = {}, indexBBox, title, grid = false } = options, rest = __rest(options, [\"order\", \"size\", \"position\", \"orientation\", \"labelFormatter\", \"tickFilter\", \"tickCount\", \"tickMethod\", \"important\", \"style\", \"indexBBox\", \"title\", \"grid\"]);\n return ({ scales: [scale], value, coordinate, theme }) => {\n const { bbox } = value;\n const { domain } = scale.getOptions();\n const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate);\n // Bind computed bbox if exists.\n const labels = indexBBox\n ? data.map((d, i) => {\n const bbox = indexBBox.get(i);\n if (!bbox)\n return d;\n // bbox: [label, bbox]\n // Make than indexBBox can match current label.\n if (bbox[0] !== d.label)\n return d;\n return Object.assign(Object.assign({}, d), { bbox: bbox[1] });\n })\n : data;\n const [innerRadius, outerRadius] = (0, coordinate_1.radiusOf)(coordinate);\n const defaultStyle = inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate);\n const { axis: axisTheme, axisArc = {} } = theme;\n const finalStyle = (0, utils_1.adaptor)((0, util_1.deepMix)({}, axisTheme, axisArc, defaultStyle, Object.assign(Object.assign({ type: 'arc', data: labels, titleText: (0, utils_1.titleContent)(title), grid }, rest), important)));\n return new component_1.Axis({\n // @fixme transform is not valid for arcAxis.\n // @ts-ignore\n style: (0, util_1.omit)(finalStyle, ['transform']),\n });\n };\n};\nfunction inferThemeStyle(scale, coordinate, theme, direction, position, orientation) {\n const baseStyle = theme.axis;\n const positionStyle = ['top', 'right', 'bottom', 'left'].includes(position)\n ? theme[`axis${(0, helper_1.capitalizeFirst)(position)}`]\n : theme.axisLinear;\n const channel = scale.getOptions().name;\n const channelStyle = theme[`axis${(0, util_1.upperFirst)(channel)}`] || {};\n return Object.assign({}, baseStyle, positionStyle, channelStyle);\n}\nfunction inferDefaultStyle(scale, coordinate, theme, direction, position, orientation) {\n const themeStyle = inferThemeStyle(scale, coordinate, theme, direction, position, orientation);\n if (position === 'center') {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, themeStyle), { labelDirection: direction === 'right' ? 'negative' : 'positive' }), (direction === 'center'\n ? { labelTransform: 'translate(50%,0)' }\n : null)), { tickDirection: direction === 'right' ? 'negative' : 'positive', labelSpacing: direction === 'center' ? 0 : 4, titleSpacing: (0, utils_1.isVertical)(orientation) ? 10 : 0, tick: direction === 'center' ? false : undefined });\n }\n return themeStyle;\n}\nconst LinearAxisComponent = (options) => {\n const { direction = 'left', important = {}, labelFormatter, order, orientation, actualPosition, position, size, style = {}, title, tickCount, tickFilter, tickMethod, transform, indexBBox } = options, userDefinitions = __rest(options, [\"direction\", \"important\", \"labelFormatter\", \"order\", \"orientation\", \"actualPosition\", \"position\", \"size\", \"style\", \"title\", \"tickCount\", \"tickFilter\", \"tickMethod\", \"transform\", \"indexBBox\"]);\n return ({ scales, value, coordinate, theme }) => {\n const { bbox } = value;\n const [scale] = scales;\n const { domain, xScale } = scale.getOptions();\n const defaultStyle = inferDefaultStyle(scale, coordinate, theme, direction, position, orientation);\n const internalAxisStyle = Object.assign(Object.assign(Object.assign({}, defaultStyle), style), userDefinitions);\n const gridLength = inferGridLength(actualPosition || position, coordinate, options.plane);\n const overrideStyle = inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale);\n const threeDOverrideStyle = infer3DAxisLinearOverrideStyle(coordinate);\n const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate);\n // Bind computed bbox if exists.\n const labels = indexBBox\n ? data.map((d, i) => {\n const bbox = indexBBox.get(i);\n if (!bbox)\n return d;\n // bbox: [label, bbox]\n // Make than indexBBox can match current label.\n if (bbox[0] !== d.label)\n return d;\n return Object.assign(Object.assign({}, d), { bbox: bbox[1] });\n })\n : data;\n const finalAxisStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalAxisStyle), { type: 'linear', data: labels, crossSize: size, titleText: (0, utils_1.titleContent)(title), labelOverlap: inferLabelOverlap(transform, internalAxisStyle), grid: inferGrid(internalAxisStyle.grid, coordinate, scale), gridLength, \n // Always showLine, make title could align the end of axis.\n line: true, indexBBox }), (!internalAxisStyle.line ? { lineOpacity: 0 } : null)), overrideStyle), threeDOverrideStyle), important);\n // For hide overlap, do not set crossSize.\n const hasHide = finalAxisStyle.labelOverlap.find((d) => d.type === 'hide');\n if (hasHide)\n finalAxisStyle.crossSize = false;\n return new component_1.Axis({\n className: 'axis',\n style: (0, utils_1.adaptor)(finalAxisStyle),\n });\n };\n};\nconst axisFactor = (axis) => {\n return (options) => {\n const { labelFormatter: useDefinedLabelFormatter, labelFilter: userDefinedLabelFilter = () => true, } = options;\n return (context) => {\n var _a;\n const { scales: [scale], } = context;\n const ticks = ((_a = scale.getTicks) === null || _a === void 0 ? void 0 : _a.call(scale)) || scale.getOptions().domain;\n const labelFormatter = typeof useDefinedLabelFormatter === 'string'\n ? (0, d3_format_1.format)(useDefinedLabelFormatter)\n : useDefinedLabelFormatter;\n const labelFilter = (datum, index, array) => userDefinedLabelFilter(ticks[index], index, ticks);\n const normalizedOptions = Object.assign(Object.assign({}, options), { labelFormatter,\n labelFilter,\n scale });\n return axis(normalizedOptions)(context);\n };\n };\n};\nexports.LinearAxis = axisFactor(LinearAxisComponent);\nexports.ArcAxis = axisFactor(ArcAxisComponent);\nexports.LinearAxis.props = {\n defaultPosition: 'center',\n defaultSize: 45,\n defaultOrder: 0,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\nexports.ArcAxis.props = {\n defaultPosition: 'outer',\n defaultOrientation: 'vertical',\n defaultSize: 45,\n defaultOrder: 0,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=axis.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.adaptor = exports.domainOf = exports.inferComponentShape = exports.isVertical = exports.isHorizontal = exports.scaleOf = exports.LegendCategoryLayout = exports.G2Layout = exports.inferComponentLayout = exports.titleContent = exports.maybeAppend = exports.createComponent = void 0;\nconst g_1 = require(\"@antv/g\");\nconst component_1 = require(\"@antv/component\");\nconst util_1 = require(\"@antv/util\");\nconst selection_1 = require(\"../utils/selection\");\nfunction createComponent(descriptor) {\n return class extends g_1.CustomElement {\n constructor(config) {\n super(config);\n this.descriptor = descriptor;\n }\n connectedCallback() {\n var _a, _b;\n (_b = (_a = this.descriptor).render) === null || _b === void 0 ? void 0 : _b.call(_a, this.attributes, this);\n }\n update(cfg = {}) {\n var _a, _b;\n this.attr((0, util_1.deepMix)({}, this.attributes, cfg));\n (_b = (_a = this.descriptor).render) === null || _b === void 0 ? void 0 : _b.call(_a, this.attributes, this);\n }\n };\n}\nexports.createComponent = createComponent;\nfunction maybeAppend(parent, selector, node) {\n if (!parent.querySelector(selector)) {\n return (0, selection_1.select)(parent).append(node);\n }\n return (0, selection_1.select)(parent).select(selector);\n}\nexports.maybeAppend = maybeAppend;\nfunction titleContent(field) {\n return Array.isArray(field) ? field.join(', ') : `${field || ''}`;\n}\nexports.titleContent = titleContent;\nfunction inferComponentLayout(position, userDefinitions) {\n const preset = {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'center',\n };\n let { flexDirection, justifyContent, alignItems } = preset;\n const layout = {\n top: ['row', 'flex-start', 'center'],\n bottom: ['row', 'flex-start', 'center'],\n left: ['column', 'flex-start', 'center'],\n right: ['column', 'flex-start', 'center'],\n center: ['column', 'center', 'center'],\n };\n if (position in layout) {\n [flexDirection, justifyContent, alignItems] = layout[position];\n }\n return Object.assign({ display: 'flex', flexDirection,\n justifyContent,\n alignItems }, userDefinitions);\n}\nexports.inferComponentLayout = inferComponentLayout;\nclass G2Layout extends component_1.Layout {\n get child() {\n var _a;\n return (_a = this.children) === null || _a === void 0 ? void 0 : _a[0];\n }\n update(options) {\n var _a;\n this.attr(options);\n const { subOptions } = options;\n (_a = this.child) === null || _a === void 0 ? void 0 : _a.update(subOptions);\n }\n}\nexports.G2Layout = G2Layout;\nclass LegendCategoryLayout extends G2Layout {\n update(options) {\n var _a;\n const { subOptions } = options;\n this.attr(options);\n (_a = this.child) === null || _a === void 0 ? void 0 : _a.update(subOptions);\n }\n}\nexports.LegendCategoryLayout = LegendCategoryLayout;\nfunction scaleOf(scales, type) {\n var _a;\n return (_a = scales.filter((s) => s.getOptions().name === type)) === null || _a === void 0 ? void 0 : _a[0];\n}\nexports.scaleOf = scaleOf;\nfunction isHorizontal(orientation) {\n return orientation === 'horizontal' || orientation === 0;\n}\nexports.isHorizontal = isHorizontal;\nfunction isVertical(orientation) {\n return orientation === 'vertical' || orientation === -Math.PI / 2;\n}\nexports.isVertical = isVertical;\nfunction inferComponentShape(value, options, component) {\n const { bbox } = value;\n const { position = 'top', size: userDefinedSize, length: userDefinedLength, } = options;\n const isHorizontal = ['top', 'bottom', 'center'].includes(position);\n const [bboxSize, bboxLength] = isHorizontal\n ? [bbox.height, bbox.width]\n : [bbox.width, bbox.height];\n const { defaultSize, defaultLength } = component.props;\n const size = userDefinedSize || defaultSize || bboxSize;\n const length = userDefinedLength || defaultLength || bboxLength;\n const orientation = isHorizontal ? 'horizontal' : 'vertical';\n const [width, height] = isHorizontal ? [length, size] : [size, length];\n return {\n orientation,\n width,\n height,\n size,\n length,\n };\n}\nexports.inferComponentShape = inferComponentShape;\nfunction domainOf(scales) {\n // to get a available scale's domain\n return scales\n .find((scale) => scale.getOptions().domain.length > 0)\n .getOptions().domain;\n}\nexports.domainOf = domainOf;\nfunction adaptor(style) {\n const reservedKeys = [\n 'arrow',\n 'crosshairs',\n 'grid',\n 'handle',\n 'handleLabel',\n 'indicator',\n 'label',\n 'line',\n 'tick',\n 'tip',\n 'title',\n 'trunc',\n ];\n // @ts-ignore\n const { style: styles } = style, rest = __rest(style, [\"style\"]);\n const finalStyle = {};\n Object.entries(rest).forEach(([key, value]) => {\n if (reservedKeys.includes(key)) {\n finalStyle[`show${(0, util_1.upperFirst)(key)}`] = value;\n }\n else\n finalStyle[key] = value;\n });\n return Object.assign(Object.assign({}, finalStyle), styles);\n}\nexports.adaptor = adaptor;\n//# sourceMappingURL=utils.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.axisXConfig = exports.AxisX = void 0;\nconst axis_1 = require(\"./axis\");\n/**\n * LinearAxis component bind to x scale.\n */\nconst AxisX = (options) => {\n return (...args) => {\n // empirical value for crossPadding\n const axisX = (0, axis_1.LinearAxis)(Object.assign({}, { crossPadding: 50 }, options))(...args);\n (0, axis_1.rotateAxis)(axisX, options);\n return axisX;\n };\n};\nexports.AxisX = AxisX;\nexports.AxisX.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'bottom' });\nfunction axisXConfig() { }\nexports.axisXConfig = axisXConfig;\n//# sourceMappingURL=axisX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AxisY = void 0;\nconst axis_1 = require(\"./axis\");\n/**\n * LinearAxis component bind to y scale.\n */\nconst AxisY = (options) => {\n return (...args) => {\n const axisY = (0, axis_1.LinearAxis)(Object.assign({}, { crossPadding: 10 }, options))(...args);\n (0, axis_1.rotateAxis)(axisY, options);\n return axisY;\n };\n};\nexports.AxisY = AxisY;\nexports.AxisY.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'left' });\n//# sourceMappingURL=axisY.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AxisRadar = void 0;\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst axis_1 = require(\"./axis\");\nfunction inferTitleTransform(orientation) {\n const internalOrientation = orientation % (Math.PI * 2);\n if (internalOrientation === Math.PI / 2) {\n return { titleTransform: 'translate(0, 50%)' };\n }\n if (internalOrientation > -Math.PI / 2 && internalOrientation < Math.PI / 2) {\n return { titleTransform: 'translate(50%, 0)' };\n }\n if (internalOrientation > Math.PI / 2 &&\n internalOrientation < (Math.PI * 3) / 2) {\n return { titleTransform: 'translate(-50%, 0)' };\n }\n return {};\n}\nfunction inferAxisStyle(options, theme, coordinate, scales) {\n const { radar } = options;\n const [scale] = scales;\n const name = scale.getOptions().name;\n const [startAngle, endAngle] = (0, coordinate_1.angleOf)(coordinate);\n const { axisRadar: radarTheme = {} } = theme;\n return Object.assign(Object.assign({}, radarTheme), { grid: name === 'position', gridConnect: 'line', gridControlAngles: new Array(radar.count).fill(0).map((_, i) => {\n const angle = (endAngle - startAngle) / radar.count;\n return angle * i;\n }) });\n}\nconst AxisRadar = (options) => {\n const { important = {} } = options, restOptions = __rest(options, [\"important\"]);\n return (context) => {\n const { theme, coordinate, scales } = context;\n return (0, axis_1.LinearAxis)(Object.assign(Object.assign(Object.assign({}, restOptions), inferTitleTransform(options.orientation)), { important: Object.assign(Object.assign({}, inferAxisStyle(options, theme, coordinate, scales)), important) }))(context);\n };\n};\nexports.AxisRadar = AxisRadar;\nexports.AxisRadar.props = Object.assign(Object.assign({}, axis_1.LinearAxis.props), { defaultPosition: 'center' });\n//# sourceMappingURL=axisRadar.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendCategory = void 0;\nconst component_1 = require(\"@antv/component\");\nconst util_1 = require(\"@antv/util\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst scale_1 = require(\"@antv/scale\");\nconst marker_1 = require(\"../utils/marker\");\nconst utils_1 = require(\"./utils\");\nfunction inferShape(scales, markState) {\n const shapeScale = (0, utils_1.scaleOf)(scales, 'shape');\n const colorScale = (0, utils_1.scaleOf)(scales, 'color');\n // NOTE!!!\n // scaleOrdinal.map will mute domain.\n const shapeScale1 = shapeScale ? shapeScale.clone() : null;\n // Infer the main shape if multiple marks are used.\n const shapes = [];\n for (const [mark, state] of markState) {\n const namespace = mark.type;\n const domain = (colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain.length) > 0\n ? colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain\n : state.data;\n const shape = domain.map((d, i) => {\n var _a;\n if (shapeScale1)\n return shapeScale1.map(d || 'point');\n return ((_a = mark === null || mark === void 0 ? void 0 : mark.style) === null || _a === void 0 ? void 0 : _a.shape) || state.defaultShape || 'point';\n });\n if (typeof namespace === 'string')\n shapes.push([namespace, shape]);\n }\n if (shapes.length === 0)\n return ['point', ['point']];\n if (shapes.length === 1)\n return shapes[0];\n if (!shapeScale)\n return shapes[0];\n // Evaluate the maximum likelihood of shape\n const { range } = shapeScale.getOptions();\n return shapes\n .map(([namespace, shape]) => {\n let sum = 0;\n for (let i = 0; i < shapes.length; i++) {\n const targetShape = range[i % range.length];\n if (shape[i] === targetShape)\n sum++;\n }\n return [sum / shape.length, [namespace, shape]];\n })\n .sort((a, b) => b[0] - a[0])[0][1];\n}\nfunction inferItemMarker(options, context) {\n const { scales, library, markState } = context;\n const [mark, shapes] = inferShape(scales, markState);\n const { itemMarker, itemMarkerSize: size } = options;\n const create = (name, d) => {\n var _a, _b, _c;\n const marker = ((_c = (_b = (_a = library[`mark.${mark}`]) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.shape[name]) === null || _c === void 0 ? void 0 : _c.props.defaultMarker) || (0, util_1.last)(name.split('.'));\n const radius = typeof size === 'function' ? size(d) : size;\n return () => (0, marker_1.useMarker)(marker, { color: d.color })(0, 0, radius);\n };\n const shapeOf = (i) => `${shapes[i]}`;\n const shapeScale = (0, utils_1.scaleOf)(scales, 'shape');\n if (shapeScale && !itemMarker)\n return (d, i) => create(shapeOf(i), d);\n if (typeof itemMarker === 'function') {\n return (d, i) => {\n // @todo Fix this in GUI.\n // It should pass primitive value rather object.\n const node = itemMarker(d.id, i);\n if (typeof node === 'string')\n return create(node, d);\n return node;\n };\n }\n return (d, i) => create(itemMarker || shapeOf(i), d);\n}\nfunction inferItemMarkerOpacity(scales) {\n const scale = (0, utils_1.scaleOf)(scales, 'opacity');\n if (scale) {\n const { range } = scale.getOptions();\n return (d, i) => range[i];\n }\n return undefined;\n}\nfunction inferItemMarkerSize(scales, defaults) {\n const scale = (0, utils_1.scaleOf)(scales, 'size');\n if (scale instanceof scale_1.Identity)\n return scale.map(NaN) * 2;\n return defaults;\n}\nfunction inferCategoryStyle(options, context) {\n const { labelFormatter = (d) => `${d}` } = options;\n const { scales, theme } = context;\n const defaultSize = theme.legendCategory.itemMarkerSize;\n const itemMarkerSize = inferItemMarkerSize(scales, defaultSize);\n const baseStyle = {\n itemMarker: inferItemMarker(Object.assign(Object.assign({}, options), { itemMarkerSize }), context),\n itemMarkerSize: itemMarkerSize,\n itemMarkerOpacity: inferItemMarkerOpacity(scales),\n };\n const finalLabelFormatter = typeof labelFormatter === 'string'\n ? (0, d3_format_1.format)(labelFormatter)\n : labelFormatter;\n const colorScale = (0, utils_1.scaleOf)(scales, 'color');\n const domain = (0, utils_1.domainOf)(scales);\n const colorOf = colorScale\n ? (d) => colorScale.map(d)\n : () => context.theme.color;\n return Object.assign(Object.assign({}, baseStyle), { data: domain.map((d) => ({\n id: d,\n label: finalLabelFormatter(d),\n color: colorOf(d),\n })) });\n}\nfunction inferLegendShape(value, options, component) {\n const { position } = options;\n if (position === 'center') {\n const { bbox } = value;\n // to be confirm: if position is center, we should use the width and height of user definition.\n const { width, height } = bbox;\n return { width, height };\n }\n const { width, height } = (0, utils_1.inferComponentShape)(value, options, component);\n return { width, height };\n}\nfunction filterEmptyIds(legendStyle) {\n return Object.assign(Object.assign({}, legendStyle), { data: (legendStyle === null || legendStyle === void 0 ? void 0 : legendStyle.data.filter((item) => item.id !== '')) || [] });\n}\n/**\n * Guide Component for ordinal color scale.\n */\nconst LegendCategory = (options) => {\n const { labelFormatter, layout, order, orientation, position, size, title, cols, itemMarker } = options, style = __rest(options, [\"labelFormatter\", \"layout\", \"order\", \"orientation\", \"position\", \"size\", \"title\", \"cols\", \"itemMarker\"]);\n const { gridRow } = style;\n return (context) => {\n const { value, theme } = context;\n const { bbox } = value;\n const { width, height } = inferLegendShape(value, options, exports.LegendCategory);\n const finalLayout = (0, utils_1.inferComponentLayout)(position, layout);\n const legendStyle = Object.assign(Object.assign(Object.assign(Object.assign({ orientation: ['right', 'left', 'center'].includes(position)\n ? 'vertical'\n : 'horizontal', width,\n height, layout: cols !== undefined ? 'grid' : 'flex' }, (cols !== undefined && { gridCol: cols })), (gridRow !== undefined && { gridRow })), { titleText: (0, utils_1.titleContent)(title) }), inferCategoryStyle(options, context));\n const { legendCategory: legendTheme = {} } = theme;\n // Filter out the data items with empty string IDs in the wordCloud's data before generating the legend.\n const categoryStyle = (0, utils_1.adaptor)(Object.assign({}, legendTheme, filterEmptyIds(legendStyle), style));\n const layoutWrapper = new utils_1.LegendCategoryLayout({\n style: Object.assign(Object.assign({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }, finalLayout), { \n // @ts-ignore\n subOptions: categoryStyle }),\n });\n layoutWrapper.appendChild(new component_1.Category({\n className: 'legend-category',\n style: categoryStyle,\n }));\n return layoutWrapper;\n };\n};\nexports.LegendCategory = LegendCategory;\nexports.LegendCategory.props = {\n defaultPosition: 'top',\n defaultOrder: 1,\n defaultSize: 40,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=legendCategory.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendContinuous = void 0;\nconst g_1 = require(\"@antv/g\");\nconst component_1 = require(\"@antv/component\");\nconst scale_1 = require(\"@antv/scale\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst array_1 = require(\"../utils/array\");\nconst utils_1 = require(\"./utils\");\nfunction updateShapeDimensions(shape, finalSize, orientation) {\n shape.size = finalSize;\n if ((0, utils_1.isHorizontal)(orientation)) {\n shape.height = finalSize;\n }\n else {\n shape.width = finalSize;\n }\n return shape;\n}\nfunction inferContinuousShape(value, options, component) {\n const { size } = options;\n const shape = (0, utils_1.inferComponentShape)(value, options, component);\n return updateShapeDimensions(shape, size, shape.orientation);\n}\nfunction getFormatter(max) {\n return (value) => ({\n value: value / max,\n label: String(value),\n });\n}\nfunction getQuantizeOrQuantileConfig(shape, colorScale, min, max, range) {\n const thresholds = colorScale.thresholds;\n const formatter = getFormatter(max);\n return Object.assign(Object.assign({}, shape), { color: range, data: [min, ...thresholds, max].map(formatter) });\n}\nfunction getThresholdConfig(shape, colorScale, range) {\n const thresholds = colorScale.thresholds;\n const data = [-Infinity, ...thresholds, Infinity].map((value, index) => ({\n value: index,\n label: value,\n }));\n return Object.assign(Object.assign({}, shape), { data, color: range, labelFilter: (datum, index) => {\n return index > 0 && index < data.length - 1;\n } });\n}\nfunction rangeOf(scale) {\n const { domain } = scale.getOptions();\n const [min, max] = [domain[0], (0, array_1.lastOf)(domain)];\n return [min, max];\n}\n/**\n * if color scale is not defined, create a constant color scale based on default color\n * @param scale\n * @param theme\n */\nfunction createColorScale(scale, defaultColor) {\n const options = scale.getOptions();\n const newScale = scale.clone();\n newScale.update(Object.assign(Object.assign({}, options), { range: [(0, g_1.parseColor)(defaultColor).toString()] }));\n return newScale;\n}\nfunction getLinearConfig(shape, colorScale, sizeScale, opacityScale, scales, theme) {\n const { length } = shape;\n const definedScale = sizeScale || opacityScale;\n // Only use defaultColor when there is no color scale\n // in this view.\n const defaultColor = scales.color\n ? theme.legendContinuous.ribbonFill || 'black'\n : theme.color;\n const scale = colorScale || createColorScale(definedScale, defaultColor);\n const [min, max] = rangeOf(scale);\n const [domainMin, domainMax] = rangeOf([colorScale, sizeScale, opacityScale]\n .filter((d) => d !== undefined)\n .find((d) => !(d instanceof scale_1.Constant)));\n return Object.assign(Object.assign({}, shape), { domain: [domainMin, domainMax], data: scale.getTicks().map((value) => ({ value })), color: new Array(Math.floor(length)).fill(0).map((d, i) => {\n const value = ((max - min) / (length - 1)) * i + min;\n const color = scale.map(value) || defaultColor;\n const opacity = opacityScale ? opacityScale.map(value) : 1;\n return color.replace(/rgb[a]*\\(([\\d]{1,3}) *, *([\\d]{1,3}) *, *([\\d]{1,3})[\\S\\s]*\\)/, (match, p1, p2, p3) => `rgba(${p1}, ${p2}, ${p3}, ${opacity})`);\n }) });\n}\nfunction inferContinuousConfig(scales, scale, value, options, component, theme) {\n const colorScale = (0, utils_1.scaleOf)(scales, 'color');\n const shape = inferContinuousShape(value, options, component);\n if (colorScale instanceof scale_1.Threshold) {\n const { range } = colorScale.getOptions();\n const [min, max] = rangeOf(colorScale);\n // for quantize, quantile scale\n if (colorScale instanceof scale_1.Quantize || colorScale instanceof scale_1.Quantile) {\n return getQuantizeOrQuantileConfig(shape, colorScale, min, max, range);\n }\n // for threshold\n return getThresholdConfig(shape, colorScale, range);\n }\n // for linear, pow, sqrt, log, time, utc scale\n const sizeScale = (0, utils_1.scaleOf)(scales, 'size');\n const opacityScale = (0, utils_1.scaleOf)(scales, 'opacity');\n return getLinearConfig(shape, colorScale, sizeScale, opacityScale, scale, theme);\n}\n/**\n * Guide Component for continuous color scale.\n * @todo Custom style.\n */\nconst LegendContinuous = (options) => {\n const { labelFormatter, layout, order, orientation, position, size, title, style, crossPadding, padding } = options, rest = __rest(options, [\"labelFormatter\", \"layout\", \"order\", \"orientation\", \"position\", \"size\", \"title\", \"style\", \"crossPadding\", \"padding\"]);\n return ({ scales, value, theme, scale }) => {\n const { bbox } = value;\n const { x, y, width, height } = bbox;\n const finalLayout = (0, utils_1.inferComponentLayout)(position, layout);\n const { legendContinuous: legendTheme = {} } = theme;\n const finalStyle = (0, utils_1.adaptor)(Object.assign({}, legendTheme, Object.assign(Object.assign({ titleText: (0, utils_1.titleContent)(title), labelAlign: 'value', labelFormatter: typeof labelFormatter === 'string'\n ? (d) => (0, d3_format_1.format)(labelFormatter)(d.label)\n : labelFormatter }, inferContinuousConfig(scales, scale, value, options, exports.LegendContinuous, theme)), style), rest));\n const layoutWrapper = new utils_1.G2Layout({\n style: Object.assign(Object.assign({ x,\n y,\n width,\n height }, finalLayout), { \n // @ts-ignore\n subOptions: finalStyle }),\n });\n layoutWrapper.appendChild(new component_1.Continuous({\n className: 'legend-continuous',\n style: finalStyle,\n }));\n return layoutWrapper;\n };\n};\nexports.LegendContinuous = LegendContinuous;\nexports.LegendContinuous.props = {\n defaultPosition: 'top',\n defaultOrientation: 'vertical',\n defaultOrder: 1,\n defaultSize: 60,\n defaultLength: 200,\n defaultLegendSize: 60,\n defaultPadding: [20, 10],\n defaultCrossPadding: [12, 12], // [horizontal, vertical]\n};\n//# sourceMappingURL=legendContinuous.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendContinuousBlock = void 0;\nconst legendContinuous_1 = require(\"./legendContinuous\");\nconst LegendContinuousBlock = (options) => {\n return (...args) => (0, legendContinuous_1.LegendContinuous)(Object.assign({}, { block: true }, options))(...args);\n};\nexports.LegendContinuousBlock = LegendContinuousBlock;\nexports.LegendContinuousBlock.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousBlock.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendContinuousBlockSize = void 0;\nconst legendContinuous_1 = require(\"./legendContinuous\");\nconst legendContinuousSize_1 = require(\"./legendContinuousSize\");\nconst LegendContinuousBlockSize = (options) => {\n return (0, legendContinuousSize_1.LegendContinuousSize)(Object.assign({}, { block: true }, options));\n};\nexports.LegendContinuousBlockSize = LegendContinuousBlockSize;\nexports.LegendContinuousBlockSize.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousBlockSize.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendContinuousSize = void 0;\nconst utils_1 = require(\"./utils\");\nconst legendContinuous_1 = require(\"./legendContinuous\");\nconst LegendContinuousSize = (options) => {\n return (context) => {\n const { scales } = context;\n const sizeScale = (0, utils_1.scaleOf)(scales, 'size');\n return (0, legendContinuous_1.LegendContinuous)(Object.assign({}, {\n type: 'size',\n data: sizeScale.getTicks().map((value, index) => ({\n value,\n label: String(value),\n })),\n }, options))(context);\n };\n};\nexports.LegendContinuousSize = LegendContinuousSize;\nexports.LegendContinuousSize.props = Object.assign(Object.assign({}, legendContinuous_1.LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousSize.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TitleComponent = void 0;\nconst util_1 = require(\"@antv/util\");\nconst utils_1 = require(\"../shape/utils\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_2 = require(\"./utils\");\nfunction inferStyleByAlign(x, y, width, align) {\n switch (align) {\n case 'center':\n return {\n x: x + width / 2,\n y,\n textAlign: 'middle',\n };\n case 'right':\n return {\n x: x + width,\n y,\n textAlign: 'right',\n };\n default:\n return {\n x,\n y,\n textAlign: 'left',\n };\n }\n}\nconst Title = (0, utils_2.createComponent)({\n render(attributes, container) {\n const { width, title, subtitle, spacing = 2, align = 'left', x, y } = attributes, style = __rest(attributes, [\"width\", \"title\", \"subtitle\", \"spacing\", \"align\", \"x\", \"y\"]);\n container.style.transform = `translate(${x}, ${y})`;\n const titleStyle = (0, helper_1.subObject)(style, 'title');\n const subtitleStyle = (0, helper_1.subObject)(style, 'subtitle');\n const mainTitle = (0, utils_2.maybeAppend)(container, '.title', 'text')\n .attr('className', 'title')\n .call(utils_1.applyStyle, Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, 0, width, align)), { fontSize: 14, textBaseline: 'top', text: title }), titleStyle))\n .node();\n const bounds = mainTitle.getLocalBounds();\n (0, utils_2.maybeAppend)(container, '.sub-title', 'text')\n .attr('className', 'sub-title')\n .call((selection) => {\n if (!subtitle)\n return selection.node().remove();\n selection.node().attr(Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, bounds.max[1] + spacing, width, align)), { fontSize: 12, textBaseline: 'top', text: subtitle }), subtitleStyle));\n });\n },\n});\n/**\n * Title Component.\n */\nconst TitleComponent = (options) => {\n return ({ value, theme }) => {\n const { x, y, width, height } = value.bbox;\n return new Title({\n style: (0, util_1.deepMix)({}, theme.title, Object.assign({ x,\n y,\n width,\n height }, options)),\n });\n };\n};\nexports.TitleComponent = TitleComponent;\nexports.TitleComponent.props = {\n defaultPosition: 'top',\n defaultOrder: 2,\n defaultSize: 36,\n defaultCrossPadding: [20, 20],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=title.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SliderX = void 0;\nconst slider_1 = require(\"./slider\");\n/**\n * SliderX component.\n */\nconst SliderX = (options) => {\n return (0, slider_1.Slider)(Object.assign(Object.assign({}, options), { orientation: 'horizontal' }));\n};\nexports.SliderX = SliderX;\nexports.SliderX.props = Object.assign(Object.assign({}, slider_1.Slider.props), { defaultPosition: 'bottom' });\n//# sourceMappingURL=sliderX.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Slider = void 0;\nconst component_1 = require(\"@antv/component\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst util_1 = require(\"@antv/util\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst scale_1 = require(\"../utils/scale\");\nfunction inferPosition(bbox, position, trackSize) {\n const { x, y, width, height } = bbox;\n if (position === 'left')\n return [x + width - trackSize, y];\n if (position === 'right')\n return [x, y];\n if (position === 'bottom')\n return [x, y];\n if (position === 'top')\n return [x, y + height - trackSize];\n}\n/**\n * Slider component.\n */\nconst Slider = (options) => {\n // do not pass size.\n const { orientation, labelFormatter, size, style = {}, position } = options, rest = __rest(options, [\"orientation\", \"labelFormatter\", \"size\", \"style\", \"position\"]);\n return (context) => {\n var _a;\n const { scales: [scale], value, theme, coordinate, } = context;\n const { bbox } = value;\n const { width, height } = bbox;\n const { slider: sliderTheme = {} } = theme;\n const defaultFormatter = ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || ((v) => v + '');\n const formatter = typeof labelFormatter === 'string'\n ? (0, d3_format_1.format)(labelFormatter)\n : labelFormatter;\n const isHorizontal = orientation === 'horizontal';\n const reverse = (0, coordinate_1.isTranspose)(coordinate) && isHorizontal;\n const { trackSize = sliderTheme.trackSize } = style;\n const [x0, y0] = inferPosition(bbox, position, trackSize);\n return new component_1.Slider({\n className: 'slider',\n style: Object.assign({}, sliderTheme, Object.assign(Object.assign({ x: x0, y: y0, trackLength: isHorizontal ? width : height, orientation, formatter: (v) => {\n const f = formatter || defaultFormatter;\n const v1 = reverse ? 1 - v : v;\n const tick = (0, scale_1.invert)(scale, v1, true);\n return f(tick);\n }, sparklineData: inferSparklineData(options, context) }, style), rest)),\n });\n };\n};\nexports.Slider = Slider;\nfunction markValue(markState, channels) {\n const [value] = Array.from(markState.entries())\n .filter(([mark]) => mark.type === 'line' || mark.type === 'area')\n .filter(([mark]) => mark.slider)\n .map(([mark]) => {\n const { encode, slider } = mark;\n if (slider === null || slider === void 0 ? void 0 : slider.x) {\n const channel = (name) => {\n const channel = encode[name];\n return [name, channel ? channel.value : undefined];\n };\n return Object.fromEntries(channels.map(channel));\n }\n });\n if (!(value === null || value === void 0 ? void 0 : value.series))\n return value === null || value === void 0 ? void 0 : value.y;\n const result = value.series.reduce((acc, curr, index) => {\n acc[curr] = acc[curr] || [];\n acc[curr].push(value.y[index]);\n return acc;\n }, {});\n return Object.values(result);\n}\nfunction inferSparklineData(options, context) {\n const { markState } = context;\n if ((0, util_1.isArray)(options.sparklineData))\n return options.sparklineData;\n return markValue(markState, ['y', 'series']);\n}\nexports.Slider.props = {\n defaultPosition: 'bottom',\n defaultSize: 24,\n defaultOrder: 1,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=slider.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pixelsOf = exports.abstractOf = exports.selectionOf = exports.domainOf = exports.invert = exports.isOrdinalScale = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nfunction constrain(x, lo, hi) {\n return Math.min(hi, Math.max(lo, x));\n}\nfunction isOrdinalScale(scale) {\n return !!scale.getBandWidth;\n}\nexports.isOrdinalScale = isOrdinalScale;\nfunction invert(scale, x, start) {\n if (!isOrdinalScale(scale))\n return scale.invert(x);\n const { adjustedRange } = scale;\n const { domain } = scale.getOptions();\n const offset = start ? -1 : 0;\n const step = scale.getStep();\n const range = start ? adjustedRange : adjustedRange.map((d) => d + step);\n // R[i0 - 1] < x <= R[i0]\n const i0 = (0, d3_array_1.bisectLeft)(range, x);\n const i1 = constrain(i0 + offset, 0, domain.length - 1);\n return domain[i1];\n}\nexports.invert = invert;\nfunction domainOf(scale, values, ratioX) {\n if (!values)\n return scale.getOptions().domain;\n if (!isOrdinalScale(scale)) {\n const sortedDomain = (0, d3_array_1.sort)(values);\n if (!ratioX)\n return sortedDomain;\n const [d] = sortedDomain;\n const { range } = scale.getOptions();\n const [r0, r1] = range;\n const v = r0 > r1 ? -1 : 1;\n const d1 = scale.invert(scale.map(d) + v * ratioX);\n return [d, d1];\n }\n const { domain } = scale.getOptions();\n const v1 = values[0];\n const start = domain.indexOf(v1);\n if (ratioX) {\n const end = start + Math.round(domain.length * ratioX);\n return domain.slice(start, end);\n }\n const v2 = values[values.length - 1];\n const end = domain.indexOf(v2);\n return domain.slice(start, end + 1);\n}\nexports.domainOf = domainOf;\nfunction selectionOf(x, y, x1, y1, scale, coordinate) {\n const { x: scaleX, y: scaleY } = scale;\n const abstractDomain = (point, start) => {\n const [x, y] = coordinate.invert(point);\n return [invert(scaleX, x, start), invert(scaleY, y, start)];\n };\n const p0 = abstractDomain([x, y], true);\n const p1 = abstractDomain([x1, y1], false);\n const domainX = domainOf(scaleX, [p0[0], p1[0]]);\n const domainY = domainOf(scaleY, [p0[1], p1[1]]);\n return [domainX, domainY];\n}\nexports.selectionOf = selectionOf;\nfunction abstractOf(domain, scale) {\n const [d0, d1] = domain;\n const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0);\n return [scale.map(d0), scale.map(d1) + maybeStep(scale)];\n}\nexports.abstractOf = abstractOf;\nfunction pixelsOf(selection, scale, coordinate) {\n const { x: scaleX, y: scaleY } = scale;\n const [X, Y] = selection;\n const AX = abstractOf(X, scaleX);\n const AY = abstractOf(Y, scaleY);\n const p0 = [AX[0], AY[0]];\n const p1 = [AX[1], AY[1]];\n const [x, y] = coordinate.map(p0);\n const [x1, y1] = coordinate.map(p1);\n return [x, y, x1, y1];\n}\nexports.pixelsOf = pixelsOf;\n//# sourceMappingURL=scale.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SliderY = void 0;\nconst slider_1 = require(\"./slider\");\n/**\n * SliderY component.\n */\nconst SliderY = (options) => {\n return (0, slider_1.Slider)(Object.assign(Object.assign({}, options), { orientation: 'vertical' }));\n};\nexports.SliderY = SliderY;\nexports.SliderY.props = Object.assign(Object.assign({}, slider_1.Slider.props), { defaultPosition: 'left' });\n//# sourceMappingURL=sliderY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScrollbarX = void 0;\nconst scrollbar_1 = require(\"./scrollbar\");\n/**\n * ScrollbarX component.\n */\nconst ScrollbarX = (options) => {\n return (0, scrollbar_1.Scrollbar)(Object.assign(Object.assign({}, options), { orientation: 'horizontal' }));\n};\nexports.ScrollbarX = ScrollbarX;\nexports.ScrollbarX.props = Object.assign(Object.assign({}, scrollbar_1.Scrollbar.props), { defaultPosition: 'bottom' });\n//# sourceMappingURL=scrollbarX.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scrollbar = void 0;\nconst component_1 = require(\"@antv/component\");\n/**\n * Scrollbar component.\n */\nconst Scrollbar = (options) => {\n const { orientation, labelFormatter, style } = options, rest = __rest(options, [\"orientation\", \"labelFormatter\", \"style\"]);\n return ({ scales: [scale], value, theme }) => {\n const { bbox } = value;\n const { x, y, width, height } = bbox;\n const { scrollbar: scrollbarTheme = {} } = theme;\n const { ratio, range } = scale.getOptions();\n const mainSize = orientation === 'horizontal' ? width : height;\n const actualSize = mainSize / ratio;\n const [r0, r1] = range;\n const value1 = r1 > r0 ? 0 : 1;\n return new component_1.Scrollbar({\n className: 'g2-scrollbar',\n style: Object.assign({}, scrollbarTheme, Object.assign(Object.assign(Object.assign(Object.assign({}, style), { x,\n y, trackLength: mainSize, value: value1 }), rest), { orientation, contentLength: actualSize, viewportLength: mainSize })),\n });\n };\n};\nexports.Scrollbar = Scrollbar;\nexports.Scrollbar.props = {\n defaultPosition: 'bottom',\n defaultSize: 24,\n defaultOrder: 1,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=scrollbar.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScrollbarY = void 0;\nconst scrollbar_1 = require(\"./scrollbar\");\n/**\n * ScrollbarY component.\n */\nconst ScrollbarY = (options) => {\n return (0, scrollbar_1.Scrollbar)(Object.assign(Object.assign({}, options), { orientation: 'vertical' }));\n};\nexports.ScrollbarY = ScrollbarY;\nexports.ScrollbarY.props = Object.assign(Object.assign({}, scrollbar_1.Scrollbar.props), { defaultPosition: 'left' });\n//# sourceMappingURL=scrollbarY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Legends = void 0;\nconst g_1 = require(\"@antv/g\");\n// A empty component to pass parse view tree stage.\nconst Legends = (options) => {\n return () => {\n return new g_1.Group();\n };\n};\nexports.Legends = Legends;\nexports.Legends.props = {};\n//# sourceMappingURL=legends.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GrowInY = exports.GrowInX = exports.PathIn = exports.ZoomOut = exports.ZoomIn = exports.WaveIn = exports.Morphing = exports.FadeOut = exports.FadeIn = exports.ScaleOutY = exports.ScaleInY = exports.ScaleOutX = exports.ScaleInX = void 0;\nvar scaleInX_1 = require(\"./scaleInX\");\nObject.defineProperty(exports, \"ScaleInX\", { enumerable: true, get: function () { return scaleInX_1.ScaleInX; } });\nvar scaleOutX_1 = require(\"./scaleOutX\");\nObject.defineProperty(exports, \"ScaleOutX\", { enumerable: true, get: function () { return scaleOutX_1.ScaleOutX; } });\nvar scaleInY_1 = require(\"./scaleInY\");\nObject.defineProperty(exports, \"ScaleInY\", { enumerable: true, get: function () { return scaleInY_1.ScaleInY; } });\nvar scaleOutY_1 = require(\"./scaleOutY\");\nObject.defineProperty(exports, \"ScaleOutY\", { enumerable: true, get: function () { return scaleOutY_1.ScaleOutY; } });\nvar fadeIn_1 = require(\"./fadeIn\");\nObject.defineProperty(exports, \"FadeIn\", { enumerable: true, get: function () { return fadeIn_1.FadeIn; } });\nvar fadeOut_1 = require(\"./fadeOut\");\nObject.defineProperty(exports, \"FadeOut\", { enumerable: true, get: function () { return fadeOut_1.FadeOut; } });\nvar morphing_1 = require(\"./morphing\");\nObject.defineProperty(exports, \"Morphing\", { enumerable: true, get: function () { return morphing_1.Morphing; } });\nvar waveIn_1 = require(\"./waveIn\");\nObject.defineProperty(exports, \"WaveIn\", { enumerable: true, get: function () { return waveIn_1.WaveIn; } });\nvar zoomIn_1 = require(\"./zoomIn\");\nObject.defineProperty(exports, \"ZoomIn\", { enumerable: true, get: function () { return zoomIn_1.ZoomIn; } });\nvar zoomOut_1 = require(\"./zoomOut\");\nObject.defineProperty(exports, \"ZoomOut\", { enumerable: true, get: function () { return zoomOut_1.ZoomOut; } });\nvar pathIn_1 = require(\"./pathIn\");\nObject.defineProperty(exports, \"PathIn\", { enumerable: true, get: function () { return pathIn_1.PathIn; } });\nvar growInX_1 = require(\"./growInX\");\nObject.defineProperty(exports, \"GrowInX\", { enumerable: true, get: function () { return growInX_1.GrowInX; } });\nvar growInY_1 = require(\"./growInY\");\nObject.defineProperty(exports, \"GrowInY\", { enumerable: true, get: function () { return growInY_1.GrowInY; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleInX = void 0;\nconst coordinate_1 = require(\"../utils/coordinate\");\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nconst ScaleInX = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate)\n ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner\n : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\nexports.ScaleInX = ScaleInX;\n//# sourceMappingURL=scaleInX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleOutX = void 0;\nconst coordinate_1 = require(\"../utils/coordinate\");\n/**\n * Scale mark from desired shape to nothing in x direction.\n */\nconst ScaleOutX = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate)\n ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner\n : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\nexports.ScaleOutX = ScaleOutX;\n//# sourceMappingURL=scaleOutX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleInY = void 0;\nconst g_1 = require(\"@antv/g\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst utils_1 = require(\"../shape/utils\");\n/**\n * Scale mark from nothing to desired shape in y direction.\n */\nconst ScaleInY = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n // the polar coordinate need\n g_1.CSS.registerProperty({\n name: 'scaleInYRadius',\n inherits: false,\n initialValue: '',\n interpolable: true,\n syntax: g_1.PropertySyntax.NUMBER,\n });\n return (from, _, defaults) => {\n const [shape] = from;\n const PolarScaleInY = (shape) => {\n const { __data__, style } = shape;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = style;\n const { points, y, y1 } = __data__;\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]);\n const { innerRadius, outerRadius } = arcObject;\n const keyframes = [\n {\n scaleInYRadius: innerRadius + ZERO,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n scaleInYRadius: innerRadius + ZERO,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n scaleInYRadius: outerRadius,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n const RectangularScaleInY = (shape) => {\n const { style } = shape;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style;\n const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate)\n ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner\n : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n if ((0, coordinate_1.isPolar)(coordinate)) {\n return PolarScaleInY(shape);\n }\n else {\n return RectangularScaleInY(shape);\n }\n };\n};\nexports.ScaleInY = ScaleInY;\n//# sourceMappingURL=scaleInY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleOutY = void 0;\nconst coordinate_1 = require(\"../utils/coordinate\");\n/**\n * Scale mark from desired shape to nothing in y direction.\n */\nconst ScaleOutY = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = (0, coordinate_1.isTranspose)(coordinate)\n ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner\n : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\nexports.ScaleOutY = ScaleOutY;\n//# sourceMappingURL=scaleOutY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FadeIn = void 0;\n/**\n * Transform mark from transparent to solid.\n */\nconst FadeIn = (options) => {\n return (from, _, defaults) => {\n const [shape] = from;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style;\n const keyframes = [\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nexports.FadeIn = FadeIn;\nexports.FadeIn.props = {};\n//# sourceMappingURL=fadeIn.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FadeOut = void 0;\n/**\n * Transform mark from solid to transparent.\n */\nconst FadeOut = (options) => {\n return (from, _, defaults) => {\n const [shape] = from;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style;\n const keyframes = [\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nexports.FadeOut = FadeOut;\nexports.FadeOut.props = {};\n//# sourceMappingURL=fadeOut.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Morphing = void 0;\nconst g_1 = require(\"@antv/g\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\nfunction localBBoxOf(shape) {\n const { min, max } = shape.getLocalBounds();\n const [x0, y0] = min;\n const [x1, y1] = max;\n const height = y1 - y0;\n const width = x1 - x0;\n return [x0, y0, width, height];\n}\nfunction d(bbox) {\n const [x, y, width, height] = bbox;\n return `\n M ${x} ${y}\n L ${x + width} ${y}\n L ${x + width} ${y + height}\n L ${x} ${y + height}\n Z\n `;\n}\nfunction pack(shape, count) {\n const [x0, y0, width, height] = localBBoxOf(shape);\n const aspect = height / width;\n const col = Math.ceil(Math.sqrt(count / aspect));\n const row = Math.ceil(count / col);\n const B = [];\n const h = height / row;\n let j = 0;\n let n = count;\n while (n > 0) {\n const c = Math.min(n, col);\n const w = width / c;\n for (let i = 0; i < c; i++) {\n const x = x0 + i * w;\n const y = y0 + j * h;\n B.push(d([x, y, w, h]));\n }\n n -= c;\n j += 1;\n }\n return B;\n}\nfunction normalizeSplit(split = 'pack') {\n if (typeof split == 'function')\n return split;\n return pack;\n}\n/**\n * Use attributes relative to geometry to do shape to shape animation.\n *\n * For example, the x, y, width, height of `Rect`, the cx, cy, r of `Circle`.\n * And for `Group`, it will use the bbox of the group.\n */\nfunction shapeToShape(from, to, timeEffect) {\n let { transform: fromTransform } = from.style;\n const { transform: toTransform } = to.style;\n // Replace first to get right bbox after mounting.\n replaceChild(to, from);\n let keys = utils_1.attributeKeys;\n if (from.nodeName === g_1.Shape.GROUP) {\n // Apply translate and scale transform.\n const [x0, y0, w0, h0] = localBBoxOf(from);\n const [x1, y1, w1, h1] = localBBoxOf(to);\n const dx = x0 - x1;\n const dy = y0 - y1;\n const sx = w0 / w1;\n const sy = h0 / h1;\n fromTransform = `translate(${dx}, ${dy}) scale(${sx}, ${sy})`;\n }\n else {\n keys = keys.concat(utils_1.GEOMETRY_ATTRIBUTES[from.nodeName] || []);\n }\n const keyframes = [\n Object.assign({ transform: fromTransform !== null && fromTransform !== void 0 ? fromTransform : 'none' }, (0, utils_1.attributeOf)(from, keys, true)),\n Object.assign({ transform: toTransform !== null && toTransform !== void 0 ? toTransform : 'none' }, (0, utils_1.attributeOf)(to, keys, true)),\n ];\n const animation = to.animate(keyframes, timeEffect);\n return animation;\n}\n/**\n * Replace object and copy className and __data__\n */\nfunction replaceChild(newChild, oldChild) {\n newChild['__data__'] = oldChild['__data__'];\n newChild.className = oldChild.className;\n // @ts-ignore\n newChild.markType = oldChild.markType;\n oldChild.parentNode.replaceChild(newChild, oldChild);\n}\n/**\n * Replace element with a path shape.\n */\nfunction maybePath(node, d) {\n const { nodeName } = node;\n if (nodeName === 'path')\n return node;\n const path = new g_1.Path({\n style: Object.assign(Object.assign({}, (0, utils_1.attributeOf)(node, utils_1.attributeKeys)), { d }),\n });\n replaceChild(path, node);\n return path;\n}\nfunction hasUniqueString(search, pattern) {\n const first = search.indexOf(pattern);\n const last = search.lastIndexOf(pattern);\n return first === last;\n}\n// Path definition with multiple m and M command has sub path.\n// eg. 'M10,10...M20,20', 'm10,10...m20,20'\nfunction hasSubPath(path) {\n return !hasUniqueString(path, 'm') || !hasUniqueString(path, 'M');\n}\nfunction shape2path(shape) {\n const path = (0, g_1.convertToPath)(shape);\n if (!path)\n return;\n // Path definition with sub path can't do path morphing animation,\n // so skip this kind of path.\n if (hasSubPath(path))\n return;\n return path;\n}\n// Check if the path has a markerEnd | markerStart\nfunction hasMarker(shape) {\n const { nodeName } = shape;\n if (nodeName === 'path') {\n const attributes = (0, util_1.get)(shape, 'attributes');\n return attributes.markerEnd || attributes.markerStart;\n }\n return false;\n}\nfunction oneToOne(shape, from, to, timeEffect) {\n // If the nodeTypes of from and to are equal,\n // or non of them can convert to path,\n // the apply shape to shape animation.\n const { nodeName: fromName } = from;\n const { nodeName: toName } = to;\n const fromPath = shape2path(from);\n const toPath = shape2path(to);\n const isSameNodes = fromName === toName && fromName !== 'path';\n const hasNonPathNode = fromPath === undefined || toPath === undefined;\n // Path with mark can not use animate like ordinary path.\n const isPathWithMarker = hasMarker(from) || hasMarker(to);\n if (isSameNodes || hasNonPathNode || isPathWithMarker)\n return shapeToShape(from, to, timeEffect);\n const pathShape = maybePath(shape, fromPath);\n // Convert Path will take transform, anchor, etc into account,\n // so there is no need to specify these attributes in keyframes.\n const keyframes = [\n Object.assign({}, (0, utils_1.attributeOf)(from, utils_1.attributeKeys)),\n Object.assign({}, (0, utils_1.attributeOf)(to, utils_1.attributeKeys)),\n ];\n if (fromPath !== toPath) {\n keyframes[0].d = fromPath;\n keyframes[1].d = toPath;\n const animation = pathShape.animate(keyframes, timeEffect);\n animation.onfinish = () => {\n // Should keep the original path definition.\n (0, helper_1.copyAttributes)(pathShape, to);\n pathShape.style.d = toPath;\n pathShape.style.transform = 'none';\n };\n // Remove transform because it already applied in path\n // converted by convertToPath.\n pathShape.style.transform = 'none';\n return animation;\n }\n // No need to apply animation since fromPath equals toPath.\n return null;\n}\nfunction oneToMultiple(from, to, timeEffect, split) {\n // Hide the shape to be split before being removing.\n from.style.visibility = 'hidden';\n const D = split(from, to.length);\n return to.map((shape, i) => {\n const path = new g_1.Path({\n style: Object.assign({ d: D[i] }, (0, utils_1.attributeOf)(from, utils_1.attributeKeys)),\n });\n return oneToOne(shape, path, shape, timeEffect);\n });\n}\nfunction multipleToOne(from, to, timeEffect, split) {\n const D = split(to, from.length);\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = to.style;\n const keyframes = [\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0, offset: 0.99 },\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = to.animate(keyframes, timeEffect);\n const animations = from.map((shape, i) => {\n const path = new g_1.Path({\n style: {\n d: D[i],\n fill: to.style.fill,\n },\n });\n return oneToOne(shape, shape, path, timeEffect);\n });\n return [...animations, animation];\n}\n/**\n * Morphing animations.\n * @todo Support more split function.\n */\nconst Morphing = (options) => {\n return (from, to, defaults) => {\n const split = normalizeSplit(options.split);\n const timeEffect = Object.assign(Object.assign({}, defaults), options);\n const { length: fl } = from;\n const { length: tl } = to;\n if ((fl === 1 && tl === 1) || (fl > 1 && tl > 1)) {\n const [f] = from;\n const [t] = to;\n return oneToOne(f, f, t, timeEffect);\n }\n if (fl === 1 && tl > 1) {\n const [f] = from;\n return oneToMultiple(f, to, timeEffect, split);\n }\n if (fl > 1 && tl === 1) {\n const [t] = to;\n return multipleToOne(from, t, timeEffect, split);\n }\n return null;\n };\n};\nexports.Morphing = Morphing;\nexports.Morphing.props = {};\n//# sourceMappingURL=morphing.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeKeys = exports.attributeOf = exports.GEOMETRY_ATTRIBUTES = void 0;\nconst g_1 = require(\"@antv/g\");\nconst DEFAULT_ATTRIBUTE_VALUE = {\n opacity: 1,\n strokeOpacity: 1,\n fillOpacity: 1,\n lineWidth: 0,\n x: 0,\n y: 0,\n cx: 0,\n cy: 0,\n r: 0,\n rx: 0,\n ry: 0,\n width: 0,\n height: 0,\n};\nexports.GEOMETRY_ATTRIBUTES = {\n [g_1.Shape.CIRCLE]: ['cx', 'cy', 'r'],\n [g_1.Shape.ELLIPSE]: ['cx', 'cy', 'rx', 'ry'],\n [g_1.Shape.RECT]: ['x', 'y', 'width', 'height'],\n [g_1.Shape.IMAGE]: ['x', 'y', 'width', 'height'],\n [g_1.Shape.LINE]: ['x1', 'y1', 'x2', 'y2'],\n [g_1.Shape.POLYLINE]: ['points'],\n [g_1.Shape.POLYGON]: ['points'],\n};\nfunction attributeOf(shape, keys, useDefaultValue = false) {\n const attribute = {};\n for (const key of keys) {\n const value = shape.style[key];\n if (value) {\n attribute[key] = value;\n }\n else if (useDefaultValue) {\n attribute[key] = DEFAULT_ATTRIBUTE_VALUE[key];\n }\n }\n return attribute;\n}\nexports.attributeOf = attributeOf;\nexports.attributeKeys = [\n 'fill',\n 'stroke',\n 'fillOpacity',\n 'strokeOpacity',\n 'opacity',\n 'lineWidth',\n];\n//# sourceMappingURL=utils.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WaveIn = void 0;\nconst d3_shape_1 = require(\"@antv/vendor/d3-shape\");\nconst g_1 = require(\"@antv/g\");\nconst utils_1 = require(\"../shape/utils\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst scaleInX_1 = require(\"./scaleInX\");\n/**\n * Transform mark from transparent to solid.\n */\nconst WaveIn = (options, context) => {\n const ZERO = 0.0001;\n // @see https://g-next.antv.vision/zh/docs/api/css/css-properties-values-api#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7\n g_1.CSS.registerProperty({\n name: 'waveInArcAngle',\n inherits: false,\n initialValue: '',\n interpolable: true,\n syntax: g_1.PropertySyntax.NUMBER,\n });\n const { coordinate } = context;\n return (from, to, defaults) => {\n const [shape] = from;\n if (!(0, coordinate_1.isPolar)(coordinate)) {\n return (0, scaleInX_1.ScaleInX)(options, context)(from, to, defaults);\n }\n const { __data__, style } = shape;\n const { radius = 0, inset = 0, fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style;\n const { points, y, y1 } = __data__;\n const path = (0, d3_shape_1.arc)()\n .cornerRadius(radius)\n .padAngle((inset * Math.PI) / 180);\n const arcObject = (0, utils_1.getArcObject)(coordinate, points, [y, y1]);\n const { startAngle, endAngle } = arcObject;\n const keyframes = [\n // Use custom interpolable CSS property.\n {\n waveInArcAngle: startAngle + ZERO,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n waveInArcAngle: startAngle + ZERO,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n waveInArcAngle: endAngle,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n animation.onframe = function () {\n shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: Number(shape.style.waveInArcAngle) }));\n };\n animation.onfinish = function () {\n shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: endAngle }));\n };\n return animation;\n };\n};\nexports.WaveIn = WaveIn;\nexports.WaveIn.props = {};\n//# sourceMappingURL=waveIn.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZoomIn = void 0;\nconst ZoomIn = (options) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const transformOrigin = 'center center';\n const keyframes = [\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\nexports.ZoomIn = ZoomIn;\n//# sourceMappingURL=zoomIn.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ZoomOut = void 0;\nconst ZoomOut = (options) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const transformOrigin = 'center center';\n const keyframes = [\n { transform: `${prefix} scale(1)`.trimStart(), transformOrigin },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\nexports.ZoomOut = ZoomOut;\n//# sourceMappingURL=zoomOut.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathIn = void 0;\n/**\n * Transform mark from transparent to solid.\n */\nconst PathIn = (options) => {\n return (from, _, defaults) => {\n var _a, _b;\n const [shape] = from;\n const length = ((_b = (_a = shape).getTotalLength) === null || _b === void 0 ? void 0 : _b.call(_a)) || 0;\n const keyframes = [\n { lineDash: [0, length] },\n { lineDash: [length, 0] },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nexports.PathIn = PathIn;\nexports.PathIn.props = {};\n//# sourceMappingURL=pathIn.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GrowInX = void 0;\nconst g_1 = require(\"@antv/g\");\nconst scaleInX_1 = require(\"./scaleInX\");\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nconst GrowInX = (options, context) => {\n return (from, to, defaults) => {\n const [shape] = from;\n const { min: [x, y], halfExtents, } = shape.getLocalBounds();\n const width = halfExtents[0] * 2;\n const height = halfExtents[1] * 2;\n const clipPath = new g_1.Path({\n style: {\n d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`,\n },\n });\n shape.appendChild(clipPath);\n shape.style.clipPath = clipPath;\n const animation = (0, scaleInX_1.ScaleInX)(options, context)([clipPath], to, defaults);\n return animation;\n };\n};\nexports.GrowInX = GrowInX;\nexports.GrowInX.props = {};\n//# sourceMappingURL=growInX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GrowInY = void 0;\nconst g_1 = require(\"@antv/g\");\nconst scaleInY_1 = require(\"./scaleInY\");\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nconst GrowInY = (options, context) => {\n return (from, to, defaults) => {\n const [shape] = from;\n const { min: [x, y], halfExtents, } = shape.getLocalBounds();\n const width = halfExtents[0] * 2;\n const height = halfExtents[1] * 2;\n const clipPath = new g_1.Path({\n style: {\n d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`,\n },\n });\n shape.appendChild(clipPath);\n shape.style.clipPath = clipPath;\n const animation = (0, scaleInY_1.ScaleInY)(options, context)([clipPath], to, defaults);\n return animation;\n };\n};\nexports.GrowInY = GrowInY;\nexports.GrowInY.props = {};\n//# sourceMappingURL=growInY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementPointMove = exports.TreemapDrillDown = exports.Event = exports.Poptip = exports.ScrollbarFilter = exports.SliderFilter = exports.BrushYFilter = exports.BrushXFilter = exports.BrushFilter = exports.BrushAxisHighlight = exports.BrushYHighlight = exports.BrushXHighlight = exports.BrushHighlight = exports.LegendHighlight = exports.LegendFilter = exports.Tooltip = exports.Fisheye = exports.ChartIndex = exports.ElementSelectByColor = exports.ElementSelectByX = exports.ElementSelect = exports.ElementHighlightByColor = exports.ElementHighlightByX = exports.ElementHighlight = void 0;\nvar elementHighlight_1 = require(\"./elementHighlight\");\nObject.defineProperty(exports, \"ElementHighlight\", { enumerable: true, get: function () { return elementHighlight_1.ElementHighlight; } });\nvar elementHighlightByX_1 = require(\"./elementHighlightByX\");\nObject.defineProperty(exports, \"ElementHighlightByX\", { enumerable: true, get: function () { return elementHighlightByX_1.ElementHighlightByX; } });\nvar elementHighlightByColor_1 = require(\"./elementHighlightByColor\");\nObject.defineProperty(exports, \"ElementHighlightByColor\", { enumerable: true, get: function () { return elementHighlightByColor_1.ElementHighlightByColor; } });\nvar elementSelect_1 = require(\"./elementSelect\");\nObject.defineProperty(exports, \"ElementSelect\", { enumerable: true, get: function () { return elementSelect_1.ElementSelect; } });\nvar elementSelectByX_1 = require(\"./elementSelectByX\");\nObject.defineProperty(exports, \"ElementSelectByX\", { enumerable: true, get: function () { return elementSelectByX_1.ElementSelectByX; } });\nvar elementSelectByColor_1 = require(\"./elementSelectByColor\");\nObject.defineProperty(exports, \"ElementSelectByColor\", { enumerable: true, get: function () { return elementSelectByColor_1.ElementSelectByColor; } });\nvar chartIndex_1 = require(\"./chartIndex\");\nObject.defineProperty(exports, \"ChartIndex\", { enumerable: true, get: function () { return chartIndex_1.ChartIndex; } });\nvar fisheye_1 = require(\"./fisheye\");\nObject.defineProperty(exports, \"Fisheye\", { enumerable: true, get: function () { return fisheye_1.Fisheye; } });\nvar tooltip_1 = require(\"./tooltip\");\nObject.defineProperty(exports, \"Tooltip\", { enumerable: true, get: function () { return tooltip_1.Tooltip; } });\nvar legendFilter_1 = require(\"./legendFilter\");\nObject.defineProperty(exports, \"LegendFilter\", { enumerable: true, get: function () { return legendFilter_1.LegendFilter; } });\nvar legendHighlight_1 = require(\"./legendHighlight\");\nObject.defineProperty(exports, \"LegendHighlight\", { enumerable: true, get: function () { return legendHighlight_1.LegendHighlight; } });\nvar brushHighlight_1 = require(\"./brushHighlight\");\nObject.defineProperty(exports, \"BrushHighlight\", { enumerable: true, get: function () { return brushHighlight_1.BrushHighlight; } });\nvar brushXHighlight_1 = require(\"./brushXHighlight\");\nObject.defineProperty(exports, \"BrushXHighlight\", { enumerable: true, get: function () { return brushXHighlight_1.BrushXHighlight; } });\nvar brushYHighlight_1 = require(\"./brushYHighlight\");\nObject.defineProperty(exports, \"BrushYHighlight\", { enumerable: true, get: function () { return brushYHighlight_1.BrushYHighlight; } });\nvar brushAxisHighlight_1 = require(\"./brushAxisHighlight\");\nObject.defineProperty(exports, \"BrushAxisHighlight\", { enumerable: true, get: function () { return brushAxisHighlight_1.BrushAxisHighlight; } });\nvar brushFilter_1 = require(\"./brushFilter\");\nObject.defineProperty(exports, \"BrushFilter\", { enumerable: true, get: function () { return brushFilter_1.BrushFilter; } });\nvar brushXFilter_1 = require(\"./brushXFilter\");\nObject.defineProperty(exports, \"BrushXFilter\", { enumerable: true, get: function () { return brushXFilter_1.BrushXFilter; } });\nvar brushYFilter_1 = require(\"./brushYFilter\");\nObject.defineProperty(exports, \"BrushYFilter\", { enumerable: true, get: function () { return brushYFilter_1.BrushYFilter; } });\nvar sliderFilter_1 = require(\"./sliderFilter\");\nObject.defineProperty(exports, \"SliderFilter\", { enumerable: true, get: function () { return sliderFilter_1.SliderFilter; } });\nvar scrollbarFilter_1 = require(\"./scrollbarFilter\");\nObject.defineProperty(exports, \"ScrollbarFilter\", { enumerable: true, get: function () { return scrollbarFilter_1.ScrollbarFilter; } });\nvar poptip_1 = require(\"./poptip\");\nObject.defineProperty(exports, \"Poptip\", { enumerable: true, get: function () { return poptip_1.Poptip; } });\nvar event_1 = require(\"./event\");\nObject.defineProperty(exports, \"Event\", { enumerable: true, get: function () { return event_1.Event; } });\nvar treemapDrillDown_1 = require(\"./treemapDrillDown\");\nObject.defineProperty(exports, \"TreemapDrillDown\", { enumerable: true, get: function () { return treemapDrillDown_1.TreemapDrillDown; } });\nvar elementPointMove_1 = require(\"./elementPointMove\");\nObject.defineProperty(exports, \"ElementPointMove\", { enumerable: true, get: function () { return elementPointMove_1.ElementPointMove; } });\n//# sourceMappingURL=index.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementHighlight = exports.elementHighlight = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\n/**\n * highlight a group of elements.\n */\nfunction elementHighlight(root, { elements: elementsof, // given the root of chart returns elements to be manipulated\ndatum, // given each element returns the datum of it\ngroupKey: eleGroupKey = (d) => d, // group elements by specified key\nregionGroupKey = (d) => d, // how to group elements when hover region\nlink = false, // draw link or not\nbackground = false, // draw background or not\ndelay = 60, // delay to unhighlighted element\nscale, coordinate, emitter, state = {}, region = false, regionEleFilter = (el) => utils_1.VALID_FIND_BY_X_MARKS.includes(el.markType), // some elements can not be highlighted by region, like shapes in pie.\n }) {\n var _a, _b;\n const allElements = (_a = elementsof(root)) !== null && _a !== void 0 ? _a : [];\n const elements = region ? allElements.filter(regionEleFilter) : allElements;\n const elementSet = new Set(elements);\n const groupKey = region ? regionGroupKey : eleGroupKey;\n const keyGroup = (0, d3_array_1.group)(elements, groupKey);\n const findElement = (0, utils_1.createFindElementByEvent)({\n elementsof,\n root,\n coordinate,\n scale,\n });\n const valueof = (0, utils_1.createValueof)(elements, datum);\n const [appendLink, removeLink] = (0, utils_1.renderLink)(Object.assign({ elements,\n valueof,\n link,\n coordinate }, (0, helper_1.subObject)(state.active, 'link')));\n const [appendBackground, removeBackground, isBackground] = (0, utils_1.renderBackground)(Object.assign({ document: root.ownerDocument, scale,\n coordinate,\n background,\n valueof }, (0, helper_1.subObject)(state.active, 'background')));\n const elementStyle = (0, util_1.deepMix)(state, {\n active: Object.assign({}, (((_b = state.active) === null || _b === void 0 ? void 0 : _b.offset) && {\n //Apply translate to mock slice out.\n transform: (...params) => {\n const value = state.active.offset(...params);\n const [, i] = params;\n return (0, utils_1.offsetTransform)(elements[i], value, coordinate);\n },\n })),\n });\n const useState = (0, utils_1.createUseState)(elementStyle, elements);\n const { updateState, removeState, hasState } = useState(valueof);\n let out; // Timer for delaying unhighlighted.\n const pointerover = (event) => {\n const { nativeEvent = true } = event;\n let element = event.target;\n if (region) {\n element = findElement(event);\n }\n if (!elementSet.has(element))\n return;\n if (out)\n clearTimeout(out);\n const k = groupKey(element);\n const group = keyGroup.get(k);\n const groupSet = new Set(group);\n for (const e of elements) {\n if (groupSet.has(e)) {\n if (!hasState(e, 'active'))\n updateState(e, 'active');\n }\n else {\n updateState(e, 'inactive');\n removeLink(e);\n }\n if (e !== element)\n removeBackground(e);\n }\n appendBackground(element);\n appendLink(group);\n // Emit events.\n if (!nativeEvent)\n return;\n emitter.emit('element:highlight', {\n nativeEvent,\n data: {\n data: datum(element),\n group: group.map(datum),\n },\n });\n };\n const delayUnhighlighted = () => {\n if (out)\n clearTimeout(out);\n out = setTimeout(() => {\n unhighlighted();\n out = null;\n }, delay);\n };\n const unhighlighted = (nativeEvent = true) => {\n for (const e of elements) {\n removeState(e, 'active', 'inactive');\n removeBackground(e);\n removeLink(e);\n }\n if (nativeEvent) {\n emitter.emit('element:unhighlight', { nativeEvent });\n }\n };\n const pointerout = (event) => {\n let element = event.target;\n if (region) {\n element = findElement(event);\n }\n if (!element) {\n if (delay > 0)\n delayUnhighlighted();\n else\n unhighlighted();\n return;\n }\n if (background && !isBackground(element))\n return;\n if (!background && !elementSet.has(element))\n return;\n if (delay > 0)\n delayUnhighlighted();\n else\n unhighlighted();\n };\n const pointerleave = () => {\n unhighlighted();\n };\n root.addEventListener('pointerover', pointerover);\n root.addEventListener('pointermove', pointerover);\n root.addEventListener('pointerout', pointerout);\n root.addEventListener('pointerleave', pointerleave);\n const onRest = (e) => {\n const { nativeEvent } = e;\n if (nativeEvent)\n return;\n unhighlighted(false);\n };\n const onHighlight = (e) => {\n const { nativeEvent } = e;\n if (nativeEvent)\n return;\n const { data } = e.data;\n const element = (0, utils_1.selectElementByData)(elements, data, datum);\n if (!element)\n return;\n pointerover({ target: element, nativeEvent: false });\n };\n emitter.on('element:highlight', onHighlight);\n emitter.on('element:unhighlight', onRest);\n return () => {\n root.removeEventListener('pointerover', pointerover);\n root.removeEventListener('pointermove', pointerover);\n root.removeEventListener('pointerout', pointerout);\n root.removeEventListener('pointerleave', pointerleave);\n emitter.off('element:highlight', onHighlight);\n emitter.off('element:unhighlight', onRest);\n for (const e of elements) {\n removeBackground(e);\n removeLink(e);\n }\n };\n}\nexports.elementHighlight = elementHighlight;\nfunction ElementHighlight(_a) {\n var { delay, createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, [\"delay\", \"createGroup\", \"createRegionGroup\", \"background\", \"link\"]);\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const { scale, coordinate } = view;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n return elementHighlight(plotArea, Object.assign({ elements: utils_1.selectG2Elements, datum: (0, utils_1.createDatumof)(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup\n ? createRegionGroup(view)\n : (0, utils_1.createXKey)(view), coordinate,\n scale, state: (0, utils_1.mergeState)(options, [\n ['active', background ? {} : { lineWidth: '1', stroke: '#000' }],\n 'inactive',\n ]), background,\n link,\n delay,\n emitter }, rest));\n };\n}\nexports.ElementHighlight = ElementHighlight;\nElementHighlight.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlight.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFindElementByEvent = exports.VALID_FIND_BY_X_MARKS = exports.maybeRoot = exports.getThetaPath = exports.getElements = exports.getPointsPath = exports.getPointsR = exports.selectElementByData = exports.restoreCursor = exports.setCursor = exports.renderBackground = exports.offsetTransform = exports.renderLink = exports.createValueof = exports.mergeState = exports.useState = exports.createUseState = exports.createDatumof = exports.createXKey = exports.createColorKey = exports.boundsOfBrushArea = exports.brushMousePosition = exports.mousePosition = exports.bboxOf = exports.selectPlotArea = exports.selectFacetViews = exports.selectFacetG2Elements = exports.selectG2Elements = void 0;\nconst g_1 = require(\"@antv/g\");\nconst d3_path_1 = require(\"@antv/vendor/d3-path\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst util_1 = require(\"@antv/util\");\nconst selection_1 = require(\"../utils/selection\");\nconst array_1 = require(\"../utils/array\");\nconst runtime_1 = require(\"../runtime\");\nconst scale_1 = require(\"../utils/scale\");\nconst color_1 = require(\"../shape/interval/color\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst style_1 = require(\"../utils/style\");\nconst utils_1 = require(\"../shape/utils\");\nconst vector_1 = require(\"../utils/vector\");\nconst traverse_elements_1 = require(\"../utils/traverse-elements\");\n/**\n * Given root of chart returns elements to be manipulated\n */\nfunction selectG2Elements(root) {\n return (0, selection_1.select)(root)\n .selectAll(`.${runtime_1.ELEMENT_CLASS_NAME}`)\n .nodes()\n .filter((d) => !d.__removed__);\n}\nexports.selectG2Elements = selectG2Elements;\nfunction selectFacetG2Elements(target, viewInstances) {\n return selectFacetViews(target, viewInstances).flatMap(({ container }) => selectG2Elements(container));\n}\nexports.selectFacetG2Elements = selectFacetG2Elements;\nfunction selectFacetViews(target, viewInstances) {\n return viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key);\n}\nexports.selectFacetViews = selectFacetViews;\nfunction selectPlotArea(root) {\n return (0, selection_1.select)(root).select(`.${runtime_1.PLOT_CLASS_NAME}`).node();\n}\nexports.selectPlotArea = selectPlotArea;\nfunction bboxOf(element) {\n // The geometry bounds of a group is empty, so return the render bounds.\n if (element.tagName === 'g')\n return element.getRenderBounds();\n // Compute the geometry bounds related to the parent.\n const bounds = element.getGeometryBounds();\n const aabb = new g_1.AABB();\n aabb.setFromTransformedAABB(bounds, element.getWorldTransform());\n return aabb;\n}\nexports.bboxOf = bboxOf;\nfunction mousePosition(target, event) {\n const { offsetX, offsetY } = event;\n const bbox = bboxOf(target);\n const { min: [x, y], max: [x1, y1], } = bbox;\n const isOutX = offsetX < x || offsetX > x1;\n const isOutY = offsetY < y || offsetY > y1;\n if (isOutX || isOutY)\n return null;\n return [offsetX - x, offsetY - y];\n}\nexports.mousePosition = mousePosition;\n/**\n * @todo Pass bbox rather than calc it here.\n */\nfunction brushMousePosition(target, event) {\n const { offsetX, offsetY } = event;\n const [x, y, x1, y1] = boundsOfBrushArea(target);\n return [\n Math.min(x1, Math.max(x, offsetX)) - x,\n Math.min(y1, Math.max(y, offsetY)) - y,\n ];\n}\nexports.brushMousePosition = brushMousePosition;\nfunction boundsOfBrushArea(target) {\n // Calc bbox after clipping.\n const bbox = target.getRenderBounds();\n const { min: [x0, y0], max: [x1, y1], } = bbox;\n return [x0, y0, x1, y1];\n}\nexports.boundsOfBrushArea = boundsOfBrushArea;\nfunction createColorKey(view) {\n return (element) => element.__data__.color;\n}\nexports.createColorKey = createColorKey;\nfunction createXKey(view) {\n return (element) => element.__data__.x;\n}\nexports.createXKey = createXKey;\nfunction createDatumof(view) {\n const views = Array.isArray(view) ? view : [view];\n const keyData = new Map(views.flatMap((view) => {\n const marks = Array.from(view.markState.keys());\n return marks.map((mark) => [keyed(view.key, mark.key), mark.data]);\n }));\n return (element) => {\n const { index, markKey, viewKey } = element.__data__;\n const data = keyData.get(keyed(viewKey, markKey));\n return data[index];\n };\n}\nexports.createDatumof = createDatumof;\n/**\n * A state manager for G2Element.\n * The keys for each state's style start with the state name.\n * { selectedFill, selectedStroke } is for selected state.\n * { unselectedFill, unselectedStroke } is for unselected state.\n */\n/**\n * Define state priorities, higher number means higher priority.\n */\nconst STATE_PRIORITIES = {\n selected: 3,\n unselected: 3,\n active: 2,\n inactive: 2,\n default: 1,\n};\n/**\n * Define state groups, states in the same group are mutually exclusive.\n */\nconst STATE_GROUPS = {\n selection: ['selected', 'unselected'],\n highlight: ['active', 'inactive'],\n};\nconst setElementAttribute = (element, k, v) => {\n (0, traverse_elements_1.traverseElements)(element, (el) => {\n if ('setAttribute' in el && typeof el.setAttribute === 'function') {\n el.setAttribute(k, v);\n }\n });\n};\nfunction createUseState(style, elements) {\n // Apply interaction style to all elements.\n elements.forEach((element) => {\n // @ts-ignore\n const currentStyle = element.__interactionStyle__;\n if (currentStyle) {\n // @ts-ignore\n element.__interactionStyle__ = Object.assign(Object.assign({}, currentStyle), style);\n }\n else {\n // @ts-ignore\n element.__interactionStyle__ = style;\n }\n });\n return (valueof = (d, element) => d, setAttribute = setElementAttribute) => useState(undefined, valueof, setAttribute);\n}\nexports.createUseState = createUseState;\nfunction useState(style, valueof = (d, element) => d, setAttribute = setElementAttribute) {\n const STATES = '__states__';\n const ORIGINAL = '__ordinal__';\n // Get state priority.\n const getStatePriority = (stateName) => STATE_PRIORITIES[stateName] || STATE_PRIORITIES.default;\n // Get the group that a state belongs to.\n const getStateGroup = (stateName) => {\n var _a;\n return (_a = Object.entries(STATE_GROUPS).find(([_, states]) => states.includes(stateName))) === null || _a === void 0 ? void 0 : _a[0];\n };\n // Mix style for each state and apply it to element.\n const applyState = (element) => {\n var _a;\n const { [STATES]: states = [], [ORIGINAL]: original = {} } = element;\n // Sort states by priority.\n const sortedStates = [...states].sort((a, b) => getStatePriority(b) - getStatePriority(a));\n // Create a Map to track the highest priority state for each style attribute.\n const styleAttributeMap = new Map();\n // Iterate through all states to find the highest priority state for each style attribute.\n for (const state of sortedStates) {\n // If style exists, use it directly, else use interaction style on element.\n const stateStyles = ((_a = (style !== null && style !== void 0 ? style : element.__interactionStyle__)) === null || _a === void 0 ? void 0 : _a[state]) || {};\n for (const [key, value] of Object.entries(stateStyles)) {\n if (!styleAttributeMap.has(key)) {\n styleAttributeMap.set(key, value);\n }\n }\n }\n // Apply styles including original styles.\n const finalStyle = Object.assign({}, original);\n for (const [key, value] of styleAttributeMap.entries()) {\n finalStyle[key] = value;\n }\n if (Object.keys(finalStyle).length === 0)\n return;\n // Apply final styles to the element.\n for (const [key, value] of Object.entries(finalStyle)) {\n const currentValue = (0, style_1.getStyle)(element, key);\n const v = valueof(value, element);\n setAttribute(element, key, v);\n // Store the attribute if it does not exist in original.\n if (!(key in original))\n original[key] = currentValue;\n }\n element[ORIGINAL] = original;\n };\n const initState = (element) => {\n if (element[STATES])\n return;\n element[STATES] = [];\n return;\n };\n /**\n * Update states and update element, handle conflict states automatically.\n */\n const updateState = (element, ...states) => {\n initState(element);\n const currentStates = element[STATES];\n // Collect all new state groups.\n const newStateGroups = new Set(states\n .map((state) => getStateGroup(state))\n .filter((group) => group !== undefined));\n // Exclude old states that are in the new state group.\n const remainingStates = currentStates.filter((existingState) => !newStateGroups.has(getStateGroup(existingState)));\n element[STATES] = [...remainingStates, ...states];\n applyState(element);\n };\n /**\n * Set the states and update element.\n */\n const setState = (element, ...states) => {\n initState(element);\n element[STATES] = [...states];\n applyState(element);\n };\n /**\n * Remove the states and update element.\n */\n const removeState = (element, ...states) => {\n initState(element);\n for (const state of states) {\n const index = element[STATES].indexOf(state);\n if (index !== -1) {\n element[STATES].splice(index, 1);\n }\n }\n applyState(element);\n };\n const hasState = (element, state) => {\n initState(element);\n return element[STATES].indexOf(state) !== -1;\n };\n return {\n setState,\n updateState,\n removeState,\n hasState,\n };\n}\nexports.useState = useState;\nfunction isEmptyObject(obj) {\n if (obj === undefined)\n return true;\n if (typeof obj !== 'object')\n return false;\n return Object.keys(obj).length === 0;\n}\n// A function to generate key for mark each view.\nfunction keyed(viewKey, markKey) {\n return `${viewKey},${markKey}`;\n}\nfunction mergeState(options, states) {\n // Index state by mark key and view key.\n const views = Array.isArray(options) ? options : [options];\n const markState = views.flatMap((view) => view.marks.map((mark) => [keyed(view.key, mark.key), mark.state]));\n const state = {};\n // Update each specified state.\n for (const descriptor of states) {\n const [key, defaults] = Array.isArray(descriptor)\n ? descriptor\n : [descriptor, {}];\n // Update each specified mark state.\n state[key] = markState.reduce((merged, mark) => {\n // Normalize state.\n const [markKey, markState = {}] = mark;\n const selectedState = isEmptyObject(markState[key])\n ? defaults\n : markState[key];\n // Update each state attribute.\n for (const [attr, value] of Object.entries(selectedState)) {\n const oldValue = merged[attr];\n const newValue = (data, index, array, element) => {\n const k = keyed(element.__data__.viewKey, element.__data__.markKey);\n if (markKey !== k)\n return oldValue === null || oldValue === void 0 ? void 0 : oldValue(data, index, array, element);\n if (typeof value !== 'function')\n return value;\n return value(data, index, array, element);\n };\n merged[attr] = newValue;\n }\n return merged;\n }, {});\n }\n return state;\n}\nexports.mergeState = mergeState;\n// @todo Support elements from different view.\nfunction createValueof(elements, datum) {\n const elementIndex = new Map(elements.map((d, i) => [d, i]));\n const fa = datum ? elements.map(datum) : elements;\n return (d, e) => {\n if (typeof d !== 'function')\n return d;\n const i = elementIndex.get(e);\n const fe = datum ? datum(e) : e;\n return d(fe, i, fa, e);\n };\n}\nexports.createValueof = createValueof;\nfunction renderLink(_a) {\n var { link = false, valueof = (d, element) => d, coordinate } = _a, style = __rest(_a, [\"link\", \"valueof\", \"coordinate\"]);\n const LINK_CLASS_NAME = 'element-link';\n if (!link)\n return [() => { }, () => { }];\n const pointsOf = (element) => element.__data__.points;\n const pathPointsOf = (P0, P1) => {\n const [, p1, p2] = P0;\n const [p0, , , p3] = P1;\n const P = [p1, p0, p3, p2];\n return P;\n };\n const append = (elements) => {\n var _a;\n if (elements.length <= 1)\n return;\n // Sort elements by normalized x to avoid cross.\n const sortedElements = (0, d3_array_1.sort)(elements, (e0, e1) => {\n const { x: x0 } = e0.__data__;\n const { x: x1 } = e1.__data__;\n const dx = x0 - x1;\n return dx;\n });\n for (let i = 1; i < sortedElements.length; i++) {\n const p = (0, d3_path_1.path)();\n const e0 = sortedElements[i - 1];\n const e1 = sortedElements[i];\n const [p0, p1, p2, p3] = pathPointsOf(pointsOf(e0), pointsOf(e1));\n p.moveTo(...p0);\n p.lineTo(...p1);\n p.lineTo(...p2);\n p.lineTo(...p3);\n p.closePath();\n const _b = (0, array_1.mapObject)(style, (d) => valueof(d, e0)), { fill = e0.getAttribute('fill') } = _b, rest = __rest(_b, [\"fill\"]);\n const link = new g_1.Path({\n className: LINK_CLASS_NAME,\n style: Object.assign({ d: p.toString(), fill, zIndex: -2 }, rest),\n });\n // @ts-ignore\n (_a = e0.link) === null || _a === void 0 ? void 0 : _a.remove();\n e0.parentNode.appendChild(link);\n // @ts-ignore\n e0.link = link;\n }\n };\n const remove = (element) => {\n var _a;\n (_a = element.link) === null || _a === void 0 ? void 0 : _a.remove();\n element.link = null;\n };\n return [append, remove];\n}\nexports.renderLink = renderLink;\n// Apply translate to mock slice out.\nfunction offsetTransform(element, offset, coordinate) {\n const append = (t) => {\n const { transform } = element.style;\n return transform ? `${transform} ${t}` : t;\n };\n if ((0, coordinate_1.isPolar)(coordinate)) {\n const { points } = element.__data__;\n const [p0, p1] = (0, coordinate_1.isTranspose)(coordinate) ? (0, utils_1.reorder)(points) : points;\n const center = coordinate.getCenter();\n const v0 = (0, vector_1.sub)(p0, center);\n const v1 = (0, vector_1.sub)(p1, center);\n const a0 = (0, vector_1.angle)(v0);\n const da = (0, vector_1.angleBetween)(v0, v1);\n const amid = a0 + da / 2;\n const dx = offset * Math.cos(amid);\n const dy = offset * Math.sin(amid);\n return append(`translate(${dx}, ${dy})`);\n }\n if ((0, coordinate_1.isTranspose)(coordinate))\n return append(`translate(${offset}, 0)`);\n return append(`translate(0, ${-offset})`);\n}\nexports.offsetTransform = offsetTransform;\nfunction renderBackground(_a) {\n var { document, background, scale, coordinate, valueof } = _a, rest = __rest(_a, [\"document\", \"background\", \"scale\", \"coordinate\", \"valueof\"]);\n const BACKGROUND_CLASS_NAME = 'element-background';\n // Don't have background.\n if (!background)\n return [() => { }, () => { }];\n const extentOf = (scale, x, padding) => {\n const ax = scale.invert(x);\n const mid = x + scale.getBandWidth(ax) / 2;\n const half = scale.getStep(ax) / 2;\n const offset = half * padding;\n return [mid - half + offset, mid + half - offset];\n };\n const sizeXOf = (element, padding) => {\n const { x: scaleX } = scale;\n if (!(0, scale_1.isOrdinalScale)(scaleX))\n return [0, 1];\n const { __data__: data } = element;\n const { x } = data;\n const [e1, e2] = extentOf(scaleX, x, padding);\n return [e1, e2];\n };\n const sizeYOf = (element, padding) => {\n const { y: scaleY } = scale;\n if (!(0, scale_1.isOrdinalScale)(scaleY))\n return [0, 1];\n const { __data__: data } = element;\n const { y } = data;\n const [e1, e2] = extentOf(scaleY, y, padding);\n return [e1, e2];\n };\n const bandShapeOf = (element, style) => {\n const { padding } = style;\n const [x1, x2] = sizeXOf(element, padding);\n const [y1, y2] = sizeYOf(element, padding);\n const points = [\n [x1, y1],\n [x2, y1],\n [x2, y2],\n [x1, y2],\n ].map((d) => coordinate.map(d));\n const { __data__: data } = element;\n const { y: dy, y1: dy1 } = data;\n return (0, color_1.rect)(document, points, { y: dy, y1: dy1 }, coordinate, style);\n };\n // Shape without ordinal style.\n // Clone and scale it.\n const cloneShapeOf = (element, style) => {\n const { transform = 'scale(1.2, 1.2)', transformOrigin = 'center center', stroke = '' } = style, rest = __rest(style, [\"transform\", \"transformOrigin\", \"stroke\"]);\n const finalStyle = Object.assign({ transform, transformOrigin, stroke }, rest);\n const shape = element.cloneNode(true);\n for (const [key, value] of Object.entries(finalStyle)) {\n shape.style[key] = value;\n }\n return shape;\n };\n const isOrdinalShape = () => {\n const { x, y } = scale;\n return [x, y].some(scale_1.isOrdinalScale);\n };\n const append = (element) => {\n if (element.background)\n element.background.remove();\n const _a = (0, array_1.mapObject)(rest, (d) => valueof(d, element)), { fill = '#CCD6EC', fillOpacity = 0.3, zIndex = -2, padding = 0.001, lineWidth = 0 } = _a, style = __rest(_a, [\"fill\", \"fillOpacity\", \"zIndex\", \"padding\", \"lineWidth\"]);\n const finalStyle = Object.assign(Object.assign({}, style), { fill,\n fillOpacity,\n zIndex,\n padding,\n lineWidth });\n const shapeOf = isOrdinalShape() ? bandShapeOf : cloneShapeOf;\n const shape = shapeOf(element, finalStyle);\n shape.className = BACKGROUND_CLASS_NAME;\n element.parentNode.parentNode.appendChild(shape);\n element.background = shape;\n };\n const remove = (element) => {\n var _a;\n (_a = element.background) === null || _a === void 0 ? void 0 : _a.remove();\n element.background = null;\n };\n const is = (element) => {\n return element.className === BACKGROUND_CLASS_NAME;\n };\n return [append, remove, is];\n}\nexports.renderBackground = renderBackground;\nfunction setCursor(root, cursor) {\n // @ts-ignore\n const canvas = root.getRootNode().defaultView;\n const dom = canvas.getContextService().getDomElement();\n if (dom === null || dom === void 0 ? void 0 : dom.style) {\n root.cursor = dom.style.cursor;\n dom.style.cursor = cursor;\n }\n}\nexports.setCursor = setCursor;\nfunction restoreCursor(root) {\n setCursor(root, root.cursor);\n}\nexports.restoreCursor = restoreCursor;\nfunction selectElementByData(elements, data, datum) {\n return elements.find((d) => Object.entries(data).every(([key, value]) => datum(d)[key] === value));\n}\nexports.selectElementByData = selectElementByData;\nfunction getPointsR(point, nextPoint) {\n return Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2));\n}\nexports.getPointsR = getPointsR;\n// Points create path.\nfunction getPointsPath(points, isClose = false) {\n const path = (0, util_1.filter)(points, (d) => !!d).map((d, i) => {\n return [i === 0 ? 'M' : 'L', ...d];\n });\n if (isClose) {\n path.push(['Z']);\n }\n return path;\n}\nexports.getPointsPath = getPointsPath;\n// Get element.\nfunction getElements(plot) {\n return plot.querySelectorAll('.element');\n}\nexports.getElements = getElements;\n// Get Theta coordinate round path.\nfunction getThetaPath(center, points, isBig = 0) {\n const path = [['M', ...points[1]]];\n const innerRadius = getPointsR(center, points[1]);\n const outerRadius = getPointsR(center, points[0]);\n if (innerRadius === 0) {\n path.push(['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']);\n }\n else {\n path.push(['A', innerRadius, innerRadius, 0, isBig, 0, ...points[2]], ['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']);\n }\n return path;\n}\nexports.getThetaPath = getThetaPath;\nfunction maybeRoot(node, rootOf) {\n if (rootOf(node))\n return node;\n let root = node.parent;\n while (root && !rootOf(root))\n root = root.parent;\n return root;\n}\nexports.maybeRoot = maybeRoot;\nexports.VALID_FIND_BY_X_MARKS = ['interval', 'point', 'density'];\n/**\n * @description Create function that can find element by event.\n * @returns Element find function.\n */\nfunction createFindElementByEvent({ elementsof, root, coordinate, scale, validFindByXMarks = exports.VALID_FIND_BY_X_MARKS, }) {\n var _a, _b;\n let elements = elementsof(root);\n const getValidFindByXMarks = (d) => validFindByXMarks.includes(d.markType);\n const hasValidFindByXMarks = elements.find(getValidFindByXMarks);\n // Try to find element by x position.\n if (hasValidFindByXMarks) {\n elements = elements.filter(getValidFindByXMarks);\n const scaleX = scale.x;\n const scaleSeries = scale.series;\n const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0;\n const xof = scaleSeries\n ? (d) => {\n const seriesCount = Math.round(1 / scaleSeries.valueBandWidth);\n return (d.__data__.x +\n d.__data__.series * bandWidth +\n bandWidth / (seriesCount * 2));\n }\n : (d) => d.__data__.x + bandWidth / 2;\n // Sort for bisector search.\n elements.sort((a, b) => xof(a) - xof(b));\n return (event) => {\n const mouse = mousePosition(root, event);\n if (!mouse)\n return;\n const [abstractX] = coordinate.invert(mouse);\n const search = (0, d3_array_1.bisector)(xof).center;\n const i = search(elements, abstractX);\n const target = elements[i];\n return target;\n };\n }\n // If there is no valid element find by x, just return the target element.\n return (event) => {\n const { target } = event;\n return maybeRoot(target, (node) => {\n if (!node.classList)\n return false;\n return node.classList.includes('element');\n });\n };\n}\nexports.createFindElementByEvent = createFindElementByEvent;\n//# sourceMappingURL=utils.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.destroy = exports.renderToMountedElement = exports.render = void 0;\n__exportStar(require(\"./constant\"), exports);\n__exportStar(require(\"./types/common\"), exports);\n__exportStar(require(\"./types/component\"), exports);\n__exportStar(require(\"./types/options\"), exports);\n__exportStar(require(\"./types/transform\"), exports);\n__exportStar(require(\"./types/encode\"), exports);\n__exportStar(require(\"./types/mark\"), exports);\n__exportStar(require(\"./types/data\"), exports);\nvar render_1 = require(\"./render\");\nObject.defineProperty(exports, \"render\", { enumerable: true, get: function () { return render_1.render; } });\nObject.defineProperty(exports, \"renderToMountedElement\", { enumerable: true, get: function () { return render_1.renderToMountedElement; } });\nObject.defineProperty(exports, \"destroy\", { enumerable: true, get: function () { return render_1.destroy; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MASK_CLASS_NAME = exports.AREA_CLASS_NAME = exports.LABEL_CLASS_NAME = exports.COMPONENT_CLASS_NAME = exports.PLOT_CLASS_NAME = exports.VIEW_CLASS_NAME = exports.ELEMENT_CLASS_NAME = exports.LABEL_LAYER_CLASS_NAME = exports.MAIN_LAYER_CLASS_NAME = void 0;\nexports.MAIN_LAYER_CLASS_NAME = 'main-layer';\nexports.LABEL_LAYER_CLASS_NAME = 'label-layer';\nexports.ELEMENT_CLASS_NAME = 'element';\nexports.VIEW_CLASS_NAME = 'view';\nexports.PLOT_CLASS_NAME = 'plot';\nexports.COMPONENT_CLASS_NAME = 'component';\nexports.LABEL_CLASS_NAME = 'label';\nexports.AREA_CLASS_NAME = 'area';\nexports.MASK_CLASS_NAME = 'mask';\n//# sourceMappingURL=constant.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=common.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=component.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=options.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=transform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=encode.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=mark.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data.js.map","\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.destroy = exports.renderToMountedElement = exports.render = void 0;\nconst g_1 = require(\"@antv/g\");\nconst g_canvas_1 = require(\"@antv/g-canvas\");\nconst g_plugin_dragndrop_1 = require(\"@antv/g-plugin-dragndrop\");\nconst util_1 = require(\"@antv/util\");\nconst event_emitter_1 = __importDefault(require(\"@antv/event-emitter\"));\nconst selection_1 = require(\"../utils/selection\");\nconst event_1 = require(\"../utils/event\");\nconst helper_1 = require(\"../utils/helper\");\nconst expr_1 = require(\"../utils/expr\");\nconst plot_1 = require(\"./plot\");\nconst constant_1 = require(\"./constant\");\nconst option_preprocess_1 = require(\"./option-preprocess\");\n/**\n * Infer key for each node of view tree.\n * Each key should be unique in the entire view tree.\n * The key is for incremental render when view tree is changed.\n * @todo Fix custom key equals to inferred key.\n */\nfunction inferKeys(options) {\n const root = (0, util_1.deepMix)({}, options);\n const nodeParent = new Map([[root, null]]);\n const nodeIndex = new Map([[null, -1]]);\n const discovered = [root];\n while (discovered.length) {\n const node = discovered.shift();\n // If key of node is not specified, using parentKey and the index for it\n // in parent.children as its key.\n // e.g. The key of node named 'a' will be 'a', and the key of node named\n // 'b' will be 'parent-1' in the following view tree specification.\n // { key: 'parent', children: [{ name: 'a', key: 'a' }, { name: 'b' }] }\n if (node.key === undefined) {\n const parent = nodeParent.get(node);\n const index = nodeIndex.get(node);\n const key = parent === null ? `${0}` : `${parent.key}-${index}`;\n node.key = key;\n }\n const { children = [] } = node;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n // Clone node as well.\n const child = (0, util_1.deepMix)({}, children[i]);\n children[i] = child;\n nodeParent.set(child, node);\n nodeIndex.set(child, i);\n discovered.push(child);\n }\n }\n }\n return root;\n}\nfunction Canvas(width, height) {\n const renderer = new g_canvas_1.Renderer();\n // DragAndDropPlugin is for interaction.\n renderer.registerPlugin(new g_plugin_dragndrop_1.Plugin());\n return new g_1.Canvas({\n width,\n height,\n container: document.createElement('div'),\n renderer: renderer,\n });\n}\nfunction render(options, context = {}, resolve = () => { }, reject = (e) => {\n throw e;\n}) {\n const afterParsedOptions = (0, expr_1.parseOptionsExpr)(options);\n // Initialize the context if it is not provided.\n const { width = 640, height = 480, depth = 0 } = afterParsedOptions;\n // Preprocessing here, such as syntactic sugar.\n const preprocessedOption = (0, option_preprocess_1.preprocessOption)(afterParsedOptions);\n const keyed = inferKeys(preprocessedOption);\n const { canvas = Canvas(width, height), emitter = new event_emitter_1.default(), library, } = context;\n context.canvas = canvas;\n context.emitter = emitter;\n const { width: prevWidth, height: prevHeight } = canvas.getConfig();\n if (prevWidth !== width || prevHeight !== height) {\n canvas.resize(width, height);\n }\n emitter.emit(event_1.ChartEvent.BEFORE_RENDER);\n // Plot the chart and mutate context.\n // Make sure that plot chart after container is ready for every time.\n const selection = (0, selection_1.select)(canvas.document.documentElement);\n canvas.ready\n .then(() => (0, plot_1.plot)(Object.assign(Object.assign({}, keyed), { width, height, depth }), selection, context))\n .then(() => {\n // Place the center of whole scene at z axis' origin.\n if (depth) {\n const [x, y] = canvas.document.documentElement.getPosition();\n // Since `render` method can be called for multiple times, use setPosition instead of translate here.\n canvas.document.documentElement.setPosition(x, y, -depth / 2);\n }\n // Wait for the next tick.\n // FIXME: Use `rendered?` event instead of `requestAnimationFrame`.\n canvas.requestAnimationFrame(() => {\n canvas.requestAnimationFrame(() => {\n emitter.emit(event_1.ChartEvent.AFTER_RENDER);\n resolve === null || resolve === void 0 ? void 0 : resolve();\n });\n });\n })\n .catch((e) => {\n reject === null || reject === void 0 ? void 0 : reject(e);\n });\n // Return the container HTML element wraps the canvas or svg element.\n return normalizeContainer(canvas.getConfig().container);\n}\nexports.render = render;\nfunction renderToMountedElement(options, context = {}, resolve = () => { }, reject = (e) => {\n throw e;\n}) {\n var _a;\n // Initialize the context if it is not provided.\n const { width = 640, height = 480 } = options;\n const keyed = inferKeys(options);\n const { group = new g_1.Group(), emitter = new event_emitter_1.default(), library, } = context;\n if (!(group === null || group === void 0 ? void 0 : group.parentElement)) {\n (0, helper_1.error)(`renderToMountedElement can't render chart to unmounted group.`);\n }\n const selection = (0, selection_1.select)(group);\n context.group = group;\n context.emitter = emitter;\n context.canvas =\n context.canvas || ((_a = group === null || group === void 0 ? void 0 : group.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView);\n emitter.emit(event_1.ChartEvent.BEFORE_RENDER);\n // Plot the chart and mutate context.\n // Make sure that plot chart after container is ready for every time.\n (0, plot_1.plot)(Object.assign(Object.assign({}, keyed), { width, height }), selection, context)\n .then(() => {\n var _a;\n (_a = context.canvas) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(() => {\n emitter.emit(event_1.ChartEvent.AFTER_RENDER);\n resolve === null || resolve === void 0 ? void 0 : resolve();\n });\n })\n .catch((e) => {\n reject === null || reject === void 0 ? void 0 : reject(e);\n });\n // Return the Group wraps the canvas or svg element.\n return group;\n}\nexports.renderToMountedElement = renderToMountedElement;\nfunction destroy(options, context = {}, isDestroyCanvas = false) {\n const { canvas, emitter } = context;\n if (canvas) {\n destroyAllInteractions(canvas);\n isDestroyCanvas ? canvas.destroy() : canvas.destroyChildren();\n }\n emitter.off();\n}\nexports.destroy = destroy;\n/**\n * Destroy all interactions mounted on the canvas.\n */\nfunction destroyAllInteractions(canvas) {\n const viewGroups = canvas.getRoot().querySelectorAll(`.${constant_1.VIEW_CLASS_NAME}`);\n viewGroups === null || viewGroups === void 0 ? void 0 : viewGroups.forEach((group) => {\n const { nameInteraction = new Map() } = group;\n if ((nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.size) > 0) {\n Array.from(nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.values()).forEach((value) => {\n value === null || value === void 0 ? void 0 : value.destroy();\n });\n }\n });\n}\nfunction normalizeContainer(container) {\n return typeof container === 'string'\n ? document.getElementById(container)\n : container;\n}\n//# sourceMappingURL=render.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChartEvent = void 0;\n// to prevent users from tampering with internal values.\nexports.ChartEvent = {\n BEFORE_RENDER: 'beforerender',\n AFTER_RENDER: 'afterrender',\n BEFORE_PAINT: 'beforepaint',\n AFTER_PAINT: 'afterpaint',\n BEFORE_CHANGE_DATA: 'beforechangedata',\n AFTER_CHANGE_DATA: 'afterchangedata',\n BEFORE_CLEAR: 'beforeclear',\n AFTER_CLEAR: 'afterclear',\n BEFORE_DESTROY: 'beforedestroy',\n AFTER_DESTROY: 'afterdestroy',\n BEFORE_CHANGE_SIZE: 'beforechangesize',\n AFTER_CHANGE_SIZE: 'afterchangesize',\n POINTER_TAP: 'pointertap',\n POINTER_DOWN: 'pointerdown',\n POINTER_UP: 'pointerup',\n POINTER_OVER: 'pointerover',\n POINTER_OUT: 'pointerout',\n POINTER_MOVE: 'pointermove',\n POINTER_ENTER: 'pointerenter',\n POINTER_LEAVE: 'pointerleave',\n POINTER_UPOUTSIDE: 'pointerupoutside',\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_END: 'dragend',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'DROP',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n};\n//# sourceMappingURL=event.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseOptionsExpr = exports.EXPR_WHITE_LIST = void 0;\nconst expr_1 = require(\"@antv/expr\");\nconst util_1 = require(\"@antv/util\");\nconst lru_1 = require(\"./lru\");\n// Whitelist of properties that can contain expressions.\nexports.EXPR_WHITE_LIST = ['style', 'encode', 'labels', 'children'];\n/**\n * Compiles an expression string into a function.\n * @param expr Expression string to compile.\n * @returns Compiled function or original string if empty.\n */\nconst compileExpression = (0, lru_1.lru)((expr) => {\n const evaluator = (0, expr_1.compile)(expr);\n return (...args) => {\n const paramNames = Array.from({ length: args.length }, (_, i) => String.fromCharCode(97 + i));\n const namedParams = Object.fromEntries(args.map((value, index) => [paramNames[index], value]));\n // global is used to overview what can i get in props.\n return evaluator(Object.assign(Object.assign({}, namedParams), { global: Object.assign({}, namedParams) }));\n };\n}, (expr) => expr, 128);\n/**\n * Processes options object to convert expressions to functions.\n * @param options Options object to process.\n * @param isSpecRoot Whether the options is the root of the spec.\n * @returns Processed options object with expressions converted to functions.\n */\nfunction parseOptionsExpr(options, isSpecRoot = true) {\n if (Array.isArray(options)) {\n return options.map((_, i) => parseOptionsExpr(options[i], isSpecRoot));\n }\n if (typeof options === 'object' && options) {\n return (0, util_1.mapValues)(options, (value, key) => {\n // if options is root and the key is in the white list, parse the expression.\n if (isSpecRoot && exports.EXPR_WHITE_LIST.includes(key)) {\n return parseOptionsExpr(value, key === 'children');\n }\n if (!isSpecRoot) {\n return parseOptionsExpr(value, false);\n }\n return value;\n });\n }\n // if options is a string and is a valid expression.\n if (typeof options === 'string') {\n const trimmed = options.trim();\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n return compileExpression(trimmed.slice(1, -1));\n }\n }\n return options;\n}\nexports.parseOptionsExpr = parseOptionsExpr;\n//# sourceMappingURL=expr.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.applyStyle = exports.plot = void 0;\nconst g_1 = require(\"@antv/g\");\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst array_1 = require(\"../utils/array\");\nconst event_1 = require(\"../utils/event\");\nconst helper_1 = require(\"../utils/helper\");\nconst selection_1 = require(\"../utils/selection\");\nconst component_1 = require(\"./component\");\nconst constant_1 = require(\"./constant\");\nconst coordinate_1 = require(\"./coordinate\");\nconst layout_1 = require(\"./layout\");\nconst library_1 = require(\"./library\");\nconst mark_1 = require(\"./mark\");\nconst scale_1 = require(\"./scale\");\nconst transform_1 = require(\"./transform\");\nfunction plot(options, selection, context) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useComposition] = (0, library_1.useLibrary)('composition', library);\n const [useInteraction] = (0, library_1.useLibrary)('interaction', library);\n // Some helper functions.\n const marks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /mark\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(helper_1.defined));\n const staticMarks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /component\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(helper_1.defined));\n const typeOf = (node) => {\n const { type } = node;\n if (typeof type === 'function') {\n // @ts-ignore\n const { props = {} } = type;\n const { composite = true } = props;\n if (composite)\n return 'mark';\n }\n if (typeof type !== 'string')\n return type;\n if (marks.has(type) || staticMarks.has(type))\n return 'mark';\n return type;\n };\n const isMark = (node) => typeOf(node) === 'mark';\n const isStandardView = (node) => typeOf(node) === 'standardView';\n const isStaticMark = (node) => {\n const { type } = node;\n if (typeof type !== 'string')\n return false;\n if (staticMarks.has(type))\n return true;\n return false;\n };\n const transform = (node) => {\n if (isStandardView(node))\n return [node];\n const type = typeOf(node);\n const composition = useComposition({ type, static: isStaticMark(node) });\n return composition(node);\n };\n // Some temporary variables help parse the view tree.\n const views = [];\n const viewNode = new Map();\n const nodeState = new Map();\n const discovered = [options];\n const nodeGenerators = [];\n while (discovered.length) {\n const node = discovered.shift();\n if (isStandardView(node)) {\n // Initialize view to get data to be visualized. If the marks\n // of the view have already been initialized (facet view),\n // initialize the view based on the initialized mark states,\n // otherwise initialize it from beginning.\n const state = nodeState.get(node);\n const [view, children] = state\n ? initializeState(state, node, library)\n : yield initializeView(node, context);\n viewNode.set(view, node);\n views.push(view);\n // Transform children, they will be transformed into\n // standardView if they are mark or view node.\n const transformedNodes = children\n .flatMap(transform)\n .map((d) => (0, coordinate_1.coordinate2Transform)(d, library));\n discovered.push(...transformedNodes);\n // Only StandardView can be treated as facet and it\n // should sync position scales among facets normally.\n if (transformedNodes.every(isStandardView)) {\n const states = yield Promise.all(transformedNodes.map((d) => initializeMarks(d, context)));\n // Note!!!\n // This will mutate scales for marks.\n (0, scale_1.syncFacetsScales)(states);\n for (let i = 0; i < transformedNodes.length; i++) {\n const nodeT = transformedNodes[i];\n const state = states[i];\n nodeState.set(nodeT, state);\n }\n }\n }\n else {\n // Apply transform to get data in advance for non-mark composition\n // node, which makes sure that composition node can preprocess the\n // data to produce more nodes based on it.\n const n = isMark(node) ? node : yield applyTransform(node, context);\n const N = transform(n);\n if (Array.isArray(N))\n discovered.push(...N);\n else if (typeof N === 'function')\n nodeGenerators.push(N());\n }\n }\n context.emitter.emit(event_1.ChartEvent.BEFORE_PAINT);\n // Plot chart.\n const enterContainer = new Map();\n const updateContainer = new Map();\n const transitions = [];\n selection\n .selectAll(className(constant_1.VIEW_CLASS_NAME))\n .data(views, (d) => d.key)\n .join((enter) => enter\n .append('g')\n .attr('className', constant_1.VIEW_CLASS_NAME)\n .attr('id', (view) => view.key)\n .call(applyTranslate)\n .each(function (view, i, element) {\n plotView(view, (0, selection_1.select)(element), transitions, context);\n enterContainer.set(view, element);\n }), (update) => update.call(applyTranslate).each(function (view, i, element) {\n plotView(view, (0, selection_1.select)(element), transitions, context);\n updateContainer.set(view, element);\n }), (exit) => exit\n .each(function (d, i, element) {\n // Remove existed interactions.\n const interactions = element['nameInteraction'].values();\n for (const interaction of interactions) {\n interaction.destroy();\n }\n })\n .remove());\n // Apply interactions.\n const viewInstanceof = (viewContainer, updateInteractions, oldStore) => {\n return Array.from(viewContainer.entries()).map(([view, container]) => {\n // Index state by component or interaction name,\n // such as legend, scrollbar, brushFilter.\n // Each state transform options to another options.\n const store = oldStore || new Map();\n const setState = (key, reducer = (x) => x) => store.set(key, reducer);\n const options = viewNode.get(view);\n const update = createUpdateView((0, selection_1.select)(container), options, context);\n return {\n view,\n container,\n options,\n setState,\n update: (from, updateTypes) => __awaiter(this, void 0, void 0, function* () {\n // Apply all state functions to get new options.\n const reducer = (0, helper_1.compose)(Array.from(store.values()));\n const newOptions = reducer(options);\n return yield update(newOptions, from, () => {\n if ((0, util_1.isArray)(updateTypes)) {\n updateInteractions(viewContainer, updateTypes, store);\n }\n });\n }),\n };\n });\n };\n const updateInteractions = (container = updateContainer, updateType, oldStore) => {\n var _a;\n // Interactions for update views.\n const updateViewInstances = viewInstanceof(container, updateInteractions, oldStore);\n for (const target of updateViewInstances) {\n const { options, container } = target;\n const nameInteraction = container['nameInteraction'];\n let typeOptions = inferInteraction(options);\n if (updateType) {\n typeOptions = typeOptions.filter((v) => updateType.includes(v[0]));\n }\n for (const typeOption of typeOptions) {\n const [type, option] = typeOption;\n // Remove interaction for existed views.\n const prevInteraction = nameInteraction.get(type);\n if (prevInteraction)\n (_a = prevInteraction.destroy) === null || _a === void 0 ? void 0 : _a.call(prevInteraction);\n // Apply new interaction.\n if (option) {\n const interaction = useThemeInteraction(target.view, type, option, useInteraction);\n const destroy = interaction(target, updateViewInstances, context.emitter);\n nameInteraction.set(type, { destroy });\n }\n }\n }\n };\n // Interactions for enter views.\n const enterViewInstances = viewInstanceof(enterContainer, updateInteractions);\n for (const target of enterViewInstances) {\n const { options } = target;\n // A Map index interaction by interaction name.\n const nameInteraction = new Map();\n target.container['nameInteraction'] = nameInteraction;\n // Apply interactions.\n for (const typeOption of inferInteraction(options)) {\n const [type, option] = typeOption;\n if (option) {\n const interaction = useThemeInteraction(target.view, type, option, useInteraction);\n const destroy = interaction(target, enterViewInstances, context.emitter);\n nameInteraction.set(type, { destroy });\n }\n }\n }\n updateInteractions();\n // Author animations.\n const { width, height } = options;\n const keyframes = [];\n for (const nodeGenerator of nodeGenerators) {\n // Delay the rendering of animation keyframe. Different animation\n // created by different nodeGenerator will play in the same time.\n // eslint-disable-next-line no-async-promise-executor\n const keyframe = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n for (const node of nodeGenerator) {\n const sizedNode = Object.assign({ width, height }, node);\n yield plot(sizedNode, selection, context);\n }\n resolve();\n }));\n keyframes.push(keyframe);\n }\n context.views = views;\n // Clear and update animation.\n (_a = context.animations) === null || _a === void 0 ? void 0 : _a.forEach((animation) => animation === null || animation === void 0 ? void 0 : animation.cancel());\n context.animations = transitions;\n context.emitter.emit(event_1.ChartEvent.AFTER_PAINT);\n // Note!!!\n // The returned promise will never resolved if one of nodeGenerator\n // never stop to yield node, which may created by a keyframe composition\n // with iteration count set to infinite.\n const finished = transitions\n .filter(helper_1.defined)\n .map(cancel)\n .map((d) => d.finished);\n return Promise.all([...finished, ...keyframes]);\n });\n}\nexports.plot = plot;\nfunction applyTranslate(selection) {\n selection.style('transform', (d) => `translate(${d.layout.x}, ${d.layout.y})`);\n}\nfunction definedInteraction(library) {\n const [, createInteraction] = (0, library_1.useLibrary)('interaction', library);\n return (d) => {\n const [name, options] = d;\n try {\n return [name, createInteraction(name)];\n }\n catch (_a) {\n return [name, options.type];\n }\n };\n}\nfunction createUpdateView(selection, options, context) {\n const { library } = context;\n const createDefinedInteraction = definedInteraction(library);\n const filter = (d) => d[1] && d[1].props && d[1].props.reapplyWhenUpdate;\n const interactions = inferInteraction(options);\n const updates = interactions\n .map(createDefinedInteraction)\n .filter(filter)\n .map((d) => d[0]);\n return (newOptions, source, callback) => __awaiter(this, void 0, void 0, function* () {\n const transitions = [];\n const [newView, newChildren] = yield initializeView(newOptions, context);\n plotView(newView, selection, transitions, context);\n // Update interaction need to reapply when update.\n for (const name of updates.filter((d) => d !== source)) {\n updateInteraction(name, selection, newOptions, newView, context);\n }\n for (const child of newChildren) {\n plot(child, selection, context);\n }\n callback();\n return { options: newOptions, view: newView };\n });\n}\nfunction updateInteraction(name, selection, options, view, context) {\n var _a;\n const { library } = context;\n const [useInteraction] = (0, library_1.useLibrary)('interaction', library);\n // Instances for interaction.\n const container = selection.node();\n const nameInteraction = container['nameInteraction'];\n const interactionOptions = inferInteraction(options).find(([d]) => d === name);\n // Destroy older interaction.\n const interaction = nameInteraction.get(name);\n if (!interaction)\n return;\n (_a = interaction.destroy) === null || _a === void 0 ? void 0 : _a.call(interaction);\n if (!interactionOptions[1])\n return;\n // Apply new interaction.\n const applyInteraction = useThemeInteraction(view, name, interactionOptions[1], useInteraction);\n const target = {\n options,\n view,\n container: selection.node(),\n update: (options) => Promise.resolve(options),\n };\n const destroy = applyInteraction(target, [], context.emitter);\n nameInteraction.set(name, { destroy });\n}\nfunction initializeView(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const flattenOptions = yield transformMarks(options, context);\n const mergedOptions = bubbleOptions(flattenOptions);\n // @todo Remove this.\n // !!! NOTE: Mute original view options.\n // Update interaction and coordinate for this view.\n options.interaction = mergedOptions.interaction;\n options.coordinate = mergedOptions.coordinate;\n // @ts-ignore\n options.marks = [...mergedOptions.marks, ...mergedOptions.components];\n const transformedOptions = (0, coordinate_1.coordinate2Transform)(mergedOptions, library);\n const state = yield initializeMarks(transformedOptions, context);\n return initializeState(state, transformedOptions, library);\n });\n}\nfunction bubbleOptions(options) {\n const { coordinate: viewCoordinate = {}, interaction: viewInteraction = {}, style: viewStyle = {}, marks } = options, rest = __rest(options, [\"coordinate\", \"interaction\", \"style\", \"marks\"]);\n const markCoordinates = marks.map((d) => d.coordinate || {});\n const markInteractions = marks.map((d) => d.interaction || {});\n const markViewStyles = marks.map((d) => d.viewStyle || {});\n const newCoordinate = [...markCoordinates, viewCoordinate].reduceRight((prev, cur) => (0, util_1.deepMix)(prev, cur), {});\n const newInteraction = [viewInteraction, ...markInteractions].reduce((prev, cur) => (0, util_1.deepMix)(prev, cur), {});\n const newStyle = [...markViewStyles, viewStyle].reduce((prev, cur) => (0, util_1.deepMix)(prev, cur), {});\n return Object.assign(Object.assign({}, rest), { marks, coordinate: newCoordinate, interaction: newInteraction, style: newStyle });\n}\nfunction transformMarks(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useMark, createMark] = (0, library_1.useLibrary)('mark', library);\n const staticMarks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /component\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(helper_1.defined));\n const { marks } = options;\n const flattenMarks = [];\n const components = [];\n const discovered = [...marks];\n const { width, height } = (0, layout_1.computeRoughPlotSize)(options);\n const markOptions = { options, width, height };\n // Pre order traversal.\n while (discovered.length) {\n const [node] = discovered.splice(0, 1);\n // Apply data transform to get data.\n const mark = (yield applyTransform(node, context));\n const { type = (0, helper_1.error)('G2Mark type is required.'), key } = mark;\n // For components.\n if (staticMarks.has(type))\n components.push(mark);\n else {\n const { props = {} } = createMark(type);\n const { composite = true } = props;\n if (!composite)\n flattenMarks.push(mark);\n else {\n // Unwrap data from { value: data } to data,\n // then the composite mark can process the normalized data.\n const { data } = mark;\n const newMark = Object.assign(Object.assign({}, mark), { data: data ? (Array.isArray(data) ? data : data.value) : data });\n // Convert composite mark to marks.\n const marks = yield useMark(newMark, markOptions);\n const M = Array.isArray(marks) ? marks : [marks];\n discovered.unshift(...M.map((d, i) => (Object.assign(Object.assign({}, d), { key: `${key}-${i}` }))));\n }\n }\n }\n return Object.assign(Object.assign({}, options), { marks: flattenMarks, components });\n });\n}\nfunction initializeMarks(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useTheme] = (0, library_1.useLibrary)('theme', library);\n const [, createMark] = (0, library_1.useLibrary)('mark', library);\n const { theme: partialTheme, marks: partialMarks, coordinates = [], } = options;\n const theme = useTheme(inferTheme(partialTheme));\n const markState = new Map();\n // Initialize channels for marks.\n for (const markOptions of partialMarks) {\n const { type } = markOptions;\n const { props = {} } = createMark(type);\n const markAndState = yield (0, mark_1.initializeMark)(markOptions, props, context);\n if (markAndState) {\n const [initializedMark, state] = markAndState;\n markState.set(initializedMark, state);\n }\n }\n // Group channels by scale key, each group has scale.\n const scaleChannels = (0, d3_array_1.group)(Array.from(markState.values()).flatMap((d) => d.channels), ({ scaleKey }) => scaleKey);\n // Infer scale for each channel groups.\n for (const channels of scaleChannels.values()) {\n // Merge scale options for these channels.\n const scaleOptions = channels.reduce((total, { scale }) => (0, util_1.deepMix)(total, scale), {});\n const { scaleKey } = channels[0];\n // Use the fields of the first channel as the title.\n const { values: FV } = channels[0];\n const fields = Array.from(new Set(FV.map((d) => d.field).filter(helper_1.defined)));\n const options = (0, util_1.deepMix)({\n guide: { title: fields.length === 0 ? undefined : fields },\n field: fields[0],\n }, scaleOptions);\n // Use the name of the first channel as the scale name.\n const { name } = channels[0];\n const values = channels.flatMap(({ values }) => values.map((d) => d.value));\n const scale = Object.assign(Object.assign({}, (0, scale_1.inferScale)(name, values, options, coordinates, theme, library)), { uid: Symbol('scale'), key: scaleKey });\n channels.forEach((channel) => (channel.scale = scale));\n }\n return markState;\n });\n}\nfunction useThemeInteraction(view, type, option, useInteraction) {\n const theme = view.theme;\n const defaults = typeof type === 'string' ? theme[type] || {} : {};\n const interaction = useInteraction((0, util_1.deepMix)(defaults, Object.assign({ type }, option)));\n return interaction;\n}\nfunction initializeState(markState, options, library) {\n var _a;\n const [useMark] = (0, library_1.useLibrary)('mark', library);\n const [useTheme] = (0, library_1.useLibrary)('theme', library);\n const [useLabelTransform] = (0, library_1.useLibrary)('labelTransform', library);\n const { key, frame = false, theme: partialTheme, clip, style = {}, labelTransform = [], } = options;\n const theme = useTheme(inferTheme(partialTheme));\n // Infer components and compute layout.\n const states = Array.from(markState.values());\n const scales = (0, scale_1.collectScales)(states, options);\n const components = (0, component_1.normalizeComponents)((0, component_1.inferComponent)(inferComponentScales(Array.from(scales), states, markState), options, library));\n const layout = (0, layout_1.computeLayout)(components, options, theme, library);\n const coordinate = (0, coordinate_1.createCoordinate)(layout, options, library);\n const framedStyle = frame\n ? (0, util_1.deepMix)({ mainLineWidth: 1, mainStroke: '#000' }, style)\n : style;\n // Place components and mutate their bbox.\n (0, layout_1.placeComponents)((0, component_1.groupComponents)(components), coordinate, layout);\n // AxisZ need a copy of axisX and axisY to show grids in X-Z & Y-Z planes.\n (0, layout_1.processAxisZ)(components);\n // Index scale instance by uid.\n const uidScale = new Map(Array.from(markState.values()).flatMap((state) => {\n const { channels } = state;\n return channels.map(({ scale }) => [\n scale.uid,\n (0, scale_1.useRelationScale)(scale, library),\n ]);\n }));\n (0, scale_1.groupTransform)(markState, uidScale);\n // Scale from marks and components.\n const scaleInstance = {};\n // Initialize scale from components.\n for (const component of components) {\n const { scales: scaleDescriptors = [] } = component;\n const scales = [];\n for (const descriptor of scaleDescriptors) {\n const { name, uid } = descriptor;\n const scale = (_a = uidScale.get(uid)) !== null && _a !== void 0 ? _a : (0, scale_1.useRelationScale)(descriptor, library);\n scales.push(scale);\n // Delivery the scale of axisX to the AxisY,\n // in order to calculate the angle of axisY component when rendering radar chart.\n if (name === 'y') {\n scale.update(Object.assign(Object.assign({}, scale.getOptions()), { xScale: scaleInstance.x }));\n }\n (0, scale_1.assignScale)(scaleInstance, { [name]: scale });\n }\n component.scaleInstances = scales;\n }\n // Calc data to be rendered for each mark.\n // @todo More readable APIs for Container which stays\n // the same style with JS standard and lodash APIs.\n // @todo More proper way to index scale for different marks.\n const children = [];\n const dataMap = new Map();\n for (const [mark, state] of markState.entries()) {\n const { \n // scale,\n // Callback to create children options based on this mark.\n children: createChildren, \n // The total count of data (both show and hide)for this facet.\n // This is for unit visualization to sync data domain.\n dataDomain, modifier, key: markKey, data, } = mark;\n dataMap.set(markKey, data);\n const { index, channels, tooltip } = state;\n const scale = Object.fromEntries(channels.map(({ name, scale }) => [name, scale]));\n // Transform abstract value to visual value by scales.\n const markScaleInstance = (0, array_1.mapObject)(scale, ({ uid }) => uidScale.get(uid));\n (0, scale_1.assignScale)(scaleInstance, markScaleInstance);\n const value = (0, scale_1.applyScale)(channels, markScaleInstance);\n // Calc points and transformation for each data,\n // and then transform visual value to visual data.\n const calcPoints = useMark(mark);\n const [I, P, S] = filterValid(calcPoints(index, markScaleInstance, value, coordinate));\n const count = dataDomain || I.length;\n const T = modifier ? modifier(P, count, layout) : [];\n const titleOf = (i) => { var _a, _b; return (_b = (_a = tooltip.title) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.value; };\n const itemsOf = (i) => tooltip.items.map((V) => V[i]);\n const visualData = I.map((d, i) => {\n const datum = Object.assign({ points: P[i], transform: T[i], index: d, markKey, viewKey: key, data: data[d] }, (tooltip && {\n title: titleOf(d),\n items: itemsOf(d),\n }));\n for (const [k, V] of Object.entries(value)) {\n datum[k] = V[d];\n if (S)\n datum[`series${(0, util_1.upperFirst)(k)}`] = S[i].map((i) => V[i]);\n }\n if (S)\n datum['seriesIndex'] = S[i];\n if (S && tooltip) {\n datum['seriesItems'] = S[i].map((si) => itemsOf(si));\n datum['seriesTitle'] = S[i].map((si) => titleOf(si));\n }\n return datum;\n });\n state.data = visualData;\n state.index = I;\n // Create children options by children callback,\n // and then propagate data to each child.\n const markChildren = createChildren === null || createChildren === void 0 ? void 0 : createChildren(visualData, markScaleInstance, layout);\n children.push(...(markChildren || []));\n }\n const view = {\n layout,\n theme,\n coordinate,\n markState,\n key,\n clip,\n scale: scaleInstance,\n style: framedStyle,\n components,\n data: dataMap,\n labelTransform: (0, helper_1.compose)(labelTransform.map(useLabelTransform)),\n };\n return [view, children];\n}\nfunction plotView(view, selection, transitions, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const { components, theme, layout, markState, coordinate, key, style, clip, scale, } = view;\n // Render background for the different areas.\n const { x, y, width, height } = layout, rest = __rest(layout, [\"x\", \"y\", \"width\", \"height\"]);\n const areaKeys = ['view', 'plot', 'main', 'content'];\n const I = areaKeys.map((_, i) => i);\n const sizeKeys = ['a', 'margin', 'padding', 'inset'];\n const areaStyles = areaKeys.map((d) => (0, helper_1.maybeSubObject)(Object.assign({}, theme.view, style), d));\n const areaSizes = sizeKeys.map((d) => (0, helper_1.subObject)(rest, d));\n const styleArea = (selection) => selection\n .style('x', (i) => areaLayouts[i].x)\n .style('y', (i) => areaLayouts[i].y)\n .style('width', (i) => areaLayouts[i].width)\n .style('height', (i) => areaLayouts[i].height)\n .each(function (i, d, element) {\n applyStyle((0, selection_1.select)(element), areaStyles[i]);\n });\n let px = 0;\n let py = 0;\n let pw = width;\n let ph = height;\n const areaLayouts = I.map((i) => {\n const size = areaSizes[i];\n const { left = 0, top = 0, bottom = 0, right = 0 } = size;\n px += left;\n py += top;\n pw -= left + right;\n ph -= top + bottom;\n return {\n x: px,\n y: py,\n width: pw,\n height: ph,\n };\n });\n selection\n .selectAll(className(constant_1.AREA_CLASS_NAME))\n .data(\n // Only render area with defined style.\n I.filter((i) => (0, helper_1.defined)(areaStyles[i])), (i) => areaKeys[i])\n .join((enter) => enter\n .append('rect')\n .attr('className', constant_1.AREA_CLASS_NAME)\n .style('zIndex', -2)\n .call(styleArea), (update) => update.call(styleArea), (exit) => exit.remove());\n const animationExtent = computeAnimationExtent(markState);\n const componentAnimateOptions = animationExtent\n ? { duration: animationExtent[1] }\n : false;\n // Render components.\n // @todo renderComponent return ctor and options.\n // Key for each type of component.\n // Index them grouped by position.\n for (const [, C] of (0, d3_array_1.groups)(components, (d) => `${d.type}-${d.position}`)) {\n C.forEach((d, i) => (d.index = i));\n }\n const componentsTransitions = selection\n .selectAll(className(constant_1.COMPONENT_CLASS_NAME))\n .data(components, (d) => `${d.type}-${d.position}-${d.index}`)\n .join((enter) => enter\n .append('g')\n .style('zIndex', ({ zIndex }) => zIndex || -1)\n .attr('className', constant_1.COMPONENT_CLASS_NAME)\n .append((options) => (0, component_1.renderComponent)((0, util_1.deepMix)({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState)), (update) => update.transition(function (options, i, element) {\n const { preserve = false } = options;\n if (preserve)\n return;\n const newComponent = (0, component_1.renderComponent)((0, util_1.deepMix)({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState);\n const { attributes } = newComponent;\n const [node] = element.childNodes;\n return node.update(attributes, false);\n }))\n .transitions();\n transitions.push(...componentsTransitions.flat().filter(helper_1.defined));\n // Main layer is for showing the main visual representation such as marks. There\n // may be multiple main layers for a view, each main layer correspond to one of marks.\n // @todo Test DOM structure.\n const T = selection\n .selectAll(className(constant_1.PLOT_CLASS_NAME))\n .data([layout], () => key)\n .join((enter) => enter\n // Make this layer interactive, such as click and mousemove events.\n .append('rect')\n .style('zIndex', 0)\n .style('fill', 'transparent')\n .attr('className', constant_1.PLOT_CLASS_NAME)\n .call(updateBBox)\n .call(updateLayers, Array.from(markState.keys()))\n .call(applyClip, clip), (update) => update\n .call(updateLayers, Array.from(markState.keys()))\n .call((selection) => {\n return animationExtent\n ? animateBBox(selection, animationExtent)\n : updateBBox(selection);\n })\n .call(applyClip, clip))\n .transitions();\n transitions.push(...T.flat());\n // Render marks with corresponding data.\n for (const [mark, state] of markState.entries()) {\n const { data } = state;\n const { key, class: cls, type } = mark;\n const viewNode = selection.select(`#${key}`);\n const shapeFunction = createMarkShapeFunction(mark, state, view, context);\n const enterFunction = createEnterFunction(mark, state, view, library);\n const updateFunction = createUpdateFunction(mark, state, view, library);\n const exitFunction = createExitFunction(mark, state, view, library);\n const facetElements = selectFacetElements(selection, viewNode, cls, 'element');\n const T = viewNode\n .selectAll(className(constant_1.ELEMENT_CLASS_NAME))\n .selectFacetAll(facetElements)\n .data(data, (d) => d.key, (d) => d.groupKey)\n .join((enter) => enter\n .append(shapeFunction)\n // Note!!! Only one className can be set.\n // Using attribute as alternative for other classNames.\n .attr('className', constant_1.ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .transition(function (data, i, element) {\n return enterFunction(data, [element]);\n }), (update) => update.call((selection) => {\n const parent = selection.parent();\n const origin = (0, helper_1.useMemo)((node) => {\n const [x, y] = node.getBounds().min;\n return [x, y];\n });\n selection\n .transition(function (data, index, element) {\n maybeFacetElement(element, parent, origin);\n const node = shapeFunction(data, index);\n const animation = updateFunction(data, [element], [node]);\n if (animation === null || animation === void 0 ? void 0 : animation.length)\n return animation;\n if (element.nodeName === node.nodeName &&\n node.nodeName !== 'g') {\n (0, helper_1.copyAttributes)(element, node);\n }\n else {\n element.parentNode.replaceChild(node, element);\n node.className = constant_1.ELEMENT_CLASS_NAME;\n // @ts-ignore\n node.markType = type;\n // @ts-ignore\n node.__data__ = element.__data__;\n }\n return animation;\n })\n .attr('markType', type)\n .attr('className', constant_1.ELEMENT_CLASS_NAME);\n }), (exit) => {\n return exit\n .each(function (d, i, element) {\n element.__removed__ = true;\n })\n .transition(function (data, i, element) {\n return exitFunction(data, [element]);\n })\n .remove();\n }, (merge) => merge\n // Append elements to be merged.\n .append(shapeFunction)\n .attr('className', constant_1.ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .transition(function (data, i, element) {\n // Remove merged elements after animation finishing.\n const { __fromElements__: fromElements } = element;\n const transition = updateFunction(data, fromElements, [element]);\n const exit = new selection_1.Selection(fromElements, null, element.parentNode);\n exit.transition(transition).remove();\n return transition;\n }), (split) => split\n .transition(function (data, i, element) {\n // Append splitted shapes.\n const enter = new selection_1.Selection([], element.__toData__, element.parentNode);\n const toElements = enter\n .append(shapeFunction)\n .attr('className', constant_1.ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .nodes();\n return updateFunction(data, [element], toElements);\n })\n // Remove elements to be splitted after animation finishing.\n .remove())\n .transitions();\n transitions.push(...T.flat());\n }\n // Plot label for this view.\n plotLabel(view, selection, transitions, library, context);\n });\n}\n/**\n * Auto hide labels be specify label layout.\n */\nfunction plotLabel(view, selection, transitions, library, context) {\n const [useLabelTransform] = (0, library_1.useLibrary)('labelTransform', library);\n const { markState, labelTransform } = view;\n const labelLayer = selection.select(className(constant_1.LABEL_LAYER_CLASS_NAME)).node();\n // A Map index shapeFunction by label.\n const labelShapeFunction = new Map();\n // A Map index options by label.\n const labelDescriptor = new Map();\n // Get all labels for this view.\n const labels = Array.from(markState.entries()).flatMap(([mark, state]) => {\n const { labels: labelOptions = [], key } = mark;\n const shapeFunction = createLabelShapeFunction(mark, state, view, library, context);\n const elements = selection\n .select(`#${key}`)\n .selectAll(className(constant_1.ELEMENT_CLASS_NAME))\n .nodes()\n // Only select the valid element.\n .filter((n) => !n.__removed__);\n return labelOptions.flatMap((labelOption, i) => {\n const { transform = [] } = labelOption, options = __rest(labelOption, [\"transform\"]);\n return elements.flatMap((e) => {\n const L = getLabels(options, i, e);\n L.forEach((l) => {\n labelShapeFunction.set(l, (data) => shapeFunction(Object.assign(Object.assign({}, data), { element: e })));\n labelDescriptor.set(l, labelOption);\n });\n return L;\n });\n });\n });\n // Render all labels.\n const labelShapes = (0, selection_1.select)(labelLayer)\n .selectAll(className(constant_1.LABEL_CLASS_NAME))\n .data(labels, (d) => d.key)\n .join((enter) => enter\n .append((d) => labelShapeFunction.get(d)(d))\n .attr('className', constant_1.LABEL_CLASS_NAME), (update) => update.each(function (d, i, element) {\n // @todo Handle Label with different type.\n const shapeFunction = labelShapeFunction.get(d);\n const node = shapeFunction(d);\n (0, helper_1.copyAttributes)(element, node);\n }), (exit) => exit.remove())\n .nodes();\n // Apply group-level transforms.\n const labelGroups = (0, d3_array_1.group)(labelShapes, (d) => labelDescriptor.get(d.__data__));\n const { coordinate, layout } = view;\n const labelTransformContext = {\n canvas: context.canvas,\n coordinate,\n layout,\n };\n for (const [label, shapes] of labelGroups) {\n const { transform = [] } = label;\n const transformFunction = (0, helper_1.compose)(transform.map(useLabelTransform));\n transformFunction(shapes, labelTransformContext);\n }\n // Apply view-level transform.\n if (labelTransform) {\n labelTransform(labelShapes, labelTransformContext);\n }\n}\nfunction getLabels(label, labelIndex, element) {\n const { seriesIndex: SI, seriesKey, points, key, index } = element.__data__;\n const bounds = getLocalBounds(element);\n if (!SI) {\n return [\n Object.assign(Object.assign({}, label), { key: `${key}-${labelIndex}`, bounds,\n index,\n points, dependentElement: element }),\n ];\n }\n const selector = normalizeLabelSelector(label);\n const F = SI.map((index, i) => (Object.assign(Object.assign({}, label), { key: `${seriesKey[i]}-${labelIndex}`, bounds: [points[i]], index,\n points, dependentElement: element })));\n return selector ? selector(F) : F;\n}\nfunction filterValid([I, P, S]) {\n if (S)\n return [I, P, S];\n const definedIndex = [];\n const definedPoints = [];\n for (let i = 0; i < I.length; i++) {\n const d = I[i];\n const p = P[i];\n if (p.every(([x, y]) => (0, helper_1.defined)(x) && (0, helper_1.defined)(y))) {\n definedIndex.push(d);\n definedPoints.push(p);\n }\n }\n return [definedIndex, definedPoints];\n}\nfunction normalizeLabelSelector(label) {\n const { selector } = label;\n if (!selector)\n return null;\n if (typeof selector === 'function')\n return selector;\n if (selector === 'first')\n return (I) => [I[0]];\n if (selector === 'last')\n return (I) => [I[I.length - 1]];\n throw new Error(`Unknown selector: ${selector}`);\n}\n/**\n * Avoid getting error bounds caused by element animations.\n * @todo Remove this temporary handle method, if runtime supports\n * correct process: drawElement, do label layout and then do\n * transitions together.\n */\nfunction getLocalBounds(element) {\n const cloneElement = element.cloneNode(true);\n const animations = element.getAnimations();\n cloneElement.style.visibility = 'hidden';\n animations.forEach((animation) => {\n const keyframes = animation.effect.getKeyframes();\n cloneElement.attr(keyframes[keyframes.length - 1]);\n });\n element.parentNode.appendChild(cloneElement);\n const bounds = cloneElement.getLocalBounds();\n cloneElement.destroy();\n const { min, max } = bounds;\n return [min, max];\n}\nfunction createLabelShapeFunction(mark, state, view, library, context) {\n const [useShape] = (0, library_1.useLibrary)('shape', library);\n const { data: abstractData, encode } = mark;\n const { data: visualData, defaultLabelShape } = state;\n const point2d = visualData.map((d) => d.points);\n const channel = (0, array_1.mapObject)(encode, (d) => d.value);\n // Assemble Context.\n const { theme, coordinate } = view;\n const shapeContext = Object.assign(Object.assign({}, context), { document: (0, library_1.documentOf)(context), theme,\n coordinate });\n return (options) => {\n // Computed values from data and styles.\n const { index, points } = options;\n const datum = abstractData[index];\n const { formatter = (d) => `${d}`, transform, style: abstractStyle, render, selector, element } = options, abstractOptions = __rest(options, [\"formatter\", \"transform\", \"style\", \"render\", \"selector\", \"element\"]);\n const visualOptions = (0, array_1.mapObject)(Object.assign(Object.assign({}, abstractOptions), abstractStyle), (d) => valueOf(d, datum, index, abstractData, {\n channel,\n element,\n }));\n const { shape = defaultLabelShape, text } = visualOptions, style = __rest(visualOptions, [\"shape\", \"text\"]);\n const f = typeof formatter === 'string' ? (0, d3_format_1.format)(formatter) : formatter;\n const value = Object.assign(Object.assign({}, style), { text: f(text, datum, index, abstractData), datum });\n // Params for create shape.\n const shapeOptions = Object.assign({ type: `label.${shape}`, render }, style);\n const shapeFunction = useShape(shapeOptions, shapeContext);\n const defaults = getDefaultsStyle(theme, 'label', shape, 'label');\n return shapeFunction(points, value, defaults, point2d);\n };\n}\nfunction valueOf(value, datum, i, data, options) {\n if (typeof value === 'function')\n return value(datum, i, data, options);\n if (typeof value !== 'string')\n return value;\n if ((0, helper_1.isStrictObject)(datum) && datum[value] !== undefined)\n return datum[value];\n return value;\n}\n/**\n * Compute max duration for this frame.\n */\nfunction computeAnimationExtent(markState) {\n let maxDuration = -Infinity;\n let minDelay = Infinity;\n for (const [mark, state] of markState) {\n const { animate = {} } = mark;\n const { data } = state;\n const { enter = {}, update = {}, exit = {} } = animate;\n const { type: defaultUpdateType, duration: defaultUpdateDuration = 300, delay: defaultUpdateDelay = 0, } = update;\n const { type: defaultEnterType, duration: defaultEnterDuration = 300, delay: defaultEnterDelay = 0, } = enter;\n const { type: defaultExitType, duration: defaultExitDuration = 300, delay: defaultExitDelay = 0, } = exit;\n for (const d of data) {\n const { updateType = defaultUpdateType, updateDuration = defaultUpdateDuration, updateDelay = defaultUpdateDelay, enterType = defaultEnterType, enterDuration = defaultEnterDuration, enterDelay = defaultEnterDelay, exitDuration = defaultExitDuration, exitDelay = defaultExitDelay, exitType = defaultExitType, } = d;\n if (updateType === undefined || updateType) {\n maxDuration = Math.max(maxDuration, updateDuration + updateDelay);\n minDelay = Math.min(minDelay, updateDelay);\n }\n if (exitType === undefined || exitType) {\n maxDuration = Math.max(maxDuration, exitDuration + exitDelay);\n minDelay = Math.min(minDelay, exitDelay);\n }\n if (enterType === undefined || enterType) {\n maxDuration = Math.max(maxDuration, enterDuration + enterDelay);\n minDelay = Math.min(minDelay, enterDelay);\n }\n }\n }\n if (maxDuration === -Infinity)\n return null;\n return [minDelay, maxDuration - minDelay];\n}\nfunction selectFacetElements(selection, current, facetClassName, elementClassName) {\n const group = selection.node().parentElement;\n return group\n .findAll((node) => node.style.facet !== undefined &&\n node.style.facet === facetClassName &&\n node !== current.node())\n .flatMap((node) => node.getElementsByClassName(elementClassName));\n}\n/**\n * Update the parent of element and apply transform to make it\n * stay in original position.\n */\nfunction maybeFacetElement(element, parent, originOf) {\n if (!element.__facet__)\n return;\n // element -> g#main -> rect#plot\n const prePlot = element.parentNode.parentNode;\n // g#main -> rect#plot\n const newPlot = parent.parentNode;\n const [px, py] = originOf(prePlot);\n const [x, y] = originOf(newPlot);\n const translate = `translate(${px - x}, ${py - y})`;\n (0, helper_1.appendTransform)(element, translate);\n parent.append(element);\n}\nfunction createMarkShapeFunction(mark, state, view, context) {\n const { library } = context;\n const [useShape] = (0, library_1.useLibrary)('shape', library);\n const { data: abstractData, encode } = mark;\n const { defaultShape, data, shape: shapeLibrary } = state;\n const channel = (0, array_1.mapObject)(encode, (d) => d.value);\n const point2d = data.map((d) => d.points);\n const { theme, coordinate } = view;\n const { type: markType, style = {} } = mark;\n const shapeContext = Object.assign(Object.assign({}, context), { document: (0, library_1.documentOf)(context), coordinate,\n theme });\n return (data) => {\n const { shape: styleShape = defaultShape } = style;\n const { shape = styleShape, points, seriesIndex, index: i } = data, v = __rest(data, [\"shape\", \"points\", \"seriesIndex\", \"index\"]);\n const value = Object.assign(Object.assign({}, v), { index: i });\n // Get data-driven style.\n // If it is a series shape, such as area and line,\n // provides the series of abstract data and indices\n // for this shape, otherwise the single datum and\n // index.\n const abstractDatum = seriesIndex\n ? seriesIndex.map((i) => abstractData[i])\n : abstractData[i];\n const I = seriesIndex ? seriesIndex : i;\n const visualStyle = (0, array_1.mapObject)(style, (d) => valueOf(d, abstractDatum, I, abstractData, { channel }));\n // Try get shape from mark first, then from library.\n const shapeFunction = shapeLibrary[shape]\n ? shapeLibrary[shape](visualStyle, shapeContext)\n : useShape(Object.assign(Object.assign({}, visualStyle), { type: shapeName(mark, shape) }), shapeContext);\n const defaults = getDefaultsStyle(theme, markType, shape, defaultShape);\n return shapeFunction(points, value, defaults, point2d);\n };\n}\nfunction getDefaultsStyle(theme, mark, shape, defaultShape) {\n if (typeof mark !== 'string')\n return;\n const { color } = theme;\n const markTheme = theme[mark] || {};\n const shapeTheme = markTheme[shape] || markTheme[defaultShape];\n return Object.assign({ color }, shapeTheme);\n}\nfunction createAnimationFunction(type, mark, state, view, library) {\n var _a, _b;\n const [, createShape] = (0, library_1.useLibrary)('shape', library);\n const [useAnimation] = (0, library_1.useLibrary)('animation', library);\n const { defaultShape, shape: shapeLibrary } = state;\n const { theme, coordinate } = view;\n const upperType = (0, util_1.upperFirst)(type);\n const key = `default${upperType}Animation`;\n // Get shape from mark first, then from library.\n const { [key]: defaultAnimation } = ((_a = shapeLibrary[defaultShape]) === null || _a === void 0 ? void 0 : _a.props) ||\n createShape(shapeName(mark, defaultShape)).props;\n const { [type]: defaultEffectTiming = {} } = theme;\n const animate = ((_b = mark.animate) === null || _b === void 0 ? void 0 : _b[type]) || {};\n const context = { coordinate };\n return (data, from, to) => {\n const { [`${type}Type`]: animation, [`${type}Delay`]: delay, [`${type}Duration`]: duration, [`${type}Easing`]: easing, } = data;\n const options = Object.assign({ type: animation || defaultAnimation }, animate);\n if (!options.type)\n return null;\n const animateFunction = useAnimation(options, context);\n const value = { delay, duration, easing };\n const A = animateFunction(from, to, (0, util_1.deepMix)(defaultEffectTiming, value));\n let an = [];\n if (!Array.isArray(A)) {\n an = [A];\n }\n else {\n an = A;\n }\n return an.filter(Boolean);\n };\n}\nfunction createEnterFunction(mark, state, view, library) {\n return createAnimationFunction('enter', mark, state, view, library);\n}\n/**\n * Animation will not cancel automatically, it should be canceled\n * manually. This is very important for performance.\n */\nfunction cancel(animation) {\n animation.finished.then(() => {\n animation.cancel();\n });\n return animation;\n}\nfunction createUpdateFunction(mark, state, view, library) {\n return createAnimationFunction('update', mark, state, view, library);\n}\nfunction createExitFunction(mark, state, view, library) {\n return createAnimationFunction('exit', mark, state, view, library);\n}\nfunction inferTheme(theme = {}) {\n if (typeof theme === 'string')\n return { type: theme };\n const { type = 'light' } = theme, rest = __rest(theme, [\"type\"]);\n return Object.assign(Object.assign({}, rest), { type });\n}\n/**\n * @todo Infer builtin tooltips.\n */\nfunction inferInteraction(view) {\n const defaults = {\n event: true,\n tooltip: true,\n // @todo Inferred by slider self.\n sliderFilter: true,\n legendFilter: true,\n scrollbarFilter: true,\n };\n const { interaction = {} } = view;\n return Object.entries((0, util_1.deepMix)(defaults, interaction)).reverse();\n}\nfunction applyTransform(node, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { data } = node, rest = __rest(node, [\"data\"]);\n if (data == undefined)\n return node;\n const [, { data: newData }] = yield (0, transform_1.applyDataTransform)([], { data }, context);\n return Object.assign({ data: newData }, rest);\n });\n}\nfunction updateBBox(selection) {\n selection\n .style('transform', (d) => `translate(${d.paddingLeft + d.marginLeft}, ${d.paddingTop + d.marginTop})`)\n .style('width', (d) => d.innerWidth)\n .style('height', (d) => d.innerHeight);\n}\nfunction animateBBox(selection, extent) {\n const [delay, duration] = extent;\n selection.transition(function (data, i, element) {\n const { transform, width, height } = element.style;\n const { paddingLeft, paddingTop, innerWidth, innerHeight, marginLeft, marginTop, } = data;\n const keyframes = [\n {\n transform,\n width,\n height,\n },\n {\n transform: `translate(${paddingLeft + marginLeft}, ${paddingTop + marginTop})`,\n width: innerWidth,\n height: innerHeight,\n },\n ];\n return element.animate(keyframes, { delay, duration, fill: 'both' });\n });\n}\nfunction shapeName(mark, name) {\n const { type } = mark;\n if (typeof name === 'string')\n return `${type}.${name}`;\n return name;\n}\n/**\n * Create and update layer for each mark.\n * All the layers created here are treated as main layers.\n */\nfunction updateLayers(selection, marks) {\n const facet = (d) => (d.class !== undefined ? `${d.class}` : '');\n // Skip for empty selection, it can't append nodes.\n const nodes = selection.nodes();\n if (nodes.length === 0)\n return;\n selection\n .selectAll(className(constant_1.MAIN_LAYER_CLASS_NAME))\n .data(marks, (d) => d.key)\n .join((enter) => enter\n .append('g')\n .attr('className', constant_1.MAIN_LAYER_CLASS_NAME)\n .attr('id', (d) => d.key)\n .style('facet', facet)\n .style('fill', 'transparent')\n .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (update) => update\n .style('facet', facet)\n .style('fill', 'transparent')\n .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (exit) => exit.remove());\n const labelLayer = selection.select(className(constant_1.LABEL_LAYER_CLASS_NAME)).node();\n if (labelLayer)\n return;\n selection\n .append('g')\n .attr('className', constant_1.LABEL_LAYER_CLASS_NAME)\n .style('zIndex', 0);\n}\nfunction className(...names) {\n return names.map((d) => `.${d}`).join('');\n}\nfunction applyClip(selection, clip) {\n if (!selection.node())\n return;\n selection.style('clipPath', (data) => {\n if (!clip)\n return null;\n const { paddingTop: y, paddingLeft: x, marginLeft: x1, marginTop: y1, innerWidth: width, innerHeight: height, } = data;\n return new g_1.Rect({ style: { x: x + x1, y: y + y1, width, height } });\n });\n}\nfunction inferComponentScales(scales, states, markState) {\n // add shape scale to state.\n var _a;\n // for cell, omit shape scale.\n // @todo support shape scale for cell.\n for (const [key] of markState.entries()) {\n if (key.type === 'cell') {\n return scales.filter((scale) => scale.name !== 'shape');\n }\n }\n // can't infer shape scale if there are multiple states.\n if (states.length !== 1 || scales.some((scale) => scale.name === 'shape')) {\n return scales;\n }\n const { defaultShape: shape } = states[0];\n const acceptMarkTypes = ['point', 'line', 'rect', 'hollow'];\n if (!acceptMarkTypes.includes(shape))\n return scales;\n const shapeMap = {\n point: 'point',\n line: 'hyphen',\n rect: 'square',\n hollow: 'hollow',\n };\n // create shape scale\n const field = ((_a = scales.find((scale) => scale.name === 'color')) === null || _a === void 0 ? void 0 : _a.field) || null;\n const shapeScale = {\n field,\n name: 'shape',\n type: 'constant',\n domain: [],\n range: [shapeMap[shape]],\n };\n return [...scales, shapeScale];\n}\nfunction applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\nexports.applyStyle = applyStyle;\n//# sourceMappingURL=plot.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.styleOf = exports.computeTitleBBox = exports.computeLabelsBBox = exports.createScale = exports.computeComponentSize = exports.groupComponents = exports.flatComponents = exports.normalizeComponents = exports.renderComponent = exports.inferComponent = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst g_1 = require(\"@antv/g\");\nconst coordinate_1 = require(\"../coordinate\");\nconst array_1 = require(\"../utils/array\");\nconst number_1 = require(\"../utils/number\");\nconst helper_1 = require(\"../utils/helper\");\nconst constant_1 = require(\"../component/constant\");\nconst coordinate_2 = require(\"./coordinate\");\nconst library_1 = require(\"./library\");\nconst scale_1 = require(\"./scale\");\nconst scale_2 = require(\"./types/scale\");\nfunction inferComponent(scales, partialOptions, library) {\n const { coordinates = [], title } = partialOptions;\n const [, createGuideComponent] = (0, library_1.useLibrary)('component', library);\n const displayedScales = scales.filter(({ guide }) => {\n if (guide === null)\n return false;\n return true;\n });\n const components = [];\n // Sliders and scrollbar component.\n const sliders = inferScrollableComponents(partialOptions, scales, library);\n components.push(...sliders);\n // Title components.\n if (title) {\n const { props } = createGuideComponent('title');\n const { defaultPosition, defaultOrientation, defaultOrder, defaultSize, defaultCrossPadding, } = props;\n const titleOptions = typeof title === 'string' ? { title } : title;\n components.push(Object.assign({ type: 'title', position: defaultPosition, orientation: defaultOrientation, order: defaultOrder, crossPadding: defaultCrossPadding[0], defaultSize }, titleOptions));\n }\n // Axis and legends.\n const inferredComponents = inferComponentsType(displayedScales, coordinates);\n inferredComponents.forEach(([type, relativeScales]) => {\n const { props } = createGuideComponent(type);\n const { defaultPosition, defaultPlane = 'xy', defaultOrientation, defaultSize, defaultOrder, defaultLength, defaultPadding: DP = [0, 0], defaultCrossPadding: DCP = [0, 0], } = props;\n // @todo to be confirm if the scale can be merged.\n // const scale: G2ScaleOptions = Object.assign({}, ...relativeScales);\n const scale = (0, util_1.deepMix)({}, ...relativeScales);\n const { guide: guideOptions, field } = scale;\n // A scale may have multiple guides.\n const guides = Array.isArray(guideOptions) ? guideOptions : [guideOptions];\n for (const partialGuide of guides) {\n const [position, orientation] = inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, partialGuide, relativeScales, displayedScales, coordinates);\n // Skip if position and orientation are not specified.\n // @example the last axis of radar chart\n if (!position && !orientation)\n continue;\n const isVertical = position === 'left' || position === 'right';\n const defaultPadding = isVertical ? DP[1] : DP[0];\n const defaultCrossPadding = isVertical ? DCP[1] : DCP[0];\n const { size, order = defaultOrder, length = defaultLength, padding = defaultPadding, crossPadding = defaultCrossPadding, } = partialGuide;\n components.push(Object.assign(Object.assign({ title: field }, partialGuide), { defaultSize,\n length,\n position, plane: defaultPlane, orientation,\n padding,\n order,\n crossPadding,\n size,\n type, scales: relativeScales }));\n }\n });\n return components;\n}\nexports.inferComponent = inferComponent;\nfunction renderComponent(component, coordinate, theme, library, markState) {\n const [useGuideComponent] = (0, library_1.useLibrary)('component', library);\n const { scaleInstances: scales, scale, bbox } = component, options = __rest(component, [\"scaleInstances\", \"scale\", \"bbox\"]);\n const value = { bbox, library };\n const render = useGuideComponent(options);\n return render({\n coordinate,\n library,\n markState,\n scales,\n theme,\n value,\n scale,\n });\n}\nexports.renderComponent = renderComponent;\nfunction normalizeComponents(components) {\n return components.map((d) => {\n const component = (0, util_1.deepMix)(d, d.style);\n delete component.style;\n return component;\n });\n}\nexports.normalizeComponents = normalizeComponents;\nfunction flatComponents(components) {\n return components.flatMap((d) => (d.type == 'group' ? d.children : d));\n}\nexports.flatComponents = flatComponents;\n// Wrap legends into a group component.\nfunction groupComponents(components, crossSize) {\n // Group components by key.\n const P = ['left', 'right', 'bottom', 'top'];\n const key = ({ type, position, group }) => {\n if (!P.includes(position))\n return Symbol('independent');\n if (group === undefined) {\n if (type.startsWith('legend'))\n return `legend-${position}`;\n return Symbol('independent');\n }\n if (group === 'independent')\n return Symbol('independent');\n return group;\n };\n const grouped = (0, d3_array_1.groups)(components, key);\n // Update attributes of group components,\n // and maybe flatten group components without enough room.\n return grouped.flatMap(([, components]) => {\n if (components.length === 1)\n return components[0];\n // If crossSize defined, group components only when has\n // enough room.\n if (crossSize !== undefined) {\n // Compute total length.\n const DL = components\n .filter((d) => d.length !== undefined)\n .map((d) => d.length);\n const totalLength = (0, d3_array_1.sum)(DL);\n // If there is no enough room for components,\n // do not group.\n if (totalLength > crossSize) {\n components.forEach((d) => (d.group = Symbol('independent')));\n return components;\n }\n // Group legends and update legend length.\n const emptyLength = crossSize - totalLength;\n const emptyCount = components.length - DL.length;\n const length = emptyLength / emptyCount;\n components.forEach((d) => {\n if (d.length !== undefined)\n return;\n d.length = length;\n });\n }\n // Create a group component.\n const size = (0, d3_array_1.max)(components, (d) => d.size);\n const order = (0, d3_array_1.max)(components, (d) => d.order);\n const crossPadding = (0, d3_array_1.max)(components, (d) => d.crossPadding);\n const position = components[0].position;\n return {\n type: 'group',\n size,\n order,\n position,\n children: components,\n crossPadding,\n };\n });\n}\nexports.groupComponents = groupComponents;\nfunction inferLegendComponentType(scales, coordinates) {\n // Filter accepts scales.\n const channels = ['shape', 'size', 'color', 'opacity'];\n const isConstantSize = (type, name) => type === 'constant' && name === 'size';\n const accepts = scales.filter(({ type, name }) => typeof type === 'string' &&\n channels.includes(name) &&\n !isConstantSize(type, name));\n // Group scales by fields.\n const constants = accepts.filter(({ type }) => type === 'constant');\n const nonConstants = accepts.filter(({ type }) => type !== 'constant');\n const groupKey = (d) => (d.field ? d.field : Symbol('independent'));\n const fieldScales = (0, d3_array_1.groups)(nonConstants, groupKey)\n .map(([key, scales]) => [key, [...scales, ...constants]])\n .filter(([, scales]) => scales.some((scale) => scale.type !== 'constant'));\n const scalesByField = new Map(fieldScales);\n // Skip empty scales.\n if (scalesByField.size === 0)\n return [];\n // Infer components.\n const sort = (arr) => arr.sort(([a], [b]) => a.localeCompare(b));\n const components = Array.from(scalesByField)\n .map(([, scs]) => {\n const combinations = (0, array_1.combine)(scs).sort((a, b) => b.length - a.length);\n const options = combinations.map((combination) => ({\n combination,\n option: combination.map((scale) => [scale.name, getScaleType(scale)]),\n }));\n // For category legend.\n for (const { option, combination } of options) {\n // If every scale is constant, do not display legend.\n if (option.every((d) => d[1] === 'constant'))\n continue;\n if (option.every((d) => d[1] === 'discrete' || d[1] === 'constant')) {\n return ['legendCategory', combination];\n }\n }\n // For reset legend.\n // @todo Remove this.\n for (const [componentType, accords] of constant_1.LEGEND_INFER_STRATEGIES) {\n for (const { option, combination } of options) {\n if (accords.some((accord) => (0, util_1.isEqual)(sort(accord), sort(option)))) {\n return [componentType, combination];\n }\n }\n }\n return null;\n })\n .filter(helper_1.defined);\n return components;\n}\nfunction getScaleType(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return null;\n if (type in scale_2.ContinuousScale)\n return 'continuous';\n if (type in scale_2.DiscreteScale)\n return 'discrete';\n if (type in scale_2.DistributionScale)\n return 'distribution';\n if (type in scale_2.ConstantScale)\n return 'constant';\n return null;\n}\nfunction inferAxisComponentType(scales, coordinates) {\n return scales\n .map((scale) => {\n const { name } = scale;\n // todo wait for gui provide helix axis\n if ((0, coordinate_2.isHelix)(coordinates) || (0, coordinate_2.isTheta)(coordinates))\n return null;\n if ((0, coordinate_2.isTranspose)(coordinates) &&\n ((0, coordinate_2.isPolar)(coordinates) || (0, coordinate_2.isRadial)(coordinates)))\n return null;\n // infer axis\n if (name.startsWith('x')) {\n if ((0, coordinate_2.isPolar)(coordinates))\n return ['axisArc', [scale]];\n if ((0, coordinate_2.isRadial)(coordinates))\n return ['axisLinear', [scale]];\n return [(0, coordinate_2.isTranspose)(coordinates) ? 'axisY' : 'axisX', [scale]];\n }\n if (name.startsWith('y')) {\n if ((0, coordinate_2.isPolar)(coordinates))\n return ['axisLinear', [scale]];\n if ((0, coordinate_2.isRadial)(coordinates))\n return ['axisArc', [scale]];\n return [(0, coordinate_2.isTranspose)(coordinates) ? 'axisX' : 'axisY', [scale]];\n }\n // Only support linear axis for z.\n if (name.startsWith('z')) {\n return ['axisZ', [scale]];\n }\n if (name.startsWith('position')) {\n if ((0, coordinate_2.isRadar)(coordinates))\n return ['axisRadar', [scale]];\n if (!(0, coordinate_2.isPolar)(coordinates))\n return ['axisY', [scale]];\n }\n return null;\n })\n .filter(helper_1.defined);\n}\nfunction inferComponentsType(scales, coordinates) {\n const availableScales = scales.filter((scale) => (0, scale_1.isValidScale)(scale));\n return [\n ...inferLegendComponentType(availableScales, coordinates),\n ...inferAxisComponentType(availableScales, coordinates),\n ];\n}\nfunction angleOf(coordinates) {\n const polar = (0, coordinate_2.coordOf)(coordinates, 'polar');\n if (polar.length) {\n const lastPolar = polar[polar.length - 1];\n const { startAngle, endAngle } = (0, coordinate_1.getPolarOptions)(lastPolar);\n return [startAngle, endAngle];\n }\n const radial = (0, coordinate_2.coordOf)(coordinates, 'radial');\n if (radial.length) {\n const lastRadial = radial[radial.length - 1];\n const { startAngle, endAngle } = (0, coordinate_1.getRadialOptions)(lastRadial);\n return [startAngle, endAngle];\n }\n return [-Math.PI / 2, (Math.PI / 2) * 3];\n}\n/**\n * match index of position\n */\nfunction matchPosition(name) {\n const match = /position(\\d*)/g.exec(name);\n if (!match)\n return null;\n return +match[1];\n}\nfunction inferAxisPositionAndOrientation(type, ordinalPosition, relativeScales, scales, coordinates) {\n // a axis only has one scale\n const { name } = relativeScales[0];\n // todo, in current resolution, the radar chart is implement by parallel + polar coordinate.\n // implementation plan to be confirmed.\n // in current implementation, it must to add the first position encode to it's last.\n // so we won't render the last axis repeatably.\n if (type === 'axisRadar') {\n const positions = scales.filter((scale) => scale.name.startsWith('position'));\n const index = matchPosition(name);\n if (index === null)\n return [null, null];\n // infer radar axis orientation\n const [startAngle, endAngle] = angleOf(coordinates);\n const positionLength = (0, coordinate_2.isRadar)(coordinates)\n ? positions.length\n : positions.length - 1;\n const angle = ((endAngle - startAngle) / positionLength) * index + startAngle;\n return ['center', angle];\n }\n if (type === 'axisY' && (0, coordinate_2.isParallel)(coordinates)) {\n return (0, coordinate_2.isTranspose)(coordinates)\n ? ['center', 'horizontal']\n : ['center', 'vertical'];\n }\n // in non-cartesian coordinate systems, infer the arc axis angle\n if (type === 'axisLinear') {\n const [startAngle] = angleOf(coordinates);\n return ['center', startAngle];\n }\n if (type === 'axisArc') {\n if (ordinalPosition[0] === 'inner')\n return ['inner', null];\n return ['outer', null];\n }\n if ((0, coordinate_2.isPolar)(coordinates))\n return ['center', null];\n if ((0, coordinate_2.isRadial)(coordinates))\n return ['center', null];\n if ((type === 'axisX' && (0, coordinate_2.isReflect)(coordinates)) ||\n (type === 'axisX' && (0, coordinate_2.isReflectY)(coordinates))) {\n return ['top', null];\n }\n // if (type === 'axisX') return ['bottom', null];\n return ordinalPosition;\n}\n// @todo Infer position by coordinates.\nfunction inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, guide, relativeScales, scales, coordinates) {\n const [startAngle] = angleOf(coordinates);\n const ordinalPositionAndOrientation = [\n guide.position || defaultPosition,\n startAngle !== null && startAngle !== void 0 ? startAngle : defaultOrientation,\n ];\n if (typeof type === 'string' && type.startsWith('axis')) {\n return inferAxisPositionAndOrientation(type, ordinalPositionAndOrientation, relativeScales, scales, coordinates);\n }\n if (typeof type === 'string' &&\n type.startsWith('legend') &&\n (0, coordinate_2.isPolar)(coordinates)) {\n if (guide.position === 'center')\n return ['center', 'vertical'];\n }\n // for general component, use default position\n return ordinalPositionAndOrientation;\n}\nfunction inferScrollableType(name, type, coordinates = []) {\n if (name === 'x')\n return (0, coordinate_2.isTranspose)(coordinates) ? `${type}Y` : `${type}X`;\n if (name === 'y')\n return (0, coordinate_2.isTranspose)(coordinates) ? `${type}X` : `${type}Y`;\n return null;\n}\n/**\n * Infer scrollable components, such as slider and scrollbar.\n */\nfunction inferScrollableComponents(partialOptions, scales, library) {\n const [, createGuideComponent] = (0, library_1.useLibrary)('component', library);\n const { coordinates } = partialOptions;\n function normalized(type, channelName, scale, options) {\n const componentType = inferScrollableType(channelName, type, coordinates);\n if (!options || !componentType)\n return;\n const { props } = createGuideComponent(componentType);\n const { defaultPosition, defaultSize, defaultOrder, defaultCrossPadding: [crossPadding], } = props;\n return Object.assign(Object.assign({ position: defaultPosition, defaultSize, order: defaultOrder, type: componentType, crossPadding }, options), { scales: [scale] });\n }\n return scales\n .filter((d) => d.slider || d.scrollbar)\n .flatMap((scale) => {\n const { slider, scrollbar, name: channelName } = scale;\n return [\n normalized('slider', channelName, scale, slider),\n normalized('scrollbar', channelName, scale, scrollbar),\n ];\n })\n .filter((d) => !!d);\n}\n// !!! Note Mutate component.size and component.\nfunction computeComponentSize(component, crossSize, crossPadding, position, theme, library) {\n // Only compute and update size of components in padding area.\n const { type } = component;\n const paddingAreas = ['left', 'right', 'bottom', 'top'];\n if (!paddingAreas.includes(position))\n return;\n if (typeof type !== 'string')\n return;\n const t = type;\n const createCompute = () => {\n if (t.startsWith('axis'))\n return computeAxisSize;\n if (t.startsWith('group'))\n return computeGroupSize;\n if (t.startsWith('legendContinuous'))\n return computeContinuousLegendSize;\n if (t === 'legendCategory')\n return computeCategoryLegendSize;\n if (t.startsWith('slider'))\n return computeSliderSize;\n if (t === 'title')\n return computeTitleSize;\n if (t.startsWith('scrollbar'))\n return computeScrollbarSize;\n return () => { };\n };\n return createCompute()(component, crossSize, crossPadding, position, theme, library);\n}\nexports.computeComponentSize = computeComponentSize;\nfunction computeGroupSize(component, crossSize, crossPadding, position, theme, library) {\n const { children } = component;\n const maxCrossPadding = (0, d3_array_1.max)(children, (d) => d.crossPadding);\n children.forEach((d) => (d.crossPadding = maxCrossPadding));\n children.forEach((child) => computeComponentSize(child, crossSize, crossPadding, position, theme, library));\n const maxSize = (0, d3_array_1.max)(children, (d) => d.size);\n component.size = maxSize;\n children.forEach((d) => (d.size = maxSize));\n}\nfunction computeScrollbarSize(component, crossSize, crossPadding, position, theme, library) {\n const { trackSize = 6 } = (0, util_1.deepMix)({}, theme.scrollbar, component);\n component.size = trackSize;\n}\nfunction computeTitleSize(component, crossSize, crossPadding, position, theme, library) {\n const _a = (0, util_1.deepMix)({}, theme.title, component), { title, subtitle, spacing = 0 } = _a, style = __rest(_a, [\"title\", \"subtitle\", \"spacing\"]);\n if (title) {\n const titleStyle = (0, helper_1.subObject)(style, 'title');\n const titleBBox = computeLabelSize(title, titleStyle);\n component.size = titleBBox.height;\n }\n if (subtitle) {\n const subtitleStyle = (0, helper_1.subObject)(style, 'subtitle');\n const subtitleBBox = computeLabelSize(subtitle, subtitleStyle);\n component.size += spacing + subtitleBBox.height;\n }\n}\nfunction computeSliderSize(component, crossSize, crossPadding, position, theme, library) {\n const styleOf = () => {\n const { slider } = theme;\n return (0, util_1.deepMix)({}, slider, component);\n };\n const { trackSize, handleIconSize } = styleOf();\n const size = Math.max(trackSize, handleIconSize * 2.4);\n component.size = size;\n}\nfunction computeAxisSize(component, crossSize, crossPadding, position, theme, library) {\n var _a;\n // If padding is auto, use hide as the labelTransform by default\n // to avoid overlap between labels.\n component.transform = component.transform || [{ type: 'hide' }];\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n // Get styles to be applied.\n const style = styleOf(component, position, theme);\n const { tickLength = 0, labelSpacing = 0, titleSpacing = 0, labelAutoRotate } = style, rest = __rest(style, [\"tickLength\", \"labelSpacing\", \"titleSpacing\", \"labelAutoRotate\"]);\n // Compute Labels.\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale);\n const paddingTick = tickLength + labelSpacing;\n if (labelBBoxes && labelBBoxes.length) {\n const maxLabelWidth = (0, d3_array_1.max)(labelBBoxes, (d) => d.width);\n const maxLabelHeight = (0, d3_array_1.max)(labelBBoxes, (d) => d.height);\n if (isVertical) {\n component.size = maxLabelWidth + paddingTick;\n }\n else {\n const { tickFilter, labelTransform } = component;\n // If the labels can't be placed horizontally, and labelTransform is unset,\n // rotate 90 deg to display them.\n if (overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) &&\n !labelTransform &&\n labelAutoRotate !== false &&\n labelAutoRotate !== null) {\n component.labelTransform = 'rotate(90)';\n component.size = maxLabelWidth + paddingTick;\n }\n else {\n component.labelTransform = (_a = component.labelTransform) !== null && _a !== void 0 ? _a : 'rotate(0)';\n component.size = maxLabelHeight + paddingTick;\n }\n }\n }\n else {\n component.size = tickLength;\n }\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n if (titleBBox) {\n if (isVertical) {\n component.size += titleSpacing + titleBBox.width;\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nfunction computeContinuousLegendSize(component, crossSize, crossPadding, position, theme, library) {\n // Get styles.\n const styleOf = () => {\n const { legendContinuous } = theme;\n return (0, util_1.deepMix)({}, legendContinuous, component);\n };\n const _a = styleOf(), { labelSpacing = 0, titleSpacing = 0 } = _a, rest = __rest(_a, [\"labelSpacing\", \"titleSpacing\"]);\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n // Ribbon styles.\n const ribbonStyles = (0, helper_1.subObject)(rest, 'ribbon');\n const { size: ribbonSize } = ribbonStyles;\n const handleIconStyles = (0, helper_1.subObject)(rest, 'handleIcon');\n const { size: handleIconSize } = handleIconStyles;\n const mainSize = Math.max(ribbonSize, handleIconSize * 2.4);\n component.size = mainSize;\n // Compute labels.\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale);\n if (labelBBoxes) {\n const key = isVertical ? 'width' : 'height';\n const size = (0, d3_array_1.max)(labelBBoxes, (d) => d[key]);\n component.size += size + labelSpacing;\n }\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n if (titleBBox) {\n if (isVertical) {\n component.size = Math.max(component.size, titleBBox.width);\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nfunction computeCategoryLegendSize(component, crossSize0, crossPadding, position, theme, library) {\n const styleOf = () => {\n const { legendCategory } = theme;\n const { title } = component;\n const [defaultTitle, specifiedTitle] = Array.isArray(title)\n ? [title, undefined]\n : [undefined, title];\n return (0, util_1.deepMix)({ title: defaultTitle }, legendCategory, Object.assign(Object.assign({}, component), { title: specifiedTitle }));\n };\n const _a = styleOf(), { itemSpacing, itemMarkerSize, titleSpacing, rowPadding, colPadding, maxCols = Infinity, maxRows = Infinity } = _a, rest = __rest(_a, [\"itemSpacing\", \"itemMarkerSize\", \"titleSpacing\", \"rowPadding\", \"colPadding\", \"maxCols\", \"maxRows\"]);\n const { cols, length } = component;\n const getRows = (rows) => Math.min(rows, maxRows);\n const getCols = (cols) => Math.min(cols, maxCols);\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n const crossSize = length === undefined\n ? crossSize0 + (isVertical ? 0 : crossPadding[0] + crossPadding[1])\n : length;\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale, 'itemLabel');\n const height = Math.max(labelBBoxes[0].height, itemMarkerSize) + rowPadding;\n const widthOf = (w, padding = 0) => itemMarkerSize + w + itemSpacing[0] + padding;\n // Only support grid layout for vertical area.\n const computeVerticalSize = () => {\n let maxSize = -Infinity;\n let pos = 0;\n let cols = 1;\n let rows = 0;\n let maxRows = -Infinity;\n let maxPos = -Infinity;\n const titleHeight = titleBBox ? titleBBox.height : 0;\n const maxHeight = crossSize - titleHeight;\n for (const { width } of labelBBoxes) {\n const w = widthOf(width, colPadding);\n maxSize = Math.max(maxSize, w);\n if (pos + height > maxHeight) {\n cols++;\n maxRows = Math.max(maxRows, rows);\n maxPos = Math.max(maxPos, pos);\n rows = 1;\n pos = height;\n }\n else {\n pos += height;\n rows++;\n }\n }\n if (cols <= 1) {\n maxRows = rows;\n maxPos = pos;\n }\n component.size = maxSize * getCols(cols);\n component.length = maxPos + titleHeight;\n (0, util_1.deepMix)(component, { cols: getCols(cols), gridRow: maxRows });\n };\n // Horizontal grid layout.\n const computeHorizontalGrid = () => {\n const rows = Math.ceil(labelBBoxes.length / cols);\n const maxWidth = (0, d3_array_1.max)(labelBBoxes, (d) => widthOf(d.width)) * cols;\n component.size = height * getRows(rows) - rowPadding;\n component.length = Math.min(maxWidth, crossSize);\n };\n // Horizontal flex layout.\n const computeHorizontalFlex = () => {\n let rows = 1;\n let pos = 0;\n let maxPos = -Infinity;\n for (const { width } of labelBBoxes) {\n const w = widthOf(width, colPadding);\n if (pos + w > crossSize) {\n maxPos = Math.max(maxPos, pos);\n pos = w;\n rows++;\n }\n else {\n pos += w;\n }\n }\n if (rows === 1)\n maxPos = pos;\n component.size = height * getRows(rows) - rowPadding;\n component.length = maxPos;\n };\n if (isVertical)\n computeVerticalSize();\n else if (typeof cols === 'number')\n computeHorizontalGrid();\n else\n computeHorizontalFlex();\n // Compute titles.\n if (titleBBox) {\n if (isVertical) {\n component.size = Math.max(component.size, titleBBox.width);\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nfunction createScale(component, library) {\n const [useScale] = (0, library_1.useLibrary)('scale', library);\n // Init scale, the tickCount of axis has higher priority than scale.\n const { scales, tickCount, tickMethod } = component;\n const scaleOptions = scales.find((d) => d.type !== 'constant' && d.type !== 'identity');\n if (tickCount !== undefined)\n scaleOptions.tickCount = tickCount;\n if (tickMethod !== undefined)\n scaleOptions.tickMethod = tickMethod;\n return useScale(scaleOptions);\n}\nexports.createScale = createScale;\nfunction computeLabelsBBox(component, scale, key = 'label') {\n const { labelFormatter, tickFilter, label = true } = component, style = __rest(component, [\"labelFormatter\", \"tickFilter\", \"label\"]);\n if (!label)\n return null;\n // Get labels to be rendered.\n const labels = labelsOf(scale, labelFormatter, tickFilter);\n const labelStyle = (0, helper_1.subObject)(style, key);\n const labelStyles = labels.map((d, i) => Object.fromEntries(Object.entries(labelStyle).map(([key, value]) => [\n key,\n typeof value === 'function' ? value(d, i) : value,\n ])));\n const labelBBoxes = labels.map((d, i) => {\n const normalizeStyle = labelStyles[i];\n return computeLabelSize(d, normalizeStyle);\n });\n // Cache boxes to avoid computed twice.\n // @todo GUI use untransformed bbox, so it can't cache if\n // label.style has transform attributes.\n const hasTransform = labelStyles.some((d) => d.transform);\n if (!hasTransform) {\n const I = labels.map((_, i) => i);\n component.indexBBox = new Map(I.map((i) => [i, [labels[i], labelBBoxes[i]]]));\n }\n return labelBBoxes;\n}\nexports.computeLabelsBBox = computeLabelsBBox;\nfunction computeTitleBBox(component) {\n const isFalsy = (x) => x === false || x === null;\n const { title } = component, style = __rest(component, [\"title\"]);\n if (isFalsy(title) || title === undefined)\n return null;\n const titleStyle = (0, helper_1.subObject)(style, 'title');\n const { direction, transform } = titleStyle;\n const titleText = Array.isArray(title) ? title.join(',') : title;\n if (typeof titleText !== 'string')\n return null;\n const titleBBox = computeLabelSize(titleText, Object.assign(Object.assign({}, titleStyle), { transform: transform || (direction === 'vertical' ? 'rotate(-90)' : '') }));\n return titleBBox;\n}\nexports.computeTitleBBox = computeTitleBBox;\nfunction styleOf(axis, position, theme) {\n const { title } = axis;\n const [defaultTitle, specifiedTitle] = Array.isArray(title)\n ? [title, undefined]\n : [undefined, title];\n const { axis: baseStyle, \n // @ts-ignore\n [`axis${(0, helper_1.capitalizeFirst)(position)}`]: positionStyle, } = theme;\n return (0, util_1.deepMix)({ title: defaultTitle }, baseStyle, positionStyle, Object.assign(Object.assign({}, axis), { title: specifiedTitle }));\n}\nexports.styleOf = styleOf;\nfunction ticksOf(scale, tickFilter) {\n const ticks = scale.getTicks ? scale.getTicks() : scale.getOptions().domain;\n if (!tickFilter)\n return ticks;\n return ticks.filter(tickFilter);\n}\nfunction labelsOf(scale, labelFormatter, tickFilter) {\n const T = ticksOf(scale, tickFilter);\n const ticks = T.map((d) => (typeof d === 'number' ? (0, number_1.prettyNumber)(d) : d));\n const formatter = labelFormatter\n ? typeof labelFormatter === 'string'\n ? (0, d3_format_1.format)(labelFormatter)\n : labelFormatter\n : scale.getFormatter\n ? scale.getFormatter()\n : (d) => `${d}`;\n return ticks.map(formatter);\n}\nfunction offsetOf(scale, d) {\n if (!scale.getBandWidth)\n return 0;\n const offset = scale.getBandWidth(d) / 2;\n return offset;\n}\nfunction overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) {\n // If actual size bigger than container size, overflow.\n const totalSize = (0, d3_array_1.sum)(labelBBoxes, (d) => d.width);\n if (totalSize > crossSize)\n return true;\n // Clone scale to get visual position for labels.\n const scaleX = scale.clone();\n scaleX.update({ range: [0, crossSize] });\n const ticks = ticksOf(scale, tickFilter);\n const X = ticks.map((d) => scaleX.map(d) + offsetOf(scaleX, d));\n const I = ticks.map((_, i) => i);\n const startX = -crossPadding[0];\n const endX = crossSize + crossPadding[1];\n const extent = (x, bbox) => {\n const { width } = bbox;\n return [x - width / 2, x + width / 2];\n };\n // Collision detection.\n for (let i = 0; i < I.length; i++) {\n const x = X[i];\n const [x0, x1] = extent(x, labelBBoxes[i]);\n // If a label is out of plot area, overflow.\n if (x0 < startX || x1 > endX)\n return true;\n const y = X[i + 1];\n if (y) {\n // If two labels intersect, overflow.\n const [y0] = extent(y, labelBBoxes[i + 1]);\n if (x1 > y0)\n return true;\n }\n }\n return false;\n}\nfunction computeLabelSize(d, style) {\n const shape = normalizeLabel(d);\n const { filter } = style, rest = __rest(style, [\"filter\"]);\n shape.attr(Object.assign(Object.assign({}, rest), { visibility: 'none' }));\n const bbox = shape.getBBox();\n return bbox;\n}\nfunction normalizeLabel(d) {\n if (d instanceof g_1.DisplayObject)\n return d;\n return new g_1.Text({ style: { text: `${d}` } });\n}\n//# sourceMappingURL=component.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LEGEND_INFER_STRATEGIES = void 0;\n/**\n * @examples\n * ✅\n * color - `discrete`, shape - `constant`\n * legendCategory.rule[27] is matched\n *\n * ❎\n * shape - `discrete`, size - `constant`\n * There are no rules to match\n *\n */\nexports.LEGEND_INFER_STRATEGIES = [\n [\n 'legendCategory',\n [\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ],\n // [\n // ['color', 'constant'],\n // ['opacity', 'constant'],\n // ['size', 'constant'],\n // ],\n // [\n // ['color', 'constant'],\n // ['shape', 'constant'],\n // ['size', 'constant'],\n // ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ],\n // [\n // ['color', 'constant'],\n // ['opacity', 'constant'],\n // ],\n // [\n // ['color', 'constant'],\n // ['shape', 'constant'],\n // ],\n [['color', 'discrete']],\n // [['color', 'constant']],\n ],\n ],\n [\n 'legendContinuousSize',\n [\n [\n ['color', 'continuous'],\n ['opacity', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'constant'],\n ['size', 'continuous'],\n ],\n [\n ['size', 'continuous'],\n ['opacity', 'continuous'],\n ],\n [['size', 'continuous']],\n ],\n ],\n [\n 'legendContinuousBlockSize',\n [\n [\n ['color', 'distribution'],\n ['opacity', 'distribution'],\n ['size', 'distribution'],\n ],\n [\n ['color', 'distribution'],\n ['size', 'distribution'],\n ],\n ],\n ],\n [\n 'legendContinuousBlock',\n [\n [\n ['color', 'distribution'],\n ['opacity', 'continuous'],\n ],\n [['color', 'distribution']],\n ],\n ],\n [\n 'legendContinuous',\n [\n [\n ['color', 'continuous'],\n ['opacity', 'continuous'],\n ],\n [['color', 'continuous']],\n [['opacity', 'continuous']],\n ],\n ],\n];\n//# sourceMappingURL=constant.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isReflectY = exports.isRadar = exports.isRadial = exports.isReflect = exports.isTheta = exports.isParallel = exports.isTranspose = exports.isHelix = exports.isPolar = exports.coordOf = exports.coordinate2Transform = exports.createCoordinate = void 0;\nconst coord_1 = require(\"@antv/coord\");\nconst library_1 = require(\"./library\");\nfunction createCoordinate(layout, partialOptions, library) {\n const [useCoordinate] = (0, library_1.useLibrary)('coordinate', library);\n const { innerHeight, innerWidth, insetLeft, insetTop, insetRight, insetBottom, } = layout;\n const { coordinates: partialTransform = [] } = partialOptions;\n const transform = inferCoordinate(partialTransform);\n const isCartesian3D = transform[0].type === 'cartesian3D';\n const options = Object.assign(Object.assign({}, layout), { x: insetLeft, y: insetTop, width: innerWidth - insetLeft - insetRight, height: innerHeight - insetBottom - insetTop, transformations: transform.flatMap(useCoordinate) });\n const coordinate = isCartesian3D\n ? // @ts-ignore\n new coord_1.Coordinate3D(options)\n : new coord_1.Coordinate(options);\n return coordinate;\n}\nexports.createCoordinate = createCoordinate;\nfunction coordinate2Transform(node, library) {\n // @ts-ignore\n const { coordinate = {}, coordinates } = node, rest = __rest(node, [\"coordinate\", \"coordinates\"]);\n // If coordinates are already set, it means that the coordinate has been processed\n // during the initialization. There is not need to process it during update.\n if (coordinates)\n return node;\n const { type, transform = [] } = coordinate, options = __rest(coordinate, [\"type\", \"transform\"]);\n if (!type)\n return Object.assign(Object.assign({}, rest), { coordinates: transform });\n const [, createCoordinate] = (0, library_1.useLibrary)('coordinate', library);\n const { transform: isTransform = false } = createCoordinate(type).props || {};\n if (isTransform) {\n throw new Error(`Unknown coordinate: ${type}.`);\n }\n return Object.assign(Object.assign({}, rest), { coordinates: [Object.assign({ type }, options), ...transform] });\n}\nexports.coordinate2Transform = coordinate2Transform;\nfunction coordOf(coordinates, type) {\n return coordinates.filter((d) => d.type === type);\n}\nexports.coordOf = coordOf;\n/**\n * todo Duplication is not considered\n */\nfunction isPolar(coordinates) {\n return coordOf(coordinates, 'polar').length > 0;\n}\nexports.isPolar = isPolar;\nfunction isHelix(coordinates) {\n return coordOf(coordinates, 'helix').length > 0;\n}\nexports.isHelix = isHelix;\n/**\n * todo The number of transposes matters\n */\nfunction isTranspose(coordinates) {\n return coordOf(coordinates, 'transpose').length % 2 === 1;\n}\nexports.isTranspose = isTranspose;\nfunction isParallel(coordinates) {\n return coordOf(coordinates, 'parallel').length > 0;\n}\nexports.isParallel = isParallel;\nfunction isTheta(coordinates) {\n return coordOf(coordinates, 'theta').length > 0;\n}\nexports.isTheta = isTheta;\nfunction isReflect(coordinates) {\n return coordOf(coordinates, 'reflect').length > 0;\n}\nexports.isReflect = isReflect;\nfunction isRadial(coordinates) {\n return coordOf(coordinates, 'radial').length > 0;\n}\nexports.isRadial = isRadial;\nfunction isRadar(coordinates) {\n return coordOf(coordinates, 'radar').length > 0;\n}\nexports.isRadar = isRadar;\n/**\n * todo The axis corresponding to the Y reversal is not reversed\n */\nfunction isReflectY(coordinates) {\n return coordOf(coordinates, 'reflectY').length > 0;\n}\nexports.isReflectY = isReflectY;\nfunction inferCoordinate(coordinates) {\n if (coordinates.find((d) => d.type === 'cartesian' || d.type === 'cartesian3D'))\n return coordinates;\n return [...coordinates, { type: 'cartesian' }];\n}\n//# sourceMappingURL=coordinate.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.documentOf = exports.useLibrary = void 0;\nconst helper_1 = require(\"../utils/helper\");\nconst builtinlib_1 = require(\"../lib/builtinlib\");\nfunction useLibrary(namespace, publicLibrary) {\n const library = Object.assign(Object.assign({}, (0, builtinlib_1.builtinlib)()), publicLibrary);\n const create = (type) => {\n if (typeof type !== 'string')\n return type;\n const key = `${namespace}.${type}`;\n return library[key] || (0, helper_1.error)(`Unknown Component: ${key}`);\n };\n const use = (options, context) => {\n const { type } = options, rest = __rest(options, [\"type\"]);\n if (!type)\n (0, helper_1.error)(`Plot type is required!`);\n const currentLibrary = create(type);\n return currentLibrary === null || currentLibrary === void 0 ? void 0 : currentLibrary(rest, context);\n };\n return [use, create];\n}\nexports.useLibrary = useLibrary;\nfunction documentOf(library) {\n const { canvas, group } = library;\n return ((canvas === null || canvas === void 0 ? void 0 : canvas.document) ||\n (group === null || group === void 0 ? void 0 : group.ownerDocument) ||\n (0, helper_1.error)(`Cannot find library document`));\n}\nexports.documentOf = documentOf;\n//# sourceMappingURL=library.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.builtinlib = void 0;\nconst component_1 = require(\"../component\");\nconst composition_1 = require(\"../composition\");\nconst shape_1 = require(\"../shape\");\nconst event_1 = require(\"../interaction/event\");\n// Some private visual components, they are not public to\n// users, only for runtime.\nfunction builtinlib() {\n return {\n 'component.axisRadar': component_1.AxisRadar,\n 'component.axisLinear': component_1.AxisLinear,\n 'component.axisArc': component_1.AxisArc,\n 'component.legendContinuousBlock': component_1.LegendContinuousBlock,\n 'component.legendContinuousBlockSize': component_1.LegendContinuousBlockSize,\n 'component.legendContinuousSize': component_1.LegendContinuousSize,\n 'interaction.event': event_1.Event,\n 'composition.mark': composition_1.Mark,\n 'composition.view': composition_1.View,\n 'shape.label.label': shape_1.LabelShape,\n };\n}\nexports.builtinlib = builtinlib;\n//# sourceMappingURL=builtinlib.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeoView = exports.GeoPath = exports.TimingKeyframe = exports.FacetCircle = exports.RepeatMatrix = exports.FacetRect = exports.Mark = exports.View = exports.SpaceFlex = exports.SpaceLayer = void 0;\nvar spaceLayer_1 = require(\"./spaceLayer\");\nObject.defineProperty(exports, \"SpaceLayer\", { enumerable: true, get: function () { return spaceLayer_1.SpaceLayer; } });\nvar spaceFlex_1 = require(\"./spaceFlex\");\nObject.defineProperty(exports, \"SpaceFlex\", { enumerable: true, get: function () { return spaceFlex_1.SpaceFlex; } });\nvar view_1 = require(\"./view\");\nObject.defineProperty(exports, \"View\", { enumerable: true, get: function () { return view_1.View; } });\nvar mark_1 = require(\"./mark\");\nObject.defineProperty(exports, \"Mark\", { enumerable: true, get: function () { return mark_1.Mark; } });\nvar facetRect_1 = require(\"./facetRect\");\nObject.defineProperty(exports, \"FacetRect\", { enumerable: true, get: function () { return facetRect_1.FacetRect; } });\nvar repeatMatrix_1 = require(\"./repeatMatrix\");\nObject.defineProperty(exports, \"RepeatMatrix\", { enumerable: true, get: function () { return repeatMatrix_1.RepeatMatrix; } });\nvar facetCircle_1 = require(\"./facetCircle\");\nObject.defineProperty(exports, \"FacetCircle\", { enumerable: true, get: function () { return facetCircle_1.FacetCircle; } });\nvar timingKeyframe_1 = require(\"./timingKeyframe\");\nObject.defineProperty(exports, \"TimingKeyframe\", { enumerable: true, get: function () { return timingKeyframe_1.TimingKeyframe; } });\nvar geoPath_1 = require(\"./geoPath\");\nObject.defineProperty(exports, \"GeoPath\", { enumerable: true, get: function () { return geoPath_1.GeoPath; } });\nvar geoView_1 = require(\"./geoView\");\nObject.defineProperty(exports, \"GeoView\", { enumerable: true, get: function () { return geoView_1.GeoView; } });\n//# sourceMappingURL=index.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SpaceLayer = void 0;\nconst utils_1 = require(\"./utils\");\n/**\n * @todo Propagate more options to children.\n */\nconst SpaceLayer = () => {\n return (options) => {\n const { children } = options;\n if (!Array.isArray(children))\n return [];\n const { x: viewX = 0, y: viewY = 0, width: viewWidth, height: viewHeight, data: layerData, } = options;\n return children.map((_a) => {\n var { data, x, y, width, height } = _a, rest = __rest(_a, [\"data\", \"x\", \"y\", \"width\", \"height\"]);\n return (Object.assign(Object.assign({}, rest), { data: (0, utils_1.mergeData)(data, layerData), x: x !== null && x !== void 0 ? x : viewX, y: y !== null && y !== void 0 ? y : viewY, width: width !== null && width !== void 0 ? width : viewWidth, height: height !== null && height !== void 0 ? height : viewHeight }));\n });\n };\n};\nexports.SpaceLayer = SpaceLayer;\nexports.SpaceLayer.props = {};\n//# sourceMappingURL=spaceLayer.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeData = exports.isObject = exports.useOverrideAdaptor = exports.useDefaultAdaptor = void 0;\nconst util_1 = require(\"@antv/util\");\n/**\n * Adaptor return default options for raw options.\n */\nfunction useDefaultAdaptor(adaptor) {\n return (options, ...rest) => (0, util_1.deepMix)({}, adaptor(options, ...rest), options);\n}\nexports.useDefaultAdaptor = useDefaultAdaptor;\n/**\n * Adaptor return options override raw options.\n */\nfunction useOverrideAdaptor(adaptor) {\n return (options, ...rest) => (0, util_1.deepMix)({}, options, adaptor(options, ...rest));\n}\nexports.useOverrideAdaptor = useOverrideAdaptor;\nfunction isObject(d) {\n if (d instanceof Date)\n return false;\n return typeof d === 'object';\n}\nexports.isObject = isObject;\nfunction mergeData(dataDescriptor, dataValue) {\n if (!dataDescriptor)\n return dataValue;\n if (Array.isArray(dataDescriptor))\n return dataDescriptor;\n if (isObject(dataDescriptor)) {\n const { value = dataValue } = dataDescriptor, rest = __rest(dataDescriptor, [\"value\"]);\n return Object.assign(Object.assign({}, rest), { value });\n }\n return dataDescriptor;\n}\nexports.mergeData = mergeData;\n//# sourceMappingURL=utils.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SpaceFlex = void 0;\nconst utils_1 = require(\"./utils\");\n/**\n * @todo Propagate more options to children.\n */\nconst SpaceFlex = () => {\n return (options) => {\n const { children } = options;\n if (!Array.isArray(children))\n return [];\n const { direction = 'row', ratio = children.map(() => 1), padding = 0, data: flexData, } = options;\n const [mainStart, mainSize, crossSize, crossStart] = direction === 'col'\n ? ['y', 'height', 'width', 'x']\n : ['x', 'width', 'height', 'y'];\n const sum = ratio.reduce((total, value) => total + value);\n const totalSize = options[mainSize] - padding * (children.length - 1);\n const sizes = ratio.map((value) => totalSize * (value / sum));\n const newChildren = [];\n let next = options[mainStart] || 0;\n for (let i = 0; i < sizes.length; i += 1) {\n const _a = children[i], { data } = _a, rest = __rest(_a, [\"data\"]);\n const newData = (0, utils_1.mergeData)(data, flexData);\n newChildren.push(Object.assign({ [mainStart]: next, [mainSize]: sizes[i], [crossStart]: options[crossStart] || 0, [crossSize]: options[crossSize], data: newData }, rest));\n next += sizes[i] + padding;\n }\n return newChildren;\n };\n};\nexports.SpaceFlex = SpaceFlex;\nexports.SpaceFlex.props = {};\n//# sourceMappingURL=spaceFlex.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.View = void 0;\nconst util_1 = require(\"@antv/util\");\nconst utils_1 = require(\"./utils\");\n/**\n * @todo Propagate more options to children.(e.g. filter)\n * @todo Propagate encode options to children. This is useful for Matrix composition.\n * @todo Move this to runtime, do not treat it as a composition to cause confusion.\n */\nconst View = () => {\n return (options) => {\n const { children } = options, restOptions = __rest(options, [\"children\"]);\n if (!Array.isArray(children))\n return [];\n const { data: viewData, scale: viewScale = {}, axis: viewAxis = {}, legend: viewLegend = {}, encode: viewEncode = {}, transform: viewTransform = [] } = restOptions, rest = __rest(restOptions, [\"data\", \"scale\", \"axis\", \"legend\", \"encode\", \"transform\"]);\n const marks = children.map((_a) => {\n var { data, scale = {}, axis = {}, legend = {}, encode = {}, transform = [] } = _a, rest = __rest(_a, [\"data\", \"scale\", \"axis\", \"legend\", \"encode\", \"transform\"]);\n return (Object.assign({ data: (0, utils_1.mergeData)(data, viewData), scale: (0, util_1.deepMix)({}, viewScale, scale), encode: (0, util_1.deepMix)({}, viewEncode, encode), transform: [...viewTransform, ...transform], axis: axis && viewAxis ? (0, util_1.deepMix)({}, viewAxis, axis) : false, legend: legend && viewLegend ? (0, util_1.deepMix)({}, viewLegend, legend) : false }, rest));\n });\n return [Object.assign(Object.assign({}, rest), { marks, type: 'standardView' })];\n };\n};\nexports.View = View;\nexports.View.props = {};\n//# sourceMappingURL=view.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Mark = void 0;\n// @todo Move this to runtime.\nconst Mark = ({ static: isStatic = false, } = {}) => {\n return (options) => {\n const { width, height, depth, paddingLeft, paddingRight, paddingTop, paddingBottom, padding, inset, insetLeft, insetTop, insetRight, insetBottom, margin, marginLeft, marginBottom, marginTop, marginRight, data, coordinate, theme, component, interaction, x, y, z, key, frame, labelTransform, parentKey, clip, viewStyle, title } = options, mark = __rest(options, [\"width\", \"height\", \"depth\", \"paddingLeft\", \"paddingRight\", \"paddingTop\", \"paddingBottom\", \"padding\", \"inset\", \"insetLeft\", \"insetTop\", \"insetRight\", \"insetBottom\", \"margin\", \"marginLeft\", \"marginBottom\", \"marginTop\", \"marginRight\", \"data\", \"coordinate\", \"theme\", \"component\", \"interaction\", \"x\", \"y\", \"z\", \"key\", \"frame\", \"labelTransform\", \"parentKey\", \"clip\", \"viewStyle\", \"title\"]);\n return [\n Object.assign(Object.assign({ type: 'standardView', x,\n y,\n z,\n key,\n width,\n height,\n depth,\n padding,\n paddingLeft,\n paddingRight,\n paddingTop,\n inset,\n insetLeft,\n insetTop,\n insetRight,\n insetBottom,\n paddingBottom,\n theme,\n coordinate,\n component,\n interaction,\n frame,\n labelTransform,\n margin,\n marginLeft,\n marginBottom,\n marginTop,\n marginRight,\n parentKey,\n clip, style: viewStyle }, (!isStatic && { title })), { marks: [Object.assign(Object.assign(Object.assign({}, mark), { key: `${key}-0`, data }), (isStatic && { title }))] }),\n ];\n };\n};\nexports.Mark = Mark;\nexports.Mark.props = {};\n//# sourceMappingURL=mark.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FacetRect = exports.createInnerGuide = exports.setChildren = exports.setData = exports.toCell = exports.setStyle = exports.setAnimation = exports.inferColor = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst vector_1 = require(\"../utils/vector\");\nconst container_1 = require(\"../utils/container\");\nconst array_1 = require(\"../utils/array\");\nconst utils_1 = require(\"./utils\");\nconst setScale = (0, utils_1.useDefaultAdaptor)((options) => {\n const { encode, data, scale, shareSize = false } = options;\n const { x, y } = encode;\n const flexDomain = (encode, channel) => {\n var _a;\n if (encode === undefined || !shareSize)\n return {};\n const groups = (0, d3_array_1.group)(data, (d) => d[encode]);\n const domain = ((_a = scale === null || scale === void 0 ? void 0 : scale[channel]) === null || _a === void 0 ? void 0 : _a.domain) || Array.from(groups.keys());\n const flex = domain.map((key) => {\n if (!groups.has(key))\n return 1;\n return groups.get(key).length;\n });\n return { domain, flex };\n };\n return {\n scale: {\n x: Object.assign(Object.assign({ paddingOuter: 0, paddingInner: 0.1, guide: x === undefined ? null : { position: 'top' } }, (x === undefined && { paddingInner: 0 })), flexDomain(x, 'x')),\n y: Object.assign(Object.assign({ range: [0, 1], paddingOuter: 0, paddingInner: 0.1, guide: y === undefined ? null : { position: 'right' } }, (y === undefined && { paddingInner: 0 })), flexDomain(y, 'y')),\n },\n };\n});\n/**\n * BFS view tree and using the last discovered color encode\n * as the top-level encode for this plot. This is useful when\n * color encode and color scale is specified in mark node.\n * It makes sense because the whole facet should shared the same\n * color encoding, but it also can be override with explicity\n * encode and scale specification.\n */\nexports.inferColor = (0, utils_1.useOverrideAdaptor)((options) => {\n const { data, scale, legend } = options;\n const discovered = [options];\n let encodeColor;\n let scaleColor;\n let legendColor;\n while (discovered.length) {\n const node = discovered.shift();\n const { children, encode = {}, scale = {}, legend = {} } = node;\n const { color: c } = encode;\n const { color: cs } = scale;\n const { color: cl } = legend;\n if (c !== undefined)\n encodeColor = c;\n if (cs !== undefined)\n scaleColor = cs;\n if (cl !== undefined)\n legendColor = cl;\n if (Array.isArray(children)) {\n discovered.push(...children);\n }\n }\n const domainColor = () => {\n var _a;\n const domain = (_a = scale === null || scale === void 0 ? void 0 : scale.color) === null || _a === void 0 ? void 0 : _a.domain;\n if (domain !== undefined)\n return [domain];\n if (encodeColor === undefined)\n return [undefined];\n const color = typeof encodeColor === 'function' ? encodeColor : (d) => d[encodeColor];\n const values = data.map(color);\n if (values.some((d) => typeof d === 'number'))\n return [(0, d3_array_1.extent)(values)];\n return [Array.from(new Set(values)), 'ordinal'];\n };\n const title = typeof encodeColor === 'string' ? encodeColor : '';\n const [domain, type] = domainColor();\n return Object.assign({ encode: { color: { type: 'column', value: domain !== null && domain !== void 0 ? domain : [] } }, scale: { color: (0, util_1.deepMix)({}, scaleColor, { domain, type }) } }, (legend === undefined && {\n legend: { color: (0, util_1.deepMix)({ title }, legendColor) },\n }));\n});\nexports.setAnimation = (0, utils_1.useDefaultAdaptor)(() => ({\n animate: {\n enterType: 'fadeIn',\n },\n}));\nexports.setStyle = (0, utils_1.useOverrideAdaptor)(() => ({\n frame: false,\n encode: {\n shape: 'hollow',\n },\n style: {\n lineWidth: 0,\n },\n}));\nexports.toCell = (0, utils_1.useOverrideAdaptor)(() => ({\n type: 'cell',\n}));\n/**\n * Do not set cell data directly, the children will get wrong do if do\n * so. Use transform to set new data.\n **/\nexports.setData = (0, utils_1.useOverrideAdaptor)((options) => {\n const { data } = options;\n const connector = {\n type: 'custom',\n callback: () => {\n const { data, encode } = options;\n const { x, y } = encode;\n const X = x ? Array.from(new Set(data.map((d) => d[x]))) : [];\n const Y = y ? Array.from(new Set(data.map((d) => d[y]))) : [];\n const cellData = () => {\n if (X.length && Y.length) {\n const cellData = [];\n for (const vx of X) {\n for (const vy of Y) {\n cellData.push({ [x]: vx, [y]: vy });\n }\n }\n return cellData;\n }\n if (X.length)\n return X.map((d) => ({ [x]: d }));\n if (Y.length)\n return Y.map((d) => ({ [y]: d }));\n };\n return cellData();\n },\n };\n return {\n data: { type: 'inline', value: data, transform: [connector] },\n };\n});\n/**\n * @todo Move some options assignment to runtime.\n */\nexports.setChildren = (0, utils_1.useOverrideAdaptor)((options, subLayout = subLayoutRect, createGuideX = createGuideXRect, createGuideY = createGuideYRect, childOptions = {}) => {\n const { data: dataValue, encode, children, scale: facetScale, x: originX = 0, y: originY = 0, shareData = false, key: viewKey, } = options;\n const { value: data } = dataValue;\n // Only support field encode now.\n const { x: encodeX, y: encodeY } = encode;\n const { color: facetScaleColor } = facetScale;\n const { domain: facetDomainColor } = facetScaleColor;\n const createChildren = (visualData, scale, layout) => {\n const { x: scaleX, y: scaleY } = scale;\n const { paddingLeft, paddingTop, marginLeft, marginTop } = layout;\n const { domain: domainX } = scaleX.getOptions();\n const { domain: domainY } = scaleY.getOptions();\n const index = (0, array_1.indexOf)(visualData);\n const bboxs = visualData.map(subLayout);\n const values = visualData.map(({ x, y }) => [\n scaleX.invert(x),\n scaleY.invert(y),\n ]);\n const filters = values.map(([fx, fy]) => (d) => {\n const { [encodeX]: x, [encodeY]: y } = d;\n const inX = encodeX !== undefined ? x === fx : true;\n const inY = encodeY !== undefined ? y === fy : true;\n return inX && inY;\n });\n const facetData2d = filters.map((f) => data.filter(f));\n const maxDataDomain = shareData\n ? (0, d3_array_1.max)(facetData2d, (data) => data.length)\n : undefined;\n const facets = values.map(([fx, fy]) => ({\n columnField: encodeX,\n columnIndex: domainX.indexOf(fx),\n columnValue: fx,\n columnValuesLength: domainX.length,\n rowField: encodeY,\n rowIndex: domainY.indexOf(fy),\n rowValue: fy,\n rowValuesLength: domainY.length,\n }));\n const normalizedChildren = facets.map((facet) => {\n if (Array.isArray(children))\n return children;\n return [children(facet)].flat(1);\n });\n return index.flatMap((i) => {\n const [left, top, width, height] = bboxs[i];\n const facet = facets[i];\n const facetData = facetData2d[i];\n const children = normalizedChildren[i];\n return children.map((_a) => {\n var _b, _c;\n var { scale, key, facet: isFacet = true, axis = {}, legend = {} } = _a, rest = __rest(_a, [\"scale\", \"key\", \"facet\", \"axis\", \"legend\"]);\n const guideY = ((_b = scale === null || scale === void 0 ? void 0 : scale.y) === null || _b === void 0 ? void 0 : _b.guide) || axis.y;\n const guideX = ((_c = scale === null || scale === void 0 ? void 0 : scale.x) === null || _c === void 0 ? void 0 : _c.guide) || axis.x;\n const defaultScale = {\n x: { tickCount: encodeX ? 5 : undefined },\n y: { tickCount: encodeY ? 5 : undefined },\n };\n const newData = isFacet\n ? facetData\n : facetData.length === 0\n ? []\n : data;\n const newScale = {\n color: { domain: facetDomainColor },\n };\n const newAxis = {\n x: createGuide(guideX, createGuideX)(facet, newData),\n y: createGuide(guideY, createGuideY)(facet, newData),\n };\n return Object.assign(Object.assign({ key: `${key}-${i}`, data: newData, margin: 0, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, parentKey: viewKey, width,\n height, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: newData.length ? true : false, dataDomain: maxDataDomain, scale: (0, util_1.deepMix)(defaultScale, scale, newScale), axis: (0, util_1.deepMix)({}, axis, newAxis), \n // Hide all legends for child mark by default,\n // they are displayed in the top-level.\n legend: false }, rest), childOptions);\n });\n });\n };\n return {\n children: createChildren,\n };\n});\nfunction subLayoutRect(data) {\n const { points } = data;\n return (0, vector_1.calcBBox)(points);\n}\n/**\n * Inner guide not show title, tickLine, label and subTickLine,\n * if data is empty, do not show guide.\n */\nfunction createInnerGuide(guide, data) {\n return data.length\n ? (0, util_1.deepMix)({\n title: false,\n tick: null,\n label: null,\n }, guide)\n : (0, util_1.deepMix)({\n title: false,\n tick: null,\n label: null,\n grid: null,\n }, guide);\n}\nexports.createInnerGuide = createInnerGuide;\nfunction createGuideXRect(guide) {\n return (facet, data) => {\n const { rowIndex, rowValuesLength, columnIndex, columnValuesLength } = facet;\n // Only the bottom-most facet show axisX.\n if (rowIndex !== rowValuesLength - 1)\n return createInnerGuide(guide, data);\n // Only the bottom-left facet show title.\n const title = columnIndex !== columnValuesLength - 1 ? false : undefined;\n // If data is empty, do not show cell.\n const grid = data.length ? undefined : null;\n return (0, util_1.deepMix)({ title, grid }, guide);\n };\n}\nfunction createGuideYRect(guide) {\n return (facet, data) => {\n const { rowIndex, columnIndex } = facet;\n // Only the left-most facet show axisY.\n if (columnIndex !== 0)\n return createInnerGuide(guide, data);\n // Only the left-top facet show title.\n const title = rowIndex !== 0 ? false : undefined;\n // If data is empty, do not show cell.\n const grid = data.length ? undefined : null;\n return (0, util_1.deepMix)({ title, grid }, guide);\n };\n}\nfunction createGuide(guide, factory) {\n if (typeof guide === 'function')\n return guide;\n if (guide === null || guide === false)\n return () => null;\n return factory(guide);\n}\nconst FacetRect = () => {\n return (options) => {\n const newOptions = container_1.Container.of(options)\n .call(exports.toCell)\n .call(exports.inferColor)\n .call(exports.setAnimation)\n .call(setScale)\n .call(exports.setStyle)\n .call(exports.setData)\n .call(exports.setChildren)\n .value();\n return [newOptions];\n };\n};\nexports.FacetRect = FacetRect;\nexports.FacetRect.props = {};\n//# sourceMappingURL=facetRect.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Container = void 0;\nclass Container {\n constructor(x) {\n this.$value = x;\n }\n static of(x) {\n return new Container(x);\n }\n call(f, ...rest) {\n return (this.$value = f(this.$value, ...rest)), this;\n }\n value() {\n return this.$value;\n }\n}\nexports.Container = Container;\n//# sourceMappingURL=container.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RepeatMatrix = void 0;\nconst util_1 = require(\"@antv/util\");\nconst container_1 = require(\"../utils/container\");\nconst vector_1 = require(\"../utils/vector\");\nconst array_1 = require(\"../utils/array\");\nconst facetRect_1 = require(\"./facetRect\");\nconst utils_1 = require(\"./utils\");\nconst setScale = (0, utils_1.useDefaultAdaptor)((options) => {\n return {\n scale: {\n x: { guide: null, paddingOuter: 0, paddingInner: 0.1 },\n y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 },\n },\n };\n});\nconst setChildren = (0, utils_1.useOverrideAdaptor)((options) => {\n const { data, children, x: originX = 0, y: originY = 0, key: viewKey, } = options;\n const createChildren = (visualData, scale, layout) => {\n const { x: scaleX, y: scaleY } = scale;\n const { paddingLeft, paddingTop, marginLeft, marginTop } = layout;\n const { domain: domainX } = scaleX.getOptions();\n const { domain: domainY } = scaleY.getOptions();\n const index = (0, array_1.indexOf)(visualData);\n const bboxs = visualData.map(({ points }) => (0, vector_1.calcBBox)(points));\n const values = visualData.map(({ x, y }) => [\n scaleX.invert(x),\n scaleY.invert(y),\n ]);\n const facets = values.map(([fx, fy]) => ({\n columnField: fx,\n columnIndex: domainX.indexOf(fx),\n columnValue: fx,\n columnValuesLength: domainX.length,\n rowField: fy,\n rowIndex: domainY.indexOf(fy),\n rowValue: fy,\n rowValuesLength: domainY.length,\n }));\n const normalizedChildren = facets.map((facet) => {\n if (Array.isArray(children))\n return children;\n return [children(facet)].flat(1);\n });\n return index.flatMap((i) => {\n const [left, top, width, height] = bboxs[i];\n const [fx, fy] = values[i];\n const facet = facets[i];\n const children = normalizedChildren[i];\n return children.map((d) => {\n var _a, _b;\n const { scale, key, encode, axis, interaction } = d, rest = __rest(d, [\"scale\", \"key\", \"encode\", \"axis\", \"interaction\"]);\n const guideY = (_a = scale === null || scale === void 0 ? void 0 : scale.y) === null || _a === void 0 ? void 0 : _a.guide;\n const guideX = (_b = scale === null || scale === void 0 ? void 0 : scale.x) === null || _b === void 0 ? void 0 : _b.guide;\n const defaultScale = {\n // Do not sync position scales among facets by default.\n x: { facet: false },\n // Do not sync position scales among facets by default.\n y: { facet: false },\n };\n const newAxis = {\n x: createGuideX(guideX)(facet, data),\n y: createGuideY(guideY)(facet, data),\n };\n const defaultAxis = {\n x: { tickCount: 5 },\n y: { tickCount: 5 },\n };\n return Object.assign({ data, parentKey: viewKey, key: `${key}-${i}`, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, width,\n height, margin: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: true, scale: (0, util_1.deepMix)(defaultScale, scale), axis: (0, util_1.deepMix)(defaultAxis, axis, newAxis), \n // Hide all legends for child mark by default,\n // they are displayed in the top-level.\n legend: false, encode: (0, util_1.deepMix)({}, encode, {\n x: fx,\n y: fy,\n }), interaction: (0, util_1.deepMix)({}, interaction, {\n // Register this interaction in parent node.\n legendFilter: false,\n }) }, rest);\n });\n });\n };\n return {\n children: createChildren,\n };\n});\n/**\n * @todo Use transform instead of override data directly.\n */\nconst setData = (0, utils_1.useOverrideAdaptor)((options) => {\n const { encode } = options, rest = __rest(options, [\"encode\"]);\n const { position: P = [], x: X = P, y: Y = [...P].reverse() } = encode, restEncode = __rest(encode, [\"position\", \"x\", \"y\"]);\n const data = [];\n for (const $x of [X].flat(1)) {\n for (const $y of [Y].flat(1)) {\n data.push({ $x, $y });\n }\n }\n return Object.assign(Object.assign({}, rest), { data, encode: Object.assign(Object.assign({}, restEncode), { x: '$x', y: '$y' }), scale: Object.assign(Object.assign({}, ([X].flat(1).length === 1 && { x: { paddingInner: 0 } })), ([Y].flat(1).length === 1 && { y: { paddingInner: 0 } })) });\n});\nfunction createGuideX(guideX) {\n if (typeof guideX === 'function')\n return guideX;\n if (guideX === null)\n return () => null;\n return (facet, data) => {\n const { rowIndex, rowValuesLength } = facet;\n // Only the bottom-most facet show axisX.\n if (rowIndex !== rowValuesLength - 1)\n return (0, facetRect_1.createInnerGuide)(guideX, data);\n };\n}\nfunction createGuideY(guideY) {\n if (typeof guideY === 'function')\n return guideY;\n if (guideY === null)\n return () => null;\n return (facet, data) => {\n const { columnIndex } = facet;\n // Only the left-most facet show axisY.\n if (columnIndex !== 0)\n return (0, facetRect_1.createInnerGuide)(guideY, data);\n };\n}\n/**\n * @todo Layout mode: layer, row, col...\n * @todo Specify show axis or not.\n */\nconst RepeatMatrix = () => {\n return (options) => {\n const newOptions = container_1.Container.of(options)\n .call(facetRect_1.toCell)\n .call(facetRect_1.inferColor)\n .call(setChildren)\n .call(setData)\n .call(facetRect_1.setAnimation)\n .call(facetRect_1.setStyle)\n .call(setScale)\n .value();\n return [newOptions];\n };\n};\nexports.RepeatMatrix = RepeatMatrix;\n//# sourceMappingURL=repeatMatrix.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FacetCircle = void 0;\nconst container_1 = require(\"../utils/container\");\nconst vector_1 = require(\"../utils/vector\");\nconst facetRect_1 = require(\"./facetRect\");\nconst utils_1 = require(\"./utils\");\nconst setScale = (0, utils_1.useDefaultAdaptor)((options) => {\n return {\n scale: {\n x: { guide: { type: 'axisArc' }, paddingOuter: 0, paddingInner: 0.1 },\n y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 },\n },\n };\n});\nconst setCoordinate = (0, utils_1.useDefaultAdaptor)((options) => {\n return {\n coordinate: { type: 'polar' },\n };\n});\nconst setEncode = (options) => {\n const { encode } = options, rest = __rest(options, [\"encode\"]);\n const { position } = encode;\n return Object.assign(Object.assign({}, rest), { encode: { x: position } });\n};\n/**\n * Every facet should do not show both axisX and axisY by default.\n */\nfunction createGuideFacetCircle(guide) {\n return (facet) => null;\n}\n/**\n * Use the inscribed circle of the sector as the\n * circumscribed circle of the new bbox.\n */\nfunction subLayoutFacetCircle(data) {\n const { points } = data;\n const [p0, p1, p2, p3] = points;\n const sr = (0, vector_1.dist)(p0, p3); // radius of sector\n const v0 = (0, vector_1.sub)(p0, p3);\n const v1 = (0, vector_1.sub)(p1, p2);\n const a01 = (0, vector_1.angleBetween)(v0, v1);\n // sr = ir + ir / sin(theta/2)\n const t = 1 / Math.sin(a01 / 2);\n const ir = sr / (1 + t); // radius of inscribed circle\n const s = ir * Math.sqrt(2); // size of the bbox.\n // This assume the innerRadius of polar is 0.\n // @todo Compute the right origin if it's not 0,\n // or maybe pass the coordinates to get the right center.\n const [x0, y0] = p2;\n const a0 = (0, vector_1.angleWithQuadrant)(v0);\n const a3 = a0 + a01 / 2;\n const d = ir * t;\n const cx = x0 + d * Math.sin(a3); // center x of inscribed circle\n const cy = y0 - d * Math.cos(a3); // center y of inscribed circle\n return [cx - s / 2, cy - s / 2, s, s];\n}\n/**\n * @todo Pack.\n */\nconst FacetCircle = () => {\n return (options) => {\n const newOptions = container_1.Container.of(options)\n .call(facetRect_1.toCell)\n .call(setEncode)\n .call(facetRect_1.inferColor)\n .call(setCoordinate)\n .call(facetRect_1.setData)\n .call(facetRect_1.setChildren, subLayoutFacetCircle, createGuideFacetCircle, createGuideFacetCircle, { frame: false })\n .call(facetRect_1.setAnimation)\n .call(facetRect_1.setStyle)\n .call(setScale)\n .value();\n return [newOptions];\n };\n};\nexports.FacetCircle = FacetCircle;\n//# sourceMappingURL=facetCircle.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TimingKeyframe = void 0;\nconst util_1 = require(\"@antv/util\");\nfunction range(direction, iterationCount, keyframeCount) {\n const start = 0;\n const end = keyframeCount;\n const normal = [start, end];\n const reverse = [-end + 1, -start + 1];\n if (direction === 'normal')\n return normal;\n if (direction === 'reverse')\n return reverse;\n if (direction === 'alternate') {\n return iterationCount % 2 === 0 ? normal : reverse;\n }\n if (direction === 'reverse-alternate') {\n return iterationCount % 2 === 0 ? reverse : normal;\n }\n}\n/**\n * Set animation options for all descendants.\n */\nfunction setAnimation(node, duration, easing) {\n const discovered = [node];\n while (discovered.length) {\n const n = discovered.pop();\n n.animate = (0, util_1.deepMix)({\n enter: {\n duration,\n },\n update: {\n duration,\n easing,\n type: 'morphing',\n fill: 'both',\n },\n exit: {\n type: 'fadeOut',\n duration,\n },\n }, n.animate || {});\n const { children } = n;\n if (Array.isArray(children))\n discovered.push(...children);\n }\n return node;\n}\n/**\n * @todo More options, such as fill, totalDuration...\n */\nconst TimingKeyframe = () => {\n return (options) => {\n const { children = [], duration = 1000, iterationCount = 1, direction = 'normal', easing = 'ease-in-out-sine', } = options;\n const n = children.length;\n if (!Array.isArray(children) || n === 0)\n return [];\n const { key } = children[0];\n const newChildren = children\n .map((d) => (Object.assign(Object.assign({}, d), { key })))\n .map((d) => setAnimation(d, duration, easing));\n return function* () {\n let count = 0;\n let prevIndex;\n while (iterationCount === 'infinite' || count < iterationCount) {\n const [start, end] = range(direction, count, n);\n for (let i = start; i < end; i += 1) {\n // For reverse direction, the range is from negative to negative\n // so the absolute value of i is the real index for newChildren.\n const index = Math.abs(i);\n // This is for preventing alternate or reverse-alternate keyframe\n // to yield two same node one by one when the direction change.\n if (prevIndex !== index)\n yield newChildren[index];\n prevIndex = index;\n }\n count++;\n }\n };\n };\n};\nexports.TimingKeyframe = TimingKeyframe;\nexports.TimingKeyframe.props = {};\n//# sourceMappingURL=timingKeyframe.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeoPath = void 0;\n/**\n * Wrap GeoPath by a GeoView.\n */\nconst GeoPath = () => {\n return (options) => {\n const { type, data, scale, encode, style, animate, key, state } = options, rest = __rest(options, [\"type\", \"data\", \"scale\", \"encode\", \"style\", \"animate\", \"key\", \"state\"]);\n return [\n Object.assign(Object.assign({ type: 'geoView' }, rest), { children: [\n {\n type: 'geoPath',\n key: `${key}-0`,\n data: {\n value: data,\n },\n scale,\n encode,\n style,\n animate,\n state,\n },\n ] }),\n ];\n };\n};\nexports.GeoPath = GeoPath;\nexports.GeoPath.props = {};\n//# sourceMappingURL=geoPath.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeoView = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst util_1 = require(\"@antv/util\");\nconst d3_geo_1 = require(\"@antv/vendor/d3-geo\");\nconst mark_1 = require(\"../utils/mark\");\nconst d3Projection = __importStar(require(\"./d3Projection\"));\n/**\n * Get projection factory from d3-projection.\n */\nfunction normalizeProjection(type) {\n if (typeof type === 'function')\n return type;\n const name = `geo${(0, util_1.upperFirst)(type)}`;\n const projection = d3Projection[name];\n if (!projection)\n throw new Error(`Unknown coordinate: ${type}`);\n return projection;\n}\n/**\n * @see https://github.com/mapbox/geojson-merge/blob/master/index.js\n */\nfunction mergeGeoJSON(gjs) {\n return {\n type: 'FeatureCollection',\n features: gjs.flatMap((gj) => normalizeGeoJSON(gj).features),\n };\n}\nfunction normalizeGeoJSON(gj) {\n const types = {\n Point: 'geometry',\n MultiPoint: 'geometry',\n LineString: 'geometry',\n MultiLineString: 'geometry',\n Polygon: 'geometry',\n MultiPolygon: 'geometry',\n GeometryCollection: 'geometry',\n Feature: 'feature',\n FeatureCollection: 'featureCollection',\n };\n if (!gj || !gj.type)\n return null;\n const type = types[gj.type];\n if (!type)\n return null;\n if (type === 'geometry') {\n return {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: {},\n geometry: gj,\n },\n ],\n };\n }\n else if (type === 'feature') {\n return {\n type: 'FeatureCollection',\n features: [gj],\n };\n }\n else if (type === 'featureCollection') {\n return gj;\n }\n}\n/**\n * Specify the options for d3 projection\n * @see https://github.com/d3/d3-geo#projections\n * @todo Specify key each by each.\n */\nfunction setProjectionOptions(projection, options) {\n var _a;\n for (const [key, value] of Object.entries(options)) {\n (_a = projection[key]) === null || _a === void 0 ? void 0 : _a.call(projection, value);\n }\n}\nfunction setProjectionSize(projection, nodes, layout, options) {\n const defaultOutline = () => {\n const geoNodes = nodes.filter(isGeoPath);\n // For geoPath with sphere mark, use it as outline.\n const sphere = geoNodes.find((d) => d.sphere);\n if (sphere)\n return { type: 'Sphere' };\n // Merge all GeoJSON as the outline.\n return mergeGeoJSON(geoNodes.filter((d) => !d.sphere).flatMap((d) => d.data.value));\n };\n const { outline = defaultOutline() } = options;\n const { size = 'fitExtent' } = options;\n if (size === 'fitExtent') {\n return setFitExtent(projection, outline, layout);\n }\n else if (size === 'fitWidth') {\n return setFitWidth(projection, outline, layout);\n }\n}\nfunction setFitExtent(projection, object, layout) {\n const { x, y, width, height } = layout;\n projection.fitExtent([\n [x, y],\n [width, height],\n ], object);\n}\nfunction setFitWidth(projection, object, layout) {\n const { width, height } = layout;\n const [[x0, y0], [x1, y1]] = (0, d3_geo_1.geoPath)(projection.fitWidth(width, object)).bounds(object);\n const dy = Math.ceil(y1 - y0);\n const l = Math.min(Math.ceil(x1 - x0), dy);\n const s = (projection.scale() * (l - 1)) / l;\n const [tx, ty] = projection.translate();\n const t = ty + (height - dy) / 2;\n projection.scale(s).translate([tx, t]).precision(0.2);\n}\n/**\n * @todo Remove this.\n */\nfunction normalizeDataSource(node) {\n const { data } = node;\n if (Array.isArray(data))\n return Object.assign(Object.assign({}, node), { data: { value: data } });\n const { type } = data;\n if (type === 'graticule10') {\n return Object.assign(Object.assign({}, node), { data: { value: [(0, d3_geo_1.geoGraticule10)()] } });\n }\n else if (type === 'sphere') {\n // Sphere is not a standard type of GeoJSON.\n // Mark this geoPath as sphere geoPath.\n return Object.assign(Object.assign({}, node), { sphere: true, data: { value: [{ type: 'Sphere' }] } });\n }\n return node;\n}\nfunction isGeoPath(d) {\n return d.type === 'geoPath';\n}\n/**\n * A view with geo coordinate.\n */\nconst GeoView = () => {\n return (options) => {\n const { children, coordinate: projection = {} } = options;\n if (!Array.isArray(children))\n return [];\n // Get projection factory.\n const { type = 'equalEarth' } = projection, projectionOptions = __rest(projection, [\"type\"]);\n const createProjection = normalizeProjection(type);\n const nodes = children.map(normalizeDataSource);\n // Set path generator lazily.\n let path;\n // A custom geo coordinate.\n function Geo() {\n return [\n [\n 'custom',\n (x, y, width, height) => {\n // Create and set projection.\n const visual = createProjection();\n const layout = { x, y, width, height };\n setProjectionSize(visual, nodes, layout, projectionOptions);\n setProjectionOptions(visual, projectionOptions);\n // Create path generator.\n path = (0, d3_geo_1.geoPath)(visual);\n // Normalize projection and projection.invert,\n // which normalize projected points.\n const scaleX = new scale_1.Linear({\n domain: [x, x + width],\n });\n const scaleY = new scale_1.Linear({\n domain: [y, y + height],\n });\n const normalize = (point) => {\n const visualPoint = visual(point);\n if (!visualPoint)\n return [null, null];\n const [vx, vy] = visualPoint;\n return [scaleX.map(vx), scaleY.map(vy)];\n };\n const normalizeInvert = (point) => {\n if (!point)\n return null;\n const [px, py] = point;\n const visualPoint = [scaleX.invert(px), scaleY.invert(py)];\n return visual.invert(visualPoint);\n };\n return {\n transform: (point) => normalize(point),\n untransform: (point) => normalizeInvert(point),\n };\n },\n ],\n ];\n }\n function GeoPath(options) {\n const { style, tooltip = {} } = options;\n return Object.assign(Object.assign({}, options), { type: 'path', tooltip: (0, mark_1.maybeTooltip)(tooltip, {\n title: 'id',\n items: [{ channel: 'color' }],\n }), style: Object.assign(Object.assign({}, style), { d: (d) => path(d) || [] }) });\n }\n const t = (d) => (isGeoPath(d) ? GeoPath(d) : d);\n return [\n Object.assign(Object.assign({}, options), { type: 'view', scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n }, axis: false, coordinate: { type: Geo }, children: nodes.flatMap(t) }),\n ];\n };\n};\nexports.GeoView = GeoView;\nexports.GeoView.props = {};\n//# sourceMappingURL=geoView.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.geoTransverseMercatorRaw = exports.geoTransverseMercator = exports.geoStereographicRaw = exports.geoStereographic = exports.geoOrthographicRaw = exports.geoOrthographic = exports.geoNaturalEarth1Raw = exports.geoNaturalEarth1 = exports.geoMercatorRaw = exports.geoMercator = exports.geoProjectionMutator = exports.geoProjection = exports.geoIdentity = exports.geoGnomonicRaw = exports.geoGnomonic = exports.geoEquirectangularRaw = exports.geoEquirectangular = exports.geoEqualEarthRaw = exports.geoEqualEarth = exports.geoConicEquidistantRaw = exports.geoConicEquidistant = exports.geoConicEqualAreaRaw = exports.geoConicEqualArea = exports.geoConicConformalRaw = exports.geoConicConformal = exports.geoAzimuthalEquidistantRaw = exports.geoAzimuthalEquidistant = exports.geoAzimuthalEqualAreaRaw = exports.geoAzimuthalEqualArea = exports.geoAlbers = exports.geoAlbersUsa = void 0;\nvar d3_geo_1 = require(\"@antv/vendor/d3-geo\");\nObject.defineProperty(exports, \"geoAlbersUsa\", { enumerable: true, get: function () { return d3_geo_1.geoAlbersUsa; } });\nObject.defineProperty(exports, \"geoAlbers\", { enumerable: true, get: function () { return d3_geo_1.geoAlbers; } });\nObject.defineProperty(exports, \"geoAzimuthalEqualArea\", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEqualArea; } });\nObject.defineProperty(exports, \"geoAzimuthalEqualAreaRaw\", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEqualAreaRaw; } });\nObject.defineProperty(exports, \"geoAzimuthalEquidistant\", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEquidistant; } });\nObject.defineProperty(exports, \"geoAzimuthalEquidistantRaw\", { enumerable: true, get: function () { return d3_geo_1.geoAzimuthalEquidistantRaw; } });\nObject.defineProperty(exports, \"geoConicConformal\", { enumerable: true, get: function () { return d3_geo_1.geoConicConformal; } });\nObject.defineProperty(exports, \"geoConicConformalRaw\", { enumerable: true, get: function () { return d3_geo_1.geoConicConformalRaw; } });\nObject.defineProperty(exports, \"geoConicEqualArea\", { enumerable: true, get: function () { return d3_geo_1.geoConicEqualArea; } });\nObject.defineProperty(exports, \"geoConicEqualAreaRaw\", { enumerable: true, get: function () { return d3_geo_1.geoConicEqualAreaRaw; } });\nObject.defineProperty(exports, \"geoConicEquidistant\", { enumerable: true, get: function () { return d3_geo_1.geoConicEquidistant; } });\nObject.defineProperty(exports, \"geoConicEquidistantRaw\", { enumerable: true, get: function () { return d3_geo_1.geoConicEquidistantRaw; } });\nObject.defineProperty(exports, \"geoEqualEarth\", { enumerable: true, get: function () { return d3_geo_1.geoEqualEarth; } });\nObject.defineProperty(exports, \"geoEqualEarthRaw\", { enumerable: true, get: function () { return d3_geo_1.geoEqualEarthRaw; } });\nObject.defineProperty(exports, \"geoEquirectangular\", { enumerable: true, get: function () { return d3_geo_1.geoEquirectangular; } });\nObject.defineProperty(exports, \"geoEquirectangularRaw\", { enumerable: true, get: function () { return d3_geo_1.geoEquirectangularRaw; } });\nObject.defineProperty(exports, \"geoGnomonic\", { enumerable: true, get: function () { return d3_geo_1.geoGnomonic; } });\nObject.defineProperty(exports, \"geoGnomonicRaw\", { enumerable: true, get: function () { return d3_geo_1.geoGnomonicRaw; } });\nObject.defineProperty(exports, \"geoIdentity\", { enumerable: true, get: function () { return d3_geo_1.geoIdentity; } });\nObject.defineProperty(exports, \"geoProjection\", { enumerable: true, get: function () { return d3_geo_1.geoProjection; } });\nObject.defineProperty(exports, \"geoProjectionMutator\", { enumerable: true, get: function () { return d3_geo_1.geoProjectionMutator; } });\nObject.defineProperty(exports, \"geoMercator\", { enumerable: true, get: function () { return d3_geo_1.geoMercator; } });\nObject.defineProperty(exports, \"geoMercatorRaw\", { enumerable: true, get: function () { return d3_geo_1.geoMercatorRaw; } });\nObject.defineProperty(exports, \"geoNaturalEarth1\", { enumerable: true, get: function () { return d3_geo_1.geoNaturalEarth1; } });\nObject.defineProperty(exports, \"geoNaturalEarth1Raw\", { enumerable: true, get: function () { return d3_geo_1.geoNaturalEarth1Raw; } });\nObject.defineProperty(exports, \"geoOrthographic\", { enumerable: true, get: function () { return d3_geo_1.geoOrthographic; } });\nObject.defineProperty(exports, \"geoOrthographicRaw\", { enumerable: true, get: function () { return d3_geo_1.geoOrthographicRaw; } });\nObject.defineProperty(exports, \"geoStereographic\", { enumerable: true, get: function () { return d3_geo_1.geoStereographic; } });\nObject.defineProperty(exports, \"geoStereographicRaw\", { enumerable: true, get: function () { return d3_geo_1.geoStereographicRaw; } });\nObject.defineProperty(exports, \"geoTransverseMercator\", { enumerable: true, get: function () { return d3_geo_1.geoTransverseMercator; } });\nObject.defineProperty(exports, \"geoTransverseMercatorRaw\", { enumerable: true, get: function () { return d3_geo_1.geoTransverseMercatorRaw; } });\n//# sourceMappingURL=d3Projection.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Event = void 0;\nconst event_1 = require(\"../utils/event\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\n// For extended component\nfunction maybeComponentRoot(node) {\n return (0, utils_1.maybeRoot)(node, (node) => node.className === 'component');\n}\n// For extended shape.\nfunction maybeElementRoot(node) {\n return (0, utils_1.maybeRoot)(node, (node) => node.className === 'element');\n}\n// For extended label.\nfunction maybeLabelRoot(node) {\n return (0, utils_1.maybeRoot)(node, (node) => node.className === 'label');\n}\nfunction bubblesEvent(eventType, view, emitter, predicate = (event) => true) {\n return (e) => {\n if (!predicate(e))\n return;\n // Emit plot events.\n emitter.emit(`plot:${eventType}`, e);\n const { target } = e;\n // There is no target for pointerupoutside event if out of canvas.\n if (!target)\n return;\n const { className } = target;\n // If target area is plot area, do not emit extra events.\n if (className === 'plot')\n return;\n // If target is element or child of element.\n const elementRoot = maybeElementRoot(target);\n // If target is component or child of component.\n const componentRoot = maybeComponentRoot(target);\n // If target is babel or child of babel.\n const babelRoot = maybeLabelRoot(target);\n const root = elementRoot || componentRoot || babelRoot;\n if (!root)\n return;\n const { className: elementType, markType } = root;\n const e1 = Object.assign(Object.assign({}, e), { nativeEvent: true });\n if (elementType === 'element') {\n e1['data'] = { data: (0, helper_1.dataOf)(root, view) };\n emitter.emit(`element:${eventType}`, e1);\n emitter.emit(`${markType}:${eventType}`, e1);\n }\n else if (elementType === 'label') {\n //label children [Text2, Rect2, Path2],\n e1['data'] = { data: root.attributes.datum };\n emitter.emit(`label:${eventType}`, e1);\n emitter.emit(`${className}:${eventType}`, e1);\n }\n else {\n emitter.emit(`component:${eventType}`, e1);\n emitter.emit(`${className}:${eventType}`, e1);\n }\n };\n}\n// @todo Provide more info for event.dataset.\nfunction Event() {\n return (context, _, emitter) => {\n const { container, view } = context;\n // Click events.\n const click = bubblesEvent(event_1.ChartEvent.CLICK, view, emitter, (e) => e.detail === 1);\n const dblclick = bubblesEvent(event_1.ChartEvent.DBLCLICK, view, emitter, (e) => e.detail === 2);\n // Pointer events.\n const pointertap = bubblesEvent(event_1.ChartEvent.POINTER_TAP, view, emitter);\n const pointerdown = bubblesEvent(event_1.ChartEvent.POINTER_DOWN, view, emitter);\n const pointerup = bubblesEvent(event_1.ChartEvent.POINTER_UP, view, emitter);\n const pointerover = bubblesEvent(event_1.ChartEvent.POINTER_OVER, view, emitter);\n const pointerout = bubblesEvent(event_1.ChartEvent.POINTER_OUT, view, emitter);\n const pointermove = bubblesEvent(event_1.ChartEvent.POINTER_MOVE, view, emitter);\n const pointerenter = bubblesEvent(event_1.ChartEvent.POINTER_ENTER, view, emitter);\n const pointerleave = bubblesEvent(event_1.ChartEvent.POINTER_LEAVE, view, emitter);\n const pointerupoutside = bubblesEvent(event_1.ChartEvent.POINTER_UPOUTSIDE, view, emitter);\n // Drag and drop events.\n const dragstart = bubblesEvent(event_1.ChartEvent.DRAG_START, view, emitter);\n const drag = bubblesEvent(event_1.ChartEvent.DRAG, view, emitter);\n const dragend = bubblesEvent(event_1.ChartEvent.DRAG_END, view, emitter);\n const dragenter = bubblesEvent(event_1.ChartEvent.DRAG_ENTER, view, emitter);\n const dragleave = bubblesEvent(event_1.ChartEvent.DRAG_LEAVE, view, emitter);\n const dragover = bubblesEvent(event_1.ChartEvent.DRAG_OVER, view, emitter);\n const drop = bubblesEvent(event_1.ChartEvent.DROP, view, emitter);\n // For legacy usage.\n container.addEventListener('click', click);\n container.addEventListener('click', dblclick);\n // Recommend events.\n container.addEventListener('pointertap', pointertap);\n container.addEventListener('pointerdown', pointerdown);\n container.addEventListener('pointerup', pointerup);\n container.addEventListener('pointerover', pointerover);\n container.addEventListener('pointerout', pointerout);\n container.addEventListener('pointermove', pointermove);\n container.addEventListener('pointerenter', pointerenter);\n container.addEventListener('pointerleave', pointerleave);\n container.addEventListener('pointerupoutside', pointerupoutside);\n // Plugin events.\n container.addEventListener('dragstart', dragstart);\n container.addEventListener('drag', drag);\n container.addEventListener('dragend', dragend);\n container.addEventListener('dragenter', dragenter);\n container.addEventListener('dragleave', dragleave);\n container.addEventListener('dragover', dragover);\n container.addEventListener('drop', drop);\n return () => {\n container.removeEventListener('click', click);\n container.removeEventListener('click', dblclick);\n container.removeEventListener('pointertap', pointertap);\n container.removeEventListener('pointerdown', pointerdown);\n container.removeEventListener('pointerup', pointerup);\n container.removeEventListener('pointerover', pointerover);\n container.removeEventListener('pointerout', pointerout);\n container.removeEventListener('pointermove', pointermove);\n container.removeEventListener('pointerenter', pointerenter);\n container.removeEventListener('pointerleave', pointerleave);\n container.removeEventListener('pointerupoutside', pointerupoutside);\n container.removeEventListener('dragstart', dragstart);\n container.removeEventListener('drag', drag);\n container.removeEventListener('dragend', dragend);\n container.removeEventListener('dragenter', dragenter);\n container.removeEventListener('dragleave', dragleave);\n container.removeEventListener('dragover', dragover);\n container.removeEventListener('drop', drop);\n };\n };\n}\nexports.Event = Event;\nEvent.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=event.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidScale = exports.isPosition = exports.syncFacetsScales = exports.useRelationScale = exports.assignScale = exports.useRelation = exports.collectScales = exports.groupTransform = exports.applyScale = exports.inferScale = void 0;\nconst scale_1 = require(\"@antv/scale\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst d3ScaleChromatic = __importStar(require(\"@antv/vendor/d3-scale-chromatic\"));\nconst util_1 = require(\"@antv/util\");\nconst array_1 = require(\"../utils/array\");\nconst helper_1 = require(\"../utils/helper\");\nconst coordinate_1 = require(\"./coordinate\");\nconst library_1 = require(\"./library\");\nfunction inferScale(name, values, options, coordinates, theme, library) {\n const { guide = {} } = options;\n const type = inferScaleType(name, values, options);\n if (typeof type !== 'string')\n return options;\n const expectedDomain = inferScaleDomain(type, name, values, options);\n const actualDomain = maybeRatio(type, expectedDomain, options);\n return Object.assign(Object.assign(Object.assign({}, options), inferScaleOptions(type, name, values, options, coordinates)), { domain: actualDomain, range: inferScaleRange(type, name, values, options, actualDomain, theme, library), expectedDomain,\n guide,\n name,\n type });\n}\nexports.inferScale = inferScale;\nfunction applyScale(channels, scale) {\n const scaledValue = {};\n for (const channel of channels) {\n const { values, name: scaleName } = channel;\n const scaleInstance = scale[scaleName];\n for (const value of values) {\n const { name, value: V } = value;\n scaledValue[name] = V.map((d) => scaleInstance.map(d));\n }\n }\n return scaledValue;\n}\nexports.applyScale = applyScale;\nfunction groupTransform(markState, uidScale) {\n const channels = Array.from(markState.values()).flatMap((d) => d.channels);\n const scaleGroups = (0, d3_array_1.rollups)(channels, (channels) => channels.map((d) => uidScale.get(d.scale.uid)), (d) => d.name)\n .filter(([, scales]) => scales.some((d) => typeof d.getOptions().groupTransform === 'function') && // only sync scales with groupTransform options\n scales.every((d) => d.getTicks))\n .map((d) => d[1]);\n scaleGroups.forEach((group) => {\n const groupTransform = group.map((d) => d.getOptions().groupTransform)[0];\n groupTransform(group);\n });\n}\nexports.groupTransform = groupTransform;\nfunction collectScales(states, options) {\n var _a;\n const { components = [] } = options;\n const NONE_STATIC_KEYS = [\n 'scale',\n 'encode',\n 'axis',\n 'legend',\n 'data',\n 'transform',\n ];\n // From normal marks.\n const scales = Array.from(new Set(states.flatMap((d) => d.channels.map((d) => d.scale))));\n // From static marks.\n const nameScale = new Map(scales.map((scale) => [scale.name, scale]));\n for (const component of components) {\n const channels = inferChannelsForComponent(component);\n for (const channel of channels) {\n const scale = nameScale.get(channel);\n const staticScale = ((_a = component.scale) === null || _a === void 0 ? void 0 : _a[channel]) || {};\n const { independent = false } = staticScale;\n if (scale && !independent) {\n // Merged with exist scales if is not independent.\n const { guide } = scale;\n const guide1 = typeof guide === 'boolean' ? {} : guide;\n scale.guide = (0, util_1.deepMix)({}, guide1, component);\n Object.assign(scale, staticScale);\n }\n else {\n // Append new scales without exit scales or independent.\n const options1 = Object.assign(Object.assign({}, staticScale), { expectedDomain: staticScale.domain, name: channel, guide: (0, util_1.omit)(component, NONE_STATIC_KEYS) });\n scales.push(options1);\n }\n }\n }\n return scales;\n}\nexports.collectScales = collectScales;\nfunction useRelation(relations) {\n if (!relations || !Array.isArray(relations))\n return [helper_1.identity, helper_1.identity];\n // Store original map and invert.\n let map;\n let invert;\n const conditionalize = (scale) => {\n var _a;\n map = scale.map.bind(scale);\n invert = (_a = scale.invert) === null || _a === void 0 ? void 0 : _a.bind(scale);\n // Distinguish functions[function, output] and value[vale, output] relations.\n const funcRelations = relations.filter(([v]) => typeof v === 'function');\n const valueRelations = relations.filter(([v]) => typeof v !== 'function');\n // Update scale.map\n const valueOutput = new Map(valueRelations);\n scale.map = (x) => {\n for (const [verify, value] of funcRelations) {\n if (verify(x))\n return value;\n }\n if (valueOutput.has(x))\n return valueOutput.get(x);\n return map(x);\n };\n if (!invert)\n return scale;\n // Update scale.invert\n const outputValue = new Map(valueRelations.map(([a, b]) => [b, a]));\n const outputFunc = new Map(funcRelations.map(([a, b]) => [b, a]));\n scale.invert = (x) => {\n if (outputFunc.has(x))\n return x;\n if (outputValue.has(x))\n return outputValue.get(x);\n return invert(x);\n };\n return scale;\n };\n const deconditionalize = (scale) => {\n if (map !== null)\n scale.map = map;\n if (invert !== null)\n scale.invert = invert;\n return scale;\n };\n return [conditionalize, deconditionalize];\n}\nexports.useRelation = useRelation;\nfunction assignScale(target, source) {\n const keys = Object.keys(target);\n for (const scale of Object.values(source)) {\n const { name } = scale.getOptions();\n if (!(name in target))\n target[name] = scale;\n else {\n const I = keys\n .filter((d) => d.startsWith(name))\n // Reg is for extract `1` from `x1`;\n .map((d) => +(d.replace(name, '') || 0));\n const index = (0, d3_array_1.max)(I) + 1;\n const newKey = `${name}${index}`;\n target[newKey] = scale;\n scale.getOptions().key = newKey;\n }\n }\n return target;\n}\nexports.assignScale = assignScale;\nfunction useRelationScale(options, library) {\n const [useScale] = (0, library_1.useLibrary)('scale', library);\n const { relations } = options;\n const [conditionalize] = useRelation(relations);\n const scale = useScale(options);\n return conditionalize(scale);\n}\nexports.useRelationScale = useRelationScale;\nfunction syncFacetsScales(states) {\n const scales = states\n .flatMap((d) => Array.from(d.values()))\n .flatMap((d) => d.channels.map((d) => d.scale));\n syncFacetsScaleByChannel(scales, 'x');\n syncFacetsScaleByChannel(scales, 'y');\n}\nexports.syncFacetsScales = syncFacetsScales;\nfunction inferChannelsForComponent(component) {\n const { channels = [], type, scale = {} } = component;\n const L = ['shape', 'color', 'opacity', 'size'];\n if (channels.length !== 0)\n return channels;\n if (type === 'axisX')\n return ['x'];\n if (type === 'axisY')\n return ['y'];\n if (type === 'legends')\n return Object.keys(scale).filter((d) => L.includes(d));\n return [];\n}\nfunction syncFacetsScaleByChannel(scales, channel) {\n const S = scales.filter(({ name, facet = true }) => facet && name === channel);\n const D = S.flatMap((d) => d.domain);\n const syncedD = S.every(isQuantitativeScale)\n ? (0, d3_array_1.extent)(D)\n : S.every(isDiscreteScale)\n ? Array.from(new Set(D))\n : null;\n if (syncedD === null)\n return;\n for (const scale of S) {\n scale.domain = syncedD;\n }\n}\nfunction maybeRatio(type, domain, options) {\n const { ratio } = options;\n if (ratio === undefined || ratio === null)\n return domain;\n if (isQuantitativeScale({ type })) {\n return clampQuantitativeScale(domain, ratio, type);\n }\n if (isDiscreteScale({ type }))\n return clampDiscreteScale(domain, ratio);\n return domain;\n}\nfunction clampQuantitativeScale(domain, ratio, type) {\n const D = domain.map(Number);\n const scale = new scale_1.Linear({\n domain: D,\n range: [D[0], D[0] + (D[D.length - 1] - D[0]) * ratio],\n });\n if (type === 'time')\n return domain.map((d) => new Date(scale.map(d)));\n return domain.map((d) => scale.map(d));\n}\nfunction clampDiscreteScale(domain, ratio) {\n const index = Math.round(domain.length * ratio);\n return domain.slice(0, index);\n}\nfunction isQuantitativeScale(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return false;\n // Do not take quantize, quantile or threshold scale into account,\n // because they are not for position scales. If they are, there is\n // no need to sync them.\n const names = ['linear', 'log', 'pow', 'time'];\n return names.includes(type);\n}\nfunction isDiscreteScale(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return false;\n const names = ['band', 'point', 'ordinal'];\n return names.includes(type);\n}\n// @todo More accurate inference for different cases.\nfunction inferScaleType(name, values, options) {\n const { type, domain, range, quantitative, ordinal } = options;\n if (type !== undefined)\n return type;\n if (isObject(values))\n return 'identity';\n if (typeof range === 'string')\n return 'linear';\n if ((domain || range || []).length > 2)\n return asOrdinalType(name, ordinal);\n if (domain !== undefined) {\n if (isOrdinal([domain]))\n return asOrdinalType(name, ordinal);\n if (isTemporal(values))\n return 'time';\n return asQuantitativeType(name, range, quantitative);\n }\n if (isOrdinal(values))\n return asOrdinalType(name, ordinal);\n if (isTemporal(values))\n return 'time';\n return asQuantitativeType(name, range, quantitative);\n}\nfunction inferScaleDomain(type, name, values, options) {\n const { domain } = options;\n if (domain !== undefined)\n return domain;\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt':\n case 'quantize':\n case 'threshold':\n return maybeMinMax(inferDomainQ(values, options), options);\n case 'band':\n case 'ordinal':\n case 'point':\n return inferDomainC(values);\n case 'quantile':\n return inferDomainO(values);\n case 'sequential':\n return maybeMinMax(inferDomainS(values), options);\n default:\n return [];\n }\n}\nfunction inferScaleRange(type, name, values, options, domain, theme, library) {\n const { range } = options;\n if (typeof range === 'string')\n return gradientColors(range);\n if (range !== undefined)\n return range;\n const { rangeMin, rangeMax } = options;\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt': {\n const colors = categoricalColors(values, options, domain, theme, library);\n const [r0, r1] = inferRangeQ(name, colors);\n return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : r0, rangeMax !== null && rangeMax !== void 0 ? rangeMax : r1];\n }\n case 'band':\n case 'point': {\n const min = name === 'size' ? 5 : 0;\n const max = name === 'size' ? 10 : 1;\n return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : min, rangeMax !== null && rangeMax !== void 0 ? rangeMax : max];\n }\n case 'ordinal': {\n return categoricalColors(values, options, domain, theme, library);\n }\n case 'sequential':\n return undefined;\n case 'constant':\n return [values[0][0]];\n default:\n return [];\n }\n}\nfunction inferScaleOptions(type, name, values, options, coordinates) {\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt':\n return inferOptionsQ(coordinates, options);\n case 'band':\n case 'point':\n return inferOptionsC(type, name, coordinates, options);\n case 'sequential':\n return inferOptionsS(options);\n default:\n return options;\n }\n}\nfunction categoricalColors(values, options, domain, theme, library) {\n const [usePalette] = (0, library_1.useLibrary)('palette', library);\n const { category10: c10, category20: c20 } = theme;\n const defaultPalette = (0, array_1.unique)(domain).length <= c10.length ? c10 : c20;\n const { palette = defaultPalette, offset } = options;\n if (Array.isArray(palette))\n return palette;\n // Built-in palettes have higher priority.\n try {\n return usePalette({ type: palette });\n }\n catch (e) {\n const colors = interpolatedColors(palette, domain, offset);\n if (colors)\n return colors;\n throw new Error(`Unknown Component: ${palette} `);\n }\n}\nfunction gradientColors(range) {\n return range.split('-');\n}\nfunction interpolatedColors(palette, domain, offset = (d) => d) {\n if (!palette)\n return null;\n const fullName = (0, util_1.upperFirst)(palette);\n // If scheme have enough colors, then return pre-defined colors.\n const scheme = d3ScaleChromatic[`scheme${fullName}`];\n const interpolator = d3ScaleChromatic[`interpolate${fullName}`];\n if (!scheme && !interpolator)\n return null;\n if (scheme) {\n // If is a one dimension array, return it.\n if (!scheme.some(Array.isArray))\n return scheme;\n const schemeColors = scheme[domain.length];\n if (schemeColors)\n return schemeColors;\n }\n // Otherwise interpolate to get full colors.\n return domain.map((_, i) => interpolator(offset(i / domain.length)));\n}\nfunction inferOptionsS(options) {\n const { palette = 'ylGnBu', offset } = options;\n const name = (0, util_1.upperFirst)(palette);\n const interpolator = d3ScaleChromatic[`interpolate${name}`];\n if (!interpolator)\n throw new Error(`Unknown palette: ${name}`);\n return {\n interpolator: offset ? (x) => interpolator(offset(x)) : interpolator,\n };\n}\nfunction inferOptionsQ(coordinates, options) {\n const { interpolate = scale_1.createInterpolateValue, nice = false, tickCount = 5, } = options;\n return Object.assign(Object.assign({}, options), { interpolate, nice, tickCount });\n}\nfunction inferOptionsC(type, name, coordinates, options) {\n if (options.padding !== undefined ||\n options.paddingInner !== undefined ||\n options.paddingOuter !== undefined) {\n return Object.assign(Object.assign({}, options), { unknown: NaN });\n }\n const padding = inferPadding(type, name, coordinates);\n const { paddingInner = padding, paddingOuter = padding } = options;\n return Object.assign(Object.assign({}, options), { paddingInner,\n paddingOuter,\n padding, unknown: NaN });\n}\nfunction inferPadding(type, name, coordinates) {\n // The scale for enterDelay and enterDuration should has zero padding by default.\n // Because there is no need to add extra delay for the start and the end.\n if (name === 'enterDelay' || name === 'enterDuration')\n return 0;\n if (name === 'size')\n return 0;\n if (type === 'band')\n return (0, coordinate_1.isTheta)(coordinates) ? 0 : 0.1;\n // Point scale need 0.5 padding to make interval between first and last point\n // equal to other intervals in polar coordinate.\n if (type === 'point')\n return 0.5;\n return 0;\n}\nfunction asOrdinalType(name, defaults) {\n if (defaults)\n return defaults;\n return isQuantitative(name) ? 'point' : 'ordinal';\n}\nfunction asQuantitativeType(name, range, defaults) {\n if (defaults)\n return defaults;\n if (name !== 'color')\n return 'linear';\n return range ? 'linear' : 'sequential';\n}\nfunction maybeMinMax(domain, options) {\n if (domain.length === 0)\n return domain;\n const { domainMin, domainMax } = options;\n const [d0, d1] = domain;\n return [domainMin !== null && domainMin !== void 0 ? domainMin : d0, domainMax !== null && domainMax !== void 0 ? domainMax : d1];\n}\nfunction inferDomainQ(values, options) {\n const { zero = false } = options;\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n for (const d of value) {\n if ((0, helper_1.defined)(d)) {\n min = Math.min(min, +d);\n max = Math.max(max, +d);\n }\n }\n }\n if (min === Infinity)\n return [];\n return zero ? [Math.min(0, min), max] : [min, max];\n}\nfunction inferDomainC(values) {\n return Array.from(new Set(values.flat()));\n}\nfunction inferDomainO(values) {\n return values.flat().sort();\n}\nfunction inferDomainS(values) {\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n for (const d of value) {\n if ((0, helper_1.defined)(d)) {\n min = Math.min(min, +d);\n max = Math.max(max, +d);\n }\n }\n }\n if (min === Infinity)\n return [];\n return [min < 0 ? -max : min, max];\n}\n/**\n * @todo More nice default range for enterDelay and enterDuration.\n * @todo Move these to channel definition.\n */\nfunction inferRangeQ(name, palette) {\n if (name === 'enterDelay')\n return [0, 1000];\n if (name == 'enterDuration')\n return [300, 1000];\n if (name.startsWith('y') || name.startsWith('position'))\n return [1, 0];\n if (name === 'color')\n return [(0, array_1.firstOf)(palette), (0, array_1.lastOf)(palette)];\n if (name === 'opacity')\n return [0, 1];\n if (name === 'size')\n return [1, 10];\n return [0, 1];\n}\nfunction isOrdinal(values) {\n return some(values, (d) => {\n const type = typeof d;\n return type === 'string' || type === 'boolean';\n });\n}\nfunction isTemporal(values) {\n return some(values, (d) => d instanceof Date);\n}\nfunction isObject(values) {\n return some(values, helper_1.isStrictObject);\n}\nfunction some(values, callback) {\n for (const V of values) {\n if (V.some(callback))\n return true;\n }\n return false;\n}\nfunction isQuantitative(name) {\n return (name.startsWith('x') ||\n name.startsWith('y') ||\n name.startsWith('position') ||\n name.startsWith('size'));\n}\n// Spatial and temporal position.\nfunction isPosition(name) {\n return (name.startsWith('x') ||\n name.startsWith('y') ||\n name.startsWith('position') ||\n name === 'enterDelay' ||\n name === 'enterDuration' ||\n name === 'updateDelay' ||\n name === 'updateDuration' ||\n name === 'exitDelay' ||\n name === 'exitDuration');\n}\nexports.isPosition = isPosition;\nfunction isValidScale(scale) {\n if (!scale || !scale.type)\n return false;\n if (typeof scale.type === 'function')\n return true;\n const { type, domain, range, interpolator } = scale;\n const isValidDomain = domain && domain.length > 0;\n const isValidRange = range && range.length > 0;\n if ([\n 'linear',\n 'sqrt',\n 'log',\n 'time',\n 'pow',\n 'threshold',\n 'quantize',\n 'quantile',\n 'ordinal',\n 'band',\n 'point',\n ].includes(type) &&\n isValidDomain &&\n isValidRange) {\n return true;\n }\n if (['sequential'].includes(type) &&\n isValidDomain &&\n (isValidRange || interpolator)) {\n return true;\n }\n if (['constant', 'identity'].includes(type) && isValidRange)\n return true;\n return false;\n}\nexports.isValidScale = isValidScale;\n//# sourceMappingURL=scale.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConstantScale = exports.DiscreteScale = exports.DistributionScale = exports.ContinuousScale = void 0;\nexports.ContinuousScale = {\n linear: 'linear',\n identity: 'identity',\n log: 'log',\n pow: 'pow',\n sqrt: 'sqrt',\n sequential: 'sequential',\n};\nexports.DistributionScale = {\n threshold: 'threshold',\n quantize: 'quantize',\n quantile: 'quantile',\n};\nexports.DiscreteScale = {\n ordinal: 'ordinal',\n band: 'band',\n point: 'point',\n};\nexports.ConstantScale = {\n constant: 'constant',\n};\n//# sourceMappingURL=scale.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.placeComponents = exports.computeRoughPlotSize = exports.computeLayout = exports.processAxisZ = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst util_1 = require(\"@antv/util\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst helper_1 = require(\"../utils/helper\");\nconst array_1 = require(\"../utils/array\");\nconst string_1 = require(\"../utils/string\");\nconst component_1 = require(\"./component\");\nconst coordinate_2 = require(\"./coordinate\");\nfunction processAxisZ(components) {\n const axisX = components.find(({ type }) => type === 'axisX');\n const axisY = components.find(({ type }) => type === 'axisY');\n const axisZ = components.find(({ type }) => type === 'axisZ');\n if (axisX && axisY && axisZ) {\n axisX.plane = 'xy';\n axisY.plane = 'xy';\n axisZ.plane = 'yz';\n axisZ.origin = [axisX.bbox.x, axisX.bbox.y, 0];\n axisZ.eulerAngles = [0, -90, 0];\n axisZ.bbox.x = axisX.bbox.x;\n axisZ.bbox.y = axisX.bbox.y;\n components.push(Object.assign(Object.assign({}, axisX), { plane: 'xz', showLabel: false, showTitle: false, origin: [axisX.bbox.x, axisX.bbox.y, 0], eulerAngles: [-90, 0, 0] }));\n components.push(Object.assign(Object.assign({}, axisY), { plane: 'yz', showLabel: false, showTitle: false, origin: [axisY.bbox.x + axisY.bbox.width, axisY.bbox.y, 0], eulerAngles: [0, -90, 0] }));\n components.push(Object.assign(Object.assign({}, axisZ), { plane: 'xz', actualPosition: 'left', showLabel: false, showTitle: false, eulerAngles: [90, -90, 0] }));\n }\n}\nexports.processAxisZ = processAxisZ;\nfunction computeLayout(components, options, theme, library) {\n var _a, _b;\n const { width, height, depth, x = 0, y = 0, z = 0, inset = (_a = theme.inset) !== null && _a !== void 0 ? _a : 0, insetLeft = inset, insetTop = inset, insetBottom = inset, insetRight = inset, margin = (_b = theme.margin) !== null && _b !== void 0 ? _b : 0, marginLeft = margin, marginBottom = margin, marginTop = margin, marginRight = margin, padding = theme.padding, paddingBottom = padding, paddingLeft = padding, paddingRight = padding, paddingTop = padding, } = computeInset(components, options, theme, library);\n const MIN_CONTENT_RATIO = 1 / 4;\n const maybeClamp = (viewWidth, paddingLeft, paddingRight, pl0, pr0) => {\n // Only clamp when has marks.\n const { marks } = options;\n if (marks.length === 0)\n return [pl0, pr0];\n // If size of content is enough, skip.\n const contentSize = viewWidth - pl0 - pr0;\n const diff = contentSize - viewWidth * MIN_CONTENT_RATIO;\n if (diff > 0)\n return [pl0, pr0];\n // Shrink start and end size equally.\n const shrinkSize = viewWidth * (1 - MIN_CONTENT_RATIO);\n return [\n paddingLeft === 'auto' ? (shrinkSize * pl0) / (pl0 + pr0) : pl0,\n paddingRight === 'auto' ? (shrinkSize * pr0) / (pl0 + pr0) : pr0,\n ];\n };\n const roughPadding = (padding) => (padding === 'auto' ? 20 : padding !== null && padding !== void 0 ? padding : 20);\n const rpt = roughPadding(paddingTop);\n const rpb = roughPadding(paddingBottom);\n // Compute paddingLeft and paddingRight first to get innerWidth.\n const horizontalPadding = computePadding(components, height - rpt - rpb, [rpt + marginTop, rpb + marginBottom], ['left', 'right'], options, theme, library);\n const { paddingLeft: pl0, paddingRight: pr0 } = horizontalPadding;\n const viewWidth = width - marginLeft - marginRight;\n const [pl, pr] = maybeClamp(viewWidth, paddingLeft, paddingRight, pl0, pr0);\n const iw = viewWidth - pl - pr;\n // Compute paddingBottom and paddingTop based on innerWidth.\n const verticalPadding = computePadding(components, iw, [pl + marginLeft, pr + marginRight], ['bottom', 'top'], options, theme, library);\n const { paddingTop: pt0, paddingBottom: pb0 } = verticalPadding;\n const viewHeight = height - marginBottom - marginTop;\n const [pb, pt] = maybeClamp(viewHeight, paddingBottom, paddingTop, pb0, pt0);\n const ih = viewHeight - pb - pt;\n return {\n width,\n height,\n depth,\n insetLeft,\n insetTop,\n insetBottom,\n insetRight,\n innerWidth: iw,\n innerHeight: ih,\n paddingLeft: pl,\n paddingRight: pr,\n paddingTop: pt,\n paddingBottom: pb,\n marginLeft,\n marginBottom,\n marginTop,\n marginRight,\n x,\n y,\n z,\n };\n}\nexports.computeLayout = computeLayout;\n// For composite mark with a layout algorithm and without axis,\n// such as worldcloud, circlepack.\nfunction computeRoughPlotSize(options) {\n const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 16, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options;\n // @todo Add this padding to theme.\n // 30 is default size for padding, which defined in runtime.\n const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding);\n const finalWidth = width -\n maybeAuto(paddingLeft) -\n maybeAuto(paddingRight) -\n marginLeft -\n marginRight -\n insetLeft -\n insetRight;\n const finalHeight = height -\n maybeAuto(paddingTop) -\n maybeAuto(paddingBottom) -\n marginTop -\n marginBottom -\n insetTop -\n insetBottom;\n return { width: finalWidth, height: finalHeight };\n}\nexports.computeRoughPlotSize = computeRoughPlotSize;\nfunction computeInset(components, options, theme, library) {\n const { coordinates } = options;\n if (!(0, coordinate_2.isPolar)(coordinates) && !(0, coordinate_2.isRadial)(coordinates)) {\n return options;\n }\n // Filter axis.\n const axes = components.filter((d) => typeof d.type === 'string' && d.type.startsWith('axis'));\n if (axes.length === 0)\n return options;\n const styles = axes.map((component) => {\n const key = component.type === 'axisArc' ? 'arc' : 'linear';\n return (0, component_1.styleOf)(component, key, theme);\n });\n // Compute max labelSpacing.\n const maxLabelSpacing = (0, d3_array_1.max)(styles, (d) => { var _a; return (_a = d.labelSpacing) !== null && _a !== void 0 ? _a : 0; });\n // Compute labelBBoxes.\n const labelBBoxes = axes\n .flatMap((component, i) => {\n const style = styles[i];\n const scale = (0, component_1.createScale)(component, library);\n const labels = (0, component_1.computeLabelsBBox)(style, scale);\n return labels;\n })\n .filter(helper_1.defined);\n const size = (0, d3_array_1.max)(labelBBoxes, (d) => d.height) + maxLabelSpacing;\n // Compute titles.\n const titleBBoxes = axes\n .flatMap((_, i) => {\n const style = styles[i];\n return (0, component_1.computeTitleBBox)(style);\n })\n .filter((d) => d !== null);\n const titleSize = titleBBoxes.length === 0 ? 0 : (0, d3_array_1.max)(titleBBoxes, (d) => d.height);\n // Update inset.\n const { inset = size, insetLeft = inset, insetBottom = inset, insetTop = inset + titleSize, insetRight = inset, } = options;\n return Object.assign(Object.assign({}, options), { insetLeft, insetBottom, insetTop, insetRight });\n}\n/**\n * @todo Support percentage size(e.g. 50%)\n */\nfunction computePadding(components, crossSize, crossPadding, positions, options, theme, library) {\n const positionComponents = (0, d3_array_1.group)(components, (d) => d.position);\n const { padding = theme.padding, paddingLeft = padding, paddingRight = padding, paddingBottom = padding, paddingTop = padding, } = options;\n const layout = {\n paddingBottom,\n paddingLeft,\n paddingTop,\n paddingRight,\n };\n for (const position of positions) {\n const key = `padding${(0, helper_1.capitalizeFirst)((0, string_1.camelCase)(position))}`;\n const components = positionComponents.get(position) || [];\n const value = layout[key];\n const defaultSizeOf = (d) => {\n if (d.size === undefined)\n d.size = d.defaultSize;\n };\n const sizeOf = (d) => {\n if (d.type === 'group') {\n d.children.forEach(defaultSizeOf);\n d.size = (0, d3_array_1.max)(d.children, (d) => d.size);\n }\n else {\n d.size = d.defaultSize;\n }\n };\n const autoSizeOf = (d) => {\n if (d.size)\n return;\n if (value !== 'auto')\n sizeOf(d);\n else {\n // Compute component size dynamically.\n (0, component_1.computeComponentSize)(d, crossSize, crossPadding, position, theme, library);\n defaultSizeOf(d);\n }\n };\n const maybeHide = (d) => {\n if (!d.type.startsWith('axis'))\n return;\n if (d.labelAutoHide === undefined)\n d.labelAutoHide = true;\n };\n const isHorizontal = position === 'bottom' || position === 'top';\n // !!!Note\n // Mute axis component padding.\n // The first axis do not has padding.\n const minOrder = (0, d3_array_1.min)(components, (d) => d.order);\n const axes = components.filter((d) => d.type.startsWith('axis') && d.order == minOrder);\n if (axes.length)\n axes[0].crossPadding = 0;\n // Specified padding.\n if (typeof value === 'number') {\n components.forEach(defaultSizeOf);\n components.forEach(maybeHide);\n }\n else {\n // Compute padding dynamically.\n if (components.length === 0) {\n layout[key] = 0;\n }\n else {\n const size = isHorizontal\n ? crossSize + crossPadding[0] + crossPadding[1]\n : crossSize;\n const grouped = (0, component_1.groupComponents)(components, size);\n grouped.forEach(autoSizeOf);\n const totalSize = grouped.reduce((sum, { size, crossPadding = 12 }) => sum + size + crossPadding, 0);\n layout[key] = totalSize;\n }\n }\n }\n return layout;\n}\nfunction placeComponents(components, coordinate, layout) {\n // Group components by plane & position.\n const positionComponents = (0, d3_array_1.group)(components, (d) => `${d.plane || 'xy'}-${d.position}`);\n const { paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, height, width, depth, } = layout;\n const planes = {\n xy: createSection({\n width,\n height,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom,\n marginLeft,\n marginTop,\n marginBottom,\n marginRight,\n innerHeight,\n innerWidth,\n insetBottom,\n insetLeft,\n insetRight,\n insetTop,\n }),\n yz: createSection({\n width: depth,\n height: height,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: 0,\n marginTop: 0,\n marginBottom: 0,\n marginRight: 0,\n innerWidth: depth,\n innerHeight: height,\n insetBottom: 0,\n insetLeft: 0,\n insetRight: 0,\n insetTop: 0,\n }),\n xz: createSection({\n width,\n height: depth,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: 0,\n marginTop: 0,\n marginBottom: 0,\n marginRight: 0,\n innerWidth: width,\n innerHeight: depth,\n insetBottom: 0,\n insetLeft: 0,\n insetRight: 0,\n insetTop: 0,\n }),\n };\n for (const [key, components] of positionComponents.entries()) {\n const [plane, position] = key.split('-');\n const area = planes[plane][position];\n /**\n * @description non-entity components: axis in the center, inner, outer, component in the center\n * @description entity components: other components\n * @description no volume components take up no extra space\n */\n const [nonEntityComponents, entityComponents] = (0, array_1.divide)(components, (component) => {\n if (typeof component.type !== 'string')\n return false;\n if (position === 'center')\n return true;\n if (component.type.startsWith('axis') &&\n ['inner', 'outer'].includes(position)) {\n return true;\n }\n return false;\n });\n if (nonEntityComponents.length) {\n placeNonEntityComponents(nonEntityComponents, coordinate, area, position);\n }\n if (entityComponents.length) {\n placePaddingArea(components, coordinate, area);\n }\n }\n}\nexports.placeComponents = placeComponents;\nfunction createSection({ width, height, paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, }) {\n const pl = paddingLeft + marginLeft;\n const pt = paddingTop + marginTop;\n const pr = paddingRight + marginRight;\n const pb = paddingBottom + marginBottom;\n const plotWidth = width - marginLeft - marginRight;\n const centerSection = [\n pl + insetLeft,\n pt + insetTop,\n innerWidth - insetLeft - insetRight,\n innerHeight - insetTop - insetBottom,\n 'center',\n null,\n null,\n ];\n const xySection = {\n top: [\n pl,\n 0,\n innerWidth,\n pt,\n 'vertical',\n true,\n d3_array_1.ascending,\n marginLeft,\n plotWidth,\n ],\n right: [width - pr, pt, pr, innerHeight, 'horizontal', false, d3_array_1.ascending],\n bottom: [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n d3_array_1.ascending,\n marginLeft,\n plotWidth,\n ],\n left: [0, pt, pl, innerHeight, 'horizontal', true, d3_array_1.ascending],\n 'top-left': [pl, 0, innerWidth, pt, 'vertical', true, d3_array_1.ascending],\n 'top-right': [pl, 0, innerWidth, pt, 'vertical', true, d3_array_1.ascending],\n 'bottom-left': [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n d3_array_1.ascending,\n ],\n 'bottom-right': [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n d3_array_1.ascending,\n ],\n center: centerSection,\n inner: centerSection,\n outer: centerSection,\n };\n return xySection;\n}\nfunction placeNonEntityComponents(components, coordinate, area, position) {\n const [axisComponents, nonAxisComponents] = (0, array_1.divide)(components, (component) => {\n if (typeof component.type === 'string' &&\n component.type.startsWith('axis')) {\n return true;\n }\n return false;\n });\n placeNonEntityAxis(axisComponents, coordinate, area, position);\n // in current stage, only legend component which located in the center can be placed\n placeCenter(nonAxisComponents, coordinate, area);\n}\nfunction placeNonEntityAxis(components, coordinate, area, position) {\n if (position === 'center') {\n if ((0, coordinate_1.isRadar)(coordinate)) {\n placeAxisRadar(components, coordinate, area, position);\n }\n else if ((0, coordinate_1.isPolar)(coordinate)) {\n placeArcLinear(components, coordinate, area);\n }\n else if ((0, coordinate_1.isParallel)(coordinate)) {\n placeAxisParallel(components, coordinate, area, components[0].orientation);\n }\n }\n else if (position === 'inner') {\n placeAxisArcInner(components, coordinate, area);\n }\n else if (position === 'outer') {\n placeAxisArcOuter(components, coordinate, area);\n }\n}\nfunction placeAxisArcInner(components, coordinate, area) {\n const [x, y, , height] = area;\n const [cx, cy] = coordinate.getCenter();\n const [innerRadius] = (0, coordinate_1.radiusOf)(coordinate);\n const r = height / 2;\n const size = innerRadius * r;\n const x0 = cx - size;\n const y0 = cy - size;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n component.bbox = {\n x: x + x0,\n y: y + y0,\n width: size * 2,\n height: size * 2,\n };\n }\n}\nfunction placeAxisArcOuter(components, coordinate, area) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x, y, width, height };\n }\n}\n/**\n * @example arcX, arcY, axisLinear with angle\n */\nfunction placeArcLinear(components, coordinate, area) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x: x, y, width, height };\n }\n}\nfunction placeAxisParallel(components, coordinate, area, orientation) {\n if (orientation === 'horizontal') {\n placeAxisParallelHorizontal(components, coordinate, area);\n }\n else if (orientation === 'vertical') {\n placeAxisParallelVertical(components, coordinate, area);\n }\n}\nfunction placeAxisParallelVertical(components, coordinate, area) {\n const [x, y, , height] = area;\n // Create a high dimension vector and map to a list of two-dimension points.\n // [0, 0, 0] -> [x0, 0, x1, 0, x2, 0]\n const vector = new Array(components.length).fill(0);\n const points = coordinate.map(vector);\n // Extract x of each points.\n // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2]\n const X = points.filter((_, i) => i % 2 === 0).map((d) => d + x);\n // Place each axis by coordinate in parallel coordinate.\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const x = X[i];\n const width = X[i + 1] - x;\n component.bbox = { x, y, width, height };\n }\n}\nfunction placeAxisParallelHorizontal(components, coordinate, area) {\n const [x, y, width] = area;\n // Create a high dimension vector and map to a list of two-dimension points.\n // [0, 0, 0] -> [height, y0, height, y1, height, y2]\n const vector = new Array(components.length).fill(0);\n const points = coordinate.map(vector);\n // Extract y of each points.\n // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2]\n const Y = points.filter((_, i) => i % 2 === 1).map((d) => d + y);\n // Place each axis by coordinate in parallel coordinate.\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const y = Y[i];\n const height = Y[i + 1] - y;\n component.bbox = { x, y, width, height };\n }\n}\nfunction placeAxisRadar(components, coordinate, area, position) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x, y, width, height };\n component.radar = {\n index: components.indexOf(component),\n count: components.length,\n };\n }\n}\nfunction placePaddingArea(components, coordinate, area) {\n const [x, y, width, height, direction, reverse, comparator, minX, totalSize] = area;\n const [mainStartKey, mainStartValue, crossStartKey, crossStartValue, mainSizeKey, mainSizeValue, crossSizeKey, crossSizeValue,] = direction === 'vertical'\n ? ['y', y, 'x', x, 'height', height, 'width', width]\n : ['x', x, 'y', y, 'width', width, 'height', height];\n // Sort components by order.\n // The smaller the order, the closer to center.\n components.sort((a, b) => comparator === null || comparator === void 0 ? void 0 : comparator(a.order, b.order));\n const isLarge = (type) => type === 'title' || type === 'group' || type.startsWith('legend');\n const crossSizeOf = (type, small, bigger) => {\n if (bigger === undefined)\n return small;\n if (isLarge(type))\n return bigger;\n return small;\n };\n const crossStartOf = (type, x, minX) => {\n if (minX === undefined)\n return x;\n if (isLarge(type))\n return minX;\n return x;\n };\n const startValue = reverse ? mainStartValue + mainSizeValue : mainStartValue;\n for (let i = 0, start = startValue; i < components.length; i++) {\n const component = components[i];\n const { crossPadding = 0, type } = component;\n const { size } = component;\n component.bbox = {\n [mainStartKey]: reverse\n ? start - size - crossPadding\n : start + crossPadding,\n [crossStartKey]: crossStartOf(type, crossStartValue, minX),\n [mainSizeKey]: size,\n [crossSizeKey]: crossSizeOf(type, crossSizeValue, totalSize),\n };\n start += (size + crossPadding) * (reverse ? -1 : 1);\n }\n // Place group components.\n const groupComponents = components.filter((d) => d.type === 'group');\n for (const group of groupComponents) {\n const { bbox, children } = group;\n const size = bbox[crossSizeKey];\n const step = size / children.length;\n const justifyContent = children.reduce((j, child) => {\n var _a;\n const j0 = (_a = child.layout) === null || _a === void 0 ? void 0 : _a.justifyContent;\n return j0 ? j0 : j;\n }, 'flex-start');\n const L = children.map((d, i) => {\n const { length = step, padding = 0 } = d;\n return length + (i === children.length - 1 ? 0 : padding);\n });\n const totalLength = (0, d3_array_1.sum)(L);\n const diff = size - totalLength;\n const offset = justifyContent === 'flex-start'\n ? 0\n : justifyContent === 'center'\n ? diff / 2\n : diff;\n for (let i = 0, start = bbox[crossStartKey] + offset; i < children.length; i++) {\n const component = children[i];\n const { padding = 0 } = component;\n const interval = i === children.length - 1 ? 0 : padding;\n component.bbox = {\n [mainSizeKey]: bbox[mainSizeKey],\n [mainStartKey]: bbox[mainStartKey],\n [crossStartKey]: start,\n [crossSizeKey]: L[i] - interval,\n };\n (0, util_1.deepMix)(component, { layout: { justifyContent } });\n start += L[i];\n }\n }\n}\n/**\n * @example legend in the center of radial or polar system\n */\nfunction placeCenter(components, coordinate, area) {\n if (components.length === 0)\n return;\n const [x, y, width, height] = area;\n const [innerRadius] = (0, coordinate_1.radiusOf)(coordinate);\n const r = ((height / 2) * innerRadius) / Math.sqrt(2);\n const cx = x + width / 2;\n const cy = y + height / 2;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n component.bbox = { x: cx - r, y: cy - r, width: r * 2, height: r * 2 };\n }\n}\n//# sourceMappingURL=layout.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createColumnOf = exports.initializeMark = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst library_1 = require(\"./library\");\nconst transform_1 = require(\"./transform\");\nfunction initializeMark(partialMark, partialProps, context) {\n return __awaiter(this, void 0, void 0, function* () {\n // Apply transform to mark to derive indices, data, encode, etc,.\n const [I, transformedMark] = yield applyMarkTransform(partialMark, partialProps, context);\n const { encode, scale, data, tooltip } = transformedMark;\n // Skip mark with non-tabular data. Do not skip empty\n // data, they are useful for facet to display axes.\n if (Array.isArray(data) === false) {\n return null;\n }\n // Group non-independent channels with same prefix, such as x1, x2 => x.\n // For independent channels, dot not group them, such as position1, position2.\n const { channels: channelDescriptors } = partialProps;\n const nameChannels = (0, d3_array_1.rollups)(Object.entries(encode).filter(([, value]) => (0, helper_1.defined)(value)), (values) => values.map(([key, options]) => (Object.assign({ name: key }, options))), ([key]) => {\n var _a;\n const prefix = (_a = /([^\\d]+)\\d*$/.exec(key)) === null || _a === void 0 ? void 0 : _a[1];\n const descriptor = channelDescriptors.find((d) => d.name === prefix);\n if (descriptor === null || descriptor === void 0 ? void 0 : descriptor.independent)\n return key;\n return prefix;\n });\n // Check required channels and initialize scale options for each channel.\n const channels = channelDescriptors\n .filter((descriptor) => {\n const { name, required } = descriptor;\n if (nameChannels.find(([d]) => d === name))\n return true;\n if (required)\n throw new Error(`Missing encoding for channel: ${name}.`);\n return false;\n })\n .flatMap((descriptor) => {\n const { name, scale: scaleType, scaleKey, range, quantitative, ordinal, } = descriptor;\n const valuesArray = nameChannels.filter(([channel]) => channel.startsWith(name));\n return valuesArray.map(([channel, values], i) => {\n const visual = values.some((d) => d.visual);\n const constant = values.some((d) => d.constant);\n const _a = scale[channel] || {}, { independent = false, \n // Use channel name as default scale key.\n key = scaleKey || channel, \n // Visual channel use identity scale.\n type = constant ? 'constant' : visual ? 'identity' : scaleType } = _a, scaleOptions = __rest(_a, [\"independent\", \"key\", \"type\"]);\n // For constant scale, infer range from data.\n const isConstant = type === 'constant';\n const finalRange = isConstant ? undefined : range;\n return {\n name: channel,\n values,\n // Generate a unique key for independent channel,\n // which will not group with any other channels.\n scaleKey: independent || isConstant ? Symbol('independent') : key,\n scale: Object.assign(Object.assign({ type, range: finalRange }, scaleOptions), { quantitative,\n ordinal }),\n };\n });\n });\n return [transformedMark, Object.assign(Object.assign({}, partialProps), { index: I, channels, tooltip })];\n });\n}\nexports.initializeMark = initializeMark;\nfunction createColumnOf(library) {\n const [useEncode] = (0, library_1.useLibrary)('encode', library);\n return (data, encode) => {\n if (encode === undefined)\n return null;\n if (data === undefined)\n return null;\n return Object.assign(Object.assign({}, encode), { type: 'column', value: useEncode(encode)(data), field: fieldOf(encode) });\n };\n}\nexports.createColumnOf = createColumnOf;\nfunction applyMarkTransform(mark, props, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useTransform] = (0, library_1.useLibrary)('transform', library);\n const { preInference = [], postInference = [] } = props;\n const { transform = [] } = mark;\n const transforms = [\n transform_1.applyDefaults,\n transform_1.applyDataTransform,\n transform_1.flatEncode,\n transform_1.inferChannelsType,\n transform_1.maybeVisualChannel,\n transform_1.extractColumns,\n transform_1.maybeArrayField,\n transform_1.maybeNonAnimate,\n transform_1.addGuideToScale,\n transform_1.normalizeTooltip,\n ...preInference.map(useTransform),\n ...transform.map(useTransform),\n ...postInference.map(useTransform),\n transform_1.extractTooltip,\n ];\n let index = [];\n let transformedMark = mark;\n for (const t of transforms) {\n [index, transformedMark] = yield t(index, transformedMark, context);\n }\n return [index, transformedMark];\n });\n}\nfunction fieldOf(encode) {\n const { type, value } = encode;\n if (type === 'field' && typeof value === 'string')\n return value;\n return null;\n}\n//# sourceMappingURL=mark.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.maybeNonAnimate = exports.addGuideToScale = exports.maybeArrayField = exports.extractTooltip = exports.normalizeTooltip = exports.extractColumns = exports.maybeVisualChannel = exports.inferChannelsType = exports.flatEncode = exports.applyDataTransform = exports.applyDefaults = exports.CALLBACK_ITEM_SYMBOL = void 0;\nconst util_1 = require(\"@antv/util\");\nconst d3_format_1 = require(\"@antv/vendor/d3-format\");\nconst array_1 = require(\"../utils/array\");\nconst helper_1 = require(\"../utils/helper\");\nconst mark_1 = require(\"../utils/mark\");\nconst library_1 = require(\"./library\");\nconst mark_2 = require(\"./mark\");\nconst scale_1 = require(\"./scale\");\nexports.CALLBACK_ITEM_SYMBOL = Symbol('CALLBACK_ITEM');\n// @todo Add more defaults.\nfunction applyDefaults(I, mark, context) {\n const { encode = {}, scale = {}, transform = [] } = mark, rest = __rest(mark, [\"encode\", \"scale\", \"transform\"]);\n return [I, Object.assign(Object.assign({}, rest), { encode, scale, transform })];\n}\nexports.applyDefaults = applyDefaults;\nfunction applyDataTransform(I, mark, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const { data } = mark;\n const [useData] = (0, library_1.useLibrary)('data', library);\n const descriptor = normalizedDataSource(data);\n const { transform: T = [] } = descriptor, connector = __rest(descriptor, [\"transform\"]);\n const transform = [connector, ...T];\n const transformFunctions = transform.map((t) => useData(t, context));\n const transformedData = yield (0, helper_1.composeAsync)(transformFunctions)(data);\n // Maintain the consistency of shape between input and output data.\n // If the shape of raw data is like { value: any }\n // and the returned transformedData is Object,\n // returns the wrapped data: { value: transformedData },\n // otherwise returns the processed tabular data.\n const newData = data && !Array.isArray(data) && !Array.isArray(transformedData)\n ? { value: transformedData }\n : transformedData;\n return [\n Array.isArray(transformedData) ? (0, array_1.indexOf)(transformedData) : [],\n Object.assign(Object.assign({}, mark), { data: newData }),\n ];\n });\n}\nexports.applyDataTransform = applyDataTransform;\nfunction flatEncode(I, mark, context) {\n const { encode } = mark;\n if (!encode)\n return [I, mark];\n const flattenEncode = {};\n for (const [key, value] of Object.entries(encode)) {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = `${key}${i === 0 ? '' : i}`;\n flattenEncode[name] = value[i];\n }\n }\n else {\n flattenEncode[key] = value;\n }\n }\n return [I, Object.assign(Object.assign({}, mark), { encode: flattenEncode })];\n}\nexports.flatEncode = flatEncode;\nfunction inferChannelsType(I, mark, context) {\n const { encode, data } = mark;\n if (!encode)\n return [I, mark];\n const typedEncode = (0, array_1.mapObject)(encode, (channel) => {\n if (isTypedChannel(channel))\n return channel;\n const type = inferChannelType(data, channel);\n return { type, value: channel };\n });\n return [I, Object.assign(Object.assign({}, mark), { encode: typedEncode })];\n}\nexports.inferChannelsType = inferChannelsType;\nfunction maybeVisualChannel(I, mark, context) {\n const { encode } = mark;\n if (!encode)\n return [I, mark];\n const newEncode = (0, array_1.mapObject)(encode, (channel, name) => {\n const { type } = channel;\n if (type !== 'constant' || (0, scale_1.isPosition)(name))\n return channel;\n return Object.assign(Object.assign({}, channel), { constant: true });\n });\n return [I, Object.assign(Object.assign({}, mark), { encode: newEncode })];\n}\nexports.maybeVisualChannel = maybeVisualChannel;\nfunction extractColumns(I, mark, context) {\n const { encode, data } = mark;\n if (!encode)\n return [I, mark];\n const { library } = context;\n const columnOf = (0, mark_2.createColumnOf)(library);\n const valuedEncode = (0, array_1.mapObject)(encode, (channel) => columnOf(data, channel));\n return [I, Object.assign(Object.assign({}, mark), { encode: valuedEncode })];\n}\nexports.extractColumns = extractColumns;\n/**\n * Normalize mark.tooltip to {title, items}.\n */\nfunction normalizeTooltip(I, mark, context) {\n const { tooltip = {} } = mark;\n if ((0, helper_1.isUnset)(tooltip))\n return [I, mark];\n if (Array.isArray(tooltip)) {\n return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: tooltip } })];\n }\n if ((0, helper_1.isStrictObject)(tooltip) && (0, mark_1.isFullTooltip)(tooltip)) {\n return [I, Object.assign(Object.assign({}, mark), { tooltip })];\n }\n return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: [tooltip] } })];\n}\nexports.normalizeTooltip = normalizeTooltip;\nfunction extractTooltip(I, mark, context) {\n const { data, encode, tooltip = {} } = mark;\n if ((0, helper_1.isUnset)(tooltip))\n return [I, mark];\n const valueOf = (item) => {\n if (!item)\n return item;\n if (typeof item === 'string') {\n return I.map((i) => ({ name: item, value: data[i][item] }));\n }\n if ((0, helper_1.isStrictObject)(item)) {\n const { field, channel, color, name = field, valueFormatter = (d) => d, } = item;\n // Support d3-format.\n const normalizedValueFormatter = typeof valueFormatter === 'string'\n ? (0, d3_format_1.format)(valueFormatter)\n : valueFormatter;\n // Field name.\n const definedChannel = channel && encode[channel];\n const channelField = definedChannel && encode[channel].field;\n const name1 = name || channelField || channel;\n const values = [];\n for (const i of I) {\n const value1 = field\n ? data[i][field]\n : definedChannel\n ? encode[channel].value[i]\n : null;\n values[i] = {\n name: name1,\n color,\n value: normalizedValueFormatter(value1),\n };\n }\n return values;\n }\n if (typeof item === 'function') {\n const values = [];\n for (const i of I) {\n const v = item(data[i], i, data, encode);\n if ((0, helper_1.isStrictObject)(v))\n values[i] = Object.assign(Object.assign({}, v), { [exports.CALLBACK_ITEM_SYMBOL]: true });\n else\n values[i] = { value: v };\n }\n return values;\n }\n return item;\n };\n const { title, items = [] } = tooltip, rest = __rest(tooltip, [\"title\", \"items\"]);\n const newTooltip = Object.assign({ title: valueOf(title), items: Array.isArray(items) ? items.map(valueOf) : [] }, rest);\n return [I, Object.assign(Object.assign({}, mark), { tooltip: newTooltip })];\n}\nexports.extractTooltip = extractTooltip;\nfunction maybeArrayField(I, mark, context) {\n const { encode } = mark, rest = __rest(mark, [\"encode\"]);\n if (!encode)\n return [I, mark];\n const columns = Object.entries(encode);\n const arrayColumns = columns\n .filter(([, channel]) => {\n const { value: V } = channel;\n return Array.isArray(V[0]);\n })\n .flatMap(([key, V]) => {\n const columns = [[key, new Array(I.length).fill(undefined)]];\n const { value: rows } = V, rest = __rest(V, [\"value\"]);\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (Array.isArray(row)) {\n for (let j = 0; j < row.length; j++) {\n const column = columns[j] || [\n `${key}${j}`,\n new Array(I).fill(undefined),\n ];\n column[1][i] = row[j];\n columns[j] = column;\n }\n }\n }\n return columns.map(([key, value]) => [\n key,\n Object.assign({ type: 'column', value }, rest),\n ]);\n });\n const newEncode = Object.fromEntries([...columns, ...arrayColumns]);\n return [I, Object.assign(Object.assign({}, rest), { encode: newEncode })];\n}\nexports.maybeArrayField = maybeArrayField;\nfunction addGuideToScale(I, mark, context) {\n const { axis = {}, legend = {}, slider = {}, scrollbar = {} } = mark;\n const normalize = (guide, channel) => {\n if (typeof guide === 'boolean')\n return guide ? {} : null;\n const eachGuide = guide[channel];\n return eachGuide === undefined || eachGuide ? eachGuide : null;\n };\n const axisChannels = typeof axis === 'object'\n ? Array.from(new Set(['x', 'y', 'z', ...Object.keys(axis)]))\n : ['x', 'y', 'z'];\n (0, util_1.deepMix)(mark, {\n scale: Object.assign(Object.assign({}, Object.fromEntries(axisChannels.map((channel) => {\n const scrollbarOptions = normalize(scrollbar, channel);\n return [\n channel,\n Object.assign({ guide: normalize(axis, channel), slider: normalize(slider, channel), scrollbar: scrollbarOptions }, (scrollbarOptions && {\n ratio: scrollbarOptions.ratio === undefined\n ? 0.5\n : scrollbarOptions.ratio,\n })),\n ];\n }))), { color: { guide: normalize(legend, 'color') }, size: { guide: normalize(legend, 'size') }, shape: { guide: normalize(legend, 'shape') }, \n // fixme: opacity is conflict with DisplayObject.opacity\n // to be confirm.\n opacity: { guide: normalize(legend, 'opacity') } }),\n });\n return [I, mark];\n}\nexports.addGuideToScale = addGuideToScale;\nfunction maybeNonAnimate(I, mark, context) {\n const { animate } = mark;\n if (animate || animate === undefined)\n return [I, mark];\n (0, util_1.deepMix)(mark, {\n animate: {\n enter: { type: null },\n exit: { type: null },\n update: { type: null },\n },\n });\n return [I, mark];\n}\nexports.maybeNonAnimate = maybeNonAnimate;\nfunction isTypedChannel(channel) {\n if (typeof channel !== 'object' ||\n channel instanceof Date ||\n channel === null) {\n return false;\n }\n const { type } = channel;\n return (0, helper_1.defined)(type);\n}\nfunction inferChannelType(data, channel) {\n if (typeof channel === 'function')\n return 'transform';\n if (typeof channel === 'string' && isField(data, channel))\n return 'field';\n return 'constant';\n}\nfunction isField(data, value) {\n if (!Array.isArray(data))\n return false;\n return data.some((d) => d[value] !== undefined);\n}\nfunction normalizedDataSource(data) {\n // Liquid、Gauge need number data.\n if ((0, util_1.isNumber)(data))\n return { type: 'inline', value: data };\n // Return null as a placeholder.\n if (!data)\n return { type: 'inline', value: null };\n if (Array.isArray(data))\n return { type: 'inline', value: data };\n const { type = 'inline' } = data, rest = __rest(data, [\"type\"]);\n return Object.assign(Object.assign({}, rest), { type });\n}\n//# sourceMappingURL=transform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessOption = void 0;\nconst flow_1 = require(\"../../utils/flow\");\nconst style_1 = require(\"./style\");\nfunction preprocessOption(options) {\n const convertedOptions = adapter(options);\n // If there are children, recursively convert each child node.\n if (convertedOptions.children && Array.isArray(convertedOptions.children)) {\n convertedOptions.children = convertedOptions.children.map((child) => preprocessOption(child));\n }\n return convertedOptions;\n}\nexports.preprocessOption = preprocessOption;\n// Entry point for all syntactic sugar functions.\nfunction adapter(options) {\n //@todo define a type for params of flow\n return (0, flow_1.flow)(style_1.columnWidthRatio)(options);\n}\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flow = void 0;\n/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\nfunction flow(...flows) {\n return (param) => {\n return flows.reduce((result, f) => {\n return f(result);\n }, param);\n };\n}\nexports.flow = flow;\n//# sourceMappingURL=flow.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.columnWidthRatio = void 0;\nconst util_1 = require(\"@antv/util\");\n// style: { columnWidthRatio: 0.2 } => scale: { x: { padding: 0.8 } }\nfunction columnWidthRatio(options) {\n const { style, scale, type } = options;\n const scaleOption = {};\n const columnWidthRatio = (0, util_1.get)(style, 'columnWidthRatio');\n if (columnWidthRatio && type === 'interval') {\n scaleOption.x = Object.assign(Object.assign({}, scale === null || scale === void 0 ? void 0 : scale.x), { padding: 1 - columnWidthRatio });\n }\n return Object.assign(Object.assign({}, options), { scale: Object.assign(Object.assign({}, scale), scaleOption) });\n}\nexports.columnWidthRatio = columnWidthRatio;\n//# sourceMappingURL=style.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.show = exports.hide = exports.setStyle = exports.getStyle = void 0;\nconst traverse_elements_1 = require(\"./traverse-elements\");\nconst defaultStyle = {\n visibility: 'visible',\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n};\nfunction getStyle(element, key) {\n let value;\n (0, traverse_elements_1.traverseElements)(element, (el) => {\n var _a;\n if (el.tagName !== 'g' && ((_a = el.style) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {\n value = el.style[key];\n return true;\n }\n return false;\n });\n return value !== null && value !== void 0 ? value : defaultStyle[key];\n}\nexports.getStyle = getStyle;\nfunction setStyle(element, key, value, recursive) {\n element.style[key] = value;\n if (recursive) {\n element.children.forEach((child) => setStyle(child, key, value, recursive));\n }\n}\nexports.setStyle = setStyle;\nfunction hide(element) {\n setStyle(element, 'visibility', 'hidden', true);\n}\nexports.hide = hide;\nfunction show(element) {\n setStyle(element, 'visibility', 'visible', true);\n}\nexports.show = show;\n//# sourceMappingURL=style.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.traverseElements = void 0;\nfunction traverseElements(element, visitor) {\n if (visitor(element))\n return true;\n if (element.tagName === 'g') {\n const { childNodes = [] } = element;\n for (const child of childNodes) {\n if (traverseElements(child, visitor))\n return true;\n }\n }\n return false;\n}\nexports.traverseElements = traverseElements;\n//# sourceMappingURL=traverse-elements.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementHighlightByX = void 0;\nconst utils_1 = require(\"./utils\");\nconst elementHighlight_1 = require(\"./elementHighlight\");\nfunction ElementHighlightByX(options) {\n return (0, elementHighlight_1.ElementHighlight)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createXKey }));\n}\nexports.ElementHighlightByX = ElementHighlightByX;\nElementHighlightByX.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlightByX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementHighlightByColor = void 0;\nconst utils_1 = require(\"./utils\");\nconst elementHighlight_1 = require(\"./elementHighlight\");\nfunction ElementHighlightByColor(options) {\n return (0, elementHighlight_1.ElementHighlight)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createColorKey }));\n}\nexports.ElementHighlightByColor = ElementHighlightByColor;\nElementHighlightByColor.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlightByColor.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementSelect = exports.elementSelect = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst traverse_elements_1 = require(\"../utils/traverse-elements\");\nconst utils_1 = require(\"./utils\");\n/**\n * Active a group of elements.\n */\nfunction elementSelect(root, { elements: elementsof, // given the root of chart returns elements to be manipulated\ndatum, // given each element returns the datum of it\ngroupKey = (d) => d, // group elements by specified key\nregionGroupKey = (d) => d, // how to group elements when click region\nlink = false, // draw link or not\nsingle = false, // single select or not\nmultipleSelectHotkey, // hotkey for multi-select mode\ncoordinate, background = false, scale, emitter, state = {}, region = false, regionEleFilter = (el) => utils_1.VALID_FIND_BY_X_MARKS.includes(el.markType), }) {\n var _a;\n const elements = elementsof(root);\n const elementSet = new Set(elements);\n const findElement = (0, utils_1.createFindElementByEvent)({\n elementsof,\n root,\n coordinate,\n scale,\n });\n const keyGroup = (0, d3_array_1.group)(elements, groupKey);\n const regionGroup = (0, d3_array_1.group)(elements, regionGroupKey);\n const valueof = (0, utils_1.createValueof)(elements, datum);\n const [appendLink, removeLink] = (0, utils_1.renderLink)(Object.assign({ link,\n elements,\n valueof,\n coordinate }, (0, helper_1.subObject)(state.selected, 'link')));\n const [appendBackground, removeBackground] = (0, utils_1.renderBackground)(Object.assign({ document: root.ownerDocument, background,\n coordinate,\n scale,\n valueof }, (0, helper_1.subObject)(state.selected, 'background')));\n const elementStyle = (0, util_1.deepMix)(state, {\n selected: Object.assign({}, (((_a = state.selected) === null || _a === void 0 ? void 0 : _a.offset) && {\n // Apply translate to mock slice out.\n transform: (...params) => {\n const value = state.selected.offset(...params);\n const [, i] = params;\n return (0, utils_1.offsetTransform)(elements[i], value, coordinate);\n },\n })),\n });\n const useState = (0, utils_1.createUseState)(elementStyle, elements);\n const { updateState, removeState, hasState } = useState(valueof);\n let isMultiSelectMode = !single; // \"single\" determines whether to multi-select by default\n let activeHotkey = null; // Track the currently active hotkey\n const clear = (nativeEvent = true) => {\n for (const e of elements) {\n removeState(e, 'selected', 'unselected');\n removeLink(e);\n removeBackground(e);\n }\n if (nativeEvent)\n emitter.emit('element:unselect', { nativeEvent: true });\n return;\n };\n const singleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => {\n const filteredElements = elements.filter(filter);\n // Clear states if clicked selected element.\n if (hasState(element, 'selected'))\n clear();\n else {\n const k = groupBy(element);\n const group = groupMap.get(k);\n const groupSet = new Set(group);\n for (const e of filteredElements) {\n if (groupSet.has(e))\n updateState(e, 'selected');\n else {\n updateState(e, 'unselected');\n removeLink(e);\n }\n if (e !== element)\n removeBackground(e);\n }\n appendLink(group);\n appendBackground(element);\n if (!nativeEvent)\n return;\n emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n data: [datum(element), ...group.map(datum)],\n } }));\n }\n };\n const multipleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => {\n const k = groupBy(element);\n const group = groupMap.get(k);\n const groupSet = new Set(group);\n const filteredElements = elements.filter(filter);\n if (!hasState(element, 'selected')) {\n const hasSelectedGroup = group.some((e) => hasState(e, 'selected'));\n for (const e of filteredElements) {\n if (groupSet.has(e))\n updateState(e, 'selected');\n else if (!hasState(e, 'selected'))\n updateState(e, 'unselected');\n }\n // Append link for each group only once.\n if (!hasSelectedGroup && link)\n appendLink(group);\n appendBackground(element);\n }\n else {\n // If there is no selected elements after resetting this group,\n // clear the states.\n const hasSelected = elements.some((e) => !groupSet.has(e) && hasState(e, 'selected'));\n if (!hasSelected)\n return clear();\n // If there are still some selected elements after resetting this group,\n // only remove the link.\n for (const e of group) {\n updateState(e, 'unselected');\n removeLink(e);\n removeBackground(e);\n }\n }\n if (!nativeEvent)\n return;\n emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n data: elements.filter((e) => hasState(e, 'selected')).map(datum),\n } }));\n };\n const isClickElementOrGroup = (element) => {\n if (elementSet.has(element))\n return true;\n for (const group of elementSet) {\n const found = (0, traverse_elements_1.traverseElements)(group, (el) => el === element);\n if (found)\n return true;\n }\n return false;\n };\n const getRealElement = (element) => {\n if (elementSet.has(element))\n return element;\n for (const group of elementSet) {\n let match = null;\n (0, traverse_elements_1.traverseElements)(group, (el) => {\n if (el === element)\n match = group;\n });\n if (match)\n return match;\n }\n return element;\n };\n const click = (event) => {\n const { target: element, nativeEvent = true } = event;\n const select = !isMultiSelectMode ? singleSelect : multipleSelect;\n let el = element;\n const isClickElement = isClickElementOrGroup(element);\n if (!region || isClickElement) {\n // Click non-element shape, reset.\n // Such as the rest of content area(background).\n if (!isClickElement)\n return clear();\n return select({\n event,\n element: getRealElement(el),\n nativeEvent,\n groupBy: groupKey,\n });\n }\n else {\n // Click background region area, select elements in the region.\n // Get element at cursor.x position.\n el = findElement(event);\n if (!elementSet.has(el))\n return clear();\n return select({\n event,\n element: el,\n nativeEvent,\n filter: regionEleFilter,\n groupBy: regionGroupKey,\n groupMap: regionGroup,\n });\n }\n };\n // Handle keyboard events for multi-select mode\n const hotkeys = Array.isArray(multipleSelectHotkey)\n ? multipleSelectHotkey\n : [multipleSelectHotkey];\n const handleKeyDown = (event) => {\n if (hotkeys.includes(event.code) && !activeHotkey) {\n activeHotkey = event.code;\n isMultiSelectMode = true;\n }\n };\n const handleKeyUp = (event) => {\n if (event.code === activeHotkey) {\n activeHotkey = null;\n isMultiSelectMode = false;\n }\n };\n root.addEventListener('click', click);\n if (multipleSelectHotkey) {\n // If a hotkey is set, the initial state should be single mode\n isMultiSelectMode = false;\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('keyup', handleKeyUp);\n }\n const onSelect = (e) => {\n const { nativeEvent, data } = e;\n if (nativeEvent)\n return;\n const selectedData = !isMultiSelectMode ? data.data.slice(0, 1) : data.data;\n for (const d of selectedData) {\n const element = (0, utils_1.selectElementByData)(elements, d, datum);\n click({ target: element, nativeEvent: false });\n }\n };\n const onUnSelect = () => {\n clear(false);\n };\n emitter.on('element:select', onSelect);\n emitter.on('element:unselect', onUnSelect);\n return () => {\n for (const e of elements)\n removeLink(e);\n root.removeEventListener('click', click);\n if (multipleSelectHotkey) {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\n }\n emitter.off('element:select', onSelect);\n emitter.off('element:unselect', onUnSelect);\n };\n}\nexports.elementSelect = elementSelect;\nfunction ElementSelect(_a) {\n var { createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, [\"createGroup\", \"createRegionGroup\", \"background\", \"link\"]);\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const { coordinate, scale } = view;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n return elementSelect(plotArea, Object.assign({ elements: utils_1.selectG2Elements, datum: (0, utils_1.createDatumof)(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup\n ? createRegionGroup(view)\n : (0, utils_1.createXKey)(view), coordinate,\n scale, state: (0, utils_1.mergeState)(options, [\n ['selected', background ? {} : { lineWidth: '1', stroke: '#000' }],\n 'unselected',\n ]), background,\n link,\n emitter }, rest));\n };\n}\nexports.ElementSelect = ElementSelect;\nElementSelect.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelect.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementSelectByX = void 0;\nconst utils_1 = require(\"./utils\");\nconst elementSelect_1 = require(\"./elementSelect\");\nfunction ElementSelectByX(options) {\n return (0, elementSelect_1.ElementSelect)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createXKey }));\n}\nexports.ElementSelectByX = ElementSelectByX;\nElementSelectByX.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelectByX.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementSelectByColor = void 0;\nconst utils_1 = require(\"./utils\");\nconst elementSelect_1 = require(\"./elementSelect\");\nfunction ElementSelectByColor(options) {\n return (0, elementSelect_1.ElementSelect)(Object.assign(Object.assign({}, options), { createGroup: utils_1.createColorKey }));\n}\nexports.ElementSelectByColor = ElementSelectByColor;\nElementSelectByColor.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelectByColor.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChartIndex = void 0;\nconst g_1 = require(\"@antv/g\");\nconst util_1 = require(\"@antv/util\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst runtime_1 = require(\"../runtime\");\nconst utils_1 = require(\"./utils\");\nfunction maybeTransform(options) {\n const { transform = [] } = options;\n const normalizeY = transform.find((d) => d.type === 'normalizeY');\n if (normalizeY)\n return normalizeY;\n const newNormalizeY = { type: 'normalizeY' };\n transform.push(newNormalizeY);\n options.transform = transform;\n return newNormalizeY;\n}\nfunction markValue(markState, markName, channels) {\n const [value] = Array.from(markState.entries())\n .filter(([mark]) => mark.type === markName)\n .map(([mark]) => {\n const { encode } = mark;\n const channel = (name) => {\n const channel = encode[name];\n return [name, channel ? channel.value : undefined];\n };\n return Object.fromEntries(channels.map(channel));\n });\n return value;\n}\n/**\n * @todo Perf\n */\nfunction ChartIndex(_a) {\n var { wait = 20, leading, trailing = false, labelFormatter = (date) => `${date}` } = _a, style = __rest(_a, [\"wait\", \"leading\", \"trailing\", \"labelFormatter\"]);\n return (context) => {\n const { view, container, update, setState } = context;\n const { markState, scale, coordinate } = view;\n // Get line mark value, exit if it is not existed.\n const value = markValue(markState, 'line', ['x', 'y', 'series']);\n if (!value)\n return;\n // Prepare channel value.\n const { y: Y, x: X, series: S = [] } = value;\n const I = Y.map((_, i) => i);\n const sortedX = (0, d3_array_1.sort)(I.map((i) => X[i]));\n // Prepare shapes.\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const lines = container.getElementsByClassName(runtime_1.ELEMENT_CLASS_NAME);\n const labels = container.getElementsByClassName(runtime_1.LABEL_CLASS_NAME);\n // The format of label key: `${elementKey}-index`,\n // group labels by elementKey.\n const keyofLabel = (d) => d.__data__.key.split('-')[0];\n const keyLabels = (0, d3_array_1.group)(labels, keyofLabel);\n const rule = new g_1.Line({\n style: Object.assign({ x1: 0, y1: 0, x2: 0, y2: plotArea.getAttribute('height'), stroke: 'black', lineWidth: 1 }, (0, helper_1.subObject)(style, 'rule')),\n });\n const text = new g_1.Text({\n style: Object.assign({ x: 0, y: plotArea.getAttribute('height'), text: '', fontSize: 10 }, (0, helper_1.subObject)(style, 'label')),\n });\n rule.append(text);\n plotArea.appendChild(rule);\n // Get the closet date to the rule.\n const dateByFocus = (coordinate, scaleX, focus) => {\n const [normalizedX] = coordinate.invert(focus);\n const date = scaleX.invert(normalizedX);\n return sortedX[(0, d3_array_1.bisectCenter)(sortedX, date)];\n };\n // Update rule and label content.\n const updateRule = (focus, date) => {\n rule.setAttribute('x1', focus[0]);\n rule.setAttribute('x2', focus[0]);\n text.setAttribute('text', labelFormatter(date));\n };\n // Store the new inner state alter rerender the view.\n let newView;\n // Rerender the view to update basis for each line.\n const updateBasisByRerender = (focus) => __awaiter(this, void 0, void 0, function* () {\n // Find the closetDate to the rule.\n const { x: scaleX } = scale;\n const date = dateByFocus(coordinate, scaleX, focus);\n updateRule(focus, date);\n setState('chartIndex', (options) => {\n // Clone options and get line mark.\n const clonedOptions = (0, util_1.deepMix)({}, options);\n const lineMark = clonedOptions.marks.find((d) => d.type === 'line');\n // Update domain of y scale for the line mark.\n const r = (I) => (0, d3_array_1.max)(I, (i) => +Y[i]) / (0, d3_array_1.min)(I, (i) => +Y[i]);\n const k = (0, d3_array_1.max)((0, d3_array_1.rollup)(I, r, (i) => S[i]).values());\n const domainY = [1 / k, k];\n (0, util_1.deepMix)(lineMark, {\n scale: { y: { domain: domainY } },\n });\n // Update normalize options.\n const normalizeY = maybeTransform(lineMark);\n normalizeY.groupBy = 'color';\n normalizeY.basis = (I, Y) => {\n const i = I[(0, d3_array_1.bisector)((i) => X[+i]).center(I, date)];\n return Y[i];\n };\n // Disable animation.\n for (const mark of clonedOptions.marks)\n mark.animate = false;\n return clonedOptions;\n });\n const newState = yield update('chartIndex');\n newView = newState.view;\n });\n // Only apply translate to update basis for each line.\n // If performance is ok, there is no need to use this\n // strategy to update basis.\n const updateBasisByTranslate = (focus) => {\n // Find the closetDate to the rule.\n const { scale, coordinate } = newView;\n const { x: scaleX, y: scaleY } = scale;\n const date = dateByFocus(coordinate, scaleX, focus);\n updateRule(focus, date);\n // Translate mark and label for better performance.\n for (const line of lines) {\n // Compute transform in y direction.\n const { seriesIndex: SI, key } = line.__data__;\n const i = SI[(0, d3_array_1.bisector)((i) => X[+i]).center(SI, date)];\n const p0 = [0, scaleY.map(1)]; // basis point\n const p1 = [0, scaleY.map(Y[i] / Y[SI[0]])];\n const [, y0] = coordinate.map(p0);\n const [, y1] = coordinate.map(p1);\n const dy = y0 - y1;\n line.setAttribute('transform', `translate(0, ${dy})`);\n // Update line and related label.\n const labels = keyLabels.get(key) || [];\n for (const label of labels) {\n // @todo Replace with style.transform.\n // It now has unexpected behavior.\n label.setAttribute('dy', dy);\n }\n }\n };\n const updateBasis = (0, util_1.throttle)((event) => {\n const focus = (0, utils_1.mousePosition)(plotArea, event);\n if (!focus)\n return;\n updateBasisByTranslate(focus);\n }, wait, { leading, trailing });\n updateBasisByRerender([0, 0]);\n plotArea.addEventListener('pointerenter', updateBasis);\n plotArea.addEventListener('pointermove', updateBasis);\n plotArea.addEventListener('pointerleave', updateBasis);\n return () => {\n rule.remove();\n plotArea.removeEventListener('pointerenter', updateBasis);\n plotArea.removeEventListener('pointermove', updateBasis);\n plotArea.removeEventListener('pointerleave', updateBasis);\n };\n };\n}\nexports.ChartIndex = ChartIndex;\nChartIndex.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=chartIndex.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fisheye = void 0;\nconst util_1 = require(\"@antv/util\");\nconst utils_1 = require(\"./utils\");\nfunction maybeCoordinate(options) {\n const { coordinate = {} } = options;\n const { transform = [] } = coordinate;\n const fisheye = transform.find((d) => d.type === 'fisheye');\n if (fisheye)\n return fisheye;\n const newFisheye = { type: 'fisheye' };\n transform.push(newFisheye);\n coordinate.transform = transform;\n options.coordinate = coordinate;\n return newFisheye;\n}\n/**\n * @todo Bind abstract data or data index.\n */\nfunction Fisheye({ wait = 30, leading, trailing = false, }) {\n return (context) => {\n const { options, update, setState, container } = context;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const updateFocus = (0, util_1.throttle)((event) => {\n const focus = (0, utils_1.mousePosition)(plotArea, event);\n if (!focus) {\n setState('fisheye');\n update();\n return;\n }\n setState('fisheye', (options) => {\n // Clone options and mutate it.\n // Disable animation.\n const clonedOptions = (0, util_1.deepMix)({}, options, {\n interaction: { tooltip: { preserve: true } },\n });\n for (const mark of clonedOptions.marks)\n mark.animate = false;\n const [x, y] = focus;\n const fisheye = maybeCoordinate(clonedOptions);\n fisheye.focusX = x;\n fisheye.focusY = y;\n fisheye.visual = true;\n return clonedOptions;\n });\n update();\n }, wait, { leading, trailing });\n // Bind events.\n plotArea.addEventListener('pointerenter', updateFocus);\n plotArea.addEventListener('pointermove', updateFocus);\n plotArea.addEventListener('pointerleave', updateFocus);\n return () => {\n plotArea.removeEventListener('pointerenter', updateFocus);\n plotArea.removeEventListener('pointermove', updateFocus);\n plotArea.removeEventListener('pointerleave', updateFocus);\n };\n };\n}\nexports.Fisheye = Fisheye;\n//# sourceMappingURL=fisheye.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tooltip = exports.tooltip = exports.seriesTooltip = exports.findSeriesElement = exports.findSingleElement = exports.maybeValue = void 0;\nconst g_1 = require(\"@antv/g\");\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst util_1 = require(\"@antv/util\");\nconst component_1 = require(\"@antv/component\");\nconst helper_1 = require(\"../utils/helper\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst vector_1 = require(\"../utils/vector\");\nconst scale_1 = require(\"../utils/scale\");\nconst transform_1 = require(\"../runtime/transform\");\nconst utils_1 = require(\"./utils\");\nfunction getContainer(group, mount) {\n if (mount) {\n return typeof mount === 'string' ? document.querySelector(mount) : mount;\n }\n const canvas = group.ownerDocument.defaultView\n .getContextService()\n .getDomElement();\n return canvas.parentElement;\n}\nfunction getBounding(root) {\n const bbox = root.getRenderBounds();\n const { min: [x1, y1], max: [x2, y2], } = bbox;\n return {\n x: x1,\n y: y1,\n width: x2 - x1,\n height: y2 - y1,\n };\n}\nfunction getContainerOffset(container1, container2) {\n const r1 = container1.getBoundingClientRect();\n const r2 = container2.getBoundingClientRect();\n return {\n x: r1.x - r2.x,\n y: r1.y - r2.y,\n };\n}\nfunction createTooltip(container, x0, y0, position, enterable, bounding, containerOffset, css = {}, offset = [10, 10]) {\n const defaults = {\n '.g2-tooltip': {},\n '.g2-tooltip-title': {\n overflow: 'hidden',\n 'white-space': 'nowrap',\n 'text-overflow': 'ellipsis',\n },\n };\n const tooltipElement = new component_1.Tooltip({\n className: 'tooltip',\n style: {\n x: x0,\n y: y0,\n container: containerOffset,\n data: [],\n bounding,\n position,\n enterable,\n title: '',\n offset,\n template: {\n prefixCls: 'g2-',\n },\n style: (0, util_1.deepMix)(defaults, css),\n },\n });\n container.appendChild(tooltipElement.HTMLTooltipElement);\n return tooltipElement;\n}\nfunction showTooltip({ root, data, x, y, render, event, single, position = 'right-bottom', enterable = false, css, mount, bounding, offset, }) {\n const container = getContainer(root, mount);\n const canvasContainer = getContainer(root);\n // All the views share the same tooltip.\n const parent = single ? canvasContainer : root;\n const b = bounding || getBounding(root);\n const containerOffset = getContainerOffset(canvasContainer, container);\n const { tooltipElement = createTooltip(container, x, y, position, enterable, b, containerOffset, css, offset), } = parent;\n const { items, title = '' } = data;\n tooltipElement.update(Object.assign({ x,\n y, data: items, title,\n position,\n enterable, container: containerOffset }, (render !== undefined && {\n content: render(event, { items, title }),\n })));\n parent.tooltipElement = tooltipElement;\n}\nfunction hideTooltip({ root, single, emitter, nativeEvent = true, event = null, }) {\n if (nativeEvent) {\n emitter.emit('tooltip:hide', { nativeEvent });\n }\n const container = getContainer(root);\n const parent = single ? container : root;\n const { tooltipElement } = parent;\n if (tooltipElement) {\n // Must be clientX, clientY.\n tooltipElement.hide(event === null || event === void 0 ? void 0 : event.clientX, event === null || event === void 0 ? void 0 : event.clientY);\n }\n hideRuleY(root);\n hideRuleX(root);\n hideMarker(root);\n}\nfunction destroyTooltip({ root, single }) {\n const container = getContainer(root);\n const parent = single ? container : root;\n if (!parent)\n return;\n const { tooltipElement } = parent;\n if (tooltipElement) {\n tooltipElement.destroy();\n parent.tooltipElement = undefined;\n }\n hideRuleY(root);\n hideRuleX(root);\n hideMarker(root);\n}\nfunction showUndefined(item) {\n const { value } = item;\n return Object.assign(Object.assign({}, item), { value: value === undefined ? 'undefined' : value });\n}\nfunction singleItem(element) {\n const { __data__: datum } = element;\n const { title, items = [] } = datum;\n const newItems = items\n .filter(helper_1.defined)\n .map((_a) => {\n var { color = itemColorOf(element) } = _a, item = __rest(_a, [\"color\"]);\n return (Object.assign(Object.assign({}, item), { color }));\n })\n .map(showUndefined);\n return Object.assign(Object.assign({}, (title && { title })), { items: newItems });\n}\nfunction itemColorOf(element) {\n const fill = element.getAttribute('fill');\n const stroke = element.getAttribute('stroke');\n const { __data__: datum } = element;\n const { color = fill && fill !== 'transparent' ? fill : stroke } = datum;\n return color;\n}\nfunction unique(items, key = (d) => d) {\n const valueName = new Map(items.map((d) => [key(d), d]));\n return Array.from(valueName.values());\n}\nfunction groupItems(elements, scale, groupName, data = elements.map((d) => d['__data__']), theme = {}) {\n const key = (d) => (d instanceof Date ? +d : d);\n const T = unique(data.map((d) => d.title), key).filter(helper_1.defined);\n const newItems = data\n .flatMap((datum, i) => {\n const element = elements[i];\n const { items = [], title } = datum;\n const definedItems = items.filter(helper_1.defined);\n // If there is only one item, use groupName as title by default.\n const useGroupName = groupName !== undefined ? groupName : items.length <= 1 ? true : false;\n return definedItems.map((_a) => {\n var { color = itemColorOf(element) || theme.color, name } = _a, item = __rest(_a, [\"color\", \"name\"]);\n const groupName = (0, helper_1.groupNameOf)(scale, datum);\n // callback's priority is higher than groupName.\n const name1 = useGroupName && !(transform_1.CALLBACK_ITEM_SYMBOL in item)\n ? groupName || name\n : name || groupName;\n return Object.assign(Object.assign({}, item), { color, name: name1 || title });\n });\n })\n .map(showUndefined);\n return Object.assign(Object.assign({}, (T.length > 0 && { title: T.join(',') })), { items: unique(newItems, (d) => `(${key(d.name)}, ${key(d.value)}, ${key(d.color)})`) });\n}\nfunction updateRuleX(root, points, mouse, _a) {\n var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, [\"plotWidth\", \"plotHeight\", \"mainWidth\", \"mainHeight\", \"startX\", \"startY\", \"transposed\", \"polar\", \"insetLeft\", \"insetTop\"]);\n const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest);\n const createCircle = (cx, cy, r) => {\n const circle = new g_1.Circle({\n style: Object.assign({ cx,\n cy,\n r }, defaults),\n });\n root.appendChild(circle);\n return circle;\n };\n const createLine = (x1, x2, y1, y2) => {\n const line = new g_1.Line({\n style: Object.assign({ x1,\n x2,\n y1,\n y2 }, defaults),\n });\n root.appendChild(line);\n return line;\n };\n const minDistPoint = (mouse, points) => {\n // only one point do not need compute\n if (points.length === 1) {\n return points[0];\n }\n const dists = points.map((p) => (0, vector_1.dist)(p, mouse));\n const minDistIndex = (0, d3_array_1.minIndex)(dists, (d) => d);\n return points[minDistIndex];\n };\n const target = minDistPoint(mouse, points);\n const pointsOf = () => {\n if (transposed)\n return [\n startX + target[0],\n startX + target[0],\n startY,\n startY + plotHeight,\n ];\n return [startX, startX + plotWidth, target[1] + startY, target[1] + startY];\n };\n const pointsOfPolar = () => {\n const cx = startX + insetLeft + mainWidth / 2;\n const cy = startY + insetTop + mainHeight / 2;\n const cdist = (0, vector_1.dist)([cx, cy], target);\n return [cx, cy, cdist];\n };\n if (polar) {\n const [cx, cy, r] = pointsOfPolar();\n const ruleX = root.ruleX || createCircle(cx, cy, r);\n ruleX.style.cx = cx;\n ruleX.style.cy = cy;\n ruleX.style.r = r;\n root.ruleX = ruleX;\n }\n else {\n const [x1, x2, y1, y2] = pointsOf();\n const ruleX = root.ruleX || createLine(x1, x2, y1, y2);\n ruleX.style.x1 = x1;\n ruleX.style.x2 = x2;\n ruleX.style.y1 = y1;\n ruleX.style.y2 = y2;\n root.ruleX = ruleX;\n }\n}\nfunction updateRuleY(root, points, _a) {\n var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, [\"plotWidth\", \"plotHeight\", \"mainWidth\", \"mainHeight\", \"startX\", \"startY\", \"transposed\", \"polar\", \"insetLeft\", \"insetTop\"]);\n const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest);\n const Y = points.map((p) => p[1]);\n const X = points.map((p) => p[0]);\n const y = (0, d3_array_1.mean)(Y);\n const x = (0, d3_array_1.mean)(X);\n const pointsOf = () => {\n if (polar) {\n const r = Math.min(mainWidth, mainHeight) / 2;\n const cx = startX + insetLeft + mainWidth / 2;\n const cy = startY + insetTop + mainHeight / 2;\n const a = (0, vector_1.angle)((0, vector_1.sub)([x, y], [cx, cy]));\n const x0 = cx + r * Math.cos(a);\n const y0 = cy + r * Math.sin(a);\n return [cx, x0, cy, y0];\n }\n if (transposed)\n return [startX, startX + plotWidth, y + startY, y + startY];\n return [x + startX, x + startX, startY, startY + plotHeight];\n };\n const [x1, x2, y1, y2] = pointsOf();\n const createLine = () => {\n const line = new g_1.Line({\n style: Object.assign({ x1,\n x2,\n y1,\n y2 }, defaults),\n });\n root.appendChild(line);\n return line;\n };\n // Only update rule with defined series elements.\n if (X.length > 0) {\n const ruleY = root.ruleY || createLine();\n ruleY.style.x1 = x1;\n ruleY.style.x2 = x2;\n ruleY.style.y1 = y1;\n ruleY.style.y2 = y2;\n root.ruleY = ruleY;\n }\n}\nfunction hideRuleY(root) {\n if (root.ruleY) {\n root.ruleY.remove();\n root.ruleY = undefined;\n }\n}\nfunction hideRuleX(root) {\n if (root.ruleX) {\n root.ruleX.remove();\n root.ruleX = undefined;\n }\n}\nfunction updateMarker(root, { data, style, theme }) {\n if (root.markers)\n root.markers.forEach((d) => d.remove());\n const { type = '' } = style;\n const markers = data\n .filter((d) => {\n const [{ x, y }] = d;\n return (0, helper_1.defined)(x) && (0, helper_1.defined)(y);\n })\n .map((d) => {\n const [{ color, element }, point] = d;\n const originColor = color || // encode value\n element.style.fill ||\n element.style.stroke ||\n theme.color;\n const fill = type === 'hollow' ? 'transparent' : originColor;\n const stroke = type === 'hollow' ? originColor : '#fff';\n const shape = new g_1.Circle({\n className: 'g2-tooltip-marker',\n style: Object.assign({ cx: point[0], cy: point[1], fill, r: 4, stroke, lineWidth: 2, \n // Prevents blocking clicks on elements behind.\n pointerEvents: 'none' }, style),\n });\n return shape;\n });\n for (const marker of markers)\n root.appendChild(marker);\n root.markers = markers;\n}\nfunction hideMarker(root) {\n if (root.markers) {\n root.markers.forEach((d) => d.remove());\n root.markers = [];\n }\n}\nfunction interactionKeyof(markState, key) {\n return Array.from(markState.values()).some(\n // @ts-ignore\n (d) => { var _a; return (_a = d.interaction) === null || _a === void 0 ? void 0 : _a[key]; });\n}\nfunction maybeValue(specified, defaults) {\n return specified === undefined ? defaults : specified;\n}\nexports.maybeValue = maybeValue;\nfunction isEmptyTooltipData(data) {\n const { title, items } = data;\n if (items.length === 0 && title === undefined)\n return true;\n return false;\n}\nfunction hasSeries(markState) {\n return Array.from(markState.values()).some(\n // @ts-ignore\n (d) => { var _a; return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a.seriesTooltip) && d.tooltip; });\n}\n/**\n * Finds a single element based on the mouse event in a non-series context (e.g., single item tooltip).\n * @param root - The root display object of the chart.\n * @param event - The mouse event object (e.g., pointermove, pointerdown).\n * @param elements - Array of chart elements to search within.\n * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar).\n * @param scale - The scale configurations (e.g., x, series scales).\n * @param shared - Whether the tooltip is shared among multiple elements (e.g., grouped bars).\n * @returns The matched display object or `undefined` if no element is found.\n * @description\n * - Handles bar charts by sorting elements and using bisector search for efficient lookup.\n * - For non-bar charts, directly finds the target element from the event's target.\n * - Adjusts for bar spacing in grouped charts when `shared` is false.\n */\nfunction findSingleElement({ root, event, elements, coordinate, scale, shared, }) {\n var _a, _b;\n const inInterval = (d) => d.markType === 'interval';\n const isBar = elements.every(inInterval) && !(0, coordinate_1.isPolar)(coordinate);\n const scaleX = scale.x;\n const scaleSeries = scale.series;\n const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0;\n const xof = scaleSeries\n ? (d) => {\n const seriesCount = Math.round(1 / scaleSeries.valueBandWidth);\n return (d.__data__.x +\n d.__data__.series * bandWidth +\n bandWidth / (seriesCount * 2));\n }\n : (d) => d.__data__.x + bandWidth / 2;\n // Sort for bisector search.\n if (isBar)\n elements.sort((a, b) => xof(a) - xof(b));\n const findElementByTarget = (event) => {\n const { target } = event;\n return (0, utils_1.maybeRoot)(target, (node) => {\n if (!node.classList)\n return false;\n return node.classList.includes('element');\n });\n };\n const element = isBar\n ? (event) => {\n const mouse = (0, utils_1.mousePosition)(root, event);\n if (!mouse)\n return;\n const [abstractX] = coordinate.invert(mouse);\n const search = (0, d3_array_1.bisector)(xof).center;\n const i = search(elements, abstractX);\n const target = elements[i];\n if (!shared) {\n // For grouped bar chart without shared options.\n const isGrouped = elements.find((d) => d !== target && xof(d) === xof(target));\n if (isGrouped)\n return findElementByTarget(event);\n }\n return target;\n }\n : findElementByTarget;\n return element(event);\n}\nexports.findSingleElement = findSingleElement;\n/**\n * Finds series-related elements and data based on the mouse event for series tooltips.\n * @param root - The root display object of the chart.\n * @param event - The mouse event object (e.g., pointermove, pointerdown).\n * @param elements - Array of chart elements to search within.\n * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar).\n * @param scale - The scale configurations (e.g., x, series scales).\n * @param startX - The starting X position of the plot area.\n * @param startY - The starting Y position of the plot area.\n * @returns An object containing:\n * - `selectedElements`: Matched display objects (series and item elements).\n * - `selectedData`: Corresponding data records of the selected elements.\n * - `filteredSeriesData`: Filtered series data closest to the mouse focus.\n * - `abstractX`: A function to convert mouse coordinates to abstract X values.\n * @description\n * - Splits elements into series and item elements for targeted searching.\n * - Handles bar charts and band scales using bisector search and coordinate inversion.\n * - Sorts elements to ensure correct visual ordering (top-to-bottom or right-to-left in transposed mode).\n * - Filters and groups data to provide accurate tooltip information for series.\n */\nfunction findSeriesElement({ root, event, elements, coordinate, scale, startX, startY, }) {\n const transposed = (0, coordinate_1.isTranspose)(coordinate);\n // Split elements into series elements and item elements.\n const seriesElements = [];\n const itemElements = [];\n for (const element of elements) {\n const { __data__: data } = element;\n const { seriesX, title, items } = data;\n if (seriesX)\n seriesElements.push(element);\n else if (title || items)\n itemElements.push(element);\n }\n const inInterval = (d) => d.markType === 'interval';\n const isBar = itemElements.length &&\n itemElements.every(inInterval) &&\n !(0, coordinate_1.isPolar)(coordinate);\n const xof = (d) => d.__data__.x;\n // For band scale x, find the closest series element to focus,\n // useful for interval + line mark.\n const isBandScale = !!scale.x.getBandWidth;\n const closest = isBandScale && itemElements.length > 0;\n // Sorted elements from top to bottom visually,\n // or from right to left in transpose coordinate.\n seriesElements.sort((a, b) => {\n const index = transposed ? 0 : 1;\n const minY = (d) => d.getBounds().min[index];\n return transposed ? minY(b) - minY(a) : minY(a) - minY(b);\n });\n const extent = (d) => {\n const index = transposed ? 1 : 0;\n const { min, max } = d.getLocalBounds();\n return (0, d3_array_1.sort)([min[index], max[index]]);\n };\n // Sort itemElements for bisector search.\n if (isBar)\n elements.sort((a, b) => xof(a) - xof(b));\n else {\n itemElements.sort((a, b) => {\n const [minA, maxA] = extent(a);\n const [minB, maxB] = extent(b);\n const midA = (minA + maxA) / 2;\n const midB = (minB + maxB) / 2;\n return transposed ? midB - midA : midA - midB;\n });\n }\n // Get sortedIndex and X for each series elements\n const elementSortedX = new Map(seriesElements.map((element) => {\n const { __data__: data } = element;\n const { seriesX } = data;\n const seriesIndex = seriesX.map((_, i) => i);\n const sortedIndex = (0, d3_array_1.sort)(seriesIndex, (i) => seriesX[+i]);\n return [element, [sortedIndex, seriesX]];\n }));\n const { x: scaleX } = scale;\n // Apply offset for band scale x.\n const offsetX = (scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) ? scaleX.getBandWidth() / 2 : 0;\n const abstractX = (focus) => {\n const [normalizedX] = coordinate.invert(focus);\n return normalizedX - offsetX;\n };\n const indexByFocus = (event, focus, I, X) => {\n // _x is from emit event, to find the right element.\n const { _x } = event;\n const finalX = _x !== undefined ? scaleX.map(_x) : abstractX(focus);\n const DX = X.filter(helper_1.defined);\n const [minX, maxX] = (0, d3_array_1.sort)([DX[0], DX[DX.length - 1]]);\n // If only has one element(minX == maxX), show tooltip when hover whole chart\n const isOnlyOneElement = minX === maxX;\n // If closest is true, always find at least one element.\n // Otherwise, skip element out of plot area.\n if (!closest && (finalX < minX || finalX > maxX) && !isOnlyOneElement)\n return null;\n const search = (0, d3_array_1.bisector)((i) => X[+i]).center;\n const i = search(I, finalX);\n return I[i];\n };\n const elementsByFocus = isBar\n ? (focus, elements) => {\n const search = (0, d3_array_1.bisector)(xof).center;\n const i = search(elements, abstractX(focus));\n const find = elements[i];\n const groups = (0, d3_array_1.group)(elements, xof);\n const selected = groups.get(xof(find));\n return selected;\n }\n : (focus, elements) => {\n const index = transposed ? 1 : 0;\n const x = focus[index];\n const filtered = elements.filter((element) => {\n const [min, max] = extent(element);\n return x >= min && x <= max;\n });\n // If closet is true, always find at least one element.\n if (!closest || filtered.length > 0)\n return filtered;\n // Search the closet element to the focus.\n const search = (0, d3_array_1.bisector)((element) => {\n const [min, max] = extent(element);\n return (min + max) / 2;\n }).center;\n const i = search(elements, x);\n return [elements[i]].filter(helper_1.defined);\n };\n const seriesData = (element, index) => {\n const { __data__: data } = element;\n return Object.fromEntries(Object.entries(data)\n .filter(([key]) => key.startsWith('series') && key !== 'series')\n .map(([key, V]) => {\n const d = V[index];\n return [(0, util_1.lowerFirst)(key.replace('series', '')), d];\n }));\n };\n const mouse = (0, utils_1.mousePosition)(root, event);\n if (!mouse)\n return;\n const focus = [mouse[0] - startX, mouse[1] - startY];\n if (!focus)\n return;\n // Get selected item element.\n const selectedItems = elementsByFocus(focus, itemElements);\n // Get selected data item from both series element and item element.\n const selectedSeriesElements = [];\n const selectedSeriesData = [];\n for (const element of seriesElements) {\n const [sortedIndex, X] = elementSortedX.get(element);\n const index = indexByFocus(event, focus, sortedIndex, X);\n if (index !== null) {\n selectedSeriesElements.push(element);\n const d = seriesData(element, index);\n const { x, y } = d;\n const p = coordinate.map([(x || 0) + offsetX, y || 0]);\n selectedSeriesData.push([Object.assign(Object.assign({}, d), { element }), p]);\n }\n }\n // Filter selectedSeriesData with different x,\n // make sure there is only one x closest to focusX.\n const SX = Array.from(new Set(selectedSeriesData.map((d) => d[0].x)));\n const closestX = SX[(0, d3_array_1.minIndex)(SX, (x) => Math.abs(x - abstractX(focus)))];\n const filteredSeriesData = selectedSeriesData.filter((d) => d[0].x === closestX);\n const selectedData = [\n ...filteredSeriesData.map((d) => d[0]),\n ...selectedItems.map((d) => d.__data__),\n ];\n // Get the displayed tooltip data.\n const selectedElements = [...selectedSeriesElements, ...selectedItems];\n return { selectedElements, selectedData, filteredSeriesData, abstractX };\n}\nexports.findSeriesElement = findSeriesElement;\n/**\n * Show tooltip for series item.\n */\nfunction seriesTooltip(root, _a) {\n var { elements: elementsof, sort: sortFunction, filter: filterFunction, scale, coordinate, crosshairs, crosshairsX, crosshairsY, render, groupName, emitter, wait = 50, leading = true, trailing = false, startX = 0, startY = 0, body = true, single = true, position, enterable, mount, bounding, theme, offset, disableNative = false, marker = true, preserve = false, style: _style = {}, css = {} } = _a, rest = __rest(_a, [\"elements\", \"sort\", \"filter\", \"scale\", \"coordinate\", \"crosshairs\", \"crosshairsX\", \"crosshairsY\", \"render\", \"groupName\", \"emitter\", \"wait\", \"leading\", \"trailing\", \"startX\", \"startY\", \"body\", \"single\", \"position\", \"enterable\", \"mount\", \"bounding\", \"theme\", \"offset\", \"disableNative\", \"marker\", \"preserve\", \"style\", \"css\"]);\n const elements = elementsof(root);\n const style = (0, util_1.deepMix)(_style, rest);\n const polar = (0, coordinate_1.isPolar)(coordinate);\n const transposed = (0, coordinate_1.isTranspose)(coordinate);\n const { innerWidth: plotWidth, innerHeight: plotHeight, width: mainWidth, height: mainHeight, insetLeft, insetTop, } = coordinate.getOptions();\n const update = (0, util_1.throttle)((event) => {\n var _a;\n const mouse = (0, utils_1.mousePosition)(root, event);\n if (!mouse)\n return;\n const bbox = (0, utils_1.bboxOf)(root);\n const x = bbox.min[0];\n const y = bbox.min[1];\n const { selectedElements, selectedData, filteredSeriesData, abstractX } = findSeriesElement({\n root,\n event,\n elements,\n coordinate,\n scale,\n startX,\n startY,\n });\n const tooltipData = groupItems(selectedElements, scale, groupName, selectedData, theme);\n // Sort items and filter items.\n if (sortFunction) {\n tooltipData.items.sort((a, b) => sortFunction(a) - sortFunction(b));\n }\n if (filterFunction) {\n tooltipData.items = tooltipData.items.filter(filterFunction);\n }\n // Hide tooltip with no selected tooltip.\n if (selectedElements.length === 0 || isEmptyTooltipData(tooltipData)) {\n hide(event);\n return;\n }\n if (body) {\n showTooltip({\n root,\n data: tooltipData,\n x: mouse[0] + x,\n y: mouse[1] + y,\n render,\n event,\n single,\n position,\n enterable,\n mount,\n bounding,\n css,\n offset,\n });\n }\n if (crosshairs || crosshairsX || crosshairsY) {\n const ruleStyle = (0, helper_1.subObject)(style, 'crosshairs');\n const ruleStyleX = Object.assign(Object.assign({}, ruleStyle), (0, helper_1.subObject)(style, 'crosshairsX'));\n const ruleStyleY = Object.assign(Object.assign({}, ruleStyle), (0, helper_1.subObject)(style, 'crosshairsY'));\n const points = filteredSeriesData.map((d) => d[1]);\n if (crosshairsX) {\n updateRuleX(root, points, mouse, Object.assign(Object.assign({}, ruleStyleX), { plotWidth,\n plotHeight,\n mainWidth,\n mainHeight,\n insetLeft,\n insetTop,\n startX,\n startY,\n transposed,\n polar }));\n }\n if (crosshairsY) {\n updateRuleY(root, points, Object.assign(Object.assign({}, ruleStyleY), { plotWidth,\n plotHeight,\n mainWidth,\n mainHeight,\n insetLeft,\n insetTop,\n startX,\n startY,\n transposed,\n polar }));\n }\n }\n if (marker) {\n const markerStyles = (0, helper_1.subObject)(style, 'marker');\n updateMarker(root, {\n data: filteredSeriesData,\n style: markerStyles,\n theme,\n });\n }\n // X in focus may related multiple points when dataset is large,\n // so we need to find the first x to show tooltip.\n const firstX = (_a = filteredSeriesData[0]) === null || _a === void 0 ? void 0 : _a[0].x;\n const transformedX = firstX !== null && firstX !== void 0 ? firstX : abstractX(focus);\n emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, tooltipData), { data: { x: (0, scale_1.invert)(scale.x, transformedX, true) } }) }));\n }, wait, { leading, trailing });\n const hide = (event) => {\n hideTooltip({ root, single, emitter, event });\n };\n const destroy = () => {\n destroyTooltip({ root, single });\n };\n const onTooltipShow = (_a) => {\n var _b;\n var { nativeEvent, data, offsetX, offsetY } = _a, rest = __rest(_a, [\"nativeEvent\", \"data\", \"offsetX\", \"offsetY\"]);\n if (nativeEvent)\n return;\n const x = (_b = data === null || data === void 0 ? void 0 : data.data) === null || _b === void 0 ? void 0 : _b.x;\n const scaleX = scale.x;\n const x1 = scaleX.map(x);\n const [x2, y2] = coordinate.map([x1, 0.5]);\n const rootBounds = root.getRenderBounds();\n const minX = rootBounds.min[0];\n const minY = rootBounds.min[1];\n update(Object.assign(Object.assign({}, rest), { offsetX: offsetX !== undefined ? offsetX : minX + x2, offsetY: offsetY !== undefined ? offsetY : minY + y2, _x: x }));\n };\n const onTooltipHide = () => {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n };\n const onTooltipDisable = () => {\n removeEventListeners();\n destroy();\n };\n const onTooltipEnable = () => {\n addEventListeners();\n };\n const addEventListeners = () => {\n if (!disableNative) {\n root.addEventListener('pointerdown', update);\n root.addEventListener('pointerenter', update);\n root.addEventListener('pointermove', update);\n // Only emit pointerleave event when the pointer is not in the root area.\n root.addEventListener('pointerleave', (e) => {\n if ((0, utils_1.mousePosition)(root, e))\n return;\n hide(e);\n });\n root.addEventListener('pointerup', hide);\n }\n };\n const removeEventListeners = () => {\n if (!disableNative) {\n root.removeEventListener('pointerdown', update);\n root.removeEventListener('pointerenter', update);\n root.removeEventListener('pointermove', update);\n root.removeEventListener('pointerleave', hide);\n root.removeEventListener('pointerup', hide);\n }\n };\n addEventListeners();\n emitter.on('tooltip:show', onTooltipShow);\n emitter.on('tooltip:hide', onTooltipHide);\n emitter.on('tooltip:disable', onTooltipDisable);\n emitter.on('tooltip:enable', onTooltipEnable);\n return () => {\n removeEventListeners();\n emitter.off('tooltip:show', onTooltipShow);\n emitter.off('tooltip:hide', onTooltipHide);\n emitter.off('tooltip:disable', onTooltipDisable);\n emitter.off('tooltip:enable', onTooltipEnable);\n if (preserve) {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n }\n else {\n destroy();\n }\n };\n}\nexports.seriesTooltip = seriesTooltip;\n/**\n * Show tooltip for non-series item.\n */\nfunction tooltip(root, { elements: elementsof, coordinate, scale, render, groupName, sort: sortFunction, filter: filterFunction, emitter, wait = 50, leading = true, trailing = false, groupKey = (d) => d, // group elements by specified key\nsingle = true, position, enterable, datum, view, mount, bounding, theme, offset, shared = false, body = true, disableNative = false, preserve = false, css = {}, }) {\n const elements = elementsof(root);\n const keyGroup = (0, d3_array_1.group)(elements, groupKey);\n const pointermove = (0, util_1.throttle)((event) => {\n const element = findSingleElement({\n root,\n event,\n elements,\n coordinate,\n scale,\n shared,\n });\n if (!element) {\n hideTooltip({ root, single, emitter, event });\n return;\n }\n const k = groupKey(element);\n const group = keyGroup.get(k);\n if (!group) {\n return;\n }\n const data = group.length === 1 && !shared\n ? singleItem(group[0])\n : groupItems(group, scale, groupName, undefined, theme);\n // Sort items and sort.\n if (sortFunction) {\n data.items.sort((a, b) => sortFunction(a) - sortFunction(b));\n }\n if (filterFunction) {\n data.items = data.items.filter(filterFunction);\n }\n if (isEmptyTooltipData(data)) {\n hideTooltip({ root, single, emitter, event });\n return;\n }\n const { offsetX, offsetY } = event;\n if (body) {\n showTooltip({\n root,\n data,\n x: offsetX,\n y: offsetY,\n render,\n event,\n single,\n position,\n enterable,\n mount,\n bounding,\n css,\n offset,\n });\n }\n emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, data), { data: (0, helper_1.dataOf)(element, view) }) }));\n }, wait, { leading, trailing });\n const pointerleave = (event) => {\n hideTooltip({ root, single, emitter, event });\n };\n const addEventListeners = () => {\n if (!disableNative) {\n root.addEventListener('pointerdown', pointermove);\n root.addEventListener('pointermove', pointermove);\n // Only emit pointerleave event when the pointer is not in the root area.\n // !!!DO NOT USE pointerout event, it will emit when the pointer is in the child area.\n root.addEventListener('pointerleave', pointerleave);\n root.addEventListener('pointerup', pointerleave);\n }\n };\n const removeEventListeners = () => {\n if (!disableNative) {\n root.removeEventListener('pointerdown', pointermove);\n root.removeEventListener('pointermove', pointermove);\n root.removeEventListener('pointerleave', pointerleave);\n root.removeEventListener('pointerup', pointerleave);\n }\n };\n const onTooltipShow = ({ nativeEvent, offsetX, offsetY, data: raw }) => {\n if (nativeEvent)\n return;\n const { data } = raw;\n const element = (0, utils_1.selectElementByData)(elements, data, datum);\n if (!element)\n return;\n const bbox = element.getBBox();\n const { x, y, width, height } = bbox;\n const rootBBox = root.getBBox();\n pointermove({\n target: element,\n offsetX: offsetX !== undefined ? offsetX + rootBBox.x : x + width / 2,\n offsetY: offsetY !== undefined ? offsetY + rootBBox.y : y + height / 2,\n });\n };\n const onTooltipHide = ({ nativeEvent } = {}) => {\n if (nativeEvent)\n return;\n hideTooltip({ root, single, emitter, nativeEvent: false });\n };\n const onTooltipDisable = () => {\n removeEventListeners();\n destroyTooltip({ root, single });\n };\n const onTooltipEnable = () => {\n addEventListeners();\n };\n emitter.on('tooltip:show', onTooltipShow);\n emitter.on('tooltip:hide', onTooltipHide);\n emitter.on('tooltip:enable', onTooltipEnable);\n emitter.on('tooltip:disable', onTooltipDisable);\n addEventListeners();\n return () => {\n removeEventListeners();\n emitter.off('tooltip:show', onTooltipShow);\n emitter.off('tooltip:hide', onTooltipHide);\n if (preserve) {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n }\n else {\n destroyTooltip({ root, single });\n }\n };\n}\nexports.tooltip = tooltip;\nfunction Tooltip(options) {\n const { shared, crosshairs, crosshairsX, crosshairsY, series, name, item = () => ({}), facet = false } = options, rest = __rest(options, [\"shared\", \"crosshairs\", \"crosshairsX\", \"crosshairsY\", \"series\", \"name\", \"item\", \"facet\"]);\n return (target, viewInstances, emitter) => {\n const { container, view } = target;\n const { scale, markState, coordinate, theme } = view;\n // Get default value from mark states.\n const defaultSeries = interactionKeyof(markState, 'seriesTooltip');\n const defaultShowCrosshairs = interactionKeyof(markState, 'crosshairs');\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const isSeries = maybeValue(series, defaultSeries);\n const crosshairsSetting = maybeValue(crosshairs, defaultShowCrosshairs);\n // For non-facet and series tooltip.\n if (isSeries && hasSeries(markState) && !facet) {\n return seriesTooltip(plotArea, Object.assign(Object.assign({}, rest), { theme, elements: utils_1.selectG2Elements, scale,\n coordinate, crosshairs: crosshairsSetting, \n // the crosshairsX settings level: crosshairsX > crosshairs > false\n // it means crosshairsX default is false\n crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), \n // crosshairsY default depend on the crossharisSettings\n crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item,\n emitter }));\n }\n // For facet and series tooltip.\n if (isSeries && facet) {\n // Get sub view instances for this view.\n const facetInstances = viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key);\n const elements = (0, utils_1.selectFacetG2Elements)(target, viewInstances);\n // Use the scale of the first view.\n const scale = facetInstances[0].view.scale;\n const bbox = plotArea.getBounds();\n const startX = bbox.min[0];\n const startY = bbox.min[1];\n Object.assign(scale, { facet: true });\n // @todo Nested structure rather than flat structure for facet?\n // Add listener to the root area.\n // @ts-ignore\n return seriesTooltip(plotArea.parentNode.parentNode, Object.assign(Object.assign({}, rest), { theme, elements: () => elements, scale,\n coordinate, crosshairs: maybeValue(crosshairs, defaultShowCrosshairs), \n // the crosshairsX settings level: crosshairsX > crosshairs > false\n // it means crosshairsX default is false\n crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item,\n startX,\n startY,\n emitter }));\n }\n return tooltip(plotArea, Object.assign(Object.assign({}, rest), { datum: (0, utils_1.createDatumof)(view), elements: utils_1.selectG2Elements, scale,\n coordinate, groupKey: shared ? (0, utils_1.createXKey)(view) : undefined, item,\n emitter,\n view,\n theme,\n shared }));\n };\n}\nexports.Tooltip = Tooltip;\nTooltip.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=tooltip.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendFilter = exports.attributesOf = exports.dataOf = exports.legendClearSetState = exports.legendsContinuousOf = exports.legendsOf = exports.itemsOf = exports.labelOf = exports.markerOf = exports.LEGEND_LABEL_CLASS_NAME = exports.LEGEND_MAKER_CLASS_NAME = exports.LEGEND_ITEMS_CLASS_NAME = exports.CONTINUOUS_LEGEND_CLASS_NAME = exports.CATEGORY_LEGEND_CLASS_NAME = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\nexports.CATEGORY_LEGEND_CLASS_NAME = 'legend-category';\nexports.CONTINUOUS_LEGEND_CLASS_NAME = 'legend-continuous';\nexports.LEGEND_ITEMS_CLASS_NAME = 'items-item';\nexports.LEGEND_MAKER_CLASS_NAME = 'legend-category-item-marker';\nexports.LEGEND_LABEL_CLASS_NAME = 'legend-category-item-label';\nfunction markerOf(item) {\n return item.getElementsByClassName(exports.LEGEND_MAKER_CLASS_NAME)[0];\n}\nexports.markerOf = markerOf;\nfunction labelOf(item) {\n return item.getElementsByClassName(exports.LEGEND_LABEL_CLASS_NAME)[0];\n}\nexports.labelOf = labelOf;\nfunction itemsOf(root) {\n return root.getElementsByClassName(exports.LEGEND_ITEMS_CLASS_NAME);\n}\nexports.itemsOf = itemsOf;\nfunction legendsOf(root) {\n return root.getElementsByClassName(exports.CATEGORY_LEGEND_CLASS_NAME);\n}\nexports.legendsOf = legendsOf;\nfunction legendsContinuousOf(root) {\n return root.getElementsByClassName(exports.CONTINUOUS_LEGEND_CLASS_NAME);\n}\nexports.legendsContinuousOf = legendsContinuousOf;\nfunction legendClearSetState(root, setState) {\n const legends = [...legendsOf(root), ...legendsContinuousOf(root)];\n legends.forEach((legend) => {\n setState(legend, (v) => v);\n });\n}\nexports.legendClearSetState = legendClearSetState;\nfunction dataOf(root) {\n // legend -> layout -> container\n let parent = root.parentNode;\n while (parent && !parent.__data__) {\n parent = parent.parentNode;\n }\n return parent.__data__;\n}\nexports.dataOf = dataOf;\nfunction attributesOf(root) {\n let child = root;\n while (child && !child.attr('class').startsWith('legend')) {\n child = child.children[0];\n }\n return child.attributes;\n}\nexports.attributesOf = attributesOf;\nfunction legendFilterOrdinal(root, { legends, // given the root of chart returns legends to be manipulated\nmarker: markerOf, // given the legend returns the marker\nlabel: labelOf, // given the legend returns the label\ndatum, // given the legend returns the value\nfilter, // invoke when dispatch filter event,\nemitter, channel, state = {}, // state options\n }) {\n // Index handler by item.\n const itemClick = new Map();\n const itemPointerenter = new Map();\n const itemPointerout = new Map();\n const { unselected = {\n markerStroke: '#aaa',\n markerFill: '#aaa',\n labelFill: '#aaa',\n }, } = state;\n const markerStyle = { unselected: (0, helper_1.subObject)(unselected, 'marker') };\n const labelStyle = { unselected: (0, helper_1.subObject)(unselected, 'label') };\n const { setState: setM, removeState: removeM } = (0, utils_1.useState)(markerStyle, undefined);\n const { setState: setL, removeState: removeL } = (0, utils_1.useState)(labelStyle, undefined);\n const items = Array.from(legends(root));\n let selectedValues = items.map(datum);\n const updateLegendState = () => {\n for (const item of items) {\n const value = datum(item);\n const marker = markerOf(item);\n const label = labelOf(item);\n if (!selectedValues.includes(value)) {\n setM(marker, 'unselected');\n setL(label, 'unselected');\n }\n else {\n removeM(marker, 'unselected');\n removeL(label, 'unselected');\n }\n }\n };\n for (const item of items) {\n // Defined handlers.\n const pointerenter = () => {\n (0, utils_1.setCursor)(root, 'pointer');\n };\n const pointerout = () => {\n (0, utils_1.restoreCursor)(root);\n };\n const click = (event) => __awaiter(this, void 0, void 0, function* () {\n const value = datum(item);\n const index = selectedValues.indexOf(value);\n if (index === -1)\n selectedValues.push(value);\n else\n selectedValues.splice(index, 1);\n yield filter(selectedValues);\n updateLegendState();\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n if (selectedValues.length === items.length) {\n emitter.emit('legend:reset', { nativeEvent });\n }\n else {\n // Emit events.\n emitter.emit('legend:filter', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n channel,\n values: selectedValues,\n } }));\n }\n });\n // Bind and store handlers.\n item.addEventListener('click', click);\n item.addEventListener('pointerenter', pointerenter);\n item.addEventListener('pointerout', pointerout);\n itemClick.set(item, click);\n itemPointerenter.set(item, pointerenter);\n itemPointerout.set(item, pointerout);\n }\n const onFilter = (event) => __awaiter(this, void 0, void 0, function* () {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { data } = event;\n const { channel: specifiedChannel, values } = data;\n if (specifiedChannel !== channel)\n return;\n selectedValues = values;\n yield filter(selectedValues);\n updateLegendState();\n });\n const onEnd = (event) => __awaiter(this, void 0, void 0, function* () {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n selectedValues = items.map(datum);\n yield filter(selectedValues);\n updateLegendState();\n });\n emitter.on('legend:filter', onFilter);\n emitter.on('legend:reset', onEnd);\n return () => {\n for (const item of items) {\n item.removeEventListener('click', itemClick.get(item));\n item.removeEventListener('pointerenter', itemPointerenter.get(item));\n item.removeEventListener('pointerout', itemPointerout.get(item));\n emitter.off('legend:filter', onFilter);\n emitter.off('legend:reset', onEnd);\n }\n };\n}\nfunction legendFilterContinuous(_, { legend, filter, emitter, channel }) {\n const onValueChange = ({ detail: { value } }) => {\n filter(value);\n emitter.emit({\n nativeEvent: true,\n data: {\n channel,\n values: value,\n },\n });\n };\n legend.addEventListener('valuechange', onValueChange);\n return () => {\n legend.removeEventListener('valuechange', onValueChange);\n };\n}\nfunction filterView(context, // View instance,\n{ legend, // Legend instance.\nchannel, // Filter Channel.\nvalue, // Filtered Values.\nordinal, // Data type of the legend.\nchannels, // Channels for this legend.\nallChannels, // Channels for all legends.\nfacet = false, // For facet.\n }) {\n return __awaiter(this, void 0, void 0, function* () {\n const { view, update, setState } = context;\n setState(legend, (viewOptions) => {\n const { marks } = viewOptions;\n // Add filter transform for every marks,\n // which will skip for mark without color channel.\n const newMarks = marks.map((mark) => {\n if (mark.type === 'legends')\n return mark;\n // Inset after aggregate transform, such as group, and bin.\n const { transform = [], data = [] } = mark;\n const index = transform.findIndex(({ type }) => type.startsWith('group') || type.startsWith('bin'));\n const newTransform = [...transform];\n if (data.length) {\n newTransform.splice(index + 1, 0, {\n type: 'filter',\n [channel]: { value, ordinal },\n });\n }\n // Set domain of scale to preserve encoding.\n const newScale = Object.fromEntries(channels.map((channel) => [\n channel,\n { domain: view.scale[channel].getOptions().domain },\n ]));\n return (0, util_1.deepMix)({}, mark, Object.assign(Object.assign({ transform: newTransform, scale: newScale }, (!ordinal && { animate: false })), { legend: facet\n ? false\n : Object.fromEntries(allChannels.map((d) => [d, { preserve: true }])) }));\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n yield update();\n });\n}\nfunction filterFacets(facets, options) {\n for (const facet of facets) {\n filterView(facet, Object.assign(Object.assign({}, options), { facet: true }));\n }\n}\nfunction LegendFilter() {\n return (context, contexts, emitter) => {\n const { container } = context;\n const facets = contexts.filter((d) => d !== context);\n const isFacet = facets.length > 0;\n const channelsOf = (legend) => {\n return dataOf(legend).scales.map((d) => d.name);\n };\n const legends = [\n ...legendsOf(container),\n ...legendsContinuousOf(container),\n ];\n const allChannels = legends.flatMap(channelsOf);\n const filter = isFacet\n ? (0, util_1.throttle)(filterFacets, 50, { trailing: true })\n : (0, util_1.throttle)(filterView, 50, { trailing: true });\n const removes = legends.map((legend) => {\n const { name: channel, domain } = dataOf(legend).scales[0];\n const channels = channelsOf(legend);\n const common = {\n legend,\n channel,\n channels,\n allChannels,\n };\n if (legend.className === exports.CATEGORY_LEGEND_CLASS_NAME) {\n return legendFilterOrdinal(container, {\n legends: itemsOf,\n marker: markerOf,\n label: labelOf,\n datum: (d) => {\n const { __data__: datum } = d;\n const { index } = datum;\n return domain[index];\n },\n filter: (value) => {\n const options = Object.assign(Object.assign({}, common), { value, ordinal: true });\n if (isFacet)\n filter(facets, options);\n else\n filter(context, options);\n },\n state: legend.attributes.state,\n channel,\n emitter,\n });\n }\n else {\n return legendFilterContinuous(container, {\n legend,\n filter: (value) => {\n const options = Object.assign(Object.assign({}, common), { value, ordinal: false });\n if (isFacet)\n filter(facets, options);\n else\n filter(context, options);\n },\n emitter,\n channel,\n });\n }\n });\n return () => {\n removes.forEach((remove) => remove());\n };\n };\n}\nexports.LegendFilter = LegendFilter;\n//# sourceMappingURL=legendFilter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegendHighlight = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\nconst legendFilter_1 = require(\"./legendFilter\");\nfunction LegendHighlight() {\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const legends = (0, legendFilter_1.legendsOf)(container);\n const elements = (0, utils_1.selectG2Elements)(container);\n const channelOf = (legend) => {\n return (0, legendFilter_1.dataOf)(legend).scales[0].name;\n };\n const scaleOf = (channel) => {\n const { scale: { [channel]: scale }, } = view;\n return scale;\n };\n const markState = (0, utils_1.mergeState)(options, ['active', 'inactive']);\n const valueof = (0, utils_1.createValueof)(elements, (0, utils_1.createDatumof)(view));\n const destroys = [];\n // Bind events for each legend.\n for (const legend of legends) {\n const datumOf = (item) => {\n const { data } = legend.attributes;\n const { __data__: datum } = item;\n const { index } = datum;\n return data[index].label;\n };\n const channel = channelOf(legend);\n const items = (0, legendFilter_1.itemsOf)(legend);\n const scale = scaleOf(channel);\n const elementGroup = (0, d3_array_1.group)(elements, (d) => scale.invert(d.__data__[channel]));\n const { state: legendState = {} } = legend.attributes;\n const { inactive = {} } = legendState;\n const { setState, removeState } = (0, utils_1.useState)(markState, valueof);\n // Handle styles of inner item.\n const markerStyle = { inactive: (0, helper_1.subObject)(inactive, 'marker') };\n const labelStyle = { inactive: (0, helper_1.subObject)(inactive, 'label') };\n const { setState: setM, removeState: removeM } = (0, utils_1.useState)(markerStyle);\n const { setState: setL, removeState: removeL } = (0, utils_1.useState)(labelStyle);\n const updateLegendState = (highlight) => {\n for (const item of items) {\n const marker = (0, legendFilter_1.markerOf)(item);\n const label = (0, legendFilter_1.labelOf)(item);\n if (item === highlight || highlight === null) {\n removeM(marker, 'inactive');\n removeL(label, 'inactive');\n }\n else {\n setM(marker, 'inactive');\n setL(label, 'inactive');\n }\n }\n };\n const highlightItem = (event, item) => {\n // Update UI.\n const value = datumOf(item);\n const elementSet = new Set(elementGroup.get(value));\n for (const e of elements) {\n if (elementSet.has(e))\n setState(e, 'active');\n else\n setState(e, 'inactive');\n }\n updateLegendState(item);\n // Emit events.\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n emitter.emit('legend:highlight', Object.assign(Object.assign({}, event), { nativeEvent, data: { channel, value } }));\n };\n const itemPointerover = new Map();\n // Add listener for the legend items.\n for (const item of items) {\n const pointerover = (event) => {\n highlightItem(event, item);\n };\n item.addEventListener('pointerover', pointerover);\n itemPointerover.set(item, pointerover);\n }\n // Add listener for the legend group.\n const pointerleave = (event) => {\n for (const e of elements)\n removeState(e, 'inactive', 'active');\n updateLegendState(null);\n // Emit events.\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n emitter.emit('legend:unhighlight', { nativeEvent });\n };\n const onHighlight = (event) => {\n const { nativeEvent, data } = event;\n if (nativeEvent)\n return;\n const { channel: specifiedChannel, value } = data;\n if (specifiedChannel !== channel)\n return;\n const item = items.find((d) => datumOf(d) === value);\n if (!item)\n return;\n highlightItem({ nativeEvent: false }, item);\n };\n const onUnHighlight = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n pointerleave({ nativeEvent: false });\n };\n legend.addEventListener('pointerleave', pointerleave);\n emitter.on('legend:highlight', onHighlight);\n emitter.on('legend:unhighlight', onUnHighlight);\n const destroy = () => {\n legend.removeEventListener(pointerleave);\n emitter.off('legend:highlight', onHighlight);\n emitter.off('legend:unhighlight', onUnHighlight);\n for (const [item, pointerover] of itemPointerover) {\n item.removeEventListener(pointerover);\n }\n };\n destroys.push(destroy);\n }\n return () => destroys.forEach((d) => d());\n };\n}\nexports.LegendHighlight = LegendHighlight;\n//# sourceMappingURL=legendHighlight.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushHighlight = exports.brushHighlight = exports.brush = void 0;\nconst g_1 = require(\"@antv/g\");\nconst helper_1 = require(\"../utils/helper\");\nconst scale_1 = require(\"../utils/scale\");\nconst createElement_1 = require(\"../utils/createElement\");\nconst selection_1 = require(\"../utils/selection\");\nconst utils_1 = require(\"./utils\");\nfunction intersect(bbox1, bbox2) {\n const [minX1, minY1, maxX1, maxY1] = bbox1;\n const [minX2, minY2, maxX2, maxY2] = bbox2;\n return !(minX2 > maxX1 || maxX2 < minX1 || minY2 > maxY1 || maxY2 < minY1);\n}\nfunction normalizeBounds(x, y, x1, y1, extent) {\n const [minX, minY, maxX, maxY] = extent;\n return [\n Math.max(minX, Math.min(x, x1)),\n Math.max(minY, Math.min(y, y1)),\n Math.min(maxX, Math.max(x, x1)),\n Math.min(maxY, Math.max(y, y1)),\n ];\n}\nfunction bboxOf(root) {\n const { width, height } = root.getBBox();\n return [0, 0, width, height];\n}\nfunction applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\nconst ResizableMask = (0, createElement_1.createElement)((g) => {\n const _a = g.attributes, { x, y, width, height, class: className, renders = {}, handleSize: size = 10, document } = _a, style = __rest(_a, [\"x\", \"y\", \"width\", \"height\", \"class\", \"renders\", \"handleSize\", \"document\"]);\n if (!document ||\n width === undefined ||\n height === undefined ||\n x === undefined ||\n y === undefined)\n return;\n const half = size / 2;\n const renderRect = (g, options, document) => {\n if (!g.handle) {\n g.handle = document.createElement('rect');\n g.append(g.handle);\n }\n const { handle } = g;\n handle.attr(options);\n return handle;\n };\n const _b = (0, helper_1.subObject)((0, helper_1.omitPrefixObject)(style, 'handleNW', 'handleNE'), 'handleN'), { render: handleNRender = renderRect } = _b, handleNStyle = __rest(_b, [\"render\"]);\n const _c = (0, helper_1.subObject)(style, 'handleE'), { render: handleERender = renderRect } = _c, handleEStyle = __rest(_c, [\"render\"]);\n const _d = (0, helper_1.subObject)((0, helper_1.omitPrefixObject)(style, 'handleSE', 'handleSW'), 'handleS'), { render: handleSRender = renderRect } = _d, handleSStyle = __rest(_d, [\"render\"]);\n const _e = (0, helper_1.subObject)(style, 'handleW'), { render: handleWRender = renderRect } = _e, handleWStyle = __rest(_e, [\"render\"]);\n const _f = (0, helper_1.subObject)(style, 'handleNW'), { render: handleNWRender = renderRect } = _f, handleNWStyle = __rest(_f, [\"render\"]);\n const _g = (0, helper_1.subObject)(style, 'handleNE'), { render: handleNERender = renderRect } = _g, handleNEStyle = __rest(_g, [\"render\"]);\n const _h = (0, helper_1.subObject)(style, 'handleSE'), { render: handleSERender = renderRect } = _h, handleSEStyle = __rest(_h, [\"render\"]);\n const _j = (0, helper_1.subObject)(style, 'handleSW'), { render: handleSWRender = renderRect } = _j, handleSWStyle = __rest(_j, [\"render\"]);\n const renderHandle = (g, renderNode) => {\n const { id } = g;\n const handle = renderNode(g, g.attributes, document);\n handle.id = id;\n handle.style.draggable = true;\n };\n const appendHandle = (handleRender) => {\n return () => {\n const Node = (0, createElement_1.createElement)((g) => renderHandle(g, handleRender));\n return new Node({});\n };\n };\n const container = (0, selection_1.select)(g)\n .attr('className', className)\n .style('transform', `translate(${x}, ${y})`)\n .style('draggable', true);\n container\n .maybeAppend('selection', 'rect')\n .style('draggable', true)\n .style('fill', 'transparent')\n .call(applyStyle, Object.assign(Object.assign({ width,\n height }, (0, helper_1.omitPrefixObject)(style, 'handle')), { transform: undefined }));\n container\n .maybeAppend('handle-n', appendHandle(handleNRender))\n .style('x', half)\n .style('y', -half)\n .style('width', width - size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNStyle);\n container\n .maybeAppend('handle-e', appendHandle(handleERender))\n .style('x', width - half)\n .style('y', half)\n .style('width', size)\n .style('height', height - size)\n .style('fill', 'transparent')\n .call(applyStyle, handleEStyle);\n container\n .maybeAppend('handle-s', appendHandle(handleSRender))\n .style('x', half)\n .style('y', height - half)\n .style('width', width - size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSStyle);\n container\n .maybeAppend('handle-w', appendHandle(handleWRender))\n .style('x', -half)\n .style('y', half)\n .style('width', size)\n .style('height', height - size)\n .style('fill', 'transparent')\n .call(applyStyle, handleWStyle);\n container\n .maybeAppend('handle-nw', appendHandle(handleNWRender))\n .style('x', -half)\n .style('y', -half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNWStyle);\n container\n .maybeAppend('handle-ne', appendHandle(handleNERender))\n .style('x', width - half)\n .style('y', -half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNEStyle);\n container\n .maybeAppend('handle-se', appendHandle(handleSERender))\n .style('x', width - half)\n .style('y', height - half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSEStyle);\n container\n .maybeAppend('handle-sw', appendHandle(handleSWRender))\n .style('x', -half)\n .style('y', height - half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSWStyle);\n});\nfunction brush(root, _a) {\n var { brushed = () => { }, brushended = () => { }, brushcreated = () => { }, brushstarted = () => { }, brushupdated = () => { }, extent = bboxOf(root), brushRegion = (x, y, x1, y1, extent) => [x, y, x1, y1], reverse = false, fill = '#777', fillOpacity = '0.3', stroke = '#fff', selectedHandles = [\n 'handle-n',\n 'handle-e',\n 'handle-s',\n 'handle-w',\n 'handle-nw',\n 'handle-ne',\n 'handle-se',\n 'handle-sw',\n ] } = _a, style = __rest(_a, [\"brushed\", \"brushended\", \"brushcreated\", \"brushstarted\", \"brushupdated\", \"extent\", \"brushRegion\", \"reverse\", \"fill\", \"fillOpacity\", \"stroke\", \"selectedHandles\"]);\n let start = null; // Start point of mask.\n let end = null; // End point of mask.\n let moveStart = null; // Start point of moving mask.\n let mask = null; // Mask instance.\n let background = null;\n let creating = false;\n const [originX, originY, width, height] = extent;\n (0, utils_1.setCursor)(root, 'crosshair');\n root.style.draggable = true; // Make it response to drag event.\n // Remove old mask and init new mask.\n const initMask = (x, y, event) => {\n brushstarted(event);\n if (mask)\n mask.remove();\n if (background)\n background.remove();\n start = [x, y];\n if (reverse)\n return initReverseMask();\n initNormalMask();\n };\n const initReverseMask = () => {\n background = new g_1.Path({\n style: Object.assign(Object.assign({}, style), { fill,\n fillOpacity,\n stroke, pointerEvents: 'none' }),\n });\n mask = new ResizableMask({\n // @ts-ignore\n style: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n draggable: true,\n document: root.ownerDocument,\n },\n className: 'mask',\n });\n root.appendChild(background);\n root.appendChild(mask);\n };\n const initNormalMask = () => {\n mask = new ResizableMask({\n // @ts-ignore\n style: Object.assign(Object.assign({ document: root.ownerDocument, x: 0, y: 0 }, style), { fill,\n fillOpacity,\n stroke, draggable: true }),\n className: 'mask',\n });\n root.appendChild(mask);\n };\n // Remove mask and reset states.\n const removeMask = (emit = true) => {\n if (mask)\n mask.remove();\n if (background)\n background.remove();\n start = null;\n end = null;\n moveStart = null;\n creating = false;\n mask = null;\n background = null;\n brushended(emit);\n };\n // Update mask and invoke brushended callback.\n const updateMask = (start, end, emit = true) => {\n const [x, y, x1, y1] = normalizeBounds(start[0], start[1], end[0], end[1], extent);\n const [fx, fy, fx1, fy1] = brushRegion(x, y, x1, y1, extent);\n if (reverse)\n updateReverseMask(fx, fy, fx1, fy1);\n else\n updateNormalMask(fx, fy, fx1, fy1);\n brushed(fx, fy, fx1, fy1, emit);\n return [fx, fy, fx1, fy1];\n };\n const updateNormalMask = (x, y, x1, y1) => {\n mask.style.x = x;\n mask.style.y = y;\n mask.style.width = x1 - x;\n mask.style.height = y1 - y;\n };\n const updateReverseMask = (x, y, x1, y1) => {\n background.style.d = `\n M${originX},${originY}L${width},${originY}L${width},${height}L${originX},${height}Z\n M${x},${y}L${x},${y1}L${x1},${y1}L${x1},${y}Z\n `;\n mask.style.x = x;\n mask.style.y = y;\n mask.style.width = x1 - x;\n mask.style.height = y1 - y;\n };\n // Move and update mask.\n const moveMask = (current) => {\n const clip = (dt, start, end, min, max) => {\n if (dt + start < min)\n return min - start;\n if (dt + end > max)\n return max - end;\n return dt;\n };\n const dx = current[0] - moveStart[0];\n const dy = current[1] - moveStart[1];\n const dx1 = clip(dx, start[0], end[0], originX, width);\n const dy1 = clip(dy, start[1], end[1], originY, height);\n const currentStart = [start[0] + dx1, start[1] + dy1];\n const currentEnd = [end[0] + dx1, end[1] + dy1];\n updateMask(currentStart, currentEnd);\n };\n const handles = {\n 'handle-n': { vector: [0, 1, 0, 0], cursor: 'ns-resize' },\n 'handle-e': { vector: [0, 0, 1, 0], cursor: 'ew-resize' },\n 'handle-s': { vector: [0, 0, 0, 1], cursor: 'ns-resize' },\n 'handle-w': { vector: [1, 0, 0, 0], cursor: 'ew-resize' },\n 'handle-nw': { vector: [1, 1, 0, 0], cursor: 'nwse-resize' },\n 'handle-ne': { vector: [0, 1, 1, 0], cursor: 'nesw-resize' },\n 'handle-se': { vector: [0, 0, 1, 1], cursor: 'nwse-resize' },\n 'handle-sw': { vector: [1, 0, 0, 1], cursor: 'nesw-resize' },\n };\n const isMask = (target) => {\n return isSelection(target) || isHandle(target);\n };\n const isHandle = (target) => {\n const { id } = target;\n if (selectedHandles.indexOf(id) === -1)\n return false;\n return new Set(Object.keys(handles)).has(id);\n };\n const isSelection = (target) => {\n return target === mask.getElementById('selection');\n };\n // If target is plot area, create mask.\n // If target is mask, about to update position.\n const dragstart = (event) => {\n const { target } = event;\n const [offsetX, offsetY] = (0, utils_1.brushMousePosition)(root, event);\n if (!mask || !isMask(target)) {\n initMask(offsetX, offsetY, event);\n creating = true;\n return;\n }\n if (isMask(target)) {\n moveStart = [offsetX, offsetY];\n }\n };\n const drag = (event) => {\n const { target } = event;\n const mouse = (0, utils_1.brushMousePosition)(root, event);\n if (!start)\n return;\n // If target is plot area, resize mask.\n if (!moveStart)\n return updateMask(start, mouse);\n // If target is selection area, move mask.\n if (isSelection(target))\n return moveMask(mouse);\n // If target is handle area, resize mask.\n const [dx, dy] = [mouse[0] - moveStart[0], mouse[1] - moveStart[1]];\n const { id } = target;\n if (handles[id]) {\n const [sx, sy, ex, ey] = handles[id].vector;\n return updateMask([start[0] + dx * sx, start[1] + dy * sy], [end[0] + dx * ex, end[1] + dy * ey]);\n }\n };\n // If target is plot area, finish creating.\n // If target is mask, finish moving mask.\n const dragend = (event) => {\n if (moveStart) {\n moveStart = null;\n // Update start and end;\n const { x, y, width, height } = mask.style;\n start = [x, y];\n end = [x + width, y + height];\n brushupdated(x, y, x + width, y + height, event);\n return;\n }\n end = (0, utils_1.brushMousePosition)(root, event);\n const [fx, fy, fx1, fy1] = updateMask(start, end);\n creating = false;\n brushcreated(fx, fy, fx1, fy1, event);\n };\n // Hide mask.\n const click = (event) => {\n const { target } = event;\n if (mask && !isMask(target))\n removeMask();\n };\n // Update cursor depends on hovered element.\n const pointermove = (event) => {\n const { target } = event;\n if (!mask || !isMask(target) || creating)\n (0, utils_1.setCursor)(root, 'crosshair');\n else if (isSelection(target))\n (0, utils_1.setCursor)(root, 'move');\n else if (isHandle(target))\n (0, utils_1.setCursor)(root, handles[target.id].cursor);\n };\n const pointerleave = () => {\n (0, utils_1.setCursor)(root, 'default');\n };\n root.addEventListener('dragstart', dragstart);\n root.addEventListener('drag', drag);\n root.addEventListener('dragend', dragend);\n root.addEventListener('click', click);\n root.addEventListener('pointermove', pointermove);\n root.addEventListener('pointerleave', pointerleave);\n return {\n mask,\n move(x, y, x1, y1, emit = true) {\n if (!mask)\n initMask(x, y, {});\n start = [x, y];\n end = [x1, y1];\n updateMask([x, y], [x1, y1], emit);\n },\n remove(emit = true) {\n if (mask)\n removeMask(emit);\n },\n destroy() {\n // Do not emit brush:end event.\n if (mask)\n removeMask(false);\n (0, utils_1.setCursor)(root, 'default');\n root.removeEventListener('dragstart', dragstart);\n root.removeEventListener('drag', drag);\n root.removeEventListener('dragend', dragend);\n root.removeEventListener('click', click);\n root.removeEventListener('pointermove', pointermove);\n root.removeEventListener('pointerleave', pointerleave);\n },\n };\n}\nexports.brush = brush;\nfunction selectSiblingViews(target, viewInstances, brushKey) {\n return viewInstances.filter((d) => {\n if (d === target)\n return false;\n const { interaction = {} } = d.options;\n return Object.values(interaction).find((d) => d.brushKey === brushKey);\n });\n}\nfunction selectSiblingContainers(target, viewInstances, brushKey) {\n return selectSiblingViews(target, viewInstances, brushKey).map((d) => (0, utils_1.selectPlotArea)(d.container));\n}\nfunction selectSiblingOptions(target, viewInstances, brushKey) {\n return selectSiblingViews(target, viewInstances, brushKey).map((d) => d.options);\n}\n/**\n * @todo Brush over view for series view.\n * @todo Test perf.\n */\nfunction brushHighlight(root, _a) {\n var { elements: elementof, selectedHandles, siblings: siblingsof = (root) => [], datum, brushRegion, extent: optionalExtent, reverse, scale, coordinate, series = false, key = (d) => d, bboxOf = (root) => {\n const { x, y, width, height } = root.style;\n return { x, y, width, height };\n }, state = {}, emitter } = _a, rest = __rest(_a, [\"elements\", \"selectedHandles\", \"siblings\", \"datum\", \"brushRegion\", \"extent\", \"reverse\", \"scale\", \"coordinate\", \"series\", \"key\", \"bboxOf\", \"state\", \"emitter\"]);\n const elements = elementof(root);\n const siblings = siblingsof(root);\n const siblingElements = siblings.flatMap(elementof);\n const valueof = (0, utils_1.createValueof)(elements, datum);\n const brushStyle = (0, helper_1.subObject)(rest, 'mask');\n const { setState, removeState } = (0, utils_1.useState)(state, valueof);\n const clonedElement = new Map();\n const { width: rootWidth, height: rootHeight, x: ordinalX = 0, y: ordinalY = 0, } = bboxOf(root);\n const extent = optionalExtent\n ? optionalExtent\n : [0, 0, rootWidth, rootHeight];\n const brushended = () => {\n for (const element of [...elements, ...siblingElements]) {\n removeState(element, 'active', 'inactive');\n }\n };\n const brushed = (x, y, x1, y1) => {\n var _a;\n // Hide brush for the sibling view.\n for (const sibling of siblings)\n (_a = sibling.brush) === null || _a === void 0 ? void 0 : _a.remove();\n // Store the key of the active element.\n const keys = new Set();\n // Highlight and store selected elements.\n for (const element of elements) {\n const { min, max } = element.getLocalBounds();\n const [ex, ey] = min;\n const [ex1, ey1] = max;\n if (!intersect([ex, ey, ex1, ey1], [x, y, x1, y1])) {\n setState(element, 'inactive');\n }\n else {\n setState(element, 'active');\n keys.add(key(element));\n }\n }\n // Highlight elements with same key in sibling view.\n for (const element of siblingElements) {\n if (keys.has(key(element)))\n setState(element, 'active');\n else\n setState(element, 'inactive');\n }\n };\n const seriesBrushend = () => {\n for (const element of elements)\n removeState(element, 'inactive');\n for (const cloned of clonedElement.values())\n cloned.remove();\n clonedElement.clear();\n };\n const seriesBrushed = (x, y, x1, y1) => {\n const clone = (element) => {\n const cloned = element.cloneNode();\n cloned.__data__ = element.__data__;\n element.parentNode.appendChild(cloned);\n clonedElement.set(element, cloned);\n return cloned;\n };\n // Create a clipPath shared between all children.\n const clipPath = new g_1.Rect({\n style: {\n x: x + ordinalX,\n y: y + ordinalY,\n width: x1 - x,\n height: y1 - y,\n },\n });\n root.appendChild(clipPath);\n for (const element of elements) {\n const cloned = clonedElement.get(element) || clone(element);\n cloned.style.clipPath = clipPath;\n setState(element, 'inactive');\n setState(cloned, 'active');\n }\n };\n const brushHandler = brush(root, Object.assign(Object.assign({}, brushStyle), { extent,\n brushRegion,\n reverse,\n selectedHandles, brushended: (emit) => {\n const handler = series ? seriesBrushend : brushended;\n if (emit) {\n emitter.emit('brush:remove', { nativeEvent: true });\n }\n handler();\n }, brushed: (x, y, x1, y1, emit) => {\n const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate);\n if (emit) {\n emitter.emit('brush:highlight', {\n nativeEvent: true,\n data: { selection },\n });\n }\n const handler = series ? seriesBrushed : brushed;\n handler(x, y, x1, y1);\n }, brushcreated: (x, y, x1, y1, event) => {\n const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate);\n emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } }));\n }, brushupdated: (x, y, x1, y1, event) => {\n const selection = (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate);\n emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } }));\n }, brushstarted: (e) => {\n emitter.emit('brush:start', e);\n } }));\n // Move brush and highlight data.\n const onHighlight = ({ nativeEvent, data }) => {\n if (nativeEvent)\n return;\n const { selection } = data;\n const [x, y, x1, y1] = (0, scale_1.pixelsOf)(selection, scale, coordinate);\n brushHandler.move(x, y, x1, y1, false);\n };\n emitter.on('brush:highlight', onHighlight);\n // Remove brush and reset data.\n const onRemove = ({ nativeEvent } = {}) => {\n if (nativeEvent)\n return;\n brushHandler.remove(false);\n };\n emitter.on('brush:remove', onRemove);\n // Remove event handlers.\n const preBrushDestroy = brushHandler.destroy.bind(brushHandler);\n brushHandler.destroy = () => {\n emitter.off('brush:highlight', onHighlight);\n emitter.off('brush:remove', onRemove);\n preBrushDestroy();\n };\n return brushHandler;\n}\nexports.brushHighlight = brushHighlight;\nfunction BrushHighlight(_a) {\n var { facet, brushKey } = _a, rest = __rest(_a, [\"facet\", \"brushKey\"]);\n return (target, viewInstances, emitter) => {\n const { container, view, options } = target;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const defaultOptions = {\n maskFill: '#777',\n maskFillOpacity: '0.3',\n maskStroke: '#fff',\n reverse: false,\n };\n const defaultStates = ['active', ['inactive', { opacity: 0.5 }]];\n const { scale, coordinate } = view;\n if (facet) {\n const bbox = plotArea.getBounds();\n const x = bbox.min[0];\n const y = bbox.min[1];\n const x1 = bbox.max[0];\n const y1 = bbox.max[1];\n return brushHighlight(plotArea.parentNode.parentNode, Object.assign(Object.assign({ elements: () => (0, utils_1.selectFacetG2Elements)(target, viewInstances), datum: (0, utils_1.createDatumof)((0, utils_1.selectFacetViews)(target, viewInstances).map((d) => d.view)), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: [x, y, x1, y1], state: (0, utils_1.mergeState)((0, utils_1.selectFacetViews)(target, viewInstances).map((d) => d.options), defaultStates), emitter,\n scale,\n coordinate, selectedHandles: undefined }, defaultOptions), rest));\n }\n const brush = brushHighlight(plotArea, Object.assign(Object.assign({ elements: utils_1.selectG2Elements, key: (element) => element.__data__.key, siblings: () => selectSiblingContainers(target, viewInstances, brushKey), datum: (0, utils_1.createDatumof)([\n view,\n ...selectSiblingViews(target, viewInstances, brushKey).map((d) => d.view),\n ]), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: undefined, state: (0, utils_1.mergeState)([options, ...selectSiblingOptions(target, viewInstances, brushKey)], defaultStates), emitter,\n scale,\n coordinate, selectedHandles: undefined }, defaultOptions), rest));\n // Bind brush to the view it belongs to.\n //@ts-ignore\n plotArea.brush = brush;\n return () => brush.destroy();\n };\n}\nexports.BrushHighlight = BrushHighlight;\n//# sourceMappingURL=brushHighlight.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushXHighlight = exports.brushXRegion = void 0;\nconst brushHighlight_1 = require(\"./brushHighlight\");\nfunction brushXRegion(x, y, x1, y1, extent) {\n const [, minY, , maxY] = extent;\n return [x, minY, x1, maxY];\n}\nexports.brushXRegion = brushXRegion;\nfunction BrushXHighlight(options) {\n return (0, brushHighlight_1.BrushHighlight)(Object.assign(Object.assign({}, options), { brushRegion: brushXRegion, selectedHandles: ['handle-e', 'handle-w'] }));\n}\nexports.BrushXHighlight = BrushXHighlight;\n//# sourceMappingURL=brushXHighlight.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushYHighlight = exports.brushYRegion = void 0;\nconst brushHighlight_1 = require(\"./brushHighlight\");\nfunction brushYRegion(x, y, x1, y1, extent) {\n const [minX, , maxX] = extent;\n return [minX, y, maxX, y1];\n}\nexports.brushYRegion = brushYRegion;\nfunction BrushYHighlight(options) {\n return (0, brushHighlight_1.BrushHighlight)(Object.assign(Object.assign({}, options), { brushRegion: brushYRegion, selectedHandles: ['handle-n', 'handle-s'] }));\n}\nexports.BrushYHighlight = BrushYHighlight;\n//# sourceMappingURL=brushYHighlight.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushAxisHighlight = exports.brushAxisHighlight = exports.AXIS_HOT_AREA_CLASS_NAME = exports.AXIS_MAIN_CLASS_NAME = exports.AXIS_LINE_CLASS_NAME = exports.AXIS_CLASS_NAME = void 0;\nconst g_1 = require(\"@antv/g\");\nconst helper_1 = require(\"../utils/helper\");\nconst scale_1 = require(\"../utils/scale\");\nconst brushHighlight_1 = require(\"./brushHighlight\");\nconst brushXHighlight_1 = require(\"./brushXHighlight\");\nconst brushYHighlight_1 = require(\"./brushYHighlight\");\nconst utils_1 = require(\"./utils\");\nexports.AXIS_CLASS_NAME = 'axis';\nexports.AXIS_LINE_CLASS_NAME = 'axis-line';\nexports.AXIS_MAIN_CLASS_NAME = 'axis-main-group';\nexports.AXIS_HOT_AREA_CLASS_NAME = 'axis-hot-area';\nfunction axesOf(container) {\n return container.getElementsByClassName(exports.AXIS_CLASS_NAME);\n}\nfunction lineOf(axis) {\n return axis.getElementsByClassName(exports.AXIS_LINE_CLASS_NAME)[0];\n}\nfunction mainGroupOf(axis) {\n return axis.getElementsByClassName(exports.AXIS_MAIN_CLASS_NAME)[0];\n}\n// Use the bounds of main group of axis as the bounds of axis,\n// get rid of grid and title.\nfunction boundsOfAxis(axis) {\n return mainGroupOf(axis).getLocalBounds();\n}\n// Brush for vertical axis.\nfunction verticalBrush(axis, _a) {\n var { cross, offsetX, offsetY } = _a, style = __rest(_a, [\"cross\", \"offsetX\", \"offsetY\"]);\n const bounds = boundsOfAxis(axis);\n const axisLine = lineOf(axis);\n const [lineX] = axisLine.getLocalBounds().min;\n const [minX, minY] = bounds.min;\n const [maxX, maxY] = bounds.max;\n const size = (maxX - minX) * 2;\n return {\n brushRegion: brushYHighlight_1.brushYRegion,\n hotZone: new g_1.Rect({\n className: exports.AXIS_HOT_AREA_CLASS_NAME,\n style: Object.assign({ \n // If it is not cross, draw brush in both side of axisLine,\n // otherwise the draw brush within bounds area.\n width: cross ? size / 2 : size, transform: `translate(${(cross ? minX : lineX - size / 2).toFixed(2)}, ${minY})`, height: maxY - minY }, style),\n }),\n extent: cross\n ? // If it is cross, the x range is ignored.\n (x, y, x1, y1) => [-Infinity, y, Infinity, y1]\n : (x, y, x1, y1) => [\n Math.floor(minX - offsetX),\n y,\n Math.ceil(maxX - offsetX),\n y1,\n ],\n };\n}\n// Brush for horizontal axis.\nfunction horizontalBrush(axis, _a) {\n var { offsetY, offsetX, cross = false } = _a, style = __rest(_a, [\"offsetY\", \"offsetX\", \"cross\"]);\n const bounds = boundsOfAxis(axis);\n const axisLine = lineOf(axis);\n const [, lineY] = axisLine.getLocalBounds().min;\n const [minX, minY] = bounds.min;\n const [maxX, maxY] = bounds.max;\n const size = maxY - minY;\n return {\n brushRegion: brushXHighlight_1.brushXRegion,\n hotZone: new g_1.Rect({\n className: exports.AXIS_HOT_AREA_CLASS_NAME,\n style: Object.assign({ width: maxX - minX, \n // If it is not cross, draw brush in both side of axisLine,\n // otherwise the draw brush within bounds area.\n height: cross ? size : size * 2, transform: `translate(${minX}, ${cross ? minY : lineY - size})` }, style),\n }),\n extent: cross\n ? // If it is cross, the y range is ignored.\n (x, y, x1, y1) => [x, -Infinity, x1, Infinity]\n : (x, y, x1, y1) => [\n x,\n Math.floor(minY - offsetY),\n x1,\n Math.ceil(maxY - offsetY),\n ],\n };\n}\nfunction brushAxisHighlight(root, _a) {\n var { axes: axesOf, // given root, return axes\n elements: elementsOf, // given root, return elements\n points: pointsOf, // given shape, return control points\n horizontal: isHorizontal, // given axis, return direction\n datum, // given shape, return datum\n offsetY, // offsetY for shape area\n offsetX, // offsetX for shape area\n reverse = false, state = {}, emitter, coordinate } = _a, rest = __rest(_a, [\"axes\", \"elements\", \"points\", \"horizontal\", \"datum\", \"offsetY\", \"offsetX\", \"reverse\", \"state\", \"emitter\", \"coordinate\"]) // style\n ;\n const elements = elementsOf(root);\n const axes = axesOf(root);\n const valueof = (0, utils_1.createValueof)(elements, datum);\n const { setState, removeState } = (0, utils_1.useState)(state, valueof);\n const axisExtent = new Map();\n const brushStyle = (0, helper_1.subObject)(rest, 'mask');\n // Only some of shape's points in all mask, it is selected.\n const brushed = (points) => Array.from(axisExtent.values()).every(([x, y, x1, y1]) => points.some(([x0, y0]) => {\n return x0 >= x && x0 <= x1 && y0 >= y && y0 <= y1;\n }));\n const scales = axes.map((d) => d.attributes.scale);\n const extentOf = (D) => (D.length > 2 ? [D[0], D[D.length - 1]] : D);\n const indexDomain = new Map();\n const initIndexDomain = () => {\n indexDomain.clear();\n for (let i = 0; i < axes.length; i++) {\n const scale = scales[i];\n const { domain } = scale.getOptions();\n indexDomain.set(i, extentOf(domain));\n }\n };\n initIndexDomain();\n // Update element when brush changed.\n const updateElement = (i, emit) => {\n const selectedElements = [];\n for (const element of elements) {\n const points = pointsOf(element);\n if (brushed(points)) {\n setState(element, 'active');\n selectedElements.push(element);\n }\n else\n setState(element, 'inactive');\n }\n indexDomain.set(i, selectionOf(selectedElements, i));\n if (!emit)\n return;\n // Emit events.\n const selection = () => {\n if (!cross)\n return Array.from(indexDomain.values());\n const S = [];\n for (const [index, domain] of indexDomain) {\n const scale = scales[index];\n const { name } = scale.getOptions();\n if (name === 'x')\n S[0] = domain;\n else\n S[1] = domain;\n }\n return S;\n };\n emitter.emit('brushAxis:highlight', {\n nativeEvent: true,\n data: {\n selection: selection(),\n },\n });\n };\n const clearElement = (emit) => {\n for (const element of elements)\n removeState(element, 'active', 'inactive');\n initIndexDomain();\n if (!emit)\n return;\n emitter.emit('brushAxis:remove', { nativeEvent: true });\n };\n const selectionOf = (selected, i) => {\n const scale = scales[i];\n const { name } = scale.getOptions();\n const domain = selected.map((d) => {\n const data = d.__data__;\n return scale.invert(data[name]);\n });\n return extentOf((0, scale_1.domainOf)(scale, domain));\n };\n // Distinguish between parallel coordinates and normal charts.\n const cross = axes.some(isHorizontal) && axes.some((d) => !isHorizontal(d));\n const handlers = [];\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const createBrush = isHorizontal(axis) ? horizontalBrush : verticalBrush;\n const { hotZone, brushRegion, extent } = createBrush(axis, {\n offsetY,\n offsetX,\n cross,\n zIndex: 999,\n fill: 'transparent', // Make it interactive.\n });\n axis.parentNode.appendChild(hotZone);\n const brushHandler = (0, brushHighlight_1.brush)(hotZone, Object.assign(Object.assign({}, brushStyle), { reverse,\n brushRegion,\n brushended(emit) {\n axisExtent.delete(axis);\n if (Array.from(axisExtent.entries()).length === 0)\n clearElement(emit);\n else\n updateElement(i, emit);\n },\n brushed(x, y, x1, y1, emit) {\n axisExtent.set(axis, extent(x, y, x1, y1));\n updateElement(i, emit);\n } }));\n handlers.push(brushHandler);\n }\n const onRemove = (event = {}) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n handlers.forEach((d) => d.remove(false));\n };\n const rangeOf = (domain, scale, axis) => {\n const [d0, d1] = domain;\n const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0);\n const x = abstractOf(d0, scale, axis);\n const x1 = abstractOf(d1, scale, axis) + maybeStep(scale);\n if (isHorizontal(axis))\n return [x, -Infinity, x1, Infinity];\n return [-Infinity, x, Infinity, x1];\n };\n const abstractOf = (x, scale, axis) => {\n const { height, width } = coordinate.getOptions();\n const scale1 = scale.clone();\n if (isHorizontal(axis))\n scale1.update({ range: [0, width] });\n else\n scale1.update({ range: [height, 0] });\n return scale1.map(x);\n };\n const onHighlight = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { selection } = event.data;\n for (let i = 0; i < handlers.length; i++) {\n const domain = selection[i];\n const handler = handlers[i];\n const axis = axes[i];\n if (domain) {\n const scale = scales[i];\n handler.move(...rangeOf(domain, scale, axis), false);\n }\n else {\n handler.remove(false);\n }\n }\n };\n emitter.on('brushAxis:remove', onRemove);\n emitter.on('brushAxis:highlight', onHighlight);\n return () => {\n handlers.forEach((d) => d.destroy());\n emitter.off('brushAxis:remove', onRemove);\n emitter.off('brushAxis:highlight', onHighlight);\n };\n}\nexports.brushAxisHighlight = brushAxisHighlight;\n/**\n * @todo Support mask size.\n */\nfunction BrushAxisHighlight(options) {\n return (target, _, emitter) => {\n const { container, view, options: viewOptions } = target;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const { x: x0, y: y0 } = plotArea.getBBox();\n const { coordinate } = view;\n return brushAxisHighlight(container, Object.assign({ elements: utils_1.selectG2Elements, axes: axesOf, offsetY: y0, offsetX: x0, points: (element) => element.__data__.points, horizontal: (axis) => {\n const { startPos: [sx, sy], endPos: [ex, ey], } = axis.attributes;\n // attention, non-horizontal does not mean vertical\n // it may has a specific degree angle\n return sx !== ex && sy === ey;\n }, datum: (0, utils_1.createDatumof)(view), state: (0, utils_1.mergeState)(viewOptions, [\n 'active',\n ['inactive', { opacity: 0.5 }],\n ]), coordinate,\n emitter }, options));\n };\n}\nexports.BrushAxisHighlight = BrushAxisHighlight;\n//# sourceMappingURL=brushAxisHighlight.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushFilter = exports.brushFilter = void 0;\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst scale_1 = require(\"../utils/scale\");\nconst brushHighlight_1 = require(\"./brushHighlight\");\nconst utils_1 = require(\"./utils\");\n// Mock dblclick events.\nfunction dblclick(interval = 300) {\n let preTimeStamp = null;\n return (e) => {\n const { timeStamp } = e;\n if (preTimeStamp !== null && timeStamp - preTimeStamp < interval) {\n preTimeStamp = timeStamp;\n return true;\n }\n preTimeStamp = timeStamp;\n return false;\n };\n}\nfunction brushFilter(root, _a) {\n var { filter, reset, brushRegion, extent: optionalExtent, reverse, emitter, scale, coordinate, selection, series = false } = _a, rest = __rest(_a, [\"filter\", \"reset\", \"brushRegion\", \"extent\", \"reverse\", \"emitter\", \"scale\", \"coordinate\", \"selection\", \"series\"]);\n const brushStyle = (0, helper_1.subObject)(rest, 'mask');\n const { width: rootWidth, height: rootHeight } = root.getBBox();\n const extent = optionalExtent\n ? optionalExtent\n : [0, 0, rootWidth, rootHeight];\n const isDblclick = dblclick();\n const brush = (0, brushHighlight_1.brush)(root, Object.assign(Object.assign({}, brushStyle), { extent,\n brushRegion,\n reverse,\n brushcreated }));\n root.addEventListener('click', click);\n // Filter when brush created.\n function brushcreated(x, y, x1, y1, event) {\n if (x === x1 && y === y1)\n return;\n event.nativeEvent = true;\n filter(selection(x, y, x1, y1), event);\n brush.remove();\n }\n // Reset when dblclick.\n function click(e) {\n if (isDblclick(e)) {\n e.nativeEvent = true;\n reset(e);\n }\n }\n const onFilter = ({ nativeEvent, data }) => {\n if (nativeEvent)\n return;\n const { selection } = data;\n filter(selection, { nativeEvent: false });\n };\n emitter.on('brush:filter', onFilter);\n return () => {\n brush.destroy();\n emitter.off('brush:filter', onFilter);\n root.removeEventListener('click', click);\n };\n}\nexports.brushFilter = brushFilter;\nfunction BrushFilter(_a) {\n var { hideX = true, hideY = true } = _a, rest = __rest(_a, [\"hideX\", \"hideY\"]);\n return (target, viewInstances, emitter) => {\n const { container, view, options: viewOptions, update, setState } = target;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n const defaultOptions = {\n maskFill: '#777',\n maskFillOpacity: '0.3',\n maskStroke: '#fff',\n unhighlightedOpacity: 0.5,\n reverse: false,\n };\n let filtered = false;\n let filtering = false;\n let newView = view;\n const { scale, coordinate } = view;\n return brushFilter(plotArea, Object.assign(Object.assign({ brushRegion: (x, y, x1, y1) => [x, y, x1, y1], selection: (x, y, x1, y1) => {\n const { scale, coordinate } = newView;\n return (0, scale_1.selectionOf)(x, y, x1, y1, scale, coordinate);\n }, filter: (selection, event) => __awaiter(this, void 0, void 0, function* () {\n // Avoid redundant filter.\n if (filtering)\n return;\n filtering = true;\n // Update the domain of x and y scale to filter data.\n const [domainX, domainY] = selection;\n setState('brushFilter', (options) => {\n const { marks } = options;\n const newMarks = marks.map((mark) => (0, util_1.deepMix)({\n // Hide label to keep smooth transition.\n axis: Object.assign(Object.assign({}, (hideX && { x: { transform: [{ type: 'hide' }] } })), (hideY && { y: { transform: [{ type: 'hide' }] } })),\n }, mark, {\n // Set nice to false to avoid modify domain.\n scale: {\n x: { domain: domainX, nice: false },\n y: { domain: domainY, nice: false },\n },\n }));\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks, clip: true });\n });\n // Emit event.\n emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } }));\n const newState = yield update();\n newView = newState.view;\n filtering = false;\n filtered = true;\n }), reset: (event) => {\n if (filtering || !filtered)\n return;\n // Emit event.\n const { scale } = view;\n const { x: scaleX, y: scaleY } = scale;\n const domainX = scaleX.getOptions().domain;\n const domainY = scaleY.getOptions().domain;\n emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } }));\n filtered = false;\n newView = view;\n setState('brushFilter');\n update();\n }, extent: undefined, emitter,\n scale,\n coordinate }, defaultOptions), rest));\n };\n}\nexports.BrushFilter = BrushFilter;\n//# sourceMappingURL=brushFilter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushXFilter = void 0;\nconst brushFilter_1 = require(\"./brushFilter\");\nconst brushXHighlight_1 = require(\"./brushXHighlight\");\nfunction BrushXFilter(options) {\n return (0, brushFilter_1.BrushFilter)(Object.assign(Object.assign({ hideX: true }, options), { brushRegion: brushXHighlight_1.brushXRegion }));\n}\nexports.BrushXFilter = BrushXFilter;\n//# sourceMappingURL=brushXFilter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BrushYFilter = void 0;\nconst brushFilter_1 = require(\"./brushFilter\");\nconst brushYHighlight_1 = require(\"./brushYHighlight\");\nfunction BrushYFilter(options) {\n return (0, brushFilter_1.BrushFilter)(Object.assign(Object.assign({ hideY: true }, options), { brushRegion: brushYHighlight_1.brushYRegion }));\n}\nexports.BrushYFilter = BrushYFilter;\n//# sourceMappingURL=brushYFilter.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SliderFilter = exports.SLIDER_CLASS_NAME = void 0;\nconst util_1 = require(\"@antv/util\");\nconst g_1 = require(\"@antv/g\");\nconst coordinate_1 = require(\"../utils/coordinate\");\nconst scale_1 = require(\"../utils/scale\");\nexports.SLIDER_CLASS_NAME = 'slider';\nfunction filterDataByDomain(options, scaleOptions, prefix, hasState = false, channel0 = 'x', channel1 = 'y') {\n const { marks } = options;\n const newMarks = marks.map((mark) => {\n var _a, _b;\n return (0, util_1.deepMix)({\n // Hide label to keep smooth transition.\n axis: {\n x: { transform: [{ type: 'hide' }] },\n y: { transform: [{ type: 'hide' }] },\n },\n }, mark, {\n scale: scaleOptions,\n // Don't rerender sliders.\n [prefix]: Object.assign(Object.assign({}, (((_a = mark[prefix]) === null || _a === void 0 ? void 0 : _a[channel0]) && {\n [channel0]: Object.assign({ preserve: true }, (hasState && { ratio: null })),\n })), (((_b = mark[prefix]) === null || _b === void 0 ? void 0 : _b[channel1]) && {\n [channel1]: { preserve: true },\n })),\n animate: false,\n });\n });\n // Rerender and update view.\n return Object.assign(Object.assign({}, options), { marks: newMarks, clip: true, animate: false });\n}\nfunction abstractValue(values, scale, reverse) {\n const [x, x1] = values;\n const v = reverse ? (d) => 1 - d : (d) => d;\n const d0 = (0, scale_1.invert)(scale, v(x), true);\n const d1 = (0, scale_1.invert)(scale, v(x1), false);\n return (0, scale_1.domainOf)(scale, [d0, d1]);\n}\nfunction extentOf(domain) {\n return [domain[0], domain[domain.length - 1]];\n}\n/**\n * @todo Support click to reset after fix click and dragend conflict.\n */\nfunction SliderFilter({ initDomain = {}, className = exports.SLIDER_CLASS_NAME, prefix = 'slider', setValue = (component, values) => component.setValues(values), hasState = false, wait = 50, leading = true, trailing = false, getInitValues = (slider) => {\n var _a;\n const values = (_a = slider === null || slider === void 0 ? void 0 : slider.attributes) === null || _a === void 0 ? void 0 : _a.values;\n if (values[0] !== 0 || values[1] !== 1)\n return values;\n}, }) {\n return (context, _, emitter) => {\n const { container, view, update, setState } = context;\n const sliders = container.getElementsByClassName(className);\n if (!sliders.length)\n return () => { };\n let filtering = false;\n const { scale, coordinate, layout } = view;\n const { paddingLeft, paddingTop, paddingBottom, paddingRight } = layout;\n const { x: scaleX, y: scaleY } = scale;\n const transposed = (0, coordinate_1.isTranspose)(coordinate);\n const channelOf = (orientation) => {\n const channel0 = orientation === 'vertical' ? 'y' : 'x';\n const channel1 = orientation === 'vertical' ? 'x' : 'y';\n if (transposed)\n return [channel1, channel0];\n return [channel0, channel1];\n };\n const sliderHandler = new Map();\n const emitHandlers = new Set();\n // Store current domain of x and y scale.\n const channelDomain = {\n x: initDomain.x || scaleX.getOptions().domain,\n y: initDomain.y || scaleY.getOptions().domain,\n };\n for (const slider of sliders) {\n const { orientation } = slider.attributes;\n const [channel0, channel1] = channelOf(orientation);\n const eventName = `${prefix}${(0, util_1.upperFirst)(channel0)}:filter`;\n const isX = channel0 === 'x';\n const { ratio: ratioX } = scaleX.getOptions();\n const { ratio: ratioY } = scaleY.getOptions();\n const domainsOf = (event) => {\n // From abstract values.\n if (event.data) {\n const { selection } = event.data;\n const [X = extentOf(channelDomain.x), Y = extentOf(channelDomain.y)] = selection;\n return isX\n ? [(0, scale_1.domainOf)(scaleX, X, ratioX), (0, scale_1.domainOf)(scaleY, Y, ratioY)]\n : [(0, scale_1.domainOf)(scaleY, Y, ratioY), (0, scale_1.domainOf)(scaleX, X, ratioX)];\n }\n // From visual values.\n const { value: values } = event.detail;\n const scale0 = scale[channel0];\n const domain0 = abstractValue(values, scale0, transposed && orientation === 'horizontal');\n const domain1 = channelDomain[channel1];\n return [domain0, domain1];\n };\n const onValueChange = (0, util_1.throttle)((event) => __awaiter(this, void 0, void 0, function* () {\n const { initValue = false } = event;\n if (filtering && !initValue)\n return;\n filtering = true;\n const { nativeEvent = true } = event;\n // Get and update domain.\n const [domain0, domain1] = domainsOf(event);\n channelDomain[channel0] = domain0;\n channelDomain[channel1] = domain1;\n if (nativeEvent) {\n // Emit events.\n const X = isX ? domain0 : domain1;\n const Y = isX ? domain1 : domain0;\n emitter.emit(eventName, Object.assign(Object.assign({}, event), { nativeEvent, data: { selection: [extentOf(X), extentOf(Y)] } }));\n }\n setState(slider, (options) => (Object.assign(Object.assign({}, filterDataByDomain(options, \n // Set nice to false to avoid modify domain.\n // Only update domain of current slider / scrollbar.\n { [channel0]: { domain: domain0, nice: false } }, prefix, hasState, channel0, channel1)), { paddingLeft,\n paddingTop,\n paddingBottom,\n paddingRight })));\n yield update();\n filtering = false;\n }), wait, { leading, trailing });\n const emitHandler = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { data } = event;\n const { selection } = data;\n const [X, Y] = selection;\n // Update data.\n slider.dispatchEvent(new g_1.CustomEvent('valuechange', {\n data,\n nativeEvent: false,\n }));\n // Update slider.\n const V = isX ? (0, scale_1.abstractOf)(X, scaleX) : (0, scale_1.abstractOf)(Y, scaleY);\n setValue(slider, V);\n };\n emitter.on(eventName, emitHandler);\n slider.addEventListener('valuechange', onValueChange);\n sliderHandler.set(slider, onValueChange);\n emitHandlers.add([eventName, emitHandler]);\n const values = getInitValues(slider);\n if (values) {\n // Init values.\n slider.dispatchEvent(new g_1.CustomEvent('valuechange', {\n detail: {\n value: values,\n },\n nativeEvent: false,\n initValue: true,\n }));\n }\n }\n return () => {\n for (const [slider, handler] of sliderHandler) {\n slider.removeEventListener('valuechange', handler);\n }\n for (const [name, handler] of emitHandlers) {\n emitter.off(name, handler);\n }\n };\n };\n}\nexports.SliderFilter = SliderFilter;\n//# sourceMappingURL=sliderFilter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScrollbarFilter = exports.SCROLLBAR_CLASS_NAME = void 0;\nconst sliderFilter_1 = require(\"./sliderFilter\");\nexports.SCROLLBAR_CLASS_NAME = 'g2-scrollbar';\nfunction ScrollbarFilter(options = {}) {\n return (context, _, emitter) => {\n const { view, container } = context;\n const scrollbars = container.getElementsByClassName(exports.SCROLLBAR_CLASS_NAME);\n if (!scrollbars.length)\n return () => { };\n const { scale } = view;\n const { x: scaleX, y: scaleY } = scale;\n // The filtered domain, computed by the ratio attribute.\n const initDomain = {\n x: [...scaleX.getOptions().domain],\n y: [...scaleY.getOptions().domain],\n };\n // The ordinal domain for each channel.\n scaleX.update({ domain: scaleX.getOptions().expectedDomain });\n scaleY.update({ domain: scaleY.getOptions().expectedDomain });\n const interaction = (0, sliderFilter_1.SliderFilter)(Object.assign(Object.assign({}, options), { initDomain, className: exports.SCROLLBAR_CLASS_NAME, prefix: 'scrollbar', hasState: true, setValue: (component, values) => component.setValue(values[0]), getInitValues: (scrollbar) => {\n const values = scrollbar.slider.attributes.values;\n if (values[0] !== 0)\n return values;\n } }));\n return interaction(context, _, emitter);\n };\n}\nexports.ScrollbarFilter = ScrollbarFilter;\n//# sourceMappingURL=scrollbarFilter.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Poptip = void 0;\nconst g_1 = require(\"@antv/g\");\nconst string_1 = require(\"../utils/string\");\nconst helper_1 = require(\"../utils/helper\");\nfunction dom(tag, children, style) {\n return `<${tag} style=\"${Object.entries(style)\n .map(([key, value]) => `${(0, string_1.kebabCase)(key)}:${value}`)\n .join(';')}\">${children}`;\n}\nconst defaultTipStyle = {\n backgroundColor: 'rgba(0,0,0,0.75)',\n color: '#fff',\n width: 'max-content',\n padding: '1px 4px',\n fontSize: '12px',\n borderRadius: '2.5px',\n boxShadow: '0 3px 6px -4px rgba(0,0,0,0.12), 0 6px 16px 0 rgba(0,0,0,0.08), 0 9px 28px 8px rgba(0,0,0,0.05)',\n};\nfunction isTipText(element) {\n if (element.nodeName !== 'text')\n return false;\n if (element.isOverflowing())\n return true;\n return false;\n}\nfunction Poptip(_a) {\n var { offsetX = 8, offsetY = 8 } = _a, style = __rest(_a, [\"offsetX\", \"offsetY\"]);\n return (context) => {\n const { container } = context;\n const [x0, y0] = container.getBounds().min;\n const tipStyle = (0, helper_1.subObject)(style, 'tip');\n const tips = new Set();\n const pointerover = (e) => {\n const { target } = e;\n if (!isTipText(target)) {\n e.stopPropagation();\n return;\n }\n const { offsetX: mouseX, offsetY: mouseY } = e;\n const x = mouseX + offsetX - x0;\n const y = mouseY + offsetY - y0;\n if (target.tip) {\n target.tip.style.x = x;\n target.tip.style.y = y;\n return;\n }\n const { text } = target.style;\n const tipELement = new g_1.HTML({\n className: 'poptip',\n style: {\n innerHTML: dom('div', text, Object.assign(Object.assign({}, defaultTipStyle), tipStyle)),\n x,\n y,\n },\n });\n container.appendChild(tipELement);\n target.tip = tipELement;\n tips.add(tipELement);\n };\n const pointerout = (e) => {\n const { target } = e;\n if (!isTipText(target)) {\n e.stopPropagation();\n return;\n }\n if (!target.tip)\n return;\n target.tip.remove();\n target.tip = null;\n tips.delete(target.tip);\n };\n container.addEventListener('pointerover', pointerover);\n container.addEventListener('pointerout', pointerout);\n return () => {\n container.removeEventListener('pointerover', pointerover);\n container.removeEventListener('pointerout', pointerout);\n tips.forEach((tip) => tip.remove());\n };\n };\n}\nexports.Poptip = Poptip;\nPoptip.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=poptip.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TreemapDrillDown = void 0;\nconst g_1 = require(\"@antv/g\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst runtime_1 = require(\"../runtime\");\nconst selection_1 = require(\"../utils/selection\");\nconst treeDataTransform_1 = require(\"../utils/treeDataTransform\");\nconst legendFilter_1 = require(\"./legendFilter\");\nconst utils_1 = require(\"./utils\");\nfunction selectPlotArea(root) {\n return (0, selection_1.select)(root).select(`.${runtime_1.PLOT_CLASS_NAME}`).node();\n}\n// Default breadCrumb config.\nconst DEFAULT_BREADCRUMB_STYLE = {\n breadCrumbFill: 'rgba(0, 0, 0, 0.85)',\n breadCrumbFontSize: 12,\n breadCrumbY: 12,\n activeFill: 'rgba(0, 0, 0, 0.5)',\n};\n/**\n * TreemapDrillDown interaction.\n */\nfunction TreemapDrillDown(drillDownOptions = {}) {\n const { originData = [], layout } = drillDownOptions, style = __rest(drillDownOptions, [\"originData\", \"layout\"]);\n const breadCrumb = (0, util_1.deepMix)({}, DEFAULT_BREADCRUMB_STYLE, style);\n const breadCrumbStyle = (0, helper_1.subObject)(breadCrumb, 'breadCrumb');\n const breadCrumbActiveStyle = (0, helper_1.subObject)(breadCrumb, 'active');\n return (context) => {\n const { update, setState, container, options } = context;\n const plotArea = selectPlotArea(container);\n const mark = options.marks[0];\n const { state } = mark;\n // Create breadCrumbTextsGroup,save textSeparator、drillTexts.\n const textGroup = new g_1.Group();\n plotArea.appendChild(textGroup);\n // Modify the data and scale according to the path and the level of the current click, so as to achieve the effect of drilling down and drilling up and initialization.\n const drillDownClick = (path, depth) => __awaiter(this, void 0, void 0, function* () {\n // Clear text.\n textGroup.removeChildren();\n // More path creation text.\n if (depth) {\n let name = '';\n let y = breadCrumbStyle.y;\n let x = 0;\n const textPath = [];\n const maxWidth = plotArea.getBBox().width;\n // Create path: 'type1 / type2 / type3' -> '/ type1 / type2 / type3'.\n const drillTexts = path.map((text, index) => {\n name = `${name}${text}/`;\n textPath.push(text);\n const drillText = new g_1.Text({\n name: name.replace(/\\/$/, ''),\n style: Object.assign(Object.assign({ text,\n x, \n // @ts-ignore\n path: [...textPath], depth: index }, breadCrumbStyle), { y }),\n });\n textGroup.appendChild(drillText);\n x += drillText.getBBox().width;\n const textSeparator = new g_1.Text({\n style: Object.assign(Object.assign({ x, text: ' / ' }, breadCrumbStyle), { y }),\n });\n textGroup.appendChild(textSeparator);\n x += textSeparator.getBBox().width;\n /**\n * Page width exceeds maximum, line feed.\n * | ----maxWidth---- |\n * | / tyep1 / tyep2 / type3 |\n * ->\n * | ----maxWidth---- |\n * | / tyep1 / tyep2 |\n * | / type3 |\n */\n if (x > maxWidth) {\n y = textGroup.getBBox().height + breadCrumbStyle.y;\n x = 0;\n drillText.attr({\n x,\n y,\n });\n x += drillText.getBBox().width;\n textSeparator.attr({\n x,\n y,\n });\n x += textSeparator.getBBox().width;\n }\n if (index === (0, util_1.size)(path) - 1) {\n textSeparator.remove();\n }\n return drillText;\n });\n // Add Active, Add TreemapDrillDown\n drillTexts.forEach((item, index) => {\n // Last drillText\n if (index === (0, util_1.size)(drillTexts) - 1)\n return;\n const originalAttrs = Object.assign({}, item.attributes);\n item.attr('cursor', 'pointer');\n item.addEventListener('mouseenter', () => {\n item.attr(breadCrumbActiveStyle);\n });\n item.addEventListener('mouseleave', () => {\n item.attr(originalAttrs);\n });\n item.addEventListener('click', () => {\n drillDownClick((0, util_1.get)(item, ['style', 'path']), (0, util_1.get)(item, ['style', 'depth']));\n });\n });\n }\n // LegendFilter interaction and treemapDrillDown clash.\n (0, legendFilter_1.legendClearSetState)(container, setState);\n // Update marks.\n setState('treemapDrillDown', (viewOptions) => {\n const { marks } = viewOptions;\n // Add filter transform for every marks,\n // which will skip for mark without color channel.\n const strPath = path.join('/');\n const newMarks = marks.map((mark) => {\n if (mark.type !== 'rect')\n return mark;\n let newData = originData;\n if (depth) {\n const filterData = originData\n .filter((item) => {\n const id = (0, util_1.get)(item, ['id']);\n return id && (id.match(`${strPath}/`) || strPath.match(id));\n })\n .map((item) => ({\n value: item.height === 0 ? (0, util_1.get)(item, ['value']) : undefined,\n name: (0, util_1.get)(item, ['id']),\n }));\n const { paddingLeft, paddingBottom, paddingRight } = layout;\n // New drill layout for calculation x y and filtration data.\n const newLayout = Object.assign(Object.assign({}, layout), { paddingTop: (layout.paddingTop || textGroup.getBBox().height + 10) /\n (depth + 1), paddingLeft: paddingLeft / (depth + 1), paddingBottom: paddingBottom / (depth + 1), paddingRight: paddingRight / (depth + 1), path: (d) => d.name, layer: (d) => d.depth === depth + 1 });\n // Transform the new matrix tree data.\n newData = (0, treeDataTransform_1.treeDataTransform)(filterData, newLayout, {\n value: 'value',\n })[0];\n }\n else {\n newData = originData.filter((item) => {\n return item.depth === 1;\n });\n }\n const colorDomain = [];\n newData.forEach(({ path }) => {\n colorDomain.push((0, util_1.last)(path));\n });\n // TreemapDrillDown by filtering the data and scale.\n return (0, util_1.deepMix)({}, mark, {\n data: newData,\n scale: {\n color: { domain: colorDomain },\n },\n });\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n // The second argument is to allow the legendFilter event to be re-added; the update method itself causes legend to lose the interaction event.\n yield update(undefined, ['legendFilter']);\n });\n //\n const keyofLabel = (d) => d.attributes.key.split('-')[0];\n const keyofRect = (d) => (0, util_1.get)(d, ['__data__', 'key']);\n // Elements and BreadCrumb click.\n const createDrillClick = (e) => {\n const item = e.target;\n const { markType, nodeName, attributes } = item || {};\n if (markType !== 'rect' && nodeName !== g_1.Shape.TEXT)\n return;\n const key = nodeName === g_1.Shape.TEXT && (0, util_1.get)(attributes, 'isTreemapLabel') === true\n ? keyofLabel(item)\n : keyofRect(item);\n const node = (0, util_1.find)(originData, (d) => d.id === key);\n // Node height = 0 no children\n if ((0, util_1.get)(node, 'height')) {\n drillDownClick((0, util_1.get)(node, 'path'), (0, util_1.get)(node, 'depth'));\n }\n };\n // Add click drill interaction.\n plotArea.addEventListener('click', createDrillClick);\n // Change attributes keys.\n const changeStyleKey = (0, util_1.keys)(Object.assign(Object.assign({}, state.active), state.inactive));\n const createActive = () => {\n const elements = (0, utils_1.getElements)(plotArea);\n elements.forEach((element) => {\n const cursor = (0, util_1.get)(element, ['style', 'cursor']);\n const node = (0, util_1.find)(originData, (d) => d.id === (0, util_1.get)(element, ['__data__', 'key']));\n if (cursor !== 'pointer' && (node === null || node === void 0 ? void 0 : node.height)) {\n element.style.cursor = 'pointer';\n const originalAttrs = (0, util_1.pick)(element.attributes, changeStyleKey);\n element.addEventListener('mouseenter', () => {\n element.attr(state.active);\n });\n element.addEventListener('mouseleave', () => {\n element.attr((0, util_1.deepMix)(originalAttrs, state.inactive));\n });\n }\n });\n };\n createActive();\n // Animate elements update, Add active.\n plotArea.addEventListener('mousemove', createActive);\n return () => {\n textGroup.remove();\n plotArea.removeEventListener('click', createDrillClick);\n plotArea.removeEventListener('mousemove', createActive);\n };\n };\n}\nexports.TreemapDrillDown = TreemapDrillDown;\n//# sourceMappingURL=treemapDrillDown.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElementPointMove = void 0;\nconst g_1 = require(\"@antv/g\");\nconst util_1 = require(\"@antv/util\");\nconst helper_1 = require(\"../utils/helper\");\nconst utils_1 = require(\"./utils\");\nconst DEFAULT_STYLE = {\n pointR: 6,\n pointStrokeWidth: 1,\n pointStroke: '#888',\n pointActiveStroke: '#f5f5f5',\n pathStroke: '#888',\n pathLineDash: [3, 4],\n labelFontSize: 12,\n labelFill: '#888',\n labelStroke: '#fff',\n labelLineWidth: 1,\n labelY: -6,\n labelX: 2,\n};\n// point shape name.\nconst MOVE_POINT_NAME = 'movePoint';\n// Element mouseenter change style.\nconst elementMouseenter = (e) => {\n const element = e.target;\n const { markType } = element;\n // Mark line.\n if (markType === 'line') {\n element.attr('_lineWidth', element.attr('lineWidth') || 1);\n element.attr('lineWidth', element.attr('_lineWidth') + 3);\n }\n // Mark interval.\n if (markType === 'interval') {\n element.attr('_opacity', element.attr('opacity') || 1);\n element.attr('opacity', 0.7 * element.attr('_opacity'));\n }\n};\n// Element mouseleave change style.\nconst elementMouseleave = (e) => {\n const element = e.target;\n const { markType } = element;\n // Mark line.\n if (markType === 'line') {\n element.attr('lineWidth', element.attr('_lineWidth'));\n }\n // Mark interval.\n if (markType === 'interval') {\n element.attr('opacity', element.attr('_opacity'));\n }\n};\n// Get the latest overall data based on the individual data changes.\nconst getNewData = (newChangeData, data, encode) => {\n return data.map((d) => {\n const isUpdate = ['x', 'color'].reduce((v, key) => {\n const field = encode[key];\n if (!field)\n return v;\n if (d[field] !== newChangeData[field])\n return false;\n return v;\n }, true);\n return isUpdate ? Object.assign(Object.assign({}, d), newChangeData) : d;\n });\n};\n// Find mark interval origin element data.\nconst getIntervalDataRatioTransformFn = (element) => {\n const y = (0, util_1.get)(element, ['__data__', 'y']);\n const y1 = (0, util_1.get)(element, ['__data__', 'y1']);\n const v = y1 - y;\n const { __data__: { data, encode, transform }, childNodes, } = element.parentNode;\n const isNormalizeY = (0, util_1.find)(transform, ({ type }) => type === 'normalizeY');\n const yField = (0, util_1.get)(encode, ['y', 'field']);\n const value = data[childNodes.indexOf(element)][yField];\n return (newValue, isTheta = false) => {\n if (isNormalizeY || isTheta) {\n return (newValue / (1 - newValue) / (v / (1 - v))) * value;\n }\n return newValue;\n };\n};\n// Find origin path data.\nconst getPathDataRatioTransformFn = (element, index) => {\n const v = (0, util_1.get)(element, ['__data__', 'seriesItems', index, '0', 'value']);\n const i = (0, util_1.get)(element, ['__data__', 'seriesIndex', index]);\n const { __data__: { data, encode, transform }, } = element.parentNode;\n const isNormalizeY = (0, util_1.find)(transform, ({ type }) => type === 'normalizeY');\n const yField = (0, util_1.get)(encode, ['y', 'field']);\n const value = data[i][yField];\n return (newValue) => {\n if (isNormalizeY) {\n if (v === 1) {\n return newValue;\n }\n return (newValue / (1 - newValue) / (v / (1 - v))) * value;\n }\n return newValue;\n };\n};\n// Point shape select change style.\nconst selectedPointsStyle = (pointsShape, selection, defaultStyle) => {\n pointsShape.forEach((shape, index) => {\n shape.attr('stroke', selection[1] === index\n ? defaultStyle['activeStroke']\n : defaultStyle['stroke']);\n });\n};\n// Create help show message shape.\nconst createHelpShape = (group, circle, pathStyle, labelStyle) => {\n const pathShape = new g_1.Path({\n style: pathStyle,\n });\n const labelShape = new g_1.Text({\n style: labelStyle,\n });\n circle.appendChild(labelShape);\n group.appendChild(pathShape);\n return [pathShape, labelShape];\n};\n// Get color scale type.\nconst getColorType = (scaleColor, color) => {\n const indexOf = (0, util_1.get)(scaleColor, ['options', 'range', 'indexOf']);\n if (!indexOf)\n return;\n const i = scaleColor.options.range.indexOf(color);\n return scaleColor.sortedDomain[i];\n};\n// Get the same direction new point.\nconst getSamePointPosition = (center, point, target) => {\n const oldR = (0, utils_1.getPointsR)(center, point);\n const newR = (0, utils_1.getPointsR)(center, target);\n const ratio = newR / oldR;\n const newX = center[0] + (point[0] - center[0]) * ratio;\n const newY = center[1] + (point[1] - center[1]) * ratio;\n return [newX, newY];\n};\n/**\n * ElementPointMove interaction.\n */\nfunction ElementPointMove(elementPointMoveOptions = {}) {\n const { selection = [], precision = 2 } = elementPointMoveOptions, style = __rest(elementPointMoveOptions, [\"selection\", \"precision\"]);\n const defaultStyle = Object.assign(Object.assign({}, DEFAULT_STYLE), (style || {}));\n // Shape default style.\n const pathDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'path');\n const labelDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'label');\n const pointDefaultStyle = (0, helper_1.subObject)(defaultStyle, 'point');\n return (context, _, emitter) => {\n const { update, setState, container, view, options: { marks, coordinate: coordinateOptions }, } = context;\n const plotArea = (0, utils_1.selectPlotArea)(container);\n let elements = (0, utils_1.getElements)(plotArea);\n let newState;\n let newSelection = selection;\n const { transform = [], type: coordinateType } = coordinateOptions;\n const isTranspose = !!(0, util_1.find)(transform, ({ type }) => type === 'transpose');\n const isPolar = coordinateType === 'polar';\n const isTheta = coordinateType === 'theta';\n const isArea = !!(0, util_1.find)(elements, ({ markType }) => markType === 'area');\n if (isArea) {\n elements = elements.filter(({ markType }) => markType === 'area');\n }\n // Create points\n const pointsGroup = new g_1.Group({\n style: {\n // Tooltip point need down.\n zIndex: 2,\n },\n });\n plotArea.appendChild(pointsGroup);\n const selectedChange = () => {\n emitter.emit('element-point:select', {\n nativeEvent: true,\n data: {\n selection: newSelection,\n },\n });\n };\n const dataChange = (changeData, data) => {\n emitter.emit('element-point:moved', {\n nativeEvent: true,\n data: {\n changeData,\n data,\n },\n });\n };\n // Element click change style.\n const elementClick = (e) => {\n const element = e.target;\n newSelection = [element.parentNode.childNodes.indexOf(element)];\n selectedChange();\n createPoints(element);\n };\n const elementSelect = (d) => {\n const { data: { selection }, nativeEvent, } = d;\n if (nativeEvent)\n return;\n newSelection = selection;\n const element = (0, util_1.get)(elements, [newSelection === null || newSelection === void 0 ? void 0 : newSelection[0]]);\n if (element) {\n createPoints(element);\n }\n };\n // Create select element points.\n const createPoints = (element) => {\n const { attributes, markType, __data__: data } = element;\n const { stroke: fill } = attributes;\n const { points, seriesTitle, color, title, seriesX, y1 } = data;\n // Transpose Currently only do mark interval;\n if (isTranspose && markType !== 'interval')\n return;\n const { scale, coordinate } = (newState === null || newState === void 0 ? void 0 : newState.view) || view;\n const { color: scaleColor, y: scaleY, x: scaleX } = scale;\n const center = coordinate.getCenter();\n pointsGroup.removeChildren();\n let downPoint;\n const updateView = (x, y, color, markTypes) => __awaiter(this, void 0, void 0, function* () {\n setState('elementPointMove', (viewOptions) => {\n var _a;\n // Update marks.\n const newMarks = (((_a = newState === null || newState === void 0 ? void 0 : newState.options) === null || _a === void 0 ? void 0 : _a.marks) || marks).map((mark) => {\n if (!markTypes.includes(mark.type))\n return mark;\n const { data, encode } = mark;\n const encodeKeys = Object.keys(encode);\n // Get change new one element data.\n const newChangeData = encodeKeys.reduce((value, key) => {\n const dataKey = encode[key];\n if (key === 'x') {\n value[dataKey] = x;\n }\n if (key === 'y') {\n value[dataKey] = y;\n }\n if (key === 'color') {\n value[dataKey] = color;\n }\n return value;\n }, {});\n // Get change new all data.\n const newData = getNewData(newChangeData, data, encode);\n dataChange(newChangeData, newData);\n return (0, util_1.deepMix)({}, mark, {\n data: newData,\n // No need animate\n animate: false,\n });\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n return yield update('elementPointMove');\n });\n if (['line', 'area'].includes(markType)) {\n points.forEach((p, index) => {\n const title = scaleX.invert(seriesX[index]);\n // Area points have bottom point.\n if (!title)\n return;\n const circle = new g_1.Circle({\n name: MOVE_POINT_NAME,\n style: Object.assign({ cx: p[0], cy: p[1], fill }, pointDefaultStyle),\n });\n const ratioTransform = getPathDataRatioTransformFn(element, index);\n circle.addEventListener('mousedown', (e) => {\n const oldPoint = coordinate.output([seriesX[index], 0]);\n const pathLength = seriesTitle === null || seriesTitle === void 0 ? void 0 : seriesTitle.length;\n container.attr('cursor', 'move');\n if (newSelection[1] !== index) {\n newSelection[1] = index;\n selectedChange();\n }\n selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle);\n const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle);\n // Point move change text\n const pointMousemove = (e) => {\n const newCy = p[1] + e.clientY - downPoint[1];\n // Area/Radar chart.\n if (isArea) {\n // Radar chart.\n if (isPolar) {\n const newCx = p[0] + e.clientX - downPoint[0];\n const [newX, newY] = getSamePointPosition(center, oldPoint, [\n newCx,\n newCy,\n ]);\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n newX,\n initY - (points[index + pathLength][1] - newY),\n ]);\n const nextIndex = (index + 1) % pathLength;\n const lastIndex = (index - 1 + pathLength) % pathLength;\n const newPath = (0, utils_1.getPointsPath)([\n points[lastIndex],\n [newX, newY],\n seriesTitle[nextIndex] && points[nextIndex],\n ]);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newX);\n circle.attr('cy', newY);\n }\n else {\n // Area chart.\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n p[0],\n initY - (points[index + pathLength][1] - newCy),\n ]);\n const newPath = (0, utils_1.getPointsPath)([\n points[index - 1],\n [p[0], newCy],\n seriesTitle[index + 1] && points[index + 1],\n ]);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n }\n else {\n // Line chart.\n const [, y] = coordinate.invert([p[0], newCy]);\n const newPath = (0, utils_1.getPointsPath)([\n points[index - 1],\n [p[0], newCy],\n points[index + 1],\n ]);\n labelShape.attr('text', scaleY.invert(y).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n };\n downPoint = [e.clientX, e.clientY];\n window.addEventListener('mousemove', pointMousemove);\n const mouseupFn = () => __awaiter(this, void 0, void 0, function* () {\n container.attr('cursor', 'default');\n window.removeEventListener('mousemove', pointMousemove);\n container.removeEventListener('mouseup', mouseupFn);\n if ((0, util_1.isUndefined)(labelShape.attr('text')))\n return;\n const y = Number(labelShape.attr('text'));\n const colorType = getColorType(scaleColor, color);\n newState = yield updateView(title, y, colorType, [\n 'line',\n 'area',\n ]);\n labelShape.remove();\n pathShape.remove();\n createPoints(element);\n });\n container.addEventListener('mouseup', mouseupFn);\n });\n pointsGroup.appendChild(circle);\n });\n selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle);\n }\n else if (markType === 'interval') {\n // Column chart point.\n let circlePoint = [(points[0][0] + points[1][0]) / 2, points[0][1]];\n // Bar chart point.\n if (isTranspose) {\n circlePoint = [points[0][0], (points[0][1] + points[1][1]) / 2];\n }\n else if (isTheta) {\n // Pie chart point.\n circlePoint = points[0];\n }\n const ratioTransform = getIntervalDataRatioTransformFn(element);\n const circle = new g_1.Circle({\n name: MOVE_POINT_NAME,\n style: Object.assign(Object.assign({ cx: circlePoint[0], cy: circlePoint[1], fill }, pointDefaultStyle), { stroke: pointDefaultStyle['activeStroke'] }),\n });\n circle.addEventListener('mousedown', (e) => {\n container.attr('cursor', 'move');\n const colorType = getColorType(scaleColor, color);\n const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle);\n // Point move change text\n const pointMousemove = (e) => {\n if (isTranspose) {\n // Bar chart.\n const newCx = circlePoint[0] + e.clientX - downPoint[0];\n const [initX] = coordinate.output([\n scaleY.output(0),\n scaleY.output(0),\n ]);\n const [, x] = coordinate.invert([\n initX + (newCx - points[2][0]),\n circlePoint[1],\n ]);\n const newPath = (0, utils_1.getPointsPath)([\n [newCx, points[0][1]],\n [newCx, points[1][1]],\n points[2],\n points[3],\n ], true);\n labelShape.attr('text', ratioTransform(scaleY.invert(x)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newCx);\n }\n else if (isTheta) {\n // Pie chart.\n const newCy = circlePoint[1] + e.clientY - downPoint[1];\n const newCx = circlePoint[0] + e.clientX - downPoint[0];\n const [newXOut, newYOut] = getSamePointPosition(center, [newCx, newCy], circlePoint);\n const [newXIn, newYIn] = getSamePointPosition(center, [newCx, newCy], points[1]);\n const lastPercent = coordinate.invert([newXOut, newYOut])[1];\n const percent = y1 - lastPercent;\n if (percent < 0)\n return;\n const newPath = (0, utils_1.getThetaPath)(center, [[newXOut, newYOut], [newXIn, newYIn], points[2], points[3]], percent > 0.5 ? 1 : 0);\n labelShape.attr('text', ratioTransform(percent, true).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newXOut);\n circle.attr('cy', newYOut);\n }\n else {\n // Column chart.\n const newCy = circlePoint[1] + e.clientY - downPoint[1];\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n circlePoint[0],\n initY - (points[2][1] - newCy),\n ]);\n const newPath = (0, utils_1.getPointsPath)([\n [points[0][0], newCy],\n [points[1][0], newCy],\n points[2],\n points[3],\n ], true);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n };\n downPoint = [e.clientX, e.clientY];\n window.addEventListener('mousemove', pointMousemove);\n // Change mosueup change data and update 、clear shape.\n const mouseupFn = () => __awaiter(this, void 0, void 0, function* () {\n container.attr('cursor', 'default');\n container.removeEventListener('mouseup', mouseupFn);\n window.removeEventListener('mousemove', pointMousemove);\n if ((0, util_1.isUndefined)(labelShape.attr('text')))\n return;\n const y = Number(labelShape.attr('text'));\n newState = yield updateView(title, y, colorType, [markType]);\n labelShape.remove();\n pathShape.remove();\n createPoints(element);\n });\n container.addEventListener('mouseup', mouseupFn);\n });\n pointsGroup.appendChild(circle);\n }\n };\n // Add EventListener.\n elements.forEach((element, index) => {\n if (newSelection[0] === index) {\n createPoints(element);\n }\n element.addEventListener('click', elementClick);\n element.addEventListener('mouseenter', elementMouseenter);\n element.addEventListener('mouseleave', elementMouseleave);\n });\n const rootClick = (e) => {\n const element = e === null || e === void 0 ? void 0 : e.target;\n if (!element ||\n (element.name !== MOVE_POINT_NAME && !elements.includes(element))) {\n newSelection = [];\n selectedChange();\n pointsGroup.removeChildren();\n }\n };\n emitter.on('element-point:select', elementSelect);\n emitter.on('element-point:unselect', rootClick);\n container.addEventListener('mousedown', rootClick);\n // Remove EventListener.\n return () => {\n pointsGroup.remove();\n emitter.off('element-point:select', elementSelect);\n emitter.off('element-point:unselect', rootClick);\n container.removeEventListener('mousedown', rootClick);\n elements.forEach((element) => {\n element.removeEventListener('click', elementClick);\n element.removeEventListener('mouseenter', elementMouseenter);\n element.removeEventListener('mouseleave', elementMouseleave);\n });\n };\n };\n}\nexports.ElementPointMove = ElementPointMove;\n//# sourceMappingURL=elementPointMove.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMA = exports.Log = exports.Venn = exports.KDE = exports.Slice = exports.Join = exports.WordCloud = exports.Arc = exports.Sankey = exports.Tree = exports.Cluster = exports.Map = exports.Custom = exports.Inline = exports.SortBy = exports.Rename = exports.Pick = exports.Sort = exports.Filter = exports.Fold = exports.Fetch = void 0;\nvar fetch_1 = require(\"./fetch\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return fetch_1.Fetch; } });\nvar fold_1 = require(\"./fold\");\nObject.defineProperty(exports, \"Fold\", { enumerable: true, get: function () { return fold_1.Fold; } });\nvar filter_1 = require(\"./filter\");\nObject.defineProperty(exports, \"Filter\", { enumerable: true, get: function () { return filter_1.Filter; } });\nvar sort_1 = require(\"./sort\");\nObject.defineProperty(exports, \"Sort\", { enumerable: true, get: function () { return sort_1.Sort; } });\nvar pick_1 = require(\"./pick\");\nObject.defineProperty(exports, \"Pick\", { enumerable: true, get: function () { return pick_1.Pick; } });\nvar rename_1 = require(\"./rename\");\nObject.defineProperty(exports, \"Rename\", { enumerable: true, get: function () { return rename_1.Rename; } });\nvar sortBy_1 = require(\"./sortBy\");\nObject.defineProperty(exports, \"SortBy\", { enumerable: true, get: function () { return sortBy_1.SortBy; } });\nvar inline_1 = require(\"./inline\");\nObject.defineProperty(exports, \"Inline\", { enumerable: true, get: function () { return inline_1.Inline; } });\nvar custom_1 = require(\"./custom\");\nObject.defineProperty(exports, \"Custom\", { enumerable: true, get: function () { return custom_1.Custom; } });\nvar map_1 = require(\"./map\");\nObject.defineProperty(exports, \"Map\", { enumerable: true, get: function () { return map_1.Map; } });\nvar cluster_1 = require(\"./cluster\");\nObject.defineProperty(exports, \"Cluster\", { enumerable: true, get: function () { return cluster_1.Cluster; } });\nvar tree_1 = require(\"./tree\");\nObject.defineProperty(exports, \"Tree\", { enumerable: true, get: function () { return tree_1.Tree; } });\nvar sankey_1 = require(\"./sankey\");\nObject.defineProperty(exports, \"Sankey\", { enumerable: true, get: function () { return sankey_1.Sankey; } });\nvar arc_1 = require(\"./arc\");\nObject.defineProperty(exports, \"Arc\", { enumerable: true, get: function () { return arc_1.Arc; } });\nvar wordCloud_1 = require(\"./wordCloud\");\nObject.defineProperty(exports, \"WordCloud\", { enumerable: true, get: function () { return wordCloud_1.WordCloud; } });\nvar join_1 = require(\"./join\");\nObject.defineProperty(exports, \"Join\", { enumerable: true, get: function () { return join_1.Join; } });\nvar slice_1 = require(\"./slice\");\nObject.defineProperty(exports, \"Slice\", { enumerable: true, get: function () { return slice_1.Slice; } });\nvar kde_1 = require(\"./kde\");\nObject.defineProperty(exports, \"KDE\", { enumerable: true, get: function () { return kde_1.KDE; } });\nvar venn_1 = require(\"./venn\");\nObject.defineProperty(exports, \"Venn\", { enumerable: true, get: function () { return venn_1.Venn; } });\nvar log_1 = require(\"./log\");\nObject.defineProperty(exports, \"Log\", { enumerable: true, get: function () { return log_1.Log; } });\nvar ema_1 = require(\"./ema\");\nObject.defineProperty(exports, \"EMA\", { enumerable: true, get: function () { return ema_1.EMA; } });\n//# sourceMappingURL=index.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fetch = void 0;\nconst d3_dsv_1 = require(\"@antv/vendor/d3-dsv\");\nconst helper_1 = require(\"../utils/helper\");\nconst Fetch = (options) => {\n const { value, format = value.split('.').pop(), delimiter = ',', autoType = true, } = options;\n return () => __awaiter(void 0, void 0, void 0, function* () {\n const response = yield fetch(value);\n if (format === 'csv') {\n // @see: https://github.com/d3/d3-dsv#dsv_parse\n const str = yield response.text();\n return (0, d3_dsv_1.dsvFormat)(delimiter).parse(str, autoType ? d3_dsv_1.autoType : helper_1.identity);\n }\n else if (format === 'json') {\n return yield response.json();\n }\n throw new Error(`Unknown format: ${format}.`);\n });\n};\nexports.Fetch = Fetch;\nexports.Fetch.props = {};\n//# sourceMappingURL=fetch.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fold = exports.isEmpty = void 0;\nfunction isEmpty(obj) {\n return !obj || Object.keys(obj).length === 0;\n}\nexports.isEmpty = isEmpty;\n/**\n * Collapses (or “folds”) one or more data fields into two\n * properties: `key` (contains the original data field name)\n * and `value` (contains the original data value.)\n */\nconst Fold = (options) => {\n const { fields, key = 'key', value = 'value' } = options;\n return (data) => {\n if (isEmpty(fields))\n return data;\n return data.flatMap((d) => fields.map((f) => (Object.assign(Object.assign({}, d), { [key]: f, [value]: d[f] }))));\n };\n};\nexports.Fold = Fold;\nexports.Fold.props = {};\n//# sourceMappingURL=fold.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Filter = exports.defined = void 0;\nfunction defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\nexports.defined = defined;\n/**\n * Filter data by specified fields and filter callback for each fields.\n * It saves datum with every fields defined by default.\n */\nconst Filter = (options) => {\n const { callback = defined } = options;\n return (data) => data.filter(callback);\n};\nexports.Filter = Filter;\nexports.Filter.props = {};\n//# sourceMappingURL=filter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sort = exports.defined = void 0;\nfunction defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\nexports.defined = defined;\n/**\n * Sort data similar with Array.prototypo.sort.\n */\nconst Sort = (options) => {\n const { callback } = options;\n return (data) => (Array.isArray(data) ? [...data].sort(callback) : data);\n};\nexports.Sort = Sort;\nexports.Sort.props = {};\n//# sourceMappingURL=sort.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pick = void 0;\nfunction pick(v, fields = []) {\n return fields.reduce((datum, field) => {\n // Pick the data deeply.\n if (field in v) {\n datum[field] = v[field];\n }\n return datum;\n }, {});\n}\n/**\n * Immutable data pick by specified fields.\n */\nconst Pick = (options) => {\n const { fields } = options;\n return (data) => data.map((d) => pick(d, fields));\n};\nexports.Pick = Pick;\nexports.Pick.props = {};\n//# sourceMappingURL=pick.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Rename = exports.isEmpty = void 0;\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\nexports.isEmpty = isEmpty;\n/**\n * Immutable data rename by specified fields.\n */\nconst Rename = (options) => {\n return (data) => {\n if (!options || isEmpty(options))\n return data;\n const rename = (v) => Object.entries(v).reduce((datum, [key, value]) => ((datum[options[key] || key] = value), datum), {});\n return data.map(rename);\n };\n};\nexports.Rename = Rename;\nexports.Rename.props = {};\n//# sourceMappingURL=rename.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SortBy = void 0;\nconst fields_1 = require(\"./utils/fields\");\n/**\n * Immutable data sort by specified fields.\n */\nconst SortBy = (options) => {\n const { fields: F = [] } = options;\n const normalizedF = (0, fields_1.normalizeFields)(F, true);\n return (data) => {\n const comparator = (a, b) => normalizedF.reduce((ret, [field, order = true]) => {\n if (ret !== 0) {\n return ret;\n }\n if (order) {\n return a[field] < b[field] ? -1 : +(a[field] !== b[field]);\n }\n else {\n return a[field] > b[field] ? -1 : +(a[field] !== b[field]);\n }\n }, 0);\n return [...data].sort(comparator);\n };\n};\nexports.SortBy = SortBy;\nexports.SortBy.props = {};\n//# sourceMappingURL=sortBy.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeFields = void 0;\n/**\n *\n * @description Converts a random format array into a regular two-dimensional array\n * @example ['a', 'b', ['c', value]] => [['a', defaultValue], ['b', defaultValue], ['c', value]]\n */\nfunction normalizeFields(fields, defaultValue) {\n return fields.map((d) => {\n if (Array.isArray(d)) {\n const [field, value = defaultValue] = d;\n return [field, value];\n }\n return [d, defaultValue];\n });\n}\nexports.normalizeFields = normalizeFields;\n//# sourceMappingURL=fields.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Inline = void 0;\nconst Inline = (options) => {\n const { value } = options;\n return () => value;\n};\nexports.Inline = Inline;\nexports.Inline.props = {};\n//# sourceMappingURL=inline.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Custom = void 0;\nconst helper_1 = require(\"../utils/helper\");\n/**\n * Connector transfom by function.\n */\nconst Custom = (options) => {\n const { callback = helper_1.identity } = options;\n return (data) => callback(data);\n};\nexports.Custom = Custom;\nexports.Custom.props = {};\n//# sourceMappingURL=custom.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Map = void 0;\nconst helper_1 = require(\"../utils/helper\");\n/**\n * Map transform by function.\n */\nconst Map = (options) => {\n const { callback = helper_1.identity } = options;\n return (data) => (Array.isArray(data) ? data.map(callback) : data);\n};\nexports.Map = Map;\nexports.Map.props = {};\n//# sourceMappingURL=map.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WordCloud = exports.normalizeFontSize = exports.processImageMask = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst flow_1 = require(\"./utils/flow\");\nconst d3_cloud_1 = require(\"./utils/d3-cloud\");\nconst DEFAULT_OPTIONS = {\n fontSize: [20, 60],\n font: 'Impact',\n padding: 2,\n rotate: function () {\n return (~~(Math.random() * 6) - 3) * 30;\n },\n};\n/**\n * Process the image mask of wordCloud.\n * @param img\n * @returns\n */\nfunction processImageMask(img) {\n return new Promise((res, rej) => {\n if (img instanceof HTMLImageElement) {\n res(img);\n return;\n }\n if (typeof img === 'string') {\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.src = img;\n image.onload = () => res(image);\n image.onerror = () => {\n console.error(`'image ${img} load failed !!!'`);\n rej();\n };\n return;\n }\n rej();\n });\n}\nexports.processImageMask = processImageMask;\n/**\n * normalize fontSize range to d3-cloud fontSize function.\n * @param fontSize\n * @param range\n * @returns\n */\nfunction normalizeFontSize(fontSize, range) {\n if (typeof fontSize === 'function')\n return fontSize;\n if (Array.isArray(fontSize)) {\n const [fMin, fMax] = fontSize;\n if (!range)\n return () => (fMax + fMin) / 2;\n const [min, max] = range;\n if (max === min)\n return () => (fMax + fMin) / 2;\n return ({ value }) => ((fMax - fMin) / (max - min)) * (value - min) + fMin;\n }\n return () => fontSize;\n}\nexports.normalizeFontSize = normalizeFontSize;\nconst WordCloud = (options, context) => {\n return (data) => __awaiter(void 0, void 0, void 0, function* () {\n const cloudOptions = Object.assign({}, DEFAULT_OPTIONS, options, {\n canvas: context.createCanvas,\n });\n const layout = (0, d3_cloud_1.tagCloud)();\n yield (0, flow_1.flow)(layout, cloudOptions)\n .set('fontSize', (v) => {\n const arr = data.map((d) => d.value);\n return normalizeFontSize(v, [(0, d3_array_1.min)(arr), (0, d3_array_1.max)(arr)]);\n })\n .set('font')\n .set('fontStyle')\n .set('fontWeight')\n .set('padding')\n .set('rotate')\n .set('size')\n .set('spiral')\n .set('timeInterval')\n .set('random')\n .set('text')\n .set('on')\n .set('canvas')\n .setAsync('imageMask', processImageMask, layout.createMask);\n layout.words([...data]);\n const result = layout.start();\n const [cw, ch] = cloudOptions.size;\n const defaultBounds = [\n { x: 0, y: 0 },\n { x: cw, y: ch },\n ];\n const { _bounds: bounds = defaultBounds, _tags, hasImage } = result;\n const tags = _tags.map((_a) => {\n var { x, y, font } = _a, rest = __rest(_a, [\"x\", \"y\", \"font\"]);\n return (Object.assign(Object.assign({}, rest), { x: x + cw / 2, y: y + ch / 2, fontFamily: font }));\n });\n // Append two data to replace the corner of top-left and bottom-right, avoid calculate the actual bounds will occur some error.\n const [{ x: tlx, y: tly }, { x: brx, y: bry }] = bounds;\n const invisibleText = { text: '', value: 0, opacity: 0, fontSize: 0 };\n tags.push(Object.assign(Object.assign({}, invisibleText), { x: hasImage ? 0 : tlx, y: hasImage ? 0 : tly }), Object.assign(Object.assign({}, invisibleText), { x: hasImage ? cw : brx, y: hasImage ? ch : bry }));\n return tags;\n });\n};\nexports.WordCloud = WordCloud;\nexports.WordCloud.props = {};\n//# sourceMappingURL=wordCloud.js.map","\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flow = void 0;\n/**\n * @todo Combine with the `Container` util\n */\nfunction flow(target, source) {\n return {\n set(key, normalize, callback) {\n if (source[key] === undefined)\n return this;\n const value = normalize ? normalize.call(null, source[key]) : source[key];\n if (callback)\n callback.call(null, value);\n else if (typeof target[key] === 'function')\n target[key](value);\n else\n target[key] = value;\n return this;\n },\n setAsync(key, normalize, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (source[key] === undefined)\n return this;\n const value = normalize\n ? yield normalize.call(null, source[key])\n : source[key];\n if (callback)\n callback.call(null, value);\n else if (typeof target[key] === 'function')\n target[key](value);\n else\n target[key] = value;\n return this;\n });\n },\n };\n}\nexports.flow = flow;\n//# sourceMappingURL=flow.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tagCloud = void 0;\nconst cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11;\nfunction cloudText(d) {\n return d.text;\n}\nfunction cloudFont() {\n return 'serif';\n}\nfunction cloudFontNormal() {\n return 'normal';\n}\nfunction cloudFontSize(d) {\n return d.value;\n}\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\nfunction cloudPadding() {\n return 1;\n}\nfunction cloudDispatch() {\n return;\n}\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite)\n return;\n const c = contextAndRatio.context, ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n let x = 0, y = 0, maxh = 0;\n const n = data.length;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font =\n d.style +\n ' ' +\n d.weight +\n ' ' +\n ~~((d.size + 1) / ratio) +\n 'px ' +\n d.font;\n let w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;\n if (d.rotate) {\n const sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr;\n w =\n ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n else {\n w = ((w + 0x1f) >> 5) << 5;\n }\n if (h > maxh)\n maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch)\n break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate)\n c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText)\n continue;\n const w = d.width, w32 = w >> 5;\n let h = d.y1 - d.y0;\n // Zero the buffer\n for (let i = 0; i < h * w32; i++)\n sprite[i] = 0;\n x = d.xoff;\n if (x == null)\n return;\n y = d.yoff;\n let seen = 0, seenRow = -1;\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n const k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2]\n ? 1 << (31 - (i % 32))\n : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen)\n seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n const sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5), last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) &\n board[x + i])\n return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n const b0 = bounds[0], b1 = bounds[1];\n if (d.x + d.x0 < b0.x)\n b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y)\n b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x)\n b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y)\n b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return (a.x + a.x1 > b[0].x &&\n a.x + a.x0 < b[1].x &&\n a.y + a.y1 > b[0].y &&\n a.y + a.y0 < b[1].y);\n}\nfunction archimedeanSpiral(size) {\n const e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n const dy = 4, dx = (dy * size[0]) / size[1];\n let x = 0, y = 0;\n return function (t) {\n const sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n// TODO reuse arrays?\nfunction zeroArray(n) {\n const a = [];\n let i = -1;\n while (++i < n)\n a[i] = 0;\n return a;\n}\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\nfunction functor(d) {\n return typeof d === 'function'\n ? d\n : function () {\n return d;\n };\n}\nconst spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral,\n};\nfunction tagCloud() {\n let size = [256, 256], text = cloudText, font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, random = Math.random, event = cloudDispatch, words = [], timer = null, timeInterval = Infinity, canvas = cloudCanvas;\n const fontStyle = cloudFontNormal;\n const cloud = {};\n cloud.start = function () {\n const [width, height] = size;\n const contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words\n .map(function (d, i, data) {\n d.text = text.call(this, d, i, data);\n d.font = font.call(this, d, i, data);\n d.style = fontStyle.call(this, d, i, data);\n d.weight = fontWeight.call(this, d, i, data);\n d.rotate = rotate.call(this, d, i, data);\n d.size = ~~fontSize.call(this, d, i, data);\n d.padding = padding.call(this, d, i, data);\n return d;\n })\n .sort(function (a, b) {\n return b.size - a.size;\n });\n let i = -1, bounds = !cloud.board\n ? undefined\n : [\n {\n x: 0,\n y: 0,\n },\n {\n x: width,\n y: height,\n },\n ];\n if (timer)\n clearInterval(timer);\n timer = setInterval(step, 0);\n step();\n function step() {\n const start = Date.now();\n while (Date.now() - start < timeInterval && ++i < n) {\n const d = data[i];\n d.x = (width * (random() + 0.5)) >> 1;\n d.y = (height * (random() + 0.5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n event.call(null, 'word', { cloud, word: d });\n tags.push(d);\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n }\n else {\n bounds = [\n { x: d.x + d.x0, y: d.y + d.y0 },\n { x: d.x + d.x1, y: d.y + d.y1 },\n ];\n }\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n cloud._tags = tags;\n cloud._bounds = bounds;\n if (i >= n) {\n cloud.stop();\n event.call(null, 'end', { cloud, words: tags, bounds });\n }\n }\n return cloud;\n };\n cloud.stop = function () {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n return cloud;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n const ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n const context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n return { context, ratio };\n }\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n const startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1;\n let dxdy, t = -dt, dx, dy;\n while ((dxdy = s((t += dt)))) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta)\n break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 ||\n tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] ||\n tag.y + tag.y1 > size[1])\n continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n const sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n let last, x = (tag.y + tag.y0) * sw + (lx >> 5);\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |=\n (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n delete tag.sprite;\n return true;\n }\n }\n }\n return false;\n }\n cloud.createMask = (img) => {\n const can = document.createElement('canvas');\n const [width, height] = size;\n // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错\n if (!width || !height) {\n return;\n }\n const w32 = width >> 5;\n const board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n const cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n const imageData = cxt.getImageData(0, 0, width, height).data;\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const k = w32 * j + (i >> 5);\n const tmp = (j * width + i) << 2;\n const flag = imageData[tmp] >= 250 &&\n imageData[tmp + 1] >= 250 &&\n imageData[tmp + 2] >= 250;\n const m = flag ? 1 << (31 - (i % 32)) : 0;\n board[k] |= m;\n }\n }\n cloud.board = board;\n cloud.hasImage = true;\n };\n cloud.timeInterval = function (_) {\n timeInterval = _ == null ? Infinity : _;\n };\n cloud.words = function (_) {\n words = _;\n };\n cloud.size = function (_ = []) {\n size = [+_[0], +_[1]];\n };\n cloud.text = function (_) {\n text = functor(_);\n };\n cloud.font = function (_) {\n font = functor(_);\n };\n cloud.fontWeight = function (_) {\n fontWeight = functor(_);\n };\n cloud.rotate = function (_) {\n rotate = functor(_);\n };\n cloud.canvas = function (_) {\n canvas = functor(_);\n };\n cloud.spiral = function (_) {\n spiral = spirals[_] || _;\n };\n cloud.fontSize = function (_) {\n fontSize = functor(_);\n };\n cloud.padding = function (_) {\n padding = functor(_);\n };\n cloud.random = function (_) {\n random = functor(_);\n };\n cloud.on = function (_) {\n event = functor(_);\n };\n return cloud;\n}\nexports.tagCloud = tagCloud;\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Join = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nfunction field(key) {\n return typeof key === 'string' ? (d) => d[key] : key;\n}\n/**\n * Join data with another dataset by SQL style.\n */\nconst Join = (options) => {\n // const { fromKey, from, key, unknown = NaN, ...rest } = options;\n const { join, on, select = [], as = select, unknown = NaN } = options;\n const [key, fromKey] = on;\n const fk = field(fromKey);\n const k = field(key);\n const keyData = (0, d3_array_1.rollup)(join, ([d]) => d, // Get the first matched.\n (d) => fk(d));\n return (data) => data.map((d) => {\n const source = keyData.get(k(d));\n return Object.assign(Object.assign({}, d), select.reduce((prev, key, idx) => ((prev[as[idx]] = source ? source[key] : unknown), prev), {}));\n });\n};\nexports.Join = Join;\nexports.Join.props = {};\n//# sourceMappingURL=join.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Slice = void 0;\n/**\n * Slice data between `start` ~ `end`.\n * Same with https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nconst Slice = (options) => {\n const { start, end } = options;\n return (data) => data.slice(start, end);\n};\nexports.Slice = Slice;\nexports.Slice.props = {};\n//# sourceMappingURL=slice.js.map","\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KDE = exports.defined = void 0;\nconst pdfast_1 = __importDefault(require(\"pdfast\"));\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nfunction defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\nexports.defined = defined;\n/**\n * Kernel Density Estimation base on [pdfast](https://www.npmjs.com/package/pdfast),\n * generating probability density function (pdf) using triangular kernel,\n * optimized to run in O(N + K).\n */\nconst KDE = (options) => {\n const { field, groupBy, as = ['y', 'size'], min, max, size = 10, width, } = options;\n const [yField, sizeField] = as;\n return (data) => {\n const gs = Array.from((0, d3_array_1.group)(data, (d) => groupBy.map((gb) => d[gb]).join('-')).values());\n return gs.map((g) => {\n const pdfResult = pdfast_1.default.create(g.map((i) => i[field]), {\n min,\n max,\n size,\n width,\n });\n const _y = pdfResult.map((result) => result.x);\n const _size = pdfResult.map((result) => result.y);\n return Object.assign(Object.assign({}, g[0]), { [yField]: _y, [sizeField]: _size });\n });\n };\n};\nexports.KDE = KDE;\nexports.KDE.props = {};\n//# sourceMappingURL=kde.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Venn = void 0;\nconst venn_1 = require(\"./utils/venn\");\n/**\n * Layout venn data, get the path string for each set.\n */\nconst Venn = (options) => {\n const { sets = 'sets', size = 'size', as = ['key', 'path'], padding = 0, } = options;\n const [key, path] = as;\n return (data) => {\n // Transform the data, venn layout use `sets` and `size` field.\n const vennData = data.map((d) => (Object.assign(Object.assign({}, d), { sets: d[sets], size: d[size], [key]: d.sets.join('&') })));\n // Sort data, avoid data occlusion.\n vennData.sort((a, b) => a.sets.length - b.sets.length);\n // Layout venn data.\n const solution = (0, venn_1.venn)(vennData);\n let circles;\n return vennData.map((datum) => {\n const setsValue = datum[sets];\n const pathFunc = ({ width, height }) => {\n circles = circles\n ? circles\n : (0, venn_1.scaleSolution)(solution, width, height, padding);\n const setCircles = setsValue.map((set) => circles[set]);\n let p = (0, venn_1.intersectionAreaPath)(setCircles);\n // Close the path for event picker.\n if (!/[zZ]$/.test(p))\n p += ' Z';\n return p;\n };\n return Object.assign(Object.assign({}, datum), { [path]: pathFunc });\n });\n };\n};\nexports.Venn = Venn;\nexports.Venn.props = {};\n//# sourceMappingURL=venn.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.intersectionAreaPath = exports.venn = exports.scaleSolution = void 0;\n/**\n * Code from https://github.com/benfred/venn.js/blob/master/src/.\n */\nvar layout_1 = require(\"./layout\");\nObject.defineProperty(exports, \"scaleSolution\", { enumerable: true, get: function () { return layout_1.scaleSolution; } });\nObject.defineProperty(exports, \"venn\", { enumerable: true, get: function () { return layout_1.venn; } });\nvar diagram_1 = require(\"./diagram\");\nObject.defineProperty(exports, \"intersectionAreaPath\", { enumerable: true, get: function () { return diagram_1.intersectionAreaPath; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.scaleSolution = exports.normalizeSolution = exports.disjointCluster = exports.lossFunction = exports.greedyLayout = exports.constrainedMDSLayout = exports.bestInitialLayout = exports.getDistanceMatrices = exports.distanceFromIntersectArea = exports.venn = void 0;\nconst fmin_1 = require(\"./fmin\");\nconst circleintersection_1 = require(\"./circleintersection\");\n/** given a list of set objects, and their corresponding overlaps.\nupdates the (x, y, radius) attribute on each set such that their positions\nroughly correspond to the desired overlaps */\nfunction venn(areas, parameters) {\n parameters = parameters || {};\n parameters.maxIterations = parameters.maxIterations || 500;\n const initialLayout = parameters.initialLayout || bestInitialLayout;\n const loss = parameters.lossFunction || lossFunction;\n // add in missing pairwise areas as having 0 size\n areas = addMissingAreas(areas);\n // initial layout is done greedily\n const circles = initialLayout(areas, parameters);\n // transform x/y coordinates to a vector to optimize\n const initial = [], setids = [];\n let setid;\n for (setid in circles) {\n // eslint-disable-next-line\n if (circles.hasOwnProperty(setid)) {\n initial.push(circles[setid].x);\n initial.push(circles[setid].y);\n setids.push(setid);\n }\n }\n // optimize initial layout from our loss function\n const solution = (0, fmin_1.nelderMead)(function (values) {\n const current = {};\n for (let i = 0; i < setids.length; ++i) {\n const setid = setids[i];\n current[setid] = {\n x: values[2 * i],\n y: values[2 * i + 1],\n radius: circles[setid].radius,\n };\n }\n return loss(current, areas);\n }, initial, parameters);\n // transform solution vector back to x/y points\n const positions = solution.x;\n for (let i = 0; i < setids.length; ++i) {\n setid = setids[i];\n circles[setid].x = positions[2 * i];\n circles[setid].y = positions[2 * i + 1];\n }\n return circles;\n}\nexports.venn = venn;\nconst SMALL = 1e-10;\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nfunction distanceFromIntersectArea(r1, r2, overlap) {\n // handle complete overlapped circles\n if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) {\n return Math.abs(r1 - r2);\n }\n return (0, fmin_1.bisect)(function (distance) {\n return (0, circleintersection_1.circleOverlap)(r1, r2, distance) - overlap;\n }, 0, r1 + r2);\n}\nexports.distanceFromIntersectArea = distanceFromIntersectArea;\n/** Missing pair-wise intersection area data can cause problems:\n treating as an unknown means that sets will be laid out overlapping,\n which isn't what people expect. To reflect that we want disjoint sets\n here, set the overlap to 0 for all missing pairwise set intersections */\nfunction addMissingAreas(areas) {\n areas = areas.slice();\n // two circle intersections that aren't defined\n const ids = [], pairs = {};\n let i, j, a, b;\n for (i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n ids.push(area.sets[0]);\n }\n else if (area.sets.length == 2) {\n a = area.sets[0];\n b = area.sets[1];\n // @ts-ignore\n pairs[[a, b]] = true;\n // @ts-ignore\n pairs[[b, a]] = true;\n }\n }\n ids.sort((a, b) => {\n return a > b ? 1 : -1;\n });\n for (i = 0; i < ids.length; ++i) {\n a = ids[i];\n for (j = i + 1; j < ids.length; ++j) {\n b = ids[j];\n // @ts-ignore\n if (!([a, b] in pairs)) {\n areas.push({ sets: [a, b], size: 0 });\n }\n }\n }\n return areas;\n}\n/// Returns two matrices, one of the euclidean distances between the sets\n/// and the other indicating if there are subset or disjoint set relationships\nfunction getDistanceMatrices(areas, sets, setids) {\n // initialize an empty distance matrix between all the points\n const distances = (0, fmin_1.zerosM)(sets.length, sets.length), constraints = (0, fmin_1.zerosM)(sets.length, sets.length);\n // compute required distances between all the sets such that\n // the areas match\n areas\n .filter(function (x) {\n return x.sets.length == 2;\n })\n .map(function (current) {\n const left = setids[current.sets[0]], right = setids[current.sets[1]], r1 = Math.sqrt(sets[left].size / Math.PI), r2 = Math.sqrt(sets[right].size / Math.PI), distance = distanceFromIntersectArea(r1, r2, current.size);\n distances[left][right] = distances[right][left] = distance;\n // also update constraints to indicate if its a subset or disjoint\n // relationship\n let c = 0;\n if (current.size + 1e-10 >= Math.min(sets[left].size, sets[right].size)) {\n c = 1;\n }\n else if (current.size <= 1e-10) {\n c = -1;\n }\n constraints[left][right] = constraints[right][left] = c;\n });\n return { distances: distances, constraints: constraints };\n}\nexports.getDistanceMatrices = getDistanceMatrices;\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x, fxprime, distances, constraints) {\n let loss = 0, i;\n for (i = 0; i < fxprime.length; ++i) {\n fxprime[i] = 0;\n }\n for (i = 0; i < distances.length; ++i) {\n const xi = x[2 * i], yi = x[2 * i + 1];\n for (let j = i + 1; j < distances.length; ++j) {\n const xj = x[2 * j], yj = x[2 * j + 1], dij = distances[i][j], constraint = constraints[i][j];\n const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance = Math.sqrt(squaredDistance), delta = squaredDistance - dij * dij;\n if ((constraint > 0 && distance <= dij) ||\n (constraint < 0 && distance >= dij)) {\n continue;\n }\n loss += 2 * delta * delta;\n fxprime[2 * i] += 4 * delta * (xi - xj);\n fxprime[2 * i + 1] += 4 * delta * (yi - yj);\n fxprime[2 * j] += 4 * delta * (xj - xi);\n fxprime[2 * j + 1] += 4 * delta * (yj - yi);\n }\n }\n return loss;\n}\n/// takes the best working variant of either constrained MDS or greedy\nfunction bestInitialLayout(areas, params) {\n let initial = greedyLayout(areas, params);\n const loss = params.lossFunction || lossFunction;\n // greedylayout is sufficient for all 2/3 circle cases. try out\n // constrained MDS for higher order problems, take its output\n // if it outperforms. (greedy is aesthetically better on 2/3 circles\n // since it axis aligns)\n if (areas.length >= 8) {\n const constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas);\n if (constrainedLoss + 1e-8 < greedyLoss) {\n initial = constrained;\n }\n }\n return initial;\n}\nexports.bestInitialLayout = bestInitialLayout;\n/// use the constrained MDS variant to generate an initial layout\nfunction constrainedMDSLayout(areas, params) {\n params = params || {};\n const restarts = params.restarts || 10;\n // bidirectionally map sets to a rowid (so we can create a matrix)\n const sets = [], setids = {};\n let i;\n for (i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n setids[area.sets[0]] = sets.length;\n sets.push(area);\n }\n }\n const matrices = getDistanceMatrices(areas, sets, setids);\n let distances = matrices.distances;\n const constraints = matrices.constraints;\n // keep distances bounded, things get messed up otherwise.\n // TODO: proper preconditioner?\n const norm = (0, fmin_1.norm2)(distances.map(fmin_1.norm2)) / distances.length;\n distances = distances.map(function (row) {\n return row.map(function (value) {\n return value / norm;\n });\n });\n const obj = function (x, fxprime) {\n return constrainedMDSGradient(x, fxprime, distances, constraints);\n };\n let best, current;\n for (i = 0; i < restarts; ++i) {\n const initial = (0, fmin_1.zeros)(distances.length * 2).map(Math.random);\n current = (0, fmin_1.conjugateGradient)(obj, initial, params);\n if (!best || current.fx < best.fx) {\n best = current;\n }\n }\n const positions = best.x;\n // translate rows back to (x,y,radius) coordinates\n const circles = {};\n for (i = 0; i < sets.length; ++i) {\n const set = sets[i];\n circles[set.sets[0]] = {\n x: positions[2 * i] * norm,\n y: positions[2 * i + 1] * norm,\n radius: Math.sqrt(set.size / Math.PI),\n };\n }\n if (params.history) {\n for (i = 0; i < params.history.length; ++i) {\n (0, fmin_1.scale)(params.history[i].x, norm);\n }\n }\n return circles;\n}\nexports.constrainedMDSLayout = constrainedMDSLayout;\n/** Lays out a Venn diagram greedily, going from most overlapped sets to\nleast overlapped, attempting to position each new set such that the\noverlapping areas to already positioned sets are basically right */\nfunction greedyLayout(areas, params) {\n const loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n // define a circle for each set\n const circles = {}, setOverlaps = {};\n let set;\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n set = area.sets[0];\n circles[set] = {\n x: 1e10,\n y: 1e10,\n // rowid: circles.length, // fix to ->\n rowid: Object.keys(circles).length,\n size: area.size,\n radius: Math.sqrt(area.size / Math.PI),\n };\n setOverlaps[set] = [];\n }\n }\n areas = areas.filter(function (a) {\n return a.sets.length == 2;\n });\n // map each set to a list of all the other sets that overlap it\n for (let i = 0; i < areas.length; ++i) {\n const current = areas[i];\n // eslint-disable-next-line\n let weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n const left = current.sets[0], right = current.sets[1];\n // completely overlapped circles shouldn't be positioned early here\n if (current.size + SMALL >=\n Math.min(circles[left].size, circles[right].size)) {\n weight = 0;\n }\n setOverlaps[left].push({ set: right, size: current.size, weight: weight });\n setOverlaps[right].push({ set: left, size: current.size, weight: weight });\n }\n // get list of most overlapped sets\n const mostOverlapped = [];\n for (set in setOverlaps) {\n // eslint-disable-next-line\n if (setOverlaps.hasOwnProperty(set)) {\n let size = 0;\n for (let i = 0; i < setOverlaps[set].length; ++i) {\n size += setOverlaps[set][i].size * setOverlaps[set][i].weight;\n }\n mostOverlapped.push({ set: set, size: size });\n }\n }\n // sort by size desc\n function sortOrder(a, b) {\n return b.size - a.size;\n }\n mostOverlapped.sort(sortOrder);\n // keep track of what sets have been laid out\n const positioned = {};\n function isPositioned(element) {\n return element.set in positioned;\n }\n // adds a point to the output\n function positionSet(point, index) {\n circles[index].x = point.x;\n circles[index].y = point.y;\n positioned[index] = true;\n }\n // add most overlapped set at (0,0)\n positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n // get distances between all points. TODO, necessary?\n // answer: probably not\n // var distances = venn.getDistanceMatrices(circles, areas).distances;\n for (let i = 1; i < mostOverlapped.length; ++i) {\n const setIndex = mostOverlapped[i].set, overlap = setOverlaps[setIndex].filter(isPositioned);\n set = circles[setIndex];\n overlap.sort(sortOrder);\n if (overlap.length === 0) {\n // this shouldn't happen anymore with addMissingAreas\n throw 'ERROR: missing pairwise overlap information';\n }\n const points = [];\n for (let j = 0; j < overlap.length; ++j) {\n // get appropriate distance from most overlapped already added set\n const p1 = circles[overlap[j].set], d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n // sample positions at 90 degrees for maximum aesthetics\n points.push({ x: p1.x + d1, y: p1.y });\n points.push({ x: p1.x - d1, y: p1.y });\n points.push({ y: p1.y + d1, x: p1.x });\n points.push({ y: p1.y - d1, x: p1.x });\n // if we have at least 2 overlaps, then figure out where the\n // set should be positioned analytically and try those too\n for (let k = j + 1; k < overlap.length; ++k) {\n const p2 = circles[overlap[k].set], d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n const extraPoints = (0, circleintersection_1.circleCircleIntersection)({ x: p1.x, y: p1.y, radius: d1 }, { x: p2.x, y: p2.y, radius: d2 });\n for (let l = 0; l < extraPoints.length; ++l) {\n points.push(extraPoints[l]);\n }\n }\n }\n // we have some candidate positions for the set, examine loss\n // at each position to figure out where to put it at\n let bestLoss = 1e50, bestPoint = points[0];\n for (let j = 0; j < points.length; ++j) {\n circles[setIndex].x = points[j].x;\n circles[setIndex].y = points[j].y;\n const localLoss = loss(circles, areas);\n if (localLoss < bestLoss) {\n bestLoss = localLoss;\n bestPoint = points[j];\n }\n }\n positionSet(bestPoint, setIndex);\n }\n return circles;\n}\nexports.greedyLayout = greedyLayout;\n/** Given a bunch of sets, and the desired overlaps between these sets - computes\nthe distance from the actual overlaps to the desired overlaps. Note that\nthis method ignores overlaps of more than 2 circles */\nfunction lossFunction(sets, overlaps) {\n let output = 0;\n function getCircles(indices) {\n return indices.map(function (i) {\n return sets[i];\n });\n }\n for (let i = 0; i < overlaps.length; ++i) {\n const area = overlaps[i];\n let overlap;\n if (area.sets.length == 1) {\n continue;\n }\n else if (area.sets.length == 2) {\n const left = sets[area.sets[0]], right = sets[area.sets[1]];\n overlap = (0, circleintersection_1.circleOverlap)(left.radius, right.radius, (0, circleintersection_1.distance)(left, right));\n }\n else {\n overlap = (0, circleintersection_1.intersectionArea)(getCircles(area.sets));\n }\n // eslint-disable-next-line\n const weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n output += weight * (overlap - area.size) * (overlap - area.size);\n }\n return output;\n}\nexports.lossFunction = lossFunction;\n// orientates a bunch of circles to point in orientation\nfunction orientateCircles(circles, orientation, orientationOrder) {\n if (orientationOrder === null) {\n circles.sort(function (a, b) {\n return b.radius - a.radius;\n });\n }\n else {\n circles.sort(orientationOrder);\n }\n let i;\n // shift circles so largest circle is at (0, 0)\n if (circles.length > 0) {\n const largestX = circles[0].x, largestY = circles[0].y;\n for (i = 0; i < circles.length; ++i) {\n circles[i].x -= largestX;\n circles[i].y -= largestY;\n }\n }\n if (circles.length == 2) {\n // if the second circle is a subset of the first, arrange so that\n // it is off to one side. hack for https://github.com/benfred/venn.js/issues/120\n const dist = (0, circleintersection_1.distance)(circles[0], circles[1]);\n if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n circles[1].x =\n circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n circles[1].y = circles[0].y;\n }\n }\n // rotate circles so that second largest is at an angle of 'orientation'\n // from largest\n if (circles.length > 1) {\n const rotation = Math.atan2(circles[1].x, circles[1].y) - orientation;\n let x, y;\n const c = Math.cos(rotation), s = Math.sin(rotation);\n for (i = 0; i < circles.length; ++i) {\n x = circles[i].x;\n y = circles[i].y;\n circles[i].x = c * x - s * y;\n circles[i].y = s * x + c * y;\n }\n }\n // mirror solution if third solution is above plane specified by\n // first two circles\n if (circles.length > 2) {\n let angle = Math.atan2(circles[2].x, circles[2].y) - orientation;\n while (angle < 0) {\n angle += 2 * Math.PI;\n }\n while (angle > 2 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n if (angle > Math.PI) {\n const slope = circles[1].y / (1e-10 + circles[1].x);\n for (i = 0; i < circles.length; ++i) {\n const d = (circles[i].x + slope * circles[i].y) / (1 + slope * slope);\n circles[i].x = 2 * d - circles[i].x;\n circles[i].y = 2 * d * slope - circles[i].y;\n }\n }\n }\n}\nfunction disjointCluster(circles) {\n // union-find clustering to get disjoint sets\n circles.map(function (circle) {\n circle.parent = circle;\n });\n // path compression step in union find\n function find(circle) {\n if (circle.parent !== circle) {\n circle.parent = find(circle.parent);\n }\n return circle.parent;\n }\n function union(x, y) {\n const xRoot = find(x), yRoot = find(y);\n xRoot.parent = yRoot;\n }\n // get the union of all overlapping sets\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const maxDistance = circles[i].radius + circles[j].radius;\n if ((0, circleintersection_1.distance)(circles[i], circles[j]) + 1e-10 < maxDistance) {\n union(circles[j], circles[i]);\n }\n }\n }\n // find all the disjoint clusters and group them together\n const disjointClusters = {};\n let setid;\n for (let i = 0; i < circles.length; ++i) {\n setid = find(circles[i]).parent.setid;\n if (!(setid in disjointClusters)) {\n disjointClusters[setid] = [];\n }\n disjointClusters[setid].push(circles[i]);\n }\n // cleanup bookkeeping\n circles.map(function (circle) {\n delete circle.parent;\n });\n // return in more usable form\n const ret = [];\n for (setid in disjointClusters) {\n // eslint-disable-next-line\n if (disjointClusters.hasOwnProperty(setid)) {\n ret.push(disjointClusters[setid]);\n }\n }\n return ret;\n}\nexports.disjointCluster = disjointCluster;\nfunction getBoundingBox(circles) {\n const minMax = function (d) {\n const hi = Math.max.apply(null, circles.map(function (c) {\n return c[d] + c.radius;\n })), lo = Math.min.apply(null, circles.map(function (c) {\n return c[d] - c.radius;\n }));\n return { max: hi, min: lo };\n };\n return { xRange: minMax('x'), yRange: minMax('y') };\n}\nfunction normalizeSolution(solution, orientation, orientationOrder) {\n if (orientation === null) {\n orientation = Math.PI / 2;\n }\n // work with a list instead of a dictionary, and take a copy so we\n // don't mutate input\n let circles = [], i, setid;\n for (setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n const previous = solution[setid];\n circles.push({\n x: previous.x,\n y: previous.y,\n radius: previous.radius,\n setid: setid,\n });\n }\n }\n // get all the disjoint clusters\n const clusters = disjointCluster(circles);\n // orientate all disjoint sets, get sizes\n for (i = 0; i < clusters.length; ++i) {\n orientateCircles(clusters[i], orientation, orientationOrder);\n const bounds = getBoundingBox(clusters[i]);\n clusters[i].size =\n (bounds.xRange.max - bounds.xRange.min) *\n (bounds.yRange.max - bounds.yRange.min);\n clusters[i].bounds = bounds;\n }\n clusters.sort(function (a, b) {\n return b.size - a.size;\n });\n // orientate the largest at 0,0, and get the bounds\n circles = clusters[0];\n // @ts-ignore fixme 从逻辑上看似乎是不对的,后续看看\n let returnBounds = circles.bounds;\n const spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n function addCluster(cluster, right, bottom) {\n if (!cluster)\n return;\n const bounds = cluster.bounds;\n let xOffset, yOffset, centreing;\n if (right) {\n xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n }\n else {\n xOffset = returnBounds.xRange.max - bounds.xRange.max;\n centreing =\n (bounds.xRange.max - bounds.xRange.min) / 2 -\n (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n if (centreing < 0)\n xOffset += centreing;\n }\n if (bottom) {\n yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n }\n else {\n yOffset = returnBounds.yRange.max - bounds.yRange.max;\n centreing =\n (bounds.yRange.max - bounds.yRange.min) / 2 -\n (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n if (centreing < 0)\n yOffset += centreing;\n }\n for (let j = 0; j < cluster.length; ++j) {\n cluster[j].x += xOffset;\n cluster[j].y += yOffset;\n circles.push(cluster[j]);\n }\n }\n let index = 1;\n while (index < clusters.length) {\n addCluster(clusters[index], true, false);\n addCluster(clusters[index + 1], false, true);\n addCluster(clusters[index + 2], true, true);\n index += 3;\n // have one cluster (in top left). lay out next three relative\n // to it in a grid\n returnBounds = getBoundingBox(circles);\n }\n // convert back to solution form\n const ret = {};\n for (i = 0; i < circles.length; ++i) {\n ret[circles[i].setid] = circles[i];\n }\n return ret;\n}\nexports.normalizeSolution = normalizeSolution;\n/** Scales a solution from venn.venn or venn.greedyLayout such that it fits in\na rectangle of width/height - with padding around the borders. also\ncenters the diagram in the available space at the same time */\nfunction scaleSolution(solution, width, height, padding) {\n const circles = [], setids = [];\n for (const setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n setids.push(setid);\n circles.push(solution[setid]);\n }\n }\n width -= 2 * padding;\n height -= 2 * padding;\n const bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange;\n if (xRange.max == xRange.min || yRange.max == yRange.min) {\n console.log('not scaling solution: zero size detected');\n return solution;\n }\n const xScaling = width / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), \n // while we're at it, center the diagram too\n xOffset = (width - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n const scaled = {};\n for (let i = 0; i < circles.length; ++i) {\n const circle = circles[i];\n scaled[setids[i]] = {\n radius: scaling * circle.radius,\n x: padding + xOffset + (circle.x - xRange.min) * scaling,\n y: padding + yOffset + (circle.y - yRange.min) * scaling,\n };\n }\n return scaled;\n}\nexports.scaleSolution = scaleSolution;\n//# sourceMappingURL=layout.js.map","\n/**\n * Copyright 2016, Ben Frederickson\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the author nor the names of contributors may be used to\n * endorse or promote products derived from this software without specific prior\n * written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.scale = exports.weightedSum = exports.norm2 = exports.zerosM = exports.zeros = exports.gradientDescentLineSearch = exports.gradientDescent = exports.conjugateGradientSolve = exports.conjugateGradient = exports.nelderMead = exports.bisect = void 0;\nvar bisect_1 = require(\"./bisect\");\nObject.defineProperty(exports, \"bisect\", { enumerable: true, get: function () { return bisect_1.bisect; } });\nvar nelderMead_1 = require(\"./nelderMead\");\nObject.defineProperty(exports, \"nelderMead\", { enumerable: true, get: function () { return nelderMead_1.nelderMead; } });\nvar conjugateGradient_1 = require(\"./conjugateGradient\");\nObject.defineProperty(exports, \"conjugateGradient\", { enumerable: true, get: function () { return conjugateGradient_1.conjugateGradient; } });\nObject.defineProperty(exports, \"conjugateGradientSolve\", { enumerable: true, get: function () { return conjugateGradient_1.conjugateGradientSolve; } });\nvar gradientDescent_1 = require(\"./gradientDescent\");\nObject.defineProperty(exports, \"gradientDescent\", { enumerable: true, get: function () { return gradientDescent_1.gradientDescent; } });\nObject.defineProperty(exports, \"gradientDescentLineSearch\", { enumerable: true, get: function () { return gradientDescent_1.gradientDescentLineSearch; } });\nvar blas1_1 = require(\"./blas1\");\nObject.defineProperty(exports, \"zeros\", { enumerable: true, get: function () { return blas1_1.zeros; } });\nObject.defineProperty(exports, \"zerosM\", { enumerable: true, get: function () { return blas1_1.zerosM; } });\nObject.defineProperty(exports, \"norm2\", { enumerable: true, get: function () { return blas1_1.norm2; } });\nObject.defineProperty(exports, \"weightedSum\", { enumerable: true, get: function () { return blas1_1.weightedSum; } });\nObject.defineProperty(exports, \"scale\", { enumerable: true, get: function () { return blas1_1.scale; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bisect = void 0;\n/** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\nfunction bisect(f, a, b, parameters) {\n parameters = parameters || {};\n const maxIterations = parameters.maxIterations || 100;\n const tolerance = parameters.tolerance || 1e-10;\n const fA = f(a);\n const fB = f(b);\n let delta = b - a;\n if (fA * fB > 0) {\n throw 'Initial bisect points must have opposite signs';\n }\n if (fA === 0)\n return a;\n if (fB === 0)\n return b;\n for (let i = 0; i < maxIterations; ++i) {\n delta /= 2;\n const mid = a + delta;\n const fMid = f(mid);\n if (fMid * fA >= 0) {\n a = mid;\n }\n if (Math.abs(delta) < tolerance || fMid === 0) {\n return mid;\n }\n }\n return a + delta;\n}\nexports.bisect = bisect;\n//# sourceMappingURL=bisect.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nelderMead = void 0;\nconst blas1_1 = require(\"./blas1\");\n/** minimizes a function using the downhill simplex method */\nfunction nelderMead(f, x0, parameters) {\n parameters = parameters || {};\n const maxIterations = parameters.maxIterations || x0.length * 200;\n const nonZeroDelta = parameters.nonZeroDelta || 1.05;\n const zeroDelta = parameters.zeroDelta || 0.001;\n const minErrorDelta = parameters.minErrorDelta || 1e-6;\n const minTolerance = parameters.minErrorDelta || 1e-5;\n const rho = parameters.rho !== undefined ? parameters.rho : 1;\n const chi = parameters.chi !== undefined ? parameters.chi : 2;\n const psi = parameters.psi !== undefined ? parameters.psi : -0.5;\n const sigma = parameters.sigma !== undefined ? parameters.sigma : 0.5;\n let maxDiff;\n // initialize simplex.\n const N = x0.length;\n const simplex = new Array(N + 1);\n simplex[0] = x0;\n simplex[0].fx = f(x0);\n simplex[0].id = 0;\n for (let i = 0; i < N; ++i) {\n const point = x0.slice();\n point[i] = point[i] ? point[i] * nonZeroDelta : zeroDelta;\n simplex[i + 1] = point;\n simplex[i + 1].fx = f(point);\n simplex[i + 1].id = i + 1;\n }\n function updateSimplex(value) {\n for (let i = 0; i < value.length; i++) {\n simplex[N][i] = value[i];\n }\n simplex[N].fx = value.fx;\n }\n const sortOrder = (a, b) => a.fx - b.fx;\n const centroid = x0.slice();\n const reflected = x0.slice();\n const contracted = x0.slice();\n const expanded = x0.slice();\n for (let iteration = 0; iteration < maxIterations; ++iteration) {\n simplex.sort(sortOrder);\n if (parameters.history) {\n // copy the simplex (since later iterations will mutate) and\n // sort it to have a consistent order between iterations\n const sortedSimplex = simplex.map((x) => {\n const state = x.slice();\n state.fx = x.fx;\n state.id = x.id;\n return state;\n });\n sortedSimplex.sort((a, b) => a.id - b.id);\n parameters.history.push({\n x: simplex[0].slice(),\n fx: simplex[0].fx,\n simplex: sortedSimplex,\n });\n }\n maxDiff = 0;\n for (let i = 0; i < N; ++i) {\n maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i] - simplex[1][i]));\n }\n if (Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta &&\n maxDiff < minTolerance) {\n break;\n }\n // compute the centroid of all but the worst point in the simplex\n for (let i = 0; i < N; ++i) {\n centroid[i] = 0;\n for (let j = 0; j < N; ++j) {\n centroid[i] += simplex[j][i];\n }\n centroid[i] /= N;\n }\n // reflect the worst point past the centroid and compute loss at reflected\n // point\n const worst = simplex[N];\n (0, blas1_1.weightedSum)(reflected, 1 + rho, centroid, -rho, worst);\n reflected.fx = f(reflected);\n // if the reflected point is the best seen, then possibly expand\n if (reflected.fx < simplex[0].fx) {\n (0, blas1_1.weightedSum)(expanded, 1 + chi, centroid, -chi, worst);\n expanded.fx = f(expanded);\n if (expanded.fx < reflected.fx) {\n updateSimplex(expanded);\n }\n else {\n updateSimplex(reflected);\n }\n }\n // if the reflected point is worse than the second worst, we need to\n // contract\n else if (reflected.fx >= simplex[N - 1].fx) {\n let shouldReduce = false;\n if (reflected.fx > worst.fx) {\n // do an inside contraction\n (0, blas1_1.weightedSum)(contracted, 1 + psi, centroid, -psi, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < worst.fx) {\n updateSimplex(contracted);\n }\n else {\n shouldReduce = true;\n }\n }\n else {\n // do an outside contraction\n (0, blas1_1.weightedSum)(contracted, 1 - psi * rho, centroid, psi * rho, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < reflected.fx) {\n updateSimplex(contracted);\n }\n else {\n shouldReduce = true;\n }\n }\n if (shouldReduce) {\n // if we don't contract here, we're done\n if (sigma >= 1)\n break;\n // do a reduction\n for (let i = 1; i < simplex.length; ++i) {\n (0, blas1_1.weightedSum)(simplex[i], 1 - sigma, simplex[0], sigma, simplex[i]);\n simplex[i].fx = f(simplex[i]);\n }\n }\n }\n else {\n updateSimplex(reflected);\n }\n }\n simplex.sort(sortOrder);\n return { fx: simplex[0].fx, x: simplex[0] };\n}\nexports.nelderMead = nelderMead;\n//# sourceMappingURL=nelderMead.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gemv = exports.weightedSum = exports.scale = exports.norm2 = exports.dot = exports.zerosM = exports.zeros = void 0;\n// need some basic operations on vectors, rather than adding a dependency,\n// just define here\nfunction zeros(x) {\n const r = new Array(x);\n for (let i = 0; i < x; ++i) {\n r[i] = 0;\n }\n return r;\n}\nexports.zeros = zeros;\nfunction zerosM(x, y) {\n return zeros(x).map(() => zeros(y));\n}\nexports.zerosM = zerosM;\nfunction dot(a, b) {\n let ret = 0;\n for (let i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n}\nexports.dot = dot;\nfunction norm2(a) {\n return Math.sqrt(dot(a, a));\n}\nexports.norm2 = norm2;\nfunction scale(ret, value, c) {\n for (let i = 0; i < value.length; ++i) {\n ret[i] = value[i] * c;\n }\n}\nexports.scale = scale;\nfunction weightedSum(ret, w1, v1, w2, v2) {\n for (let j = 0; j < ret.length; ++j) {\n ret[j] = w1 * v1[j] + w2 * v2[j];\n }\n}\nexports.weightedSum = weightedSum;\nfunction gemv(output, A, x) {\n for (let i = 0; i < output.length; ++i) {\n output[i] = dot(A[i], x);\n }\n}\nexports.gemv = gemv;\n//# sourceMappingURL=blas1.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.conjugateGradientSolve = exports.conjugateGradient = void 0;\nconst blas1_1 = require(\"./blas1\");\nconst linesearch_1 = require(\"./linesearch\");\nfunction conjugateGradient(f, initial, params) {\n // allocate all memory up front here, keep out of the loop for perfomance\n // reasons\n let current = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n let next = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n const yk = initial.slice();\n let temp;\n let a = 1;\n params = params || {};\n const maxIterations = params.maxIterations || initial.length * 20;\n current.fx = f(current.x, current.fxprime);\n const pk = current.fxprime.slice();\n (0, blas1_1.scale)(pk, current.fxprime, -1);\n for (let i = 0; i < maxIterations; ++i) {\n a = (0, linesearch_1.wolfeLineSearch)(f, pk, current, next, a);\n // todo: history in wrong spot?\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a,\n });\n }\n if (!a) {\n // faiiled to find point that satifies wolfe conditions.\n // reset direction for next iteration\n (0, blas1_1.scale)(pk, current.fxprime, -1);\n }\n else {\n // update direction using Polak–Ribiere CG method\n (0, blas1_1.weightedSum)(yk, 1, next.fxprime, -1, current.fxprime);\n const delta_k = (0, blas1_1.dot)(current.fxprime, current.fxprime);\n const beta_k = Math.max(0, (0, blas1_1.dot)(yk, next.fxprime) / delta_k);\n (0, blas1_1.weightedSum)(pk, beta_k, pk, -1, next.fxprime);\n temp = current;\n current = next;\n next = temp;\n }\n if ((0, blas1_1.norm2)(current.fxprime) <= 1e-5) {\n break;\n }\n }\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a,\n });\n }\n return current;\n}\nexports.conjugateGradient = conjugateGradient;\n/// Solves a system of lienar equations Ax =b for x\n/// using the conjugate gradient method.\nfunction conjugateGradientSolve(A, b, x, history) {\n const r = x.slice();\n const Ap = x.slice();\n let rsold;\n let rsnew;\n let alpha;\n // r = b - A*x\n (0, blas1_1.gemv)(Ap, A, x);\n (0, blas1_1.weightedSum)(r, 1, b, -1, Ap);\n const p = r.slice();\n rsold = (0, blas1_1.dot)(r, r);\n for (let i = 0; i < b.length; ++i) {\n (0, blas1_1.gemv)(Ap, A, p);\n alpha = rsold / (0, blas1_1.dot)(p, Ap);\n if (history) {\n history.push({ x: x.slice(), p: p.slice(), alpha: alpha });\n }\n //x=x+alpha*p;\n (0, blas1_1.weightedSum)(x, 1, x, alpha, p);\n // r=r-alpha*Ap;\n (0, blas1_1.weightedSum)(r, 1, r, -alpha, Ap);\n rsnew = (0, blas1_1.dot)(r, r);\n if (Math.sqrt(rsnew) <= 1e-10)\n break;\n // p=r+(rsnew/rsold)*p;\n (0, blas1_1.weightedSum)(p, 1, r, rsnew / rsold, p);\n rsold = rsnew;\n }\n if (history) {\n history.push({ x: x.slice(), p: p.slice(), alpha: alpha });\n }\n return x;\n}\nexports.conjugateGradientSolve = conjugateGradientSolve;\n//# sourceMappingURL=conjugateGradient.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wolfeLineSearch = void 0;\nconst blas1_1 = require(\"./blas1\");\n/// searches along line 'pk' for a point that satifies the wolfe conditions\n/// See 'Numerical Optimization' by Nocedal and Wright p59-60\n/// f : objective function\n/// pk : search direction\n/// current: object containing current gradient/loss\n/// next: output: contains next gradient/loss\n/// returns a: step size taken\nfunction wolfeLineSearch(f, pk, current, next, a, c1, c2) {\n const phi0 = current.fx;\n const phiPrime0 = (0, blas1_1.dot)(current.fxprime, pk);\n let phi = phi0;\n let phi_old = phi0;\n let phiPrime = phiPrime0;\n let a0 = 0;\n a = a || 1;\n c1 = c1 || 1e-6;\n c2 = c2 || 0.1;\n function zoom(a_lo, a_high, phi_lo) {\n for (let iteration = 0; iteration < 16; ++iteration) {\n a = (a_lo + a_high) / 2;\n (0, blas1_1.weightedSum)(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = (0, blas1_1.dot)(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || phi >= phi_lo) {\n a_high = a;\n }\n else {\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n if (phiPrime * (a_high - a_lo) >= 0) {\n a_high = a_lo;\n }\n a_lo = a;\n phi_lo = phi;\n }\n }\n return 0;\n }\n for (let iteration = 0; iteration < 10; ++iteration) {\n (0, blas1_1.weightedSum)(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = (0, blas1_1.dot)(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || (iteration && phi >= phi_old)) {\n return zoom(a0, a, phi_old);\n }\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n if (phiPrime >= 0) {\n return zoom(a, a0, phi);\n }\n phi_old = phi;\n a0 = a;\n a *= 2;\n }\n return a;\n}\nexports.wolfeLineSearch = wolfeLineSearch;\n//# sourceMappingURL=linesearch.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gradientDescentLineSearch = exports.gradientDescent = void 0;\nconst blas1_1 = require(\"./blas1\");\nconst linesearch_1 = require(\"./linesearch\");\nfunction gradientDescent(f, initial, params) {\n params = params || {};\n const maxIterations = params.maxIterations || initial.length * 100;\n const learnRate = params.learnRate || 0.001;\n const current = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n for (let i = 0; i < maxIterations; ++i) {\n current.fx = f(current.x, current.fxprime);\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n });\n }\n (0, blas1_1.weightedSum)(current.x, 1, current.x, -learnRate, current.fxprime);\n if ((0, blas1_1.norm2)(current.fxprime) <= 1e-5) {\n break;\n }\n }\n return current;\n}\nexports.gradientDescent = gradientDescent;\nfunction gradientDescentLineSearch(f, initial, params) {\n params = params || {};\n let current = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n let next = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n const maxIterations = params.maxIterations || initial.length * 100;\n let learnRate = params.learnRate || 1;\n const pk = initial.slice();\n const c1 = params.c1 || 1e-3;\n const c2 = params.c2 || 0.1;\n let temp;\n let functionCalls = [];\n if (params.history) {\n // wrap the function call to track linesearch samples\n const inner = f;\n f = (x, fxprime) => {\n functionCalls.push(x.slice());\n return inner(x, fxprime);\n };\n }\n current.fx = f(current.x, current.fxprime);\n for (let i = 0; i < maxIterations; ++i) {\n (0, blas1_1.scale)(pk, current.fxprime, -1);\n learnRate = (0, linesearch_1.wolfeLineSearch)(f, pk, current, next, learnRate, c1, c2);\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n functionCalls: functionCalls,\n learnRate: learnRate,\n alpha: learnRate,\n });\n functionCalls = [];\n }\n temp = current;\n current = next;\n next = temp;\n if (learnRate === 0 || (0, blas1_1.norm2)(current.fxprime) < 1e-5)\n break;\n }\n return current;\n}\nexports.gradientDescentLineSearch = gradientDescentLineSearch;\n//# sourceMappingURL=gradientDescent.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getCenter = exports.circleCircleIntersection = exports.circleOverlap = exports.distance = exports.circleArea = exports.containedInCircles = exports.intersectionArea = void 0;\nconst SMALL = 1e-10;\n/**\n * Returns the intersection area of a bunch of circles (where each circle\n * is an object having an x,y and radius property)\n */\nfunction intersectionArea(circles, stats) {\n // Get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n // Filter out points that aren't included in all the circles\n const innerPoints = intersectionPoints.filter(function (p) {\n return containedInCircles(p, circles);\n });\n let arcArea = 0, polygonArea = 0, i;\n const arcs = [];\n // If we have intersection points that are within all the circles,\n // then figure out the area contained by them\n if (innerPoints.length > 1) {\n // Sort the points by angle from the center of the polygon, which lets\n // us just iterate over points to get the edges\n const center = getCenter(innerPoints);\n for (i = 0; i < innerPoints.length; ++i) {\n const p = innerPoints[i];\n p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n }\n innerPoints.sort(function (a, b) {\n return b.angle - a.angle;\n });\n // Iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n // Polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n // Updating the arc area is a little more involved\n const midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n let arc = null;\n for (let j = 0; j < p1.parentIndex.length; ++j) {\n if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n // Figure out the angle halfway between the two points\n // on the current circle\n const circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = distance(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a),\n });\n // Clamp the width to the largest is can actually be\n // (sometimes slightly overflows because of FP errors)\n if (width > circle.radius * 2) {\n width = circle.radius * 2;\n }\n // Pick the circle whose arc has the smallest width\n if (arc === null || arc.width > width) {\n arc = { circle: circle, width: width, p1: p1, p2: p2 };\n }\n }\n }\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\n }\n }\n }\n else {\n // No intersection points, is either disjoint - or is completely\n // overlapped. figure out which by examining the smallest circle\n let smallest = circles[0];\n for (i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n // Make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (i = 0; i < circles.length; ++i) {\n if (distance(circles[i], smallest) >\n Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n if (disjoint) {\n arcArea = polygonArea = 0;\n }\n else {\n arcArea = smallest.radius * smallest.radius * Math.PI;\n arcs.push({\n circle: smallest,\n p1: { x: smallest.x, y: smallest.y + smallest.radius },\n p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n width: smallest.radius * 2,\n });\n }\n }\n polygonArea /= 2;\n if (stats) {\n stats.area = arcArea + polygonArea;\n stats.arcArea = arcArea;\n stats.polygonArea = polygonArea;\n stats.arcs = arcs;\n stats.innerPoints = innerPoints;\n stats.intersectionPoints = intersectionPoints;\n }\n return arcArea + polygonArea;\n}\nexports.intersectionArea = intersectionArea;\n/**\n * Returns whether a point is contained by all of a list of circles\n */\nfunction containedInCircles(point, circles) {\n for (let i = 0; i < circles.length; ++i) {\n if (distance(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\nexports.containedInCircles = containedInCircles;\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles) {\n const ret = [];\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const intersect = circleCircleIntersection(circles[i], circles[j]);\n for (let k = 0; k < intersect.length; ++k) {\n const p = intersect[k];\n p.parentIndex = [i, j];\n ret.push(p);\n }\n }\n }\n return ret;\n}\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nfunction circleArea(r, width) {\n return (r * r * Math.acos(1 - width / r) -\n (r - width) * Math.sqrt(width * (2 * r - width)));\n}\nexports.circleArea = circleArea;\n/** Euclidean distance between two points */\nfunction distance(p1, p2) {\n return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));\n}\nexports.distance = distance;\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nfunction circleOverlap(r1, r2, d) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\n // Completely overlapped\n if (d <= Math.abs(r1 - r2)) {\n return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n }\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d), w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\nexports.circleOverlap = circleOverlap;\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nfunction circleCircleIntersection(p1, p2) {\n const d = distance(p1, p2), r1 = p1.radius, r2 = p2.radius;\n // If to far away, or self contained - can't be done\n if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n return [];\n }\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + (a * (p2.x - p1.x)) / d, y0 = p1.y + (a * (p2.y - p1.y)) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d);\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry },\n ];\n}\nexports.circleCircleIntersection = circleCircleIntersection;\n/** Returns the center of a bunch of points */\nfunction getCenter(points) {\n const center = { x: 0, y: 0 };\n for (let i = 0; i < points.length; ++i) {\n center.x += points[i].x;\n center.y += points[i].y;\n }\n center.x /= points.length;\n center.y /= points.length;\n return center;\n}\nexports.getCenter = getCenter;\n//# sourceMappingURL=circleintersection.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.intersectionAreaPath = void 0;\nconst circleintersection_1 = require(\"./circleintersection\");\n/**\n * 根据圆心(x, y) 半径 r 返回圆的绘制 path\n * @param x 圆心点 x\n * @param y 圆心点 y\n * @param r 圆的半径\n * @returns 圆的 path\n */\nfunction circlePath(x, y, r) {\n const ret = [];\n // ret.push('\\nM', x, y);\n // ret.push('\\nm', -r, 0);\n // ret.push('\\na', r, r, 0, 1, 0, r * 2, 0);\n // ret.push('\\na', r, r, 0, 1, 0, -r * 2, 0);\n const x0 = x - r;\n const y0 = y;\n ret.push('M', x0, y0);\n ret.push('A', r, r, 0, 1, 0, x0 + 2 * r, y0);\n ret.push('A', r, r, 0, 1, 0, x0, y0);\n return ret.join(' ');\n}\n/** returns a svg path of the intersection area of a bunch of circles */\nfunction intersectionAreaPath(circles) {\n const stats = {};\n (0, circleintersection_1.intersectionArea)(circles, stats);\n const arcs = stats.arcs;\n if (arcs.length === 0) {\n return 'M 0 0';\n }\n else if (arcs.length == 1) {\n const circle = arcs[0].circle;\n return circlePath(circle.x, circle.y, circle.radius);\n }\n else {\n // draw path around arcs\n const ret = ['\\nM', arcs[0].p2.x, arcs[0].p2.y];\n for (let i = 0; i < arcs.length; ++i) {\n const arc = arcs[i], r = arc.circle.radius, wide = arc.width > r;\n ret.push('\\nA', r, r, 0, wide ? 1 : 0, 1, arc.p1.x, arc.p1.y);\n }\n return ret.join(' ');\n }\n}\nexports.intersectionAreaPath = intersectionAreaPath;\n//# sourceMappingURL=diagram.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Log = void 0;\n/**\n * Console.log the data section for dev debugger.\n */\nconst Log = () => {\n return (data) => {\n console.log('G2 data section:', data);\n return data;\n };\n};\nexports.Log = Log;\nexports.Log.props = {};\n//# sourceMappingURL=log.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMA = exports.ema = void 0;\nfunction ema(values, alpha) {\n if (alpha < 0 || alpha > 1) {\n throw new Error('alpha must be between 0 and 1.');\n }\n if (values.length === 0) {\n return [];\n }\n let last = values[0];\n const smoothed = [];\n for (const point of values) {\n if (point === null || point === undefined) {\n // 如果没有数据的话,使用最近的值\n smoothed.push(point);\n console.warn('EMA:The value is null or undefined', values);\n continue;\n }\n if (last === null || last === undefined) {\n last = point;\n }\n const smoothedVal = last * alpha + (1 - alpha) * point;\n smoothed.push(smoothedVal);\n last = smoothedVal;\n }\n return smoothed;\n}\nexports.ema = ema;\n/**\n * https://en.wikipedia.org/wiki/Exponential_smoothing\n * @param options\n * @returns\n */\nconst EMA = (options) => {\n const { field = 'y', alpha = 0.6, as = field } = options;\n return (data) => {\n const values = data.map((d) => {\n return d[field];\n });\n const out = ema(values, alpha);\n return data.map((d, i) => {\n return Object.assign(Object.assign({}, d), { [as]: out[i] });\n });\n };\n};\nexports.EMA = EMA;\nexports.EMA.props = {};\n//# sourceMappingURL=ema.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExceedAdjust = exports.OverflowHide = exports.ContrastReverse = exports.OverlapDodgeY = exports.OverlapHide = void 0;\nvar overlapHide_1 = require(\"./overlapHide\");\nObject.defineProperty(exports, \"OverlapHide\", { enumerable: true, get: function () { return overlapHide_1.OverlapHide; } });\nvar overlapDodgeY_1 = require(\"./overlapDodgeY\");\nObject.defineProperty(exports, \"OverlapDodgeY\", { enumerable: true, get: function () { return overlapDodgeY_1.OverlapDodgeY; } });\nvar contrastReverse_1 = require(\"./contrastReverse\");\nObject.defineProperty(exports, \"ContrastReverse\", { enumerable: true, get: function () { return contrastReverse_1.ContrastReverse; } });\nvar overflowHide_1 = require(\"./overflowHide\");\nObject.defineProperty(exports, \"OverflowHide\", { enumerable: true, get: function () { return overflowHide_1.OverflowHide; } });\nvar exceedAdjust_1 = require(\"./exceedAdjust\");\nObject.defineProperty(exports, \"ExceedAdjust\", { enumerable: true, get: function () { return exceedAdjust_1.ExceedAdjust; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OverlapHide = void 0;\nconst bounds_1 = require(\"../utils/bounds\");\nconst style_1 = require(\"../utils/style\");\n/**\n * Hide the label when overlap.\n */\nconst OverlapHide = (options) => {\n const { priority } = options;\n return (labels) => {\n const displayLabels = [];\n // When overlap, will hide the next label.\n if (priority)\n labels.sort(priority);\n labels.forEach((l) => {\n (0, style_1.show)(l);\n const b1 = l.getLocalBounds();\n const overlaping = displayLabels.some((dl) => (0, bounds_1.isOverlap)((0, bounds_1.parseAABB)(b1), (0, bounds_1.parseAABB)(dl.getLocalBounds())));\n if (overlaping)\n (0, style_1.hide)(l);\n else\n displayLabels.push(l);\n });\n return labels;\n };\n};\nexports.OverlapHide = OverlapHide;\n//# sourceMappingURL=overlapHide.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isOverlap = exports.isOverflow = exports.isInBounds = exports.parseAABB = void 0;\n// There is a certain error in the calculation of text bounds.\nconst EPSILON = 1e-2;\nfunction parseAABB(min2) {\n const { min, max } = min2;\n return [\n [min[0], min[1]],\n [max[0], max[1]],\n ];\n}\nexports.parseAABB = parseAABB;\n/**\n * Whether the `point` in `bounds`.\n * @param point\n * @param bounds\n * @param threshold\n */\nfunction isInBounds(point, bounds, threshold = EPSILON) {\n const [x, y] = point;\n const [min, max] = bounds;\n return (x >= min[0] - threshold &&\n x <= max[0] + threshold &&\n y >= min[1] - threshold &&\n y <= max[1] + threshold);\n}\nexports.isInBounds = isInBounds;\n/**\n * Whether `b1` is overflow from `b2`.\n * @param b1\n * @param b2\n * @param threshold The threshold to determine whether the bounds is overflowed, default is 0.\n */\nfunction isOverflow(b1, b2, threshold = EPSILON) {\n const [min, max] = b1;\n return !(isInBounds(min, b2, threshold) && isInBounds(max, b2, threshold));\n}\nexports.isOverflow = isOverflow;\n/**\n * Whether `b1` is overlap with `b2`.\n * @param b1\n * @param b2\n * @returns\n */\nfunction isOverlap(b1, b2) {\n const [min1, max1] = b1;\n const [min2, max2] = b2;\n return (min1[0] < max2[0] &&\n max1[0] > min2[0] &&\n min1[1] < max2[1] &&\n max1[1] > min2[1]);\n}\nexports.isOverlap = isOverlap;\n//# sourceMappingURL=bounds.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OverlapDodgeY = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nfunction isSegmentIntersect([a, b], [c, d]) {\n return d > a && b > c;\n}\nfunction useMap() {\n const map = new Map();\n const get = (key) => map.get(key);\n const set = (key, value) => map.set(key, value);\n return [get, set];\n}\nfunction getBoundsWithoutConnector(shape) {\n const node = shape.cloneNode(true);\n const connectorShape = node.getElementById('connector');\n connectorShape && node.removeChild(connectorShape);\n const { min, max } = node.getRenderBounds();\n node.destroy();\n return { min, max };\n}\n/**\n * An iterative dodge method avoids label overlap. (n * log(n))\n */\nconst OverlapDodgeY = (options) => {\n const { maxIterations = 10, maxError = 0.1, padding = 1 } = options;\n return (labels) => {\n const n = labels.length;\n if (n <= 1)\n return labels;\n // Index y, x0, x, height, by label.\n const [y0, setY0] = useMap();\n const [y, setY] = useMap();\n const [h, setH] = useMap();\n const [xx, setXX] = useMap();\n for (const label of labels) {\n const { min, max } = getBoundsWithoutConnector(label);\n const [x0, y0] = min;\n const [x1, y1] = max;\n setY0(label, y0);\n setY(label, y0);\n setH(label, y1 - y0);\n setXX(label, [x0, x1]);\n }\n // Offsets position Y.\n for (let iter = 0; iter < maxIterations; iter++) {\n labels.sort((a, b) => (0, d3_array_1.ascending)(y(a), y(b)));\n let error = 0;\n for (let i = 0; i < n - 1; i++) {\n const l0 = labels[i];\n let j = i + 1;\n let l1;\n // Find the next label overlapping with the current label in x direction.\n while ((l1 = labels[j]) && !isSegmentIntersect(xx(l0), xx(l1)))\n j += 1;\n if (l1) {\n const y0 = y(l0);\n const h0 = h(l0);\n const y1 = y(l1);\n const delta = y1 - (y0 + h0);\n if (delta < padding) {\n const newDelta = (padding - delta) / 2;\n error = Math.max(error, newDelta);\n setY(l0, y0 - newDelta);\n setY(l1, y1 + newDelta);\n }\n }\n }\n if (error < maxError)\n break;\n }\n for (const label of labels) {\n label.style.y += y(label) - y0(label);\n }\n return labels;\n };\n};\nexports.OverlapDodgeY = OverlapDodgeY;\n//# sourceMappingURL=overlapDodgeY.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContrastReverse = void 0;\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst color_1 = require(\"../utils/color\");\nfunction getsRGB(s) {\n let c = s / 255;\n c = c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n return c;\n}\nfunction getL(r, g, b) {\n return 0.2126 * getsRGB(r) + 0.7152 * getsRGB(g) + 0.0722 * getsRGB(b);\n}\n/**\n * Calculate the contrast. see https://webaim.org/resources/contrastchecker/\n * @param foreground\n * @param background\n */\nfunction contrast(foreground, background) {\n if (!foreground || !background || foreground === background)\n return 1;\n const { r, g, b } = foreground;\n const { r: rb, g: gb, b: bb } = background;\n const L1 = getL(r, g, b);\n const L2 = getL(rb, gb, bb);\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);\n}\n/**\n * Reverse color for max contrast.\n */\nfunction mostContrast(color, palette) {\n const i = (0, d3_array_1.maxIndex)(palette, (c) => contrast(color, (0, color_1.parseToRGB)(c)));\n return palette[i];\n}\n/**\n * Reverse the label color when the contrast is lower then `threshold`.\n * The default value of `threshold` is 4.5.\n * More about contract, see https://webaim.org/resources/contrastchecker/\n */\nconst ContrastReverse = (options) => {\n const { threshold = 4.5, palette = ['#000', '#fff'] } = options;\n return (labels) => {\n labels.forEach((l) => {\n const background = l.attr('dependentElement').parsedStyle.fill;\n const foreground = l.parsedStyle.fill;\n const c = contrast(foreground, background);\n if (c < threshold)\n l.attr('fill', mostContrast(background, palette));\n });\n return labels;\n };\n};\nexports.ContrastReverse = ContrastReverse;\n//# sourceMappingURL=contrastReverse.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseToRGB = void 0;\nconst g_1 = require(\"@antv/g\");\nfunction parseToRGB(c) {\n if (typeof c === 'object')\n return c;\n return (0, g_1.parseColor)(c);\n}\nexports.parseToRGB = parseToRGB;\n//# sourceMappingURL=color.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OverflowHide = void 0;\nconst bounds_1 = require(\"../utils/bounds\");\nconst style_1 = require(\"../utils/style\");\n/**\n * Hide the label when the label is overflowed from the element.\n */\nconst OverflowHide = () => {\n return (labels) => {\n labels.forEach((l) => {\n (0, style_1.show)(l);\n const bounds = l.attr('bounds');\n const b = l.getLocalBounds();\n const overflow = (0, bounds_1.isOverflow)((0, bounds_1.parseAABB)(b), bounds);\n if (overflow)\n (0, style_1.hide)(l);\n });\n return labels;\n };\n};\nexports.OverflowHide = OverflowHide;\n//# sourceMappingURL=overflowHide.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExceedAdjust = void 0;\nconst style_1 = require(\"../utils/style\");\nconst adjustPosition = (target, edge) => {\n const [[minEdgeX, minEdgeY], [maxEdgeX, maxEdgeY]] = edge;\n const [[minX, minY], [maxX, maxY]] = target;\n let changeX = 0, changeY = 0;\n // x-axis\n if (minX < minEdgeX) {\n changeX = minEdgeX - minX;\n }\n else if (maxX > maxEdgeX) {\n changeX = maxEdgeX - maxX;\n }\n // y-axis\n if (minY < minEdgeY) {\n changeY = minEdgeY - minY;\n }\n else if (maxY > maxEdgeY) {\n changeY = maxEdgeY - maxY;\n }\n return [changeX, changeY];\n};\n/**\n * adjust the label when exceed the plot\n */\nconst ExceedAdjust = () => {\n return (labels, { canvas, layout }) => {\n labels.forEach((l) => {\n (0, style_1.show)(l);\n const { max, min } = l.getRenderBounds();\n const [xMax, yMax] = max, [xMin, yMin] = min;\n const changeValue = adjustPosition([\n [xMin, yMin],\n [xMax, yMax],\n ], \n // Prevent label overlap in multiple charts by calculating layouts separately to avoid collisions.\n [\n [layout.x, layout.y],\n [layout.x + layout.width, layout.y + layout.height],\n ]);\n // For label with connectorPoints\n if (l.style.connector && l.style.connectorPoints) {\n l.style.connectorPoints[0][0] -= changeValue[0];\n l.style.connectorPoints[0][1] -= changeValue[1];\n }\n l.style.x += changeValue[0];\n l.style.y += changeValue[1];\n });\n return labels;\n };\n};\nexports.ExceedAdjust = ExceedAdjust;\n//# sourceMappingURL=exceedAdjust.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.geolib = void 0;\nconst geoView_1 = require(\"../composition/geoView\");\nconst geoPath_1 = require(\"../composition/geoPath\");\nfunction geolib() {\n return {\n 'composition.geoView': geoView_1.GeoView,\n 'composition.geoPath': geoPath_1.GeoPath,\n };\n}\nexports.geolib = geolib;\n//# sourceMappingURL=geo.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.graphlib = void 0;\nconst mark_1 = require(\"../mark\");\nconst data_1 = require(\"../data\");\nfunction graphlib() {\n return {\n 'data.arc': data_1.Arc,\n 'data.cluster': data_1.Cluster,\n 'mark.forceGraph': mark_1.ForceGraph,\n 'mark.tree': mark_1.Tree,\n 'mark.pack': mark_1.Pack,\n 'mark.sankey': mark_1.Sankey,\n 'mark.chord': mark_1.Chord,\n 'mark.treemap': mark_1.Treemap,\n };\n}\nexports.graphlib = graphlib;\n//# sourceMappingURL=graph.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.plotlib = void 0;\nconst mark_1 = require(\"../mark\");\nconst data_1 = require(\"../data\");\nfunction plotlib() {\n return {\n 'data.venn': data_1.Venn,\n 'mark.boxplot': mark_1.Boxplot,\n 'mark.gauge': mark_1.Gauge,\n 'mark.wordCloud': mark_1.WordCloud,\n 'mark.liquid': mark_1.Liquid,\n };\n}\nexports.plotlib = plotlib;\n//# sourceMappingURL=plot.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stdlib = void 0;\nconst core_1 = require(\"./core\");\nconst geo_1 = require(\"./geo\");\nconst graph_1 = require(\"./graph\");\nconst plot_1 = require(\"./plot\");\nfunction stdlib() {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, (0, geo_1.geolib)()), (0, graph_1.graphlib)()), (0, plot_1.plotlib)()), (0, core_1.corelib)());\n}\nexports.stdlib = stdlib;\n//# sourceMappingURL=std.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.litelib = void 0;\nconst coordinate_1 = require(\"../coordinate\");\nconst encode_1 = require(\"../encode\");\nconst mark_1 = require(\"../mark\");\nconst palette_1 = require(\"../palette\");\nconst scale_1 = require(\"../scale\");\nconst theme_1 = require(\"../theme\");\nconst component_1 = require(\"../component\");\nconst animation_1 = require(\"../animation\");\nconst interaction_1 = require(\"../interaction\");\nconst composition_1 = require(\"../composition\");\nconst shape_1 = require(\"../shape\");\nconst data_1 = require(\"../data\");\n/**\n * In test stage, don't use it.\n */\nfunction litelib() {\n return {\n 'data.inline': data_1.Inline,\n 'coordinate.cartesian': coordinate_1.Cartesian,\n 'encode.constant': encode_1.Constant,\n 'encode.field': encode_1.Field,\n 'encode.transform': encode_1.Transform,\n 'encode.column': encode_1.Column,\n 'mark.interval': mark_1.Interval,\n 'shape.label.label': shape_1.LabelShape,\n 'palette.category10': palette_1.Category10,\n 'palette.category20': palette_1.Category20,\n 'scale.linear': scale_1.Linear,\n 'scale.ordinal': scale_1.Ordinal,\n 'scale.band': scale_1.Band,\n 'scale.identity': scale_1.Identity,\n 'scale.point': scale_1.Point,\n 'scale.time': scale_1.Time,\n 'scale.log': scale_1.Log,\n 'scale.pow': scale_1.Pow,\n 'scale.sqrt': scale_1.Sqrt,\n 'scale.threshold': scale_1.Threshold,\n 'scale.quantile': scale_1.Quantile,\n 'scale.quantize': scale_1.Quantize,\n 'scale.sequential': scale_1.Sequential,\n 'scale.constant': scale_1.Constant,\n 'theme.classic': theme_1.Classic,\n 'component.axisX': component_1.AxisX,\n 'component.axisY': component_1.AxisY,\n 'component.axisRadar': component_1.AxisRadar,\n 'component.axisLinear': component_1.AxisLinear,\n 'component.axisArc': component_1.AxisArc,\n 'component.legendCategory': component_1.LegendCategory,\n 'component.legendContinuous': component_1.LegendContinuous,\n 'component.legendContinuousBlock': component_1.LegendContinuousBlock,\n 'component.legendContinuousBlockSize': component_1.LegendContinuousBlockSize,\n 'component.legendContinuousSize': component_1.LegendContinuousSize,\n 'component.legends': component_1.Legends,\n 'component.title': component_1.TitleComponent,\n 'component.sliderX': component_1.SliderX,\n 'component.sliderY': component_1.SliderY,\n 'component.scrollbarX': component_1.ScrollbarX,\n 'component.scrollbarY': component_1.ScrollbarY,\n 'animation.scaleInX': animation_1.ScaleInX,\n 'animation.scaleOutX': animation_1.ScaleOutX,\n 'animation.scaleInY': animation_1.ScaleInY,\n 'animation.scaleOutY': animation_1.ScaleOutY,\n 'animation.waveIn': animation_1.WaveIn,\n 'animation.fadeIn': animation_1.FadeIn,\n 'animation.fadeOut': animation_1.FadeOut,\n 'animation.morphing': animation_1.Morphing,\n 'interaction.tooltip': interaction_1.Tooltip,\n 'interaction.legendFilter': interaction_1.LegendFilter,\n 'interaction.legendHighlight': interaction_1.LegendHighlight,\n 'interaction.sliderFilter': interaction_1.SliderFilter,\n 'interaction.scrollbarFilter': interaction_1.ScrollbarFilter,\n 'interaction.poptip': interaction_1.Poptip,\n 'interaction.event': interaction_1.Event,\n 'composition.mark': composition_1.Mark,\n 'composition.view': composition_1.View,\n };\n}\nexports.litelib = litelib;\n//# sourceMappingURL=lite.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extend = exports.Runtime = exports.register = exports.Chart = void 0;\nvar chart_1 = require(\"./chart\");\nObject.defineProperty(exports, \"Chart\", { enumerable: true, get: function () { return chart_1.Chart; } });\nvar library_1 = require(\"./library\");\nObject.defineProperty(exports, \"register\", { enumerable: true, get: function () { return library_1.register; } });\nvar runtime_1 = require(\"./runtime\");\nObject.defineProperty(exports, \"Runtime\", { enumerable: true, get: function () { return runtime_1.Runtime; } });\nvar extend_1 = require(\"./extend\");\nObject.defineProperty(exports, \"extend\", { enumerable: true, get: function () { return extend_1.extend; } });\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Chart = void 0;\nconst extend_1 = require(\"./extend\");\nconst library_1 = require(\"./library\");\nconst runtime_1 = require(\"./runtime\");\nexports.Chart = (0, extend_1.extend)(runtime_1.Runtime, library_1.library);\n//# sourceMappingURL=chart.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extend = void 0;\nfunction extend(Runtime, library) {\n class Chart extends Runtime {\n constructor(options) {\n super(Object.assign(Object.assign({}, options), { lib: library }));\n }\n }\n return Chart;\n}\nexports.extend = extend;\n//# sourceMappingURL=extend.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.register = exports.library = void 0;\nconst marker_1 = require(\"../utils/marker\");\nexports.library = {};\n// @todo Warn if override existing key.\nfunction register(key, component) {\n if (key.startsWith('symbol.'))\n (0, marker_1.registerSymbol)(key.split('.').pop(), component);\n else\n Object.assign(exports.library, { [key]: component });\n}\nexports.register = register;\n//# sourceMappingURL=library.js.map","\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Runtime = exports.G2_CHART_KEY = void 0;\nconst g_1 = require(\"@antv/g\");\nconst g_canvas_1 = require(\"@antv/g-canvas\");\nconst g_plugin_dragndrop_1 = require(\"@antv/g-plugin-dragndrop\");\nconst util_1 = require(\"@antv/util\");\nconst event_emitter_1 = __importDefault(require(\"@antv/event-emitter\"));\nconst d3_array_1 = require(\"@antv/vendor/d3-array\");\nconst runtime_1 = require(\"../runtime\");\nconst event_1 = require(\"../utils/event\");\nconst tooltip_1 = require(\"../interaction/tooltip\");\nconst utils_1 = require(\"../interaction/utils\");\nconst utils_2 = require(\"./utils\");\nconst composition_1 = require(\"./composition\");\nconst define_1 = require(\"./define\");\nconst mark_1 = require(\"./mark\");\nconst library_1 = require(\"./library\");\nexports.G2_CHART_KEY = 'G2_CHART_KEY';\nclass Runtime extends composition_1.CompositionNode {\n constructor(options) {\n const { container, canvas, renderer, plugins, lib, createCanvas } = options, rest = __rest(options, [\"container\", \"canvas\", \"renderer\", \"plugins\", \"lib\", \"createCanvas\"]);\n super(rest, 'view');\n // Identifies whether bindAutoFit.\n this._hasBindAutoFit = false;\n this._rendering = false;\n this._trailing = false;\n this._trailingResolve = null;\n this._trailingReject = null;\n this._previousDefinedType = null;\n this._onResize = (0, util_1.debounce)(() => {\n this.forceFit();\n }, 300);\n this._renderer = renderer || new g_canvas_1.Renderer();\n this._plugins = plugins || [];\n this._container = (0, utils_2.normalizeContainer)(container);\n this._emitter = new event_emitter_1.default();\n this._context = {\n library: Object.assign(Object.assign({}, lib), library_1.library),\n emitter: this._emitter,\n canvas,\n createCanvas,\n };\n this._create();\n }\n render() {\n if (this._rendering)\n return this._addToTrailing();\n if (!this._context.canvas)\n this._createCanvas();\n this._bindAutoFit();\n this._rendering = true;\n // @fixme The cancel render is not marked, which will cause additional rendered event.\n // @ref src/runtime/render.ts\n const finished = new Promise((resolve, reject) => (0, runtime_1.render)(this._computedOptions(), this._context, this._createResolve(resolve), this._createReject(reject)));\n const [finished1, resolve, reject] = (0, utils_2.createEmptyPromise)();\n finished\n .then(resolve)\n .catch(reject)\n .then(() => this._renderTrailing());\n return finished1;\n }\n /**\n * @overload\n * @param {G2ViewTree} [options]\n * @returns {Runtime|Spec}\n */\n options(options) {\n if (arguments.length === 0)\n return (0, utils_2.optionsOf)(this);\n const { type } = options;\n if (type)\n this._previousDefinedType = type;\n (0, utils_2.updateRoot)(this, options, this._previousDefinedType, this._marks, this._compositions);\n return this;\n }\n getContainer() {\n return this._container;\n }\n getContext() {\n return this._context;\n }\n on(event, callback, once) {\n this._emitter.on(event, callback, once);\n return this;\n }\n once(event, callback) {\n this._emitter.once(event, callback);\n return this;\n }\n emit(event, ...args) {\n this._emitter.emit(event, ...args);\n return this;\n }\n off(event, callback) {\n this._emitter.off(event, callback);\n return this;\n }\n clear() {\n const options = this.options();\n this.emit(event_1.ChartEvent.BEFORE_CLEAR);\n this._reset();\n (0, runtime_1.destroy)(options, this._context, false);\n this.emit(event_1.ChartEvent.AFTER_CLEAR);\n }\n destroy() {\n const options = this.options();\n this.emit(event_1.ChartEvent.BEFORE_DESTROY);\n this._unbindAutoFit();\n this._reset();\n (0, runtime_1.destroy)(options, this._context, true);\n if (this._container[utils_2.REMOVE_FLAG])\n (0, utils_2.removeContainer)(this._container);\n this.emit(event_1.ChartEvent.AFTER_DESTROY);\n }\n forceFit() {\n // Don't fit if size do not change.\n this.options['autoFit'] = true;\n const { width, height } = (0, utils_2.sizeOf)(this.options(), this._container);\n if (width === this._width && height === this._height) {\n return Promise.resolve(this);\n }\n // Don't call changeSize to prevent update width and height of options.\n this.emit(event_1.ChartEvent.BEFORE_CHANGE_SIZE);\n const finished = this.render();\n finished.then(() => {\n this.emit(event_1.ChartEvent.AFTER_CHANGE_SIZE);\n });\n return finished;\n }\n changeSize(width, height) {\n if (width === this._width && height === this._height) {\n return Promise.resolve(this);\n }\n this.emit(event_1.ChartEvent.BEFORE_CHANGE_SIZE);\n this.attr('width', width);\n this.attr('height', height);\n const finished = this.render();\n finished.then(() => {\n this.emit(event_1.ChartEvent.AFTER_CHANGE_SIZE);\n });\n return finished;\n }\n getDataByXY(point, options = {}) {\n const { shared = false, series, facet = false, startX = 0, startY = 0, } = options;\n const { canvas, views } = this._context;\n const { document } = canvas;\n const { x, y } = point;\n // Temporarily do not handle the multi - view situation.\n const { coordinate, scale, markState, data: dataMap, key } = views[0];\n const elements = document.getElementsByClassName(runtime_1.ELEMENT_CLASS_NAME);\n const groupKey = shared ? (element) => element.__data__.x : (d) => d;\n const keyGroup = (0, d3_array_1.group)(elements, groupKey);\n const container = document.getElementsByClassName(runtime_1.VIEW_CLASS_NAME)[0];\n const root = (0, utils_1.selectPlotArea)(container);\n const hasSeriesInteraction = (markState) => {\n return Array.from(markState.values()).some((d) => {\n var _a, _b;\n return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a['seriesTooltip']) ||\n ((_b = d.channels) === null || _b === void 0 ? void 0 : _b.some((c) => c.name === 'series' && c.values !== undefined));\n });\n };\n const isSeries = (0, tooltip_1.maybeValue)(series, hasSeriesInteraction(markState));\n const getElementData = (el) => (0, util_1.get)(el, '__data__.data', null);\n const getElementsData = (els) => els.map(getElementData);\n try {\n // For non-facet and series chart.\n if (isSeries &&\n hasSeriesInteraction(markState) &&\n !facet) {\n const { selectedData } = (0, tooltip_1.findSeriesElement)({\n root,\n event: { offsetX: x, offsetY: y },\n elements,\n coordinate,\n scale,\n startX,\n startY,\n });\n const viewData = dataMap.get(`${key}-0`);\n return selectedData.map(({ index }) => viewData[index]);\n }\n // For single chart.\n const element = (0, tooltip_1.findSingleElement)({\n root,\n event: { offsetX: x, offsetY: y },\n elements,\n coordinate,\n scale,\n shared,\n });\n const k = groupKey(element);\n const groupElements = keyGroup.get(k);\n return groupElements ? getElementsData(groupElements) : [];\n }\n catch (e) {\n const topMostElement = canvas.document.elementFromPointSync(x, y);\n return topMostElement ? getElementData(topMostElement) : [];\n }\n }\n _create() {\n const { library } = this._context;\n // @todo After refactor component as mark, remove this.\n const isMark = (key) => key.startsWith('mark.') ||\n key === 'component.axisX' ||\n key === 'component.axisY' ||\n key === 'component.legends';\n const marks = [\n 'mark.mark',\n ...Object.keys(library).filter(isMark),\n ];\n // Create mark generators.\n this._marks = {};\n for (const key of marks) {\n const name = key.split('.').pop();\n class Mark extends mark_1.MarkNode {\n constructor() {\n super({}, name);\n }\n }\n this._marks[name] = Mark;\n this[name] = function (composite) {\n const node = this.append(Mark);\n if (name === 'mark')\n node.type = composite;\n return node;\n };\n }\n // Create composition generators.\n const compositions = [\n 'composition.view',\n ...Object.keys(library).filter((key) => key.startsWith('composition.') && key !== 'composition.mark'),\n ];\n this._compositions = Object.fromEntries(compositions.map((key) => {\n const name = key.split('.').pop();\n let Composition = class Composition extends composition_1.CompositionNode {\n constructor() {\n super({}, name);\n }\n };\n Composition = __decorate([\n (0, define_1.defineProps)((0, define_1.nodeProps)(this._marks))\n ], Composition);\n return [name, Composition];\n }));\n for (const Ctor of Object.values(this._compositions)) {\n (0, define_1.defineProps)((0, define_1.nodeProps)(this._compositions))(Ctor);\n }\n for (const key of compositions) {\n const name = key.split('.').pop();\n this[name] = function () {\n const Composition = this._compositions[name];\n this.type = null;\n return this.append(Composition);\n };\n }\n }\n _reset() {\n const KEYS = ['theme', 'type', 'width', 'height', 'autoFit'];\n this.type = 'view';\n this.value = Object.fromEntries(Object.entries(this.value).filter(([key]) => key.startsWith('margin') ||\n key.startsWith('padding') ||\n key.startsWith('inset') ||\n KEYS.includes(key)));\n this.children = [];\n }\n _renderTrailing() {\n if (!this._trailing)\n return;\n this._trailing = false;\n this.render()\n .then(() => {\n const trailingResolve = this._trailingResolve.bind(this);\n this._trailingResolve = null;\n trailingResolve(this);\n })\n .catch((error) => {\n const trailingReject = this._trailingReject.bind(this);\n this._trailingReject = null;\n trailingReject(error);\n });\n }\n _createResolve(resolve) {\n return () => {\n this._rendering = false;\n resolve(this);\n };\n }\n _createReject(reject) {\n return (error) => {\n this._rendering = false;\n reject(error);\n };\n }\n // Update actual size and key.\n _computedOptions() {\n const options = this.options();\n const { key = exports.G2_CHART_KEY } = options;\n const { width, height, depth } = (0, utils_2.sizeOf)(options, this._container);\n this._width = width;\n this._height = height;\n this._key = key;\n return Object.assign(Object.assign({ key: this._key }, options), { width, height, depth });\n }\n // Create canvas if it does not exist.\n // DragAndDropPlugin is for interaction.\n // It is OK to register more than one time, G will handle this.\n _createCanvas() {\n const { width, height } = (0, utils_2.sizeOf)(this.options(), this._container);\n this._plugins.push(new g_plugin_dragndrop_1.Plugin());\n this._plugins.forEach((d) => this._renderer.registerPlugin(d));\n this._context.canvas = new g_1.Canvas({\n container: this._container,\n width,\n height,\n renderer: this._renderer,\n });\n }\n _addToTrailing() {\n var _a;\n // Resolve previous promise, and give up this task.\n (_a = this._trailingResolve) === null || _a === void 0 ? void 0 : _a.call(this, this);\n // Create new task.\n this._trailing = true;\n const promise = new Promise((resolve, reject) => {\n this._trailingResolve = resolve;\n this._trailingReject = reject;\n });\n return promise;\n }\n _bindAutoFit() {\n const options = this.options();\n const { autoFit } = options;\n if (this._hasBindAutoFit) {\n // If it was bind before, unbind it now.\n if (!autoFit)\n this._unbindAutoFit();\n return;\n }\n if (autoFit) {\n this._hasBindAutoFit = true;\n window.addEventListener('resize', this._onResize);\n }\n }\n _unbindAutoFit() {\n if (this._hasBindAutoFit) {\n this._hasBindAutoFit = false;\n window.removeEventListener('resize', this._onResize);\n }\n }\n}\nexports.Runtime = Runtime;\n//# sourceMappingURL=runtime.js.map","\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createEmptyPromise = exports.updateRoot = exports.optionsOf = exports.sizeOf = exports.valueOf = exports.normalizeRoot = exports.removeContainer = exports.normalizeContainer = exports.MIN_CHART_HEIGHT = exports.MIN_CHART_WIDTH = exports.CALLBACK_NODE = exports.REMOVE_FLAG = exports.VIEW_KEYS = void 0;\nconst util_1 = require(\"@antv/util\");\nconst size_1 = require(\"../utils/size\");\nconst helper_1 = require(\"../utils/helper\");\nconst node_1 = require(\"./node\");\n// Keys can specified by new Chart({...}).\n// Keys can bubble form mark-level options to view-level options.\nexports.VIEW_KEYS = [\n 'width',\n 'height',\n 'depth',\n 'padding',\n 'paddingLeft',\n 'paddingRight',\n 'paddingBottom',\n 'paddingTop',\n 'inset',\n 'insetLeft',\n 'insetRight',\n 'insetTop',\n 'insetBottom',\n 'margin',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'autoFit',\n 'theme',\n 'title',\n 'interaction',\n];\nexports.REMOVE_FLAG = '__remove__';\nexports.CALLBACK_NODE = '__callback__';\n/** Minimum chart width */\nexports.MIN_CHART_WIDTH = 1;\n/** Minimum chart height */\nexports.MIN_CHART_HEIGHT = 1;\nfunction normalizeContainer(container) {\n if (container === undefined) {\n const container = document.createElement('div');\n container[exports.REMOVE_FLAG] = true;\n return container;\n }\n if (typeof container === 'string') {\n const node = document.getElementById(container);\n return node;\n }\n return container;\n}\nexports.normalizeContainer = normalizeContainer;\nfunction removeContainer(container) {\n const parent = container.parentNode;\n if (parent) {\n parent.removeChild(container);\n }\n}\nexports.removeContainer = removeContainer;\nfunction normalizeRoot(node) {\n if (node.type !== null)\n return node;\n const root = node.children[node.children.length - 1];\n for (const key of exports.VIEW_KEYS)\n root.attr(key, node.attr(key));\n return root;\n}\nexports.normalizeRoot = normalizeRoot;\nfunction valueOf(node) {\n return Object.assign(Object.assign({}, node.value), { type: node.type });\n}\nexports.valueOf = valueOf;\nfunction sizeOf(options, container) {\n const { width, height, autoFit, depth = 0 } = options;\n let effectiveWidth = 640;\n let effectiveHeight = 480;\n if (autoFit) {\n const { width: containerWidth, height: containerHeight } = (0, size_1.getContainerSize)(container);\n effectiveWidth = containerWidth || effectiveWidth;\n effectiveHeight = containerHeight || effectiveHeight;\n }\n effectiveWidth = width || effectiveWidth;\n effectiveHeight = height || effectiveHeight;\n return {\n width: Math.max((0, util_1.isNumber)(effectiveWidth) ? effectiveWidth : exports.MIN_CHART_WIDTH, exports.MIN_CHART_WIDTH),\n height: Math.max((0, util_1.isNumber)(effectiveHeight) ? effectiveHeight : exports.MIN_CHART_HEIGHT, exports.MIN_CHART_HEIGHT),\n depth,\n };\n}\nexports.sizeOf = sizeOf;\nfunction optionsOf(node) {\n const root = normalizeRoot(node);\n const discovered = [root];\n const nodeValue = new Map();\n nodeValue.set(root, valueOf(root));\n while (discovered.length) {\n const node = discovered.pop();\n const value = nodeValue.get(node);\n const { children = [] } = node;\n for (const child of children) {\n if (child.type === exports.CALLBACK_NODE) {\n value.children = child.value;\n }\n else {\n const childValue = valueOf(child);\n const { children = [] } = value;\n children.push(childValue);\n discovered.push(child);\n nodeValue.set(child, childValue);\n value.children = children;\n }\n }\n }\n return nodeValue.get(root);\n}\nexports.optionsOf = optionsOf;\nfunction isMark(type, mark) {\n if (typeof type === 'function')\n return true;\n return new Set(Object.keys(mark)).has(type);\n}\nfunction isComposition(type, composition) {\n return (typeof type !== 'function' && new Set(Object.keys(composition)).has(type));\n}\nfunction normalizeRootOptions(node, options, previousType, marks, composition) {\n const { type: oldType } = node;\n const { type = previousType || oldType } = options;\n if (isComposition(type, composition)) {\n for (const key of exports.VIEW_KEYS) {\n if (node.attr(key) !== undefined && options[key] === undefined) {\n options[key] = node.attr(key);\n }\n }\n return options;\n }\n if (isMark(type, marks)) {\n const view = { type: 'view' };\n const mark = Object.assign({}, options);\n for (const key of exports.VIEW_KEYS) {\n if (mark[key] !== undefined) {\n view[key] = mark[key];\n delete mark[key];\n }\n }\n return Object.assign(Object.assign({}, view), { children: [mark] });\n }\n return options;\n}\nfunction typeCtor(type, mark, composition) {\n if (typeof type === 'function')\n return mark.mark;\n const node = Object.assign(Object.assign({}, mark), composition);\n const ctor = node[type];\n if (!ctor)\n throw new Error(`Unknown mark: ${type}.`);\n return ctor;\n}\n// Create node from options.\nfunction createNode(options, mark, composition) {\n if (typeof options === 'function') {\n const node = new node_1.Node();\n node.value = options;\n node.type = exports.CALLBACK_NODE;\n return node;\n }\n const { type, children } = options, value = __rest(options, [\"type\", \"children\"]);\n const Ctor = typeCtor(type, mark, composition);\n const node = new Ctor();\n node.value = value;\n // @ts-ignore\n node.type = type;\n return node;\n}\n// Update node by options.\nfunction updateNode(node, newOptions) {\n const { type, children } = newOptions, value = __rest(newOptions, [\"type\", \"children\"]);\n if (node.type === type || type === undefined) {\n // Update node.\n (0, helper_1.deepAssign)(node.value, value);\n }\n else if (typeof type === 'string') {\n // Transform node.\n node.type = type;\n node.value = value;\n }\n}\n// Create a nested node tree from newOptions, and append it to the parent.\nfunction appendNode(parent, newOptions, mark, composition) {\n if (!parent)\n return;\n const discovered = [[parent, newOptions]];\n while (discovered.length) {\n const [parent, nodeOptions] = discovered.shift();\n const node = createNode(nodeOptions, mark, composition);\n if (Array.isArray(parent.children))\n parent.push(node);\n const { children } = nodeOptions;\n if (Array.isArray(children)) {\n for (const child of children) {\n discovered.push([node, child]);\n }\n }\n else if (typeof children === 'function') {\n discovered.push([node, children]);\n }\n }\n}\n// Update node tree from options.\nfunction updateRoot(node, options, definedType, mark, composition) {\n const rootOptions = normalizeRootOptions(node, options, definedType, mark, composition);\n const discovered = [[null, node, rootOptions]];\n while (discovered.length) {\n const [parent, oldNode, newNode] = discovered.shift();\n // If there is no oldNode, create a node tree directly.\n if (!oldNode) {\n appendNode(parent, newNode, mark, composition);\n }\n else if (!newNode) {\n oldNode.remove();\n }\n else {\n updateNode(oldNode, newNode);\n const { children: newChildren } = newNode;\n const { children: oldChildren } = oldNode;\n if (Array.isArray(newChildren) && Array.isArray(oldChildren)) {\n // Only update node specified in newChildren,\n // the extra oldChildren will remain still.\n const n = Math.max(newChildren.length, oldChildren.length);\n for (let i = 0; i < n; i++) {\n const newChild = newChildren[i];\n const oldChild = oldChildren[i];\n discovered.push([oldNode, oldChild, newChild]);\n }\n }\n else if (typeof newChildren === 'function') {\n discovered.push([oldNode, null, newChildren]);\n }\n }\n }\n}\nexports.updateRoot = updateRoot;\nfunction createEmptyPromise() {\n let reject;\n let resolve;\n const cloned = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return [cloned, resolve, reject];\n}\nexports.createEmptyPromise = createEmptyPromise;\n//# sourceMappingURL=utils.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBBoxSize = exports.getContainerSize = void 0;\nconst parseInt10 = (d) => (d ? parseInt(d) : 0);\n/**\n * @description Get the element's bounding size.\n * @param container dom element.\n * @returns the element width and height\n */\nfunction getContainerSize(container) {\n // size = width/height - padding.\n const style = getComputedStyle(container);\n const wrapperWidth = container.clientWidth || parseInt10(style.width);\n const wrapperHeight = container.clientHeight || parseInt10(style.height);\n const widthPadding = parseInt10(style.paddingLeft) + parseInt10(style.paddingRight);\n const heightPadding = parseInt10(style.paddingTop) + parseInt10(style.paddingBottom);\n return {\n width: wrapperWidth - widthPadding,\n height: wrapperHeight - heightPadding,\n };\n}\nexports.getContainerSize = getContainerSize;\n/**\n * @description Calculate the real canvas size by view options.\n */\nfunction getBBoxSize(options) {\n const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 0, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options;\n // @todo Add this padding to theme.\n // 30 is default size for padding, which defined in runtime.\n const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding);\n const finalWidth = width -\n maybeAuto(paddingLeft) -\n maybeAuto(paddingRight) -\n marginLeft -\n marginRight -\n insetLeft -\n insetRight;\n const finalHeight = height -\n maybeAuto(paddingTop) -\n maybeAuto(paddingBottom) -\n marginTop -\n marginBottom -\n insetTop -\n insetBottom;\n return { width: finalWidth, height: finalHeight };\n}\nexports.getBBoxSize = getBBoxSize;\n//# sourceMappingURL=size.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Node = void 0;\n/**\n * BFS nodes and execute callback.\n */\nfunction bfs(node, callback) {\n const discovered = [node];\n while (discovered.length) {\n const currentNode = discovered.shift();\n callback && callback(currentNode);\n const children = currentNode.children || [];\n for (const child of children) {\n discovered.push(child);\n }\n }\n}\n/**\n * Hierarchy container.\n */\nclass Node {\n constructor(value = {}, type) {\n // The parent node.\n this.parentNode = null;\n // The children nodes.\n this.children = [];\n // The index of parent children.\n this.index = 0;\n this.type = type;\n this.value = value;\n }\n /**\n * Apply specified transform to current value. Mount the node\n * to replace the original one in the tree and then return it.\n */\n map(transform = (x) => x) {\n const newValue = transform(this.value);\n this.value = newValue;\n return this;\n }\n /**\n * Set or get the specified attribute. It the value is specified, update\n * the attribute of current value and return the node. Otherwise\n * return the the attribute of current value.\n */\n attr(key, value) {\n if (arguments.length === 1)\n return this.value[key];\n return this.map((v) => ((v[key] = value), v));\n }\n /**\n * Create a new node and append to children nodes.\n */\n append(Ctor) {\n const node = new Ctor({});\n node.children = [];\n this.push(node);\n return node;\n }\n push(node) {\n node.parentNode = this;\n node.index = this.children.length;\n this.children.push(node);\n return this;\n }\n /**\n * Remove current node from parentNode.\n */\n remove() {\n const parent = this.parentNode;\n if (parent) {\n const { children } = parent;\n const index = children.findIndex((item) => item === this);\n children.splice(index, 1);\n }\n return this;\n }\n getNodeByKey(key) {\n let targetNode = null;\n const callback = (node) => {\n if (key === node.attr('key')) {\n targetNode = node;\n }\n };\n bfs(this, callback);\n return targetNode;\n }\n getNodesByType(type) {\n const nodes = [];\n const callback = (node) => {\n if (type === node.type) {\n nodes.push(node);\n }\n };\n bfs(this, callback);\n return nodes;\n }\n getNodeByType(type) {\n let node = null;\n bfs(this, (current) => {\n if (node)\n return;\n if (type === current.type)\n node = current;\n });\n return node;\n }\n /**\n * Apply specified callback to the node value.\n */\n call(callback, ...params) {\n callback(this.map(), ...params);\n return this;\n }\n getRoot() {\n // Find the root chart and render.\n let root = this;\n while (root && root.parentNode) {\n root = root.parentNode;\n }\n return root;\n }\n}\nexports.Node = Node;\n//# sourceMappingURL=node.js.map","\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CompositionNode = void 0;\nconst style_1 = require(\"../utils/style\");\nconst node_1 = require(\"./node\");\nconst define_1 = require(\"./define\");\nconst props_1 = require(\"./props\");\nlet CompositionNode = class CompositionNode extends node_1.Node {\n /**\n * Change current node data and its children data.\n */\n changeData(data) {\n var _a;\n const chart = this.getRoot();\n if (!chart)\n return;\n this.attr('data', data);\n if ((_a = this.children) === null || _a === void 0 ? void 0 : _a.length) {\n this.children.forEach((child) => {\n child.attr('data', data);\n });\n }\n return chart === null || chart === void 0 ? void 0 : chart.render();\n }\n /**\n * Get view instance by key.\n */\n getView() {\n const chart = this.getRoot();\n const { views } = chart.getContext();\n if (!(views === null || views === void 0 ? void 0 : views.length))\n return undefined;\n return views.find((view) => view.key === this._key);\n }\n getScale() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.scale;\n }\n getScaleByChannel(channel) {\n const scale = this.getScale();\n if (scale)\n return scale[channel];\n return;\n }\n getCoordinate() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.coordinate;\n }\n getTheme() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.theme;\n }\n getGroup() {\n const key = this._key;\n if (!key)\n return undefined;\n const chart = this.getRoot();\n const chartGroup = chart.getContext().canvas.getRoot();\n return chartGroup.getElementById(key);\n }\n /**\n * Show the view.\n */\n show() {\n const group = this.getGroup();\n if (!group)\n return;\n !group.isVisible() && (0, style_1.show)(group);\n }\n /**\n * Hide the view.\n */\n hide() {\n const group = this.getGroup();\n if (!group)\n return;\n group.isVisible() && (0, style_1.hide)(group);\n }\n};\nCompositionNode = __decorate([\n (0, define_1.defineProps)(props_1.compositionProps)\n], CompositionNode);\nexports.CompositionNode = CompositionNode;\n//# sourceMappingURL=composition.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nodeProps = exports.defineProps = void 0;\nconst helper_1 = require(\"../utils/helper\");\nfunction defineValueProp(Node, name, { key = name }) {\n Node.prototype[name] = function (value) {\n if (arguments.length === 0)\n return this.attr(key);\n return this.attr(key, value);\n };\n}\nfunction defineArrayProp(Node, name, { key = name }) {\n Node.prototype[name] = function (value) {\n if (arguments.length === 0)\n return this.attr(key);\n if (Array.isArray(value))\n return this.attr(key, value);\n const array = [...(this.attr(key) || []), value];\n return this.attr(key, array);\n };\n}\nfunction defineObjectProp(Node, name, { key: k = name }) {\n Node.prototype[name] = function (key, value) {\n if (arguments.length === 0)\n return this.attr(k);\n if (arguments.length === 1 && typeof key !== 'string') {\n return this.attr(k, key);\n }\n const obj = this.attr(k) || {};\n obj[key] = arguments.length === 1 ? true : value;\n return this.attr(k, obj);\n };\n}\nfunction defineMixProp(Node, name, descriptor) {\n Node.prototype[name] = function (key) {\n if (arguments.length === 0)\n return this.attr(name);\n if (Array.isArray(key))\n return this.attr(name, { items: key });\n if ((0, helper_1.isStrictObject)(key) &&\n (key.title !== undefined || key.items !== undefined)) {\n return this.attr(name, key);\n }\n if (key === null || key === false)\n return this.attr(name, key);\n const obj = this.attr(name) || {};\n const { items = [] } = obj;\n items.push(key);\n obj.items = items;\n return this.attr(name, obj);\n };\n}\nfunction defineNodeProp(Node, name, { ctor }) {\n Node.prototype[name] = function (hocMark) {\n const node = this.append(ctor);\n if (name === 'mark') {\n node.type = hocMark;\n }\n return node;\n };\n}\nfunction defineContainerProp(Node, name, { ctor }) {\n Node.prototype[name] = function () {\n this.type = null;\n return this.append(ctor);\n };\n}\n/**\n * A decorator to define different type of attribute setter or\n * getter for current node.\n */\nfunction defineProps(descriptors) {\n return (Node) => {\n for (const [name, descriptor] of Object.entries(descriptors)) {\n const { type } = descriptor;\n if (type === 'value')\n defineValueProp(Node, name, descriptor);\n else if (type === 'array')\n defineArrayProp(Node, name, descriptor);\n else if (type === 'object')\n defineObjectProp(Node, name, descriptor);\n else if (type === 'node')\n defineNodeProp(Node, name, descriptor);\n else if (type === 'container')\n defineContainerProp(Node, name, descriptor);\n else if (type === 'mix')\n defineMixProp(Node, name, descriptor);\n }\n return Node;\n };\n}\nexports.defineProps = defineProps;\nfunction nodeProps(node) {\n return Object.fromEntries(Object.entries(node).map(([name, ctor]) => [name, { type: 'node', ctor }]));\n}\nexports.nodeProps = nodeProps;\n//# sourceMappingURL=define.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compositionProps = exports.markProps = exports.commonProps = void 0;\nexports.commonProps = {\n encode: { type: 'object' },\n scale: { type: 'object' },\n data: { type: 'value' },\n transform: { type: 'array' },\n style: { type: 'object' },\n animate: { type: 'object' },\n coordinate: { type: 'object' },\n interaction: { type: 'object' },\n label: { type: 'array', key: 'labels' },\n axis: { type: 'object' },\n legend: { type: 'object' },\n slider: { type: 'object' },\n scrollbar: { type: 'object' },\n state: { type: 'object' },\n layout: { type: 'object' },\n theme: { type: 'object' },\n title: { type: 'value' },\n};\nexports.markProps = Object.assign(Object.assign({}, exports.commonProps), { tooltip: { type: 'mix' }, viewStyle: { type: 'object' } });\nexports.compositionProps = Object.assign(Object.assign({}, exports.commonProps), { labelTransform: { type: 'array' } });\n//# sourceMappingURL=props.js.map","\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MarkNode = void 0;\nconst node_1 = require(\"./node\");\nconst define_1 = require(\"./define\");\nconst props_1 = require(\"./props\");\nlet MarkNode = class MarkNode extends node_1.Node {\n changeData(data) {\n const chart = this.getRoot();\n if (!chart)\n return;\n this.attr('data', data);\n return chart === null || chart === void 0 ? void 0 : chart.render();\n }\n /**\n * Get mark from chart views.\n */\n getMark() {\n var _a;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n const { markState } = chartView;\n const markKey = Array.from(markState.keys()).find((item) => item.key === this.attr('key'));\n return markState.get(markKey);\n }\n /**\n * Get all scales instance.\n */\n getScale() {\n var _a;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n return chartView === null || chartView === void 0 ? void 0 : chartView.scale;\n }\n /**\n * Get the scale instance by channel.\n */\n getScaleByChannel(channel) {\n var _a, _b;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n return (_b = chartView === null || chartView === void 0 ? void 0 : chartView.scale) === null || _b === void 0 ? void 0 : _b[channel];\n }\n /**\n * Get canvas group.\n */\n getGroup() {\n const key = this.attr('key');\n if (!key)\n return undefined;\n const chart = this.getRoot();\n const chartGroup = chart.getContext().canvas.getRoot();\n return chartGroup.getElementById(key);\n }\n};\nMarkNode = __decorate([\n (0, define_1.defineProps)(props_1.markProps)\n], MarkNode);\nexports.MarkNode = MarkNode;\n//# sourceMappingURL=mark.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClassicDark = exports.Classic = exports.Academy = exports.Dark = exports.Light = exports.LinearAxis = exports.selectPlotArea = exports.selectG2Elements = exports.seriesOf = exports.dataOf = exports.Selection = exports.select = exports.ChartEvent = exports.extend = exports.Runtime = exports.register = exports.MASK_CLASS_NAME = exports.AREA_CLASS_NAME = exports.LABEL_CLASS_NAME = exports.COMPONENT_CLASS_NAME = exports.PLOT_CLASS_NAME = exports.VIEW_CLASS_NAME = exports.ELEMENT_CLASS_NAME = exports.LABEL_LAYER_CLASS_NAME = exports.MAIN_LAYER_CLASS_NAME = exports.renderToMountedElement = exports.render = void 0;\nvar runtime_1 = require(\"./runtime\");\nObject.defineProperty(exports, \"render\", { enumerable: true, get: function () { return runtime_1.render; } });\nObject.defineProperty(exports, \"renderToMountedElement\", { enumerable: true, get: function () { return runtime_1.renderToMountedElement; } });\nObject.defineProperty(exports, \"MAIN_LAYER_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.MAIN_LAYER_CLASS_NAME; } });\nObject.defineProperty(exports, \"LABEL_LAYER_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.LABEL_LAYER_CLASS_NAME; } });\nObject.defineProperty(exports, \"ELEMENT_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.ELEMENT_CLASS_NAME; } });\nObject.defineProperty(exports, \"VIEW_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.VIEW_CLASS_NAME; } });\nObject.defineProperty(exports, \"PLOT_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.PLOT_CLASS_NAME; } });\nObject.defineProperty(exports, \"COMPONENT_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.COMPONENT_CLASS_NAME; } });\nObject.defineProperty(exports, \"LABEL_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.LABEL_CLASS_NAME; } });\nObject.defineProperty(exports, \"AREA_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.AREA_CLASS_NAME; } });\nObject.defineProperty(exports, \"MASK_CLASS_NAME\", { enumerable: true, get: function () { return runtime_1.MASK_CLASS_NAME; } });\nvar api_1 = require(\"./api\");\nObject.defineProperty(exports, \"register\", { enumerable: true, get: function () { return api_1.register; } });\nObject.defineProperty(exports, \"Runtime\", { enumerable: true, get: function () { return api_1.Runtime; } });\nObject.defineProperty(exports, \"extend\", { enumerable: true, get: function () { return api_1.extend; } });\nvar event_1 = require(\"./utils/event\");\nObject.defineProperty(exports, \"ChartEvent\", { enumerable: true, get: function () { return event_1.ChartEvent; } });\n__exportStar(require(\"./spec\"), exports);\nvar selection_1 = require(\"./utils/selection\");\nObject.defineProperty(exports, \"select\", { enumerable: true, get: function () { return selection_1.select; } });\nObject.defineProperty(exports, \"Selection\", { enumerable: true, get: function () { return selection_1.Selection; } });\nvar helper_1 = require(\"./utils/helper\");\nObject.defineProperty(exports, \"dataOf\", { enumerable: true, get: function () { return helper_1.dataOf; } });\nObject.defineProperty(exports, \"seriesOf\", { enumerable: true, get: function () { return helper_1.seriesOf; } });\nvar utils_1 = require(\"./interaction/utils\");\nObject.defineProperty(exports, \"selectG2Elements\", { enumerable: true, get: function () { return utils_1.selectG2Elements; } });\nObject.defineProperty(exports, \"selectPlotArea\", { enumerable: true, get: function () { return utils_1.selectPlotArea; } });\n__exportStar(require(\"./transform\"), exports);\nvar axis_1 = require(\"./component/axis\");\nObject.defineProperty(exports, \"LinearAxis\", { enumerable: true, get: function () { return axis_1.LinearAxis; } });\nvar theme_1 = require(\"./theme\");\nObject.defineProperty(exports, \"Light\", { enumerable: true, get: function () { return theme_1.Light; } });\nObject.defineProperty(exports, \"Dark\", { enumerable: true, get: function () { return theme_1.Dark; } });\nObject.defineProperty(exports, \"Academy\", { enumerable: true, get: function () { return theme_1.Academy; } });\nObject.defineProperty(exports, \"Classic\", { enumerable: true, get: function () { return theme_1.Classic; } });\nObject.defineProperty(exports, \"ClassicDark\", { enumerable: true, get: function () { return theme_1.ClassicDark; } });\n//# sourceMappingURL=exports.js.map","\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./animate\"), exports);\n__exportStar(require(\"./component\"), exports);\n__exportStar(require(\"./composition\"), exports);\n__exportStar(require(\"./coordinate\"), exports);\n__exportStar(require(\"./coordinateTransform\"), exports);\n__exportStar(require(\"./data\"), exports);\n__exportStar(require(\"./dataTransform\"), exports);\n__exportStar(require(\"./encode\"), exports);\n__exportStar(require(\"./interaction\"), exports);\n__exportStar(require(\"./labelTransform\"), exports);\n__exportStar(require(\"./mark\"), exports);\n__exportStar(require(\"./scale\"), exports);\n__exportStar(require(\"./palette\"), exports);\n__exportStar(require(\"./theme\"), exports);\n__exportStar(require(\"./transform\"), exports);\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=animate.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=component.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=composition.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=coordinate.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=coordinateTransform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=dataTransform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=encode.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interaction.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=labelTransform.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=mark.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=scale.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=palette.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=theme.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=transform.js.map"]} \ No newline at end of file diff --git a/miniprogram_npm/crypto-js/index.js b/miniprogram_npm/crypto-js/index.js deleted file mode 100644 index ff3deb1..0000000 --- a/miniprogram_npm/crypto-js/index.js +++ /dev/null @@ -1,7365 +0,0 @@ -module.exports = (function() { -var __MODS__ = {}; -var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; }; -var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; }; -var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } }; -var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; }; -__DEFINE__(1751263816220, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -}, function(modId) {var map = {"./core":1751263816221,"./x64-core":1751263816222,"./lib-typedarrays":1751263816223,"./enc-utf16":1751263816224,"./enc-base64":1751263816225,"./enc-base64url":1751263816226,"./md5":1751263816227,"./sha1":1751263816228,"./sha256":1751263816229,"./sha224":1751263816230,"./sha512":1751263816231,"./sha384":1751263816232,"./sha3":1751263816233,"./ripemd160":1751263816234,"./hmac":1751263816235,"./pbkdf2":1751263816236,"./evpkdf":1751263816237,"./cipher-core":1751263816238,"./mode-cfb":1751263816239,"./mode-ctr":1751263816240,"./mode-ctr-gladman":1751263816241,"./mode-ofb":1751263816242,"./mode-ecb":1751263816243,"./pad-ansix923":1751263816244,"./pad-iso10126":1751263816245,"./pad-iso97971":1751263816246,"./pad-zeropadding":1751263816247,"./pad-nopadding":1751263816248,"./format-hex":1751263816249,"./aes":1751263816250,"./tripledes":1751263816251,"./rc4":1751263816252,"./rabbit":1751263816253,"./rabbit-legacy":1751263816254,"./blowfish":1751263816255}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816221, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /*globals window, global, require*/ - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - - var crypto; - - // Native crypto from window (Browser) - if (typeof window !== 'undefined' && window.crypto) { - crypto = window.crypto; - } - - // Native crypto in web worker (Browser) - if (typeof self !== 'undefined' && self.crypto) { - crypto = self.crypto; - } - - // Native crypto from worker - if (typeof globalThis !== 'undefined' && globalThis.crypto) { - crypto = globalThis.crypto; - } - - // Native (experimental IE 11) crypto from window (Browser) - if (!crypto && typeof window !== 'undefined' && window.msCrypto) { - crypto = window.msCrypto; - } - - // Native crypto from global (NodeJS) - if (!crypto && typeof global !== 'undefined' && global.crypto) { - crypto = global.crypto; - } - - // Native crypto import via require (NodeJS) - if (!crypto && typeof require === 'function') { - try { - crypto = require('crypto'); - } catch (err) {} - } - - /* - * Cryptographically secure pseudorandom number generator - * - * As Math.random() is cryptographically not safe to use - */ - var cryptoSecureRandomInt = function () { - if (crypto) { - // Use getRandomValues method (Browser) - if (typeof crypto.getRandomValues === 'function') { - try { - return crypto.getRandomValues(new Uint32Array(1))[0]; - } catch (err) {} - } - - // Use randomBytes method (NodeJS) - if (typeof crypto.randomBytes === 'function') { - try { - return crypto.randomBytes(4).readInt32LE(); - } catch (err) {} - } - } - - throw new Error('Native crypto module could not be used to get secure random number.'); - }; - - /* - * Local polyfill of Object.create - - */ - var create = Object.create || (function () { - function F() {} - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); - - F.prototype = null; - - return subtype; - }; - }()); - - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; - - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816222, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816223, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816224, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816225, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816226, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64url encoding strategy. - */ - var Base64url = C_enc.Base64url = { - /** - * Converts a word array to a Base64url string. - * - * @param {WordArray} wordArray The word array. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {string} The Base64url string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); - */ - stringify: function (wordArray, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = urlSafe ? this._safe_map : this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64url string to a word array. - * - * @param {string} base64Str The Base64url string. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64url.parse(base64String); - */ - parse: function (base64Str, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - - // Shortcuts - var base64StrLength = base64Str.length; - var map = urlSafe ? this._safe_map : this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64url; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816227, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816228, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816229, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816230, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./sha256":1751263816229}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816231, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - var Wil; - var Wih; - - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - Wih = Wi.high = M[offset + i * 2] | 0; - Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - Wil = gamma0l + Wi7l; - Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - Wil = Wil + gamma1l; - Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - Wil = Wil + Wi16l; - Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./x64-core":1751263816222}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816232, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./x64-core":1751263816222,"./sha512":1751263816231}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816233, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - var tMsw; - var tLsw; - - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./x64-core":1751263816222}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816234, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816235, function(require, module, exports) { -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -}, function(modId) { var map = {"./core":1751263816221}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816236, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA256 - * @property {number} iterations The number of iterations to perform. Default: 250000 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA256, - iterations: 250000 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./sha256":1751263816229,"./hmac":1751263816235}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816237, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - var block; - - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./sha1":1751263816228,"./hmac":1751263816235}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816238, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./evpkdf")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./evpkdf"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - var block; - - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - var modeCreator; - - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - var finalProcessedBlocks; - - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - var wordArray; - - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - var salt; - - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt, hasher) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - if (!hasher) { - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - } else { - var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt); - } - - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -}, function(modId) { var map = {"./core":1751263816221,"./evpkdf":1751263816237}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816239, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - var keystream; - - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816240, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816241, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816242, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816243, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816244, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816245, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816246, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816247, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - for (var i = data.sigBytes - 1; i >= 0; i--) { - if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - data.sigBytes = i + 1; - break; - } - } - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816248, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816249, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816250, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - var t; - - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816251, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - // Make sure the key length is valid (64, 128 or >= 192 bit) - if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { - throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); - } - - // Extend the key according to the keying options defined in 3DES standard - var key1 = keyWords.slice(0, 2); - var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); - var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(key1)); - this._des2 = DES.createEncryptor(WordArray.create(key2)); - this._des3 = DES.createEncryptor(WordArray.create(key3)); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816252, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816253, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816254, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -__DEFINE__(1751263816255, function(require, module, exports) { -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - const N = 16; - - //Origin pbox and sbox, derived from PI - const ORIG_P = [ - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, - 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, - 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, - 0x9216D5D9, 0x8979FB1B - ]; - - const ORIG_S = [ - [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ], - [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ], - [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ], - [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ] - ]; - - var BLOWFISH_CTX = { - pbox: [], - sbox: [] - } - - function F(ctx, x){ - let a = (x >> 24) & 0xFF; - let b = (x >> 16) & 0xFF; - let c = (x >> 8) & 0xFF; - let d = x & 0xFF; - - let y = ctx.sbox[0][a] + ctx.sbox[1][b]; - y = y ^ ctx.sbox[2][c]; - y = y + ctx.sbox[3][d]; - - return y; - } - - function BlowFish_Encrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = 0; i < N; ++i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[N]; - Xl = Xl ^ ctx.pbox[N + 1]; - - return {left: Xl, right: Xr}; - } - - function BlowFish_Decrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = N + 1; i > 1; --i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[1]; - Xl = Xl ^ ctx.pbox[0]; - - return {left: Xl, right: Xr}; - } - - /** - * Initialization ctx's pbox and sbox. - * - * @param {Object} ctx The object has pbox and sbox. - * @param {Array} key An array of 32-bit words. - * @param {int} keysize The length of the key. - * - * @example - * - * BlowFishInit(BLOWFISH_CTX, key, 128/32); - */ - function BlowFishInit(ctx, key, keysize) - { - for(let Row = 0; Row < 4; Row++) - { - ctx.sbox[Row] = []; - for(let Col = 0; Col < 256; Col++) - { - ctx.sbox[Row][Col] = ORIG_S[Row][Col]; - } - } - - let keyIndex = 0; - for(let index = 0; index < N + 2; index++) - { - ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; - keyIndex++; - if(keyIndex >= keysize) - { - keyIndex = 0; - } - } - - let Data1 = 0; - let Data2 = 0; - let res = 0; - for(let i = 0; i < N + 2; i += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.pbox[i] = Data1; - ctx.pbox[i + 1] = Data2; - } - - for(let i = 0; i < 4; i++) - { - for(let j = 0; j < 256; j += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.sbox[i][j] = Data1; - ctx.sbox[i][j + 1] = Data2; - } - } - - return true; - } - - /** - * Blowfish block cipher algorithm. - */ - var Blowfish = C_algo.Blowfish = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - //Initialization pbox and sbox - BlowFishInit(BLOWFISH_CTX, keyWords, keySize); - }, - - encryptBlock: function (M, offset) { - var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - decryptBlock: function (M, offset) { - var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - blockSize: 64/32, - - keySize: 128/32, - - ivSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg); - */ - C.Blowfish = BlockCipher._createHelper(Blowfish); - }()); - - - return CryptoJS.Blowfish; - -})); -}, function(modId) { var map = {"./core":1751263816221,"./enc-base64":1751263816225,"./md5":1751263816227,"./evpkdf":1751263816237,"./cipher-core":1751263816238}; return __REQUIRE__(map[modId], modId); }) -return __REQUIRE__(1751263816220); -})() -//miniprogram-npm-outsideDeps=["crypto"] -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/miniprogram_npm/crypto-js/index.js.map b/miniprogram_npm/crypto-js/index.js.map deleted file mode 100644 index c54bf84..0000000 --- a/miniprogram_npm/crypto-js/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["index.js","core.js","x64-core.js","lib-typedarrays.js","enc-utf16.js","enc-base64.js","enc-base64url.js","md5.js","sha1.js","sha256.js","sha224.js","sha512.js","sha384.js","sha3.js","ripemd160.js","hmac.js","pbkdf2.js","evpkdf.js","cipher-core.js","mode-cfb.js","mode-ctr.js","mode-ctr-gladman.js","mode-ofb.js","mode-ecb.js","pad-ansix923.js","pad-iso10126.js","pad-iso97971.js","pad-zeropadding.js","pad-nopadding.js","format-hex.js","aes.js","tripledes.js","rc4.js","rabbit.js","rabbit-legacy.js","blowfish.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;ACFA,ADGA;ACFA,ADGA;ACFA,ADGA;ACFA,ADGA,AENA;ADIA,ADGA,AENA;ADIA,ADGA,AENA;ADIA,ADGA,AGTA,ADGA;ADIA,ADGA,AGTA,ADGA;ADIA,ADGA,AGTA,ADGA;ADIA,AGTA,AJYA,AGTA,ADGA;ADIA,AGTA,AJYA,AGTA,ADGA;ADIA,AGTA,AJYA,AGTA,ADGA;ADIA,AIZA,ADGA,AJYA,AGTA,ADGA;ADIA,AIZA,ADGA,AJYA,AGTA,ADGA;ADIA,AIZA,ADGA,AJYA,AGTA,ADGA;ADIA,AIZA,ACHA,AFMA,ADGA,ADGA;ADIA,AIZA,ACHA,AFMA,ADGA,ADGA;ADIA,AIZA,ACHA,AFMA,ADGA,ADGA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ALeA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ALeA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ALeA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ANkBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ANkBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ANkBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ACHA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ACHA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,ACHA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,APqBA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AENA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AENA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AENA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AGTA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AGTA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AGTA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,ACHA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,ADGA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AOrBA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AWjCA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;ADIA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AS3BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AHSA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AHSA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AHSA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,ACHA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,ACHA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,ACHA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AJYA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AENA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AENA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AENA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,ANkBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ARwBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ARwBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ARwBA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,AT2BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,AT2BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,AT2BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AV8BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AV8BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AV8BA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,ACHA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,ACHA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,ACHA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,AZoCA,AIZA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AFMA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;AgB/CA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AT2BA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AFMA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AgBhDA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AgBhDA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AgBhDA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AiBnDA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AiBnDA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AiBnDA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AZoCA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AGTA,ADGA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,AENA,ADGA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,AENA,ADGA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,ACHA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,ACHA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,ACHA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ADGA,AENA,AENA,ACHA,ACHA,ACHA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ACHA,AENA,ACHA,AENA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,ADGA,ADGA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ACHA,AENA,AGTA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AGTA,AGTA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,AMlBA,AXiCA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,AYpCA,AENA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AIZA,ACHA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AYpCA,Ad0CA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AFMA,AavCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AWjCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AWjCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AWjCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AWjCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AKfA,AWjCA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ANkBA,ACHA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,Ac1CA,ALeA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AgBhDA,AFMA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,Ac1CA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,Ac1CA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,Ac1CA,ARwBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,AS3BA,AkBtDA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ALeA,AIZA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,ADGA,AlBsDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AMlBA,A2BjFA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AiCnGA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AiCnGA,ADGA,AnByDA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AiCnGA,ApB4DA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AavCA,ADGA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA,A7BuFA;A4BnFA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;ADIA,AKfA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AFMA,AoB5DA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,AYpCA,AkBtDA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AIXA,AjBmDA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AjBmDA,A8B1FA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA,AavCA;AbwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":[";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));"]} \ No newline at end of file diff --git a/pages/AddTherapeuticRegimen/index.json b/pages/AddTherapeuticRegimen/index.json index 1b92b81..a540e8f 100644 --- a/pages/AddTherapeuticRegimen/index.json +++ b/pages/AddTherapeuticRegimen/index.json @@ -8,7 +8,6 @@ "t-button": "tdesign-miniprogram/button/button", "t-radio": "tdesign-miniprogram/radio/radio", "t-radio-group": "tdesign-miniprogram/radio-group/radio-group", - "t-tag": "tdesign-miniprogram/tag/tag", "t-picker": "tdesign-miniprogram/picker/picker", "t-picker-item": "tdesign-miniprogram/picker-item/picker-item", "t-image-viewer": "tdesign-miniprogram/image-viewer/image-viewer" diff --git a/pages/clockIn/index.json b/pages/clockIn/index.json index bca4324..450a578 100644 --- a/pages/clockIn/index.json +++ b/pages/clockIn/index.json @@ -1,7 +1,6 @@ { "usingComponents": { - "t-button": "tdesign-miniprogram/button/button", - "t-tag": "tdesign-miniprogram/tag/tag" + "t-button": "tdesign-miniprogram/button/button" }, "navigationStyle": "default", "navigationBarTitleText": "服药打卡" diff --git a/pages/emergency/index.json b/pages/emergency/index.json index 89f0172..a78d43e 100644 --- a/pages/emergency/index.json +++ b/pages/emergency/index.json @@ -1,7 +1,5 @@ { "usingComponents": { - "t-checkbox": "tdesign-miniprogram/checkbox/checkbox", - "t-checkbox-group": "tdesign-miniprogram/checkbox-group/checkbox-group", "t-button": "tdesign-miniprogram/button/button", "t-popup": "tdesign-miniprogram/popup/popup", "t-icon": "tdesign-miniprogram/icon/icon", diff --git a/pages/home/index.wxml b/pages/home/index.wxml index ff866d3..f619516 100644 --- a/pages/home/index.wxml +++ b/pages/home/index.wxml @@ -88,7 +88,7 @@ {{item.contentText}} - + diff --git a/pages/medicationRecord/index.json b/pages/medicationRecord/index.json index 4354701..97a19a9 100644 --- a/pages/medicationRecord/index.json +++ b/pages/medicationRecord/index.json @@ -1,6 +1,5 @@ { "usingComponents": { - "t-tag": "tdesign-miniprogram/tag/tag", "t-col": "tdesign-miniprogram/col/col", "t-row": "tdesign-miniprogram/row/row" },