minerva-design 1.13.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/custom-elements.json +194 -12
  3. package/dist/angular/fesm2022/minerva-angular.mjs +20 -0
  4. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  5. package/dist/angular/types/minerva-angular.d.ts +10 -1
  6. package/dist/charts/canvas.d.cts +1 -0
  7. package/dist/charts/canvas.d.ts +1 -0
  8. package/dist/charts/engine/canvas.cjs +1 -1
  9. package/dist/charts/engine/canvas.cjs.map +1 -1
  10. package/dist/charts/engine/canvas.js +152 -128
  11. package/dist/charts/engine/canvas.js.map +1 -1
  12. package/dist/charts/engine/chart.cjs +1 -1
  13. package/dist/charts/engine/chart.cjs.map +1 -1
  14. package/dist/charts/engine/chart.js +475 -405
  15. package/dist/charts/engine/chart.js.map +1 -1
  16. package/dist/charts/engine/controller.cjs +2 -2
  17. package/dist/charts/engine/controller.cjs.map +1 -1
  18. package/dist/charts/engine/controller.js +263 -248
  19. package/dist/charts/engine/controller.js.map +1 -1
  20. package/dist/charts/engine/dom.cjs +1 -1
  21. package/dist/charts/engine/dom.cjs.map +1 -1
  22. package/dist/charts/engine/dom.d.cts +34 -0
  23. package/dist/charts/engine/dom.d.ts +34 -0
  24. package/dist/charts/engine/dom.js +62 -51
  25. package/dist/charts/engine/dom.js.map +1 -1
  26. package/dist/charts/engine/graph/chart.cjs +1 -1
  27. package/dist/charts/engine/graph/chart.cjs.map +1 -1
  28. package/dist/charts/engine/graph/chart.js +835 -821
  29. package/dist/charts/engine/graph/chart.js.map +1 -1
  30. package/dist/charts/engine/graph/dom.cjs +1 -1
  31. package/dist/charts/engine/graph/dom.cjs.map +1 -1
  32. package/dist/charts/engine/graph/dom.js +44 -51
  33. package/dist/charts/engine/graph/dom.js.map +1 -1
  34. package/dist/charts/engine/hover-rect.cjs +2 -0
  35. package/dist/charts/engine/hover-rect.cjs.map +1 -0
  36. package/dist/charts/engine/hover-rect.d.cts +10 -0
  37. package/dist/charts/engine/hover-rect.d.ts +10 -0
  38. package/dist/charts/engine/hover-rect.js +47 -0
  39. package/dist/charts/engine/hover-rect.js.map +1 -0
  40. package/dist/charts/engine/items.cjs +1 -1
  41. package/dist/charts/engine/items.cjs.map +1 -1
  42. package/dist/charts/engine/items.js +8 -8
  43. package/dist/charts/engine/model.cjs +1 -1
  44. package/dist/charts/engine/model.cjs.map +1 -1
  45. package/dist/charts/engine/model.js +191 -191
  46. package/dist/charts/engine/model.js.map +1 -1
  47. package/dist/charts/engine/orderbook/depth.cjs +1 -1
  48. package/dist/charts/engine/orderbook/depth.cjs.map +1 -1
  49. package/dist/charts/engine/orderbook/depth.js +63 -63
  50. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  51. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  52. package/dist/charts/engine/orderbook/heatmap.js +155 -155
  53. package/dist/charts/engine/orderbook/host.cjs +1 -1
  54. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  55. package/dist/charts/engine/orderbook/host.js +87 -75
  56. package/dist/charts/engine/orderbook/host.js.map +1 -1
  57. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  58. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  59. package/dist/charts/engine/orderbook/ladder.js +41 -41
  60. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  61. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  62. package/dist/charts/engine/orderbook/tape.js +31 -31
  63. package/dist/charts/engine/presets.cjs +2 -2
  64. package/dist/charts/engine/presets.cjs.map +1 -1
  65. package/dist/charts/engine/presets.js +15 -15
  66. package/dist/charts/engine/renderers/vector-gpu.cjs +24 -0
  67. package/dist/charts/engine/renderers/vector-gpu.cjs.map +1 -0
  68. package/dist/charts/engine/renderers/vector-gpu.d.cts +22 -0
  69. package/dist/charts/engine/renderers/vector-gpu.d.ts +22 -0
  70. package/dist/charts/engine/renderers/vector-gpu.js +301 -0
  71. package/dist/charts/engine/renderers/vector-gpu.js.map +1 -0
  72. package/dist/charts/engine/renderers/vector.cjs +2 -0
  73. package/dist/charts/engine/renderers/vector.cjs.map +1 -0
  74. package/dist/charts/engine/renderers/vector.d.cts +140 -0
  75. package/dist/charts/engine/renderers/vector.d.ts +140 -0
  76. package/dist/charts/engine/renderers/vector.js +568 -0
  77. package/dist/charts/engine/renderers/vector.js.map +1 -0
  78. package/dist/charts/engine/scene.cjs +1 -1
  79. package/dist/charts/engine/scene.cjs.map +1 -1
  80. package/dist/charts/engine/scene.d.cts +43 -3
  81. package/dist/charts/engine/scene.d.ts +43 -3
  82. package/dist/charts/engine/scene.js +411 -338
  83. package/dist/charts/engine/scene.js.map +1 -1
  84. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  85. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  86. package/dist/charts/engine/shapes/bullet.js +36 -36
  87. package/dist/charts/engine/shapes/calendar.cjs +1 -1
  88. package/dist/charts/engine/shapes/calendar.cjs.map +1 -1
  89. package/dist/charts/engine/shapes/calendar.js +53 -53
  90. package/dist/charts/engine/shapes/chart.cjs +1 -1
  91. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  92. package/dist/charts/engine/shapes/chart.d.cts +3 -2
  93. package/dist/charts/engine/shapes/chart.d.ts +3 -2
  94. package/dist/charts/engine/shapes/chart.js +192 -162
  95. package/dist/charts/engine/shapes/chart.js.map +1 -1
  96. package/dist/charts/engine/shapes/draw.cjs +1 -1
  97. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  98. package/dist/charts/engine/shapes/draw.js +87 -86
  99. package/dist/charts/engine/shapes/draw.js.map +1 -1
  100. package/dist/charts/engine/shapes/layout.cjs +2 -2
  101. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  102. package/dist/charts/engine/shapes/layout.d.cts +8 -7
  103. package/dist/charts/engine/shapes/layout.d.ts +8 -7
  104. package/dist/charts/engine/shapes/layout.js +262 -166
  105. package/dist/charts/engine/shapes/layout.js.map +1 -1
  106. package/dist/charts/engine/shapes/types.d.cts +13 -1
  107. package/dist/charts/engine/shapes/types.d.ts +13 -1
  108. package/dist/charts/engine/three-d/chart.cjs +1 -1
  109. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  110. package/dist/charts/engine/three-d/chart.js +266 -257
  111. package/dist/charts/engine/three-d/chart.js.map +1 -1
  112. package/dist/charts/engine/three-d/dom.cjs +1 -1
  113. package/dist/charts/engine/three-d/dom.cjs.map +1 -1
  114. package/dist/charts/engine/three-d/dom.js +28 -35
  115. package/dist/charts/engine/three-d/dom.js.map +1 -1
  116. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  117. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  118. package/dist/charts/engine/three-d/geometry.js +70 -70
  119. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  120. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  121. package/dist/charts/engine/three-d/overlay.js +15 -15
  122. package/dist/charts/engine/tooltip.cjs +2 -0
  123. package/dist/charts/engine/tooltip.cjs.map +1 -0
  124. package/dist/charts/engine/tooltip.d.cts +94 -0
  125. package/dist/charts/engine/tooltip.d.ts +94 -0
  126. package/dist/charts/engine/tooltip.js +242 -0
  127. package/dist/charts/engine/tooltip.js.map +1 -0
  128. package/dist/charts/engine/trading/chart.cjs +1 -1
  129. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  130. package/dist/charts/engine/trading/chart.js +135 -135
  131. package/dist/charts/react/shapes.cjs +1 -1
  132. package/dist/charts/react/shapes.cjs.map +1 -1
  133. package/dist/charts/react/shapes.d.cts +10 -1
  134. package/dist/charts/react/shapes.d.ts +10 -1
  135. package/dist/charts/react/shapes.js +24 -19
  136. package/dist/charts/react/shapes.js.map +1 -1
  137. package/dist/core/contracts.cjs +1 -1
  138. package/dist/core/contracts.cjs.map +1 -1
  139. package/dist/core/contracts.js +1 -1
  140. package/dist/core/contracts.js.map +1 -1
  141. package/dist/native/charts/src/canvas.cjs +1 -1
  142. package/dist/native/charts/src/canvas.js +8 -7
  143. package/dist/native/charts/src/engine/canvas.cjs +1 -1
  144. package/dist/native/charts/src/engine/canvas.js +2 -0
  145. package/dist/native/charts/src/engine/controller.cjs +2 -2
  146. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  147. package/dist/native/charts/src/engine/controller.js +102 -87
  148. package/dist/native/charts/src/engine/controller.js.map +1 -1
  149. package/dist/native/charts/src/engine/hover-rect.cjs +2 -0
  150. package/dist/native/charts/src/engine/hover-rect.cjs.map +1 -0
  151. package/dist/native/charts/src/engine/hover-rect.js +47 -0
  152. package/dist/native/charts/src/engine/hover-rect.js.map +1 -0
  153. package/dist/native/charts/src/engine/scene.cjs +1 -1
  154. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  155. package/dist/native/charts/src/engine/scene.js +318 -245
  156. package/dist/native/charts/src/engine/scene.js.map +1 -1
  157. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  158. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  159. package/dist/native/charts/src/engine/shapes/draw.js +81 -80
  160. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  161. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  162. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  163. package/dist/native/charts/src/engine/shapes/layout.js +239 -143
  164. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  165. package/dist/native/charts/src/engine/tooltip.cjs +2 -0
  166. package/dist/native/charts/src/engine/tooltip.cjs.map +1 -0
  167. package/dist/native/charts/src/engine/tooltip.js +164 -0
  168. package/dist/native/charts/src/engine/tooltip.js.map +1 -0
  169. package/dist/native/components/Chart/scene.cjs +1 -1
  170. package/dist/native/components/Chart/scene.cjs.map +1 -1
  171. package/dist/native/components/Chart/scene.js +210 -187
  172. package/dist/native/components/Chart/scene.js.map +1 -1
  173. package/dist/native/source/components/Chart/scene.tsx +55 -2
  174. package/dist/taro/index.js +2026 -1626
  175. package/dist/uni/charts-canvas.js +1 -0
  176. package/dist/vue/components/Chart/BulletChart.vue.d.ts +2 -0
  177. package/dist/vue/components/Chart/CalendarHeatmap.vue.d.ts +2 -0
  178. package/dist/vue/components/Chart/ChordChart.vue.d.ts +2 -0
  179. package/dist/vue/components/Chart/DonutChart.vue.d.ts +2 -0
  180. package/dist/vue/components/Chart/FunnelChart.vue.d.ts +2 -0
  181. package/dist/vue/components/Chart/GaugeChart.vue.d.ts +2 -0
  182. package/dist/vue/components/Chart/PieChart.vue.d.ts +2 -0
  183. package/dist/vue/components/Chart/RadarChart.vue.d.ts +2 -0
  184. package/dist/vue/components/Chart/RadialBarChart.vue.d.ts +2 -0
  185. package/dist/vue/components/Chart/SankeyChart.vue.d.ts +2 -0
  186. package/dist/vue/components/Chart/SunburstChart.vue.d.ts +2 -0
  187. package/dist/vue/components/Chart/TreemapChart.vue.d.ts +2 -0
  188. package/dist/vue/components/Chart/props.d.ts +2 -0
  189. package/dist/vue/components/Chart/props.js +1 -0
  190. package/dist/vue/components/Chart/props.js.map +1 -1
  191. package/dist/vue/components/Chart/shape.d.ts +2 -1
  192. package/dist/vue/components/Chart/shape.js +2 -0
  193. package/dist/vue/components/Chart/shape.js.map +1 -1
  194. package/dist/vue/components/Chart/types.d.ts +2 -0
  195. package/dist/weapp/charts/canvas.js +2576 -1969
  196. package/dist/weapp/charts/core.js +1 -0
  197. package/dist/web-components/components/chart/shape-chart.d.ts +9 -7
  198. package/dist/web-components/components/chart/shape-chart.js +3 -0
  199. package/dist/web-components/components/chart/shape-chart.js.map +1 -1
  200. package/dist/web-components/components/chart/shapes-extended.d.ts +6 -6
  201. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  202. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scene.cjs","names":["measureChartText","Text","View","scenePrimitives","toCss","annotationRect","part","annotationLine","annotationTitleLayout","annotationTextBox","_Fragment","StyleSheet","require_parts","require_color","require_overlay","require_controller","require_measure","react_native","react_jsx_runtime","SHAPE_BUDGET","C","lineHeightOf","size","slack","text","o","label","lh","pad","w","top","valign","y","horizontal","align","x","frameWidth","extra","key","box","color","dot","cx","d","cy","segment","dx","x2","x1","dy","y2","y1","length","width","dashRuns","pattern","dash","v","period","a","b","runs","scale","max","out","at","i","step","dashedLine","start","run","axis","from","crisp","arrowViews","arrow","pts","k","p","q","x0","ox","y0","oy","tip","b0","b1","half","clear","style","baseX","baseY","right","down","thin","stride","lx","ly","areaStrips","transposed","points","plot","frame","n","forward","xs","ys","bs","bottom","baseline","to","column","j","left","c","mid","t","h","primitiveLimits","scene","visible","s","lines","scatters","perLine","maxDots","drawData","primitives","options","dotsLeft","barsLeft","total","r","count","radius","stroke","css","alpha","drawBackground","layout","scales","bottomAxis","model","leftAxis","bottomTicks","leftTicks","bottomPx","leftPx","fs","theme","annotations","grid","py","px","line","tick","title","lastRight","lastBottom","y2Ticks","ramp","bar","stops","l","e","swatch","drawForeground","fw","halo","labelHeight","along","where","weight","muted","pointColor","clip","drawStatic","family","drawHover","background","hover","m","grow","inset","dragging","customTooltip","font","row","lineHeight","tooltipCard","padding","content"],"sources":["../../../../../native/src/components/Chart/scene.tsx"],"sourcesContent":["// Draws a chart scene (`ChartController.getScene()`) with plain views: no\n// canvas, SVG or native drawing module. The engine already resolves every\n// position in pixels; this file only turns them into absolutely positioned\n// <View> / <Text> elements, keeping the number of views bounded by the size\n// of the chart (lines decimated per column, dots merged per cell, bars\n// merged per pixel column), whatever the size of the data.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport {\n StyleSheet,\n Text,\n View,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport {\n annotationLine,\n annotationRect,\n annotationTextBox,\n annotationTitleLayout,\n scenePrimitives,\n toCss,\n type ChartPrimitive,\n type ChartRect,\n type ChartScene,\n} from \"@minerva/charts/canvas\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\n\ntype Rgba = ChartScene[\"theme\"][\"text\"];\n\n/** Upper bounds of the views drawn for the data of a chart */\nexport const SHAPE_BUDGET = {\n /** Points of all the lines (one view per segment) */\n linePoints: 1200,\n /** Dots of one scatter series before they are merged per cell */\n dotsPerSeries: 800,\n /** Dots of all the series */\n dots: 2000,\n /** Bars of one series before neighbors are merged per pixel column */\n barsPerSeries: 600,\n /** Bars of all the series */\n bars: 1500,\n /** Vertical strips filling one area */\n areaColumns: 200,\n /** Dashes of one dashed line */\n dashes: 200,\n} as const;\n\nconst C = \"chart\";\n\n// ------------------------------------------------------------------ text\n\ninterface TextOptions {\n size: number;\n color: string;\n weight?: number;\n family?: string;\n /** Halo color: keeps the text readable over the data */\n halo?: string;\n}\n\ntype Align = \"left\" | \"center\" | \"right\";\ntype VAlign = \"top\" | \"middle\" | \"bottom\";\n\nconst lineHeightOf = (size: number) => Math.ceil(size * 1.35);\n\n/** Box wide enough for the estimated width (the real one may differ) */\nconst slack = (text: string, o: TextOptions) =>\n Math.ceil(\n measureChartText(text, `${o.weight ?? 400} ${o.size}px sans-serif`) * 1.4 +\n o.size * 2,\n );\n\n/**\n * A one-line text anchored at (x, y) of a container `frameWidth` wide:\n * `left` starts there, `right` ends there, `center` is centered on it;\n * `top` / `bottom` place the em box like the canvas text baselines\n */\nfunction label(\n key: string,\n text: string,\n x: number,\n y: number,\n align: Align,\n valign: VAlign,\n o: TextOptions,\n frameWidth: number,\n extra?: TextStyle,\n): ReactElement {\n const lh = lineHeightOf(o.size);\n const pad = (lh - o.size) / 2;\n const w = slack(text, o);\n const top =\n valign === \"top\"\n ? y - pad\n : valign === \"bottom\"\n ? y - lh + pad\n : y - lh / 2;\n const horizontal: TextStyle =\n align === \"left\"\n ? { left: x, width: w }\n : align === \"right\"\n ? { right: frameWidth - x, width: w }\n : { left: x - w / 2, width: w };\n return (\n <Text\n key={key}\n numberOfLines={1}\n style={[\n {\n position: \"absolute\",\n top,\n ...horizontal,\n textAlign: align,\n fontSize: o.size,\n lineHeight: lh,\n color: o.color,\n fontWeight: String(o.weight ?? 400) as TextStyle[\"fontWeight\"],\n includeFontPadding: false,\n ...(o.family ? { fontFamily: o.family } : null),\n ...(o.halo\n ? {\n textShadowColor: o.halo,\n textShadowRadius: 3,\n textShadowOffset: { width: 0, height: 0 },\n }\n : null),\n },\n extra,\n ]}\n >\n {text}\n </Text>\n );\n}\n\n// ---------------------------------------------------------------- shapes\n\nconst box = (\n key: string,\n x: number,\n y: number,\n width: number,\n height: number,\n color: string,\n extra?: ViewStyle,\n): ReactElement => (\n <View\n key={key}\n style={[\n {\n position: \"absolute\",\n left: x,\n top: y,\n width,\n height,\n backgroundColor: color,\n },\n extra,\n ]}\n />\n);\n\nconst dot = (\n key: string,\n cx: number,\n cy: number,\n d: number,\n color: string,\n extra?: ViewStyle,\n) =>\n box(key, cx - d / 2, cy - d / 2, d, d, color, {\n borderRadius: d / 2,\n ...extra,\n });\n\n/** A straight stroke: one view, rotated around its center */\nconst segment = (\n key: string,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n width: number,\n color: string,\n) => {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const length = Math.hypot(dx, dy) + width;\n return box(\n key,\n (x1 + x2) / 2 - length / 2,\n (y1 + y2) / 2 - width / 2,\n length,\n width,\n color,\n {\n borderRadius: width / 2,\n transform: [{ rotate: `${Math.atan2(dy, dx)}rad` }],\n },\n );\n};\n\n/** Dash runs `[start, length]` along a line (canvas `setLineDash` pattern) */\nexport function dashRuns(\n length: number,\n dash: readonly number[],\n max: number = SHAPE_BUDGET.dashes,\n): [number, number][] {\n let pattern = dash.filter((v) => Number.isFinite(v) && v >= 0);\n // odd patterns repeat twice, like the canvas\n if (pattern.length % 2) pattern = [...pattern, ...pattern];\n const period = pattern.reduce((a, b) => a + b, 0);\n if (!pattern.length || period <= 0) return [[0, length]];\n const runs = (length / period) * (pattern.length / 2);\n const scale = runs > max ? runs / max : 1;\n const out: [number, number][] = [];\n let at = 0;\n for (let i = 0; at < length; i = (i + 1) % pattern.length) {\n const step = pattern[i] * scale;\n if (i % 2 === 0 && step > 0) out.push([at, Math.min(step, length - at)]);\n at += Math.max(step, 0.5);\n }\n return out;\n}\n\nconst dashedLine = (\n key: string,\n axis: \"x\" | \"y\",\n at: number,\n from: number,\n length: number,\n width: number,\n color: string,\n dash: readonly number[],\n) =>\n dashRuns(length, dash).map(([start, run], i) =>\n axis === \"y\"\n ? box(`${key}-${i}`, from + start, at, run, width, color)\n : box(`${key}-${i}`, at, from + start, width, run, color),\n );\n\nconst crisp = (v: number, width = 1) => Math.round(v) + 0.5 - width / 2;\n\n/**\n * Views of an elbow arrow (relative to `ox`, `oy`): a thin box per leg (the\n * legs are horizontal or vertical) and a triangle made of borders\n */\nexport const arrowViews = (\n key: string,\n arrow: ChartScene[\"arrows\"][number],\n ox: number,\n oy: number,\n): ReactElement[] => {\n const out: ReactElement[] = [];\n const w = arrow.width;\n const pts = arrow.points;\n for (let k = 1; k < pts.length; k++) {\n const p = pts[k - 1]!;\n const q = pts[k]!;\n const x0 = Math.min(p.x, q.x) - ox;\n const y0 = Math.min(p.y, q.y) - oy;\n // legs overlap by half a width so the corners are closed\n out.push(\n p.y === q.y\n ? box(\n `${key}-${k}`,\n x0 - w / 2,\n y0 - w / 2,\n Math.abs(q.x - p.x) + w,\n w,\n arrow.color,\n )\n : box(\n `${key}-${k}`,\n x0 - w / 2,\n y0 - w / 2,\n w,\n Math.abs(q.y - p.y) + w,\n arrow.color,\n ),\n );\n }\n const [tip, b0, b1] = arrow.head;\n const length = Math.hypot(\n tip.x - (b0.x + b1.x) / 2,\n tip.y - (b0.y + b1.y) / 2,\n );\n const half = Math.hypot(b1.x - b0.x, b1.y - b0.y) / 2;\n const clear = \"transparent\";\n const style: ViewStyle = { position: \"absolute\", width: 0, height: 0 };\n const baseX = (b0.x + b1.x) / 2;\n const baseY = (b0.y + b1.y) / 2;\n if (Math.abs(tip.x - baseX) >= Math.abs(tip.y - baseY)) {\n const right = tip.x > baseX;\n Object.assign(style, {\n left: (right ? baseX : tip.x) - ox,\n top: tip.y - half - oy,\n borderTopWidth: half,\n borderBottomWidth: half,\n borderTopColor: clear,\n borderBottomColor: clear,\n ...(right\n ? { borderLeftWidth: length, borderLeftColor: arrow.color }\n : { borderRightWidth: length, borderRightColor: arrow.color }),\n });\n } else {\n const down = tip.y > baseY;\n Object.assign(style, {\n left: tip.x - half - ox,\n top: (down ? baseY : tip.y) - oy,\n borderLeftWidth: half,\n borderRightWidth: half,\n borderLeftColor: clear,\n borderRightColor: clear,\n ...(down\n ? { borderTopWidth: length, borderTopColor: arrow.color }\n : { borderBottomWidth: length, borderBottomColor: arrow.color }),\n });\n }\n out.push(<View key={`${key}-head`} style={style} />);\n return out;\n};\n\n// ------------------------------------------------------------------ data\n\n/** Thins a run of interleaved points to `max` points and drops sub-pixel steps */\nfunction thin(run: readonly number[], max: number): number[] {\n const n = run.length / 2;\n const stride = n > max ? Math.ceil(n / max) : 1;\n const out: number[] = [];\n for (let i = 0; i < n; i += stride) {\n const x = run[i * 2];\n const y = run[i * 2 + 1];\n const k = out.length;\n if (k && Math.hypot(x - out[k - 2], y - out[k - 1]) < 1.5) continue;\n out.push(x, y);\n }\n const lx = run[n * 2 - 2];\n const ly = run[n * 2 - 1];\n const k = out.length;\n if (n > 1 && (out[k - 2] !== lx || out[k - 1] !== ly)) out.push(lx, ly);\n return out;\n}\n\n/**\n * Vertical strips between the line and the baseline (or the stack below),\n * one per column; horizontal strips, one per row, for horizontal charts\n */\nfunction areaStrips(\n key: string,\n points: readonly number[],\n baseline: number,\n color: string,\n opacity: number,\n frame: ChartRect,\n /** Y pixel (x pixel when `transposed`) of the bottom edge under every point */\n bottom?: readonly number[],\n /** Horizontal charts: the area grows from the left edge */\n transposed = false,\n): ReactElement[] {\n // horizontal charts are filled like vertical ones with x and y swapped\n const run = transposed\n ? points.map((_, i) => points[i % 2 ? i - 1 : i + 1])\n : points;\n const plot = transposed\n ? { x: frame.y, y: frame.x, width: frame.height, height: frame.width }\n : frame;\n const n = run.length / 2;\n if (n < 2) return [];\n // left to right (reversed axes list their points right to left)\n const forward = run[0] <= run[n * 2 - 2];\n const at = (i: number) => (forward ? i : n - 1 - i);\n const xs = (i: number) => run[at(i) * 2];\n const ys = (i: number) => run[at(i) * 2 + 1];\n const bs = (i: number) => (bottom ? bottom[at(i)] : baseline);\n const from = Math.max(plot.x, xs(0));\n const to = Math.min(plot.x + plot.width, xs(n - 1));\n if (to <= from) return [];\n const column = Math.max(2, plot.width / SHAPE_BUDGET.areaColumns);\n const out: ReactElement[] = [];\n let j = 0;\n for (let left = Math.floor(from), c = 0; left < to; c++) {\n const right = Math.min(Math.ceil(to), Math.round(left + column));\n const mid = (left + right) / 2;\n while (j < n - 2 && xs(j + 1) < mid) j++;\n const x0 = xs(j);\n const x1 = xs(j + 1);\n const t = x1 === x0 ? 0 : Math.max(0, Math.min(1, (mid - x0) / (x1 - x0)));\n const y = ys(j) + (ys(j + 1) - ys(j)) * t;\n const b = bs(j) + (bs(j + 1) - bs(j)) * t;\n if (Number.isFinite(y) && Number.isFinite(b)) {\n const top = Math.min(y, b);\n const h = Math.abs(b - y);\n out.push(\n transposed\n ? box(\n `${key}-${c}`,\n top - plot.y,\n left - plot.x,\n h,\n right - left,\n color,\n {\n opacity,\n },\n )\n : box(\n `${key}-${c}`,\n left - plot.x,\n top - plot.y,\n right - left,\n h,\n color,\n {\n opacity,\n },\n ),\n );\n }\n left = right;\n }\n return out;\n}\n\n/** Limits of `scenePrimitives` for the views budget */\nexport function primitiveLimits(scene: ChartScene) {\n const { plot } = scene.layout;\n const visible = scene.model.series.filter((s) => !s.hidden);\n const lines = visible.filter(\n (s) => s.type === \"line\" || s.type === \"area\",\n ).length;\n const scatters = visible.filter((s) => s.type === \"scatter\").length;\n const perLine = Math.max(150, SHAPE_BUDGET.linePoints / Math.max(1, lines));\n const maxDots = Math.max(\n 100,\n Math.min(\n SHAPE_BUDGET.dotsPerSeries,\n SHAPE_BUDGET.dots / Math.max(1, scatters),\n ),\n );\n return {\n perLine,\n options: {\n // decimation keeps up to 4 points per column\n columnWidth: Math.max(3, (plot.width * 4) / perLine),\n maxDots,\n maxBars: SHAPE_BUDGET.barsPerSeries,\n dotCell: Math.max(\n 4,\n Math.sqrt((plot.width * plot.height) / maxDots) * 1.15 + 1,\n ),\n },\n };\n}\n\nfunction drawData(scene: ChartScene): ReactElement[] {\n const { plot } = scene.layout;\n const { perLine, options } = primitiveLimits(scene);\n const primitives: ChartPrimitive[] = scenePrimitives(scene, options);\n const ox = plot.x;\n const oy = plot.y;\n const out: ReactElement[] = [];\n let dotsLeft: number = SHAPE_BUDGET.dots;\n let barsLeft: number = SHAPE_BUDGET.bars;\n primitives.forEach((p, k) => {\n const key = `${p.kind}${p.seriesIndex}-${k}`;\n if (p.kind === \"area\") {\n p.segments.forEach((run, r) =>\n out.push(\n ...areaStrips(\n `${key}-${r}`,\n run,\n p.baseline,\n p.color,\n p.opacity,\n plot,\n p.bottoms?.[r],\n p.horizontal,\n ),\n ),\n );\n return;\n }\n if (p.kind === \"line\") {\n let total = 0;\n for (const run of p.segments) total += run.length / 2;\n p.segments.forEach((run, r) => {\n const pts = thin(\n run,\n Math.max(\n 2,\n Math.round((perLine * run.length) / 2 / Math.max(1, total)),\n ),\n );\n if (pts.length === 2) {\n out.push(\n dot(\n `${key}-${r}`,\n pts[0] - ox,\n pts[1] - oy,\n p.width * 1.5,\n p.color,\n ),\n );\n return;\n }\n for (let i = 0; i + 3 < pts.length; i += 2) {\n out.push(\n segment(\n `${key}-${r}-${i}`,\n pts[i] - ox,\n pts[i + 1] - oy,\n pts[i + 2] - ox,\n pts[i + 3] - oy,\n p.width,\n p.color,\n ),\n );\n }\n });\n return;\n }\n if (p.kind === \"bars\") {\n const count = p.rects.length / 4;\n const stride =\n count > barsLeft ? Math.ceil(count / Math.max(1, barsLeft)) : 1;\n for (let i = 0; i < count; i += stride) {\n const [x, y, w, h] = p.rects.slice(i * 4, i * 4 + 4);\n const radius = Math.min(p.radius ?? 0, w / 2, h / 2);\n out.push(\n box(\n `${key}-${i}`,\n x - ox,\n y - oy,\n Math.max(w, 0.5),\n h,\n p.colors?.[i] ?? p.color,\n radius > 0.5 || p.opacity !== undefined\n ? {\n ...(radius > 0.5 ? { borderRadius: radius } : null),\n ...(p.opacity !== undefined ? { opacity: p.opacity } : null),\n }\n : undefined,\n ),\n );\n }\n barsLeft = Math.max(0, barsLeft - Math.ceil(count / stride));\n return;\n }\n const count = p.dots.length / 3;\n const stride =\n count > dotsLeft ? Math.ceil(count / Math.max(1, dotsLeft)) : 1;\n const stroke = p.stroke ?? 0;\n for (let i = 0; i < count; i += stride) {\n const color = p.colors[i] ?? \"#888\";\n out.push(\n dot(\n `${key}-${i}`,\n p.dots[i * 3] - ox,\n p.dots[i * 3 + 1] - oy,\n p.dots[i * 3 + 2],\n // rings (hollow box plot outliers): the border only\n p.opacity > 0 ? color : \"transparent\",\n stroke > 0 && p.opacity < 1\n ? { borderWidth: stroke, borderColor: color, opacity: 1 }\n : { opacity: p.opacity },\n ),\n );\n }\n dotsLeft = Math.max(0, dotsLeft - Math.ceil(count / stride));\n });\n return out;\n}\n\n// ------------------------------------------------------------ background\n\nconst css = (c: Rgba, alpha?: number) => toCss(c, alpha);\n\nfunction drawBackground(scene: ChartScene, family?: string): ReactElement[] {\n const { width, theme, model, layout, annotations } = scene;\n const { plot, scales, y2Ticks } = layout;\n // horizontal charts: the value axis along the bottom, the x axis on the left\n const horizontal = scales.horizontal;\n const bottomAxis = horizontal ? model.y : model.x;\n const leftAxis = horizontal ? model.x : model.y;\n const bottomTicks = horizontal ? layout.yTicks : layout.xTicks;\n const leftTicks = horizontal ? layout.xTicks : layout.yTicks;\n const bottomPx = horizontal ? scales.yToPx : scales.xToPx;\n const leftPx = horizontal ? scales.xToPx : scales.yToPx;\n const fs = theme.fontSize;\n const out: ReactElement[] = [];\n\n annotations.forEach((a, i) => {\n if (a.type !== \"rect\") return;\n const r = annotationRect(a, scales);\n if (r.width <= 0 || r.height <= 0) return;\n out.push(\n box(`area-${i}`, r.x, r.y, r.width, r.height, css(a.color, a.opacity)),\n );\n });\n\n const grid = css(theme.grid);\n if (leftAxis.grid) {\n leftTicks.values.forEach((v, i) => {\n const py = leftPx(v);\n if (py < plot.y - 1 || py > plot.y + plot.height + 1) return;\n out.push(box(`ygrid-${i}`, plot.x, crisp(py), plot.width, 1, grid));\n });\n }\n if (bottomAxis.grid) {\n bottomTicks.values.forEach((v, i) => {\n const px = bottomPx(v);\n if (px < plot.x - 1 || px > plot.x + plot.width + 1) return;\n out.push(box(`xgrid-${i}`, crisp(px), plot.y, 1, plot.height, grid));\n });\n }\n\n const line = Math.ceil(fs * 1.4);\n const tick: TextOptions = { size: fs, color: css(theme.textMuted), family };\n const title: TextOptions = {\n size: fs + 1,\n weight: 500,\n color: css(theme.text, 0.8),\n family,\n };\n const bottom = plot.y + plot.height;\n\n if (bottomAxis.visible) {\n out.push(\n box(\"xaxis\", plot.x, crisp(bottom), plot.width, 1, css(theme.axis)),\n );\n let lastRight = -Infinity;\n bottomTicks.values\n .map((v, i) => ({ px: bottomPx(v), text: bottomTicks.labels[i] ?? \"\" }))\n .sort((a, b) => a.px - b.px)\n .forEach(({ px, text }, i) => {\n if (!text || px < plot.x - 0.5 || px > plot.x + plot.width + 0.5)\n return;\n const w = measureChartText(text, `400 ${fs}px sans-serif`);\n const left = Math.max(0, Math.min(width - w, px - w / 2));\n if (left < lastRight + 6) return;\n lastRight = left + w;\n out.push(\n label(\n `xtick-${i}`,\n text,\n left + w / 2,\n bottom + 7,\n \"center\",\n \"top\",\n tick,\n width,\n ),\n );\n });\n if (bottomAxis.title)\n out.push(\n label(\n \"xtitle\",\n bottomAxis.title,\n plot.x + plot.width / 2,\n bottom + line + 10,\n \"center\",\n \"top\",\n title,\n width,\n ),\n );\n }\n\n if (leftAxis.visible) {\n let lastBottom = -Infinity;\n leftTicks.values\n .map((v, i) => ({ py: leftPx(v), text: leftTicks.labels[i] ?? \"\" }))\n .sort((a, b) => a.py - b.py)\n .forEach(({ py, text }, i) => {\n if (!text || py < plot.y - 0.5 || py > plot.y + plot.height + 0.5)\n return;\n // category rows of horizontal charts never overlap\n if (horizontal) {\n if (py - (fs + 2) / 2 < lastBottom) return;\n lastBottom = py + (fs + 2) / 2;\n }\n out.push(\n label(\n `ytick-${i}`,\n text,\n plot.x - 8,\n py,\n \"right\",\n \"middle\",\n tick,\n width,\n ),\n );\n });\n if (leftAxis.title)\n out.push(\n label(\n \"ytitle\",\n leftAxis.title,\n line / 2 + 4,\n plot.y + plot.height / 2,\n \"center\",\n \"middle\",\n title,\n width,\n {\n transform: [{ rotate: \"-90deg\" }],\n },\n ),\n );\n }\n\n const y2 = horizontal ? null : model.y2;\n if (y2 && y2Ticks && y2.visible) {\n const right = plot.x + plot.width;\n y2Ticks.values.forEach((v, i) => {\n const py = scales.yToPx(v);\n const text = y2Ticks.labels[i];\n if (!text || py < plot.y - 0.5 || py > plot.y + plot.height + 0.5) return;\n out.push(\n label(\n `y2tick-${i}`,\n text,\n right + 8,\n py,\n \"left\",\n \"middle\",\n tick,\n width,\n ),\n );\n });\n if (y2.title)\n out.push(\n label(\n \"y2title\",\n y2.title,\n width - line / 2 - 4,\n plot.y + plot.height / 2,\n \"center\",\n \"middle\",\n title,\n width,\n {\n transform: [{ rotate: \"90deg\" }],\n },\n ),\n );\n }\n\n const ramp = scene.legend?.colors;\n if (ramp) {\n // visual map: the ramp in even steps, the values at its ends\n const { bar, stops } = ramp;\n const step = bar.width / Math.max(1, stops.length);\n out.push(\n <View\n key=\"color-legend\"\n {...part(C, \"color-legend\")}\n style={{\n position: \"absolute\",\n left: bar.x,\n top: bar.y,\n width: bar.width,\n height: bar.height,\n borderRadius: bar.height / 2,\n overflow: \"hidden\",\n flexDirection: \"row\",\n }}\n >\n {stops.map((c, k) => (\n <View\n key={k}\n style={{ width: step, height: bar.height, backgroundColor: c }}\n />\n ))}\n </View>,\n );\n ramp.ticks.forEach((t, k) =>\n out.push(\n box(\n `color-tick-${k}`,\n Math.round(t),\n bar.y - 2,\n 1,\n bar.height + 4,\n css(theme.text, 0.35),\n ),\n ),\n );\n ramp.labels.forEach((l, k) =>\n out.push(\n label(\n `color-label-${k}`,\n l.text,\n l.x,\n l.y,\n l.align,\n \"middle\",\n { size: 11, color: css(theme.textMuted), family },\n width,\n ),\n ),\n );\n }\n\n if (scene.legend) {\n for (const e of scene.legend.entries) {\n // coordinates relative to the entry box\n const cy = e.box.height / 2;\n const swatch =\n e.shape === \"dot\"\n ? dot(\"swatch\", 5, cy, 8, e.color)\n : e.shape === \"line\"\n ? box(\"swatch\", 0, cy - 1, 10, 2, e.color)\n : box(\"swatch\", 1, cy - 4, 8, 8, e.color);\n out.push(\n <View\n key={`legend-${e.id}`}\n style={{\n position: \"absolute\",\n left: e.box.x,\n top: e.box.y,\n width: e.box.width,\n height: e.box.height,\n opacity: e.hidden ? 0.45 : 1,\n }}\n {...part(C, \"legend-item\", { hidden: e.hidden })}\n >\n {swatch}\n {label(\n \"name\",\n e.name,\n 14,\n cy,\n \"left\",\n \"middle\",\n { size: 12, color: css(theme.textMuted), family },\n e.box.width,\n e.hidden ? { textDecorationLine: \"line-through\" } : undefined,\n )}\n </View>,\n );\n }\n }\n return out;\n}\n\n// ------------------------------------------------------------ foreground\n\nfunction drawForeground(scene: ChartScene, family?: string): ReactElement[] {\n const { theme, annotations, layout } = scene;\n const { plot, scales } = layout;\n const fs = theme.fontSize;\n const ox = plot.x;\n const oy = plot.y;\n const fw = plot.width;\n const halo = css(theme.background, 0.9);\n const labelHeight = fs + 4;\n const out: ReactElement[] = [];\n\n // waterfall connectors: thin dashed lines between the bars\n scene.connectors.forEach((c, i) => {\n const along = c.y0 === c.y1;\n out.push(\n ...(along\n ? dashedLine(\n `connector-${i}`,\n \"y\",\n crisp(c.y0, c.width) - oy,\n Math.min(c.x0, c.x1) - ox,\n Math.abs(c.x1 - c.x0),\n c.width,\n c.color,\n c.dash,\n )\n : dashedLine(\n `connector-${i}`,\n \"x\",\n crisp(c.x0, c.width) - ox,\n Math.min(c.y0, c.y1) - oy,\n Math.abs(c.y1 - c.y0),\n c.width,\n c.color,\n c.dash,\n )),\n );\n });\n\n // dependency arrows (Gantt charts): axis-aligned legs and a border triangle\n scene.arrows.forEach((a, i) => {\n out.push(...arrowViews(`arrow-${i}`, a, ox, oy));\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"line\") return;\n const color = css(a.color);\n const where = annotationLine(a, scales);\n if (!where.vertical) {\n const py = where.at;\n out.push(\n ...dashedLine(\n `line-${i}`,\n \"y\",\n crisp(py, a.width) - oy,\n 0,\n plot.width,\n a.width,\n color,\n a.dash,\n ),\n );\n if (a.label)\n out.push(\n label(\n `line-label-${i}`,\n a.label,\n plot.width - 6,\n py - 3 - oy,\n \"right\",\n \"bottom\",\n { size: fs, weight: 500, color, halo, family },\n fw,\n ),\n );\n } else {\n const px = where.at;\n out.push(\n ...dashedLine(\n `line-${i}`,\n \"x\",\n crisp(px, a.width) - ox,\n 0,\n plot.height,\n a.width,\n color,\n a.dash,\n ),\n );\n if (a.label)\n out.push(\n label(\n `line-label-${i}`,\n a.label,\n px + 5 - ox,\n 5,\n \"left\",\n \"top\",\n { size: fs, weight: 500, color, halo, family },\n fw,\n ),\n );\n }\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"rect\") return;\n const title = annotationTitleLayout(\n a,\n annotationRect(a, scales),\n fs,\n (text, size, weight) =>\n measureChartText(text, `${weight} ${size}px sans-serif`),\n );\n if (!title) return;\n const color = css(a.labelColor);\n const muted = css(theme.textMuted);\n title.parts.forEach((p, k) => {\n const key = `area-${p.kind}-${i}-${k}`;\n const cy = p.y + p.height / 2 - oy;\n if (p.kind === \"badge\") {\n const h = p.height - 2;\n out.push(\n box(\n `${key}-pill`,\n p.x - ox,\n cy - h / 2,\n p.width,\n h,\n css(a.labelColor, 0.16),\n { borderRadius: h / 2 },\n ),\n label(\n key,\n p.text,\n p.x - ox + p.width / 2,\n cy,\n \"center\",\n \"middle\",\n { size: p.size, weight: p.weight, color, family },\n fw,\n ),\n );\n return;\n }\n out.push(\n label(\n p.kind === \"label\" ? `area-label-${i}` : key,\n p.text,\n p.x - ox,\n cy,\n \"left\",\n \"middle\",\n {\n size: p.size,\n weight: p.weight,\n color: p.kind === \"label\" ? color : muted,\n family,\n },\n fw,\n ),\n );\n });\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"text\" || !a.text) return;\n const w = measureChartText(a.text, `${a.weight} ${fs}px sans-serif`);\n const b = annotationTextBox(a, scales, w, labelHeight);\n out.push(\n label(\n `text-${i}`,\n a.text,\n b.x - ox,\n b.y + b.height / 2 - oy,\n \"left\",\n \"middle\",\n { size: fs, weight: a.weight, color: css(a.color), halo, family },\n fw,\n ),\n );\n });\n\n const pointColor = css(theme.text, 0.85);\n scene.pointLabels.forEach(({ label: l, box: b }, i) => {\n // inside a bar: its contrasting color, no halo, cut at the end of the bar\n const bar = l.placement === \"inside\" ? l.bar : undefined;\n out.push(\n label(\n `point-label-${i}`,\n l.text,\n b.x - ox,\n b.y + b.height / 2 - oy,\n \"left\",\n \"middle\",\n l.color\n ? { size: fs, color: l.color, family }\n : { size: fs, color: pointColor, halo, family },\n fw,\n bar\n ? { width: Math.max(b.width, bar.x + bar.width - 6 - b.x) }\n : undefined,\n ),\n );\n });\n return out;\n}\n\nconst clip = (plot: ChartRect): ViewStyle => ({\n position: \"absolute\",\n left: plot.x,\n top: plot.y,\n width: plot.width,\n height: plot.height,\n overflow: \"hidden\",\n});\n\n/**\n * Everything but the hover state: axes, grid, legend, annotations, data and\n * labels (cached by the caller while the model, view and size are the same)\n */\nexport function drawStatic(scene: ChartScene, family?: string): ReactNode {\n const { plot } = scene.layout;\n return (\n <>\n {drawBackground(scene, family)}\n <View key=\"data\" style={clip(plot)} {...part(C, \"data\")}>\n {drawData(scene)}\n </View>\n <View key=\"labels\" style={clip(plot)} {...part(C, \"labels\")}>\n {drawForeground(scene, family)}\n </View>\n </>\n );\n}\n\n/** Crosshair, highlighted points, dragged point and the default tooltip */\nexport function drawHover(\n scene: ChartScene,\n family: string | undefined,\n customTooltip: boolean,\n): ReactNode {\n const { theme, layout, hover, dragging } = scene;\n const { plot } = layout;\n const background = css(theme.background);\n const out: ReactElement[] = [];\n if (hover && hover.crosshairY !== null) {\n out.push(\n <View\n key=\"crosshair-y\"\n style={StyleSheet.absoluteFill}\n {...part(C, \"crosshair\")}\n >\n {dashedLine(\n \"dash\",\n \"y\",\n Math.round(hover.crosshairY),\n plot.x,\n plot.width,\n 1,\n css(theme.textMuted, 0.55),\n [3, 3],\n )}\n </View>,\n );\n }\n if (hover && hover.crosshairX !== null) {\n out.push(\n <View\n key=\"crosshair\"\n style={StyleSheet.absoluteFill}\n {...part(C, \"crosshair\")}\n >\n {dashedLine(\n \"dash\",\n \"x\",\n Math.round(hover.crosshairX),\n plot.y,\n plot.height,\n 1,\n css(theme.textMuted, 0.55),\n [3, 3],\n )}\n </View>,\n );\n }\n hover?.marks.forEach((m, i) => {\n if (m.kind === \"band\") {\n out.push(\n box(`mark-${i}`, m.x, m.y, m.width, m.height, css(theme.text, 0.05), {\n borderRadius: 6,\n }),\n );\n return;\n }\n if (m.kind === \"guide\") {\n // the row / column of the hovered heatmap cell\n out.push(\n box(`mark-${i}`, m.x, m.y, m.width, m.height, css(theme.text, 0.06)),\n );\n return;\n }\n if (m.kind === \"cell\") {\n // lifted: a little larger, a shadow, a ring inside its edge\n const grow = Math.min(3, m.width * 0.06, m.height * 0.06);\n const inset = Math.min(2, m.width / 5, m.height / 5);\n out.push(\n box(\n `mark-${i}`,\n m.x - grow,\n m.y - grow,\n m.width + grow * 2,\n m.height + grow * 2,\n m.color,\n {\n borderRadius: Math.max(2, m.radius),\n shadowColor: \"#0f172a\",\n shadowOpacity: 0.45,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 3 },\n elevation: 4,\n },\n ),\n );\n if (m.width > 8 && m.height > 8)\n out.push(\n box(\n `ring-${i}`,\n m.x - grow + inset,\n m.y - grow + inset,\n m.width + (grow - inset) * 2,\n m.height + (grow - inset) * 2,\n \"transparent\",\n {\n borderRadius: Math.max(1, m.radius - inset / 2),\n borderWidth: 1.5,\n borderColor: m.ring,\n },\n ),\n );\n return;\n }\n // soft halo, then the dot with a thin ring in the background color\n out.push(\n dot(`halo-${i}`, m.x, m.y, m.size + 8, m.halo),\n dot(`mark-${i}`, m.x, m.y, m.size, m.color, {\n borderWidth: 2,\n borderColor: background,\n }),\n );\n });\n if (dragging) {\n out.push(\n <View key=\"drag\" {...part(C, \"drag\")} style={StyleSheet.absoluteFill}>\n {dot(\n \"ghost\",\n dragging.x,\n dragging.y,\n dragging.size + 2,\n dragging.color,\n {\n opacity: 0.85,\n borderWidth: 2,\n borderColor: background,\n },\n )}\n </View>,\n );\n }\n const tip = hover?.tooltip;\n if (tip && !customTooltip) {\n const { box: b, lineHeight, padding, content } = tip;\n const text = css(theme.text);\n const muted = css(theme.textMuted);\n const font = (weight: number, color: string): TextStyle => ({\n fontSize: 12,\n lineHeight,\n color,\n fontWeight: String(weight) as TextStyle[\"fontWeight\"],\n includeFontPadding: false,\n ...(family ? { fontFamily: family } : null),\n });\n const swatch = (color: string) => (\n <View\n style={{\n width: 8,\n height: 8,\n borderRadius: 4,\n marginRight: 6,\n backgroundColor: color,\n }}\n />\n );\n const row: ViewStyle = {\n height: lineHeight,\n flexDirection: \"row\",\n alignItems: \"center\",\n };\n out.push(\n <View\n key=\"tooltip\"\n {...part(C, \"tooltip\")}\n style={[\n tooltipCard(scene),\n {\n left: b.x,\n top: b.y,\n width: b.width,\n height: b.height,\n paddingHorizontal: padding + 1,\n paddingVertical: padding - 1,\n },\n ]}\n >\n {tip.text\n ? tip.text.map((t, i) => (\n <Text key={i} numberOfLines={1} style={font(400, text)}>\n {t}\n </Text>\n ))\n : [\n <View key=\"title\" style={row}>\n {content.titleColor ? swatch(content.titleColor) : null}\n <Text\n numberOfLines={1}\n style={[font(600, text), { flexShrink: 1 }]}\n >\n {content.title}\n </Text>\n </View>,\n ...(content.subtitle\n ? [\n <View key=\"subtitle\" style={row}>\n <Text\n numberOfLines={1}\n style={[\n font(400, muted),\n {\n fontSize: 11,\n paddingLeft: content.titleColor ? 14 : 0,\n },\n ]}\n >\n {content.subtitle}\n </Text>\n </View>,\n ]\n : []),\n // a label column (after the swatch column) and right-aligned values\n ...content.rows.map((r, i) => (\n <View key={i} style={row}>\n {tip.swatchWidth > 0 ? (\n <View style={{ width: tip.swatchWidth }}>\n {r.color ? swatch(r.color) : null}\n </View>\n ) : null}\n <Text\n numberOfLines={1}\n style={[font(400, muted), { flexShrink: 1 }]}\n >\n {r.name}\n </Text>\n <Text\n numberOfLines={1}\n style={[\n font(600, text),\n {\n flexGrow: 1,\n marginLeft: 16,\n textAlign: \"right\",\n fontVariant: [\"tabular-nums\"],\n },\n ]}\n >\n {r.value}\n </Text>\n </View>\n )),\n ]}\n </View>,\n );\n }\n return out;\n}\n\n/** Look of the tooltips (default and `renderTooltip` content) */\nexport const tooltipCard = (scene: ChartScene): ViewStyle => ({\n position: \"absolute\",\n backgroundColor: css(scene.theme.background),\n borderColor: css(scene.theme.axis),\n borderWidth: 1,\n borderRadius: 8,\n shadowColor: \"#0f172a\",\n shadowOpacity: 0.18,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 6 },\n elevation: 6,\n});\n"],"mappings":"qUAgCA,IAAamB,EAAe,CAE1B,WAAY,KAEZ,cAAe,IAEf,KAAM,IAEN,cAAe,IAEf,KAAM,KAEN,YAAa,IAEb,OAAQ,GACV,EAEMC,EAAI,QAgBJC,EAAgB,GAAiB,KAAK,KAAKC,EAAO,IAAI,EAGtDC,GAAS,EAAc,IAC3B,KAAK,KACHvB,EAAAA,iBAAiBwB,EAAM,GAAGC,EAAE,QAAU,IAAI,GAAGA,EAAE,KAAK,cAAc,EAAI,IACpEA,EAAE,KAAO,CACb,EAOF,SAASC,EACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACc,CACd,IAAMC,EAAKN,EAAaI,EAAE,IAAI,EACxBG,GAAOD,EAAKF,EAAE,MAAQ,EACtBI,EAAIN,EAAMC,EAAMC,CAAC,EACjBK,EACJC,IAAW,MACPC,EAAIJ,EACJG,IAAW,SACTC,EAAIL,EAAKC,EACTI,EAAIL,EAAK,EACXM,EACJC,IAAU,OACN,CAAE,KAAMC,EAAG,MAAON,CAAE,EACpBK,IAAU,QACR,CAAE,MAAOE,EAAaD,EAAG,MAAON,CAAE,EAClC,CAAE,KAAMM,EAAIN,EAAI,EAAG,MAAOA,CAAE,EACpC,OACE,EAAAX,EAAA,IAAA,CAACjB,EAAAA,KAAD,CAEE,cAAe,EACf,MAAO,CACL,CACE,SAAU,WACV,MACA,GAAGgC,EACH,UAAWC,EACX,SAAUT,EAAE,KACZ,WAAYE,EACZ,MAAOF,EAAE,MACT,WAAY,OAAOA,EAAE,QAAU,GAAG,EAClC,mBAAoB,GACpB,GAAIA,EAAE,OAAS,CAAE,WAAYA,EAAE,MAAO,EAAI,KAC1C,GAAIA,EAAE,KACF,CACE,gBAAiBA,EAAE,KACnB,iBAAkB,EAClB,iBAAkB,CAAE,MAAO,EAAG,OAAQ,CAAE,CAC1C,EACA,IACN,EACAY,CACF,EAEC,SAAAb,CACG,EA1BCc,CA0BD,CAEV,CAIA,IAAMC,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,KAEA,EAAArB,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,MAAO,CACL,CACE,SAAU,WACV,KAAMiC,EACN,IAAKH,EACL,QACA,SACA,gBAAiBQ,CACnB,EACAH,CACF,CACD,EAZMC,CAYN,EAGGG,GACJ,EACA,EACA,EACA,EACA,EACA,IAEAF,EAAID,EAAKI,EAAKC,EAAI,EAAGC,EAAKD,EAAI,EAAGA,EAAGA,EAAGH,EAAO,CAC5C,aAAcG,EAAI,EAClB,GAAGN,CACL,CAAC,EAGGQ,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAMC,EAAKC,EAAKC,EACVC,EAAKC,EAAKC,EACVC,EAAS,KAAK,MAAMN,EAAIG,CAAE,EAAII,EACpC,OAAOd,EACLD,GACCU,EAAKD,GAAM,EAAIK,EAAS,GACxBD,EAAKD,GAAM,EAAIG,EAAQ,EACxBD,EACAC,EACAb,EACA,CACE,aAAca,EAAQ,EACtB,UAAW,CAAC,CAAE,OAAQ,GAAG,KAAK,MAAMJ,EAAIH,CAAE,EAAE,IAAK,CAAC,CACpD,CACF,CACF,EAGA,SAAgBQ,EACd,EACA,EACA,EAAcnC,EAAa,OACP,CACpB,IAAIoC,EAAUC,EAAK,OAAQ,GAAM,OAAO,SAASC,CAAC,GAAKA,GAAK,CAAC,EAEzDF,EAAQ,OAAS,IAAG,EAAU,CAAC,GAAGA,EAAS,GAAGA,CAAO,GACzD,IAAMG,EAASH,EAAQ,QAAQ,EAAG,IAAMI,EAAIC,EAAG,CAAC,EAChD,GAAI,CAACL,EAAQ,QAAUG,GAAU,EAAG,MAAO,CAAC,CAAC,EAAGN,CAAM,CAAC,EACvD,IAAMS,EAAQT,EAASM,GAAWH,EAAQ,OAAS,GAC7CO,EAAQD,EAAOE,EAAMF,EAAOE,EAAM,EAClCC,EAA0B,CAAC,EAC7BC,EAAK,EACT,IAAK,IAAIC,EAAI,EAAGD,EAAKb,EAAQ,GAAKc,EAAI,GAAKX,EAAQ,OAAQ,CACzD,IAAMY,EAAOZ,EAAQW,GAAKJ,EACtBI,EAAI,GAAM,GAAKC,EAAO,GAAGH,EAAI,KAAK,CAACC,EAAI,KAAK,IAAIE,EAAMf,EAASa,CAAE,CAAC,CAAC,EACvE,GAAM,KAAK,IAAIE,EAAM,EAAG,CAC1B,CACA,OAAOH,CACT,CAEA,IAAMI,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAEAd,EAASF,EAAQI,CAAI,CAAC,CAAC,KAAK,CAACa,EAAOC,GAAM,IACxCC,IAAS,IACLhC,EAAI,GAAGD,EAAI,GAAG4B,IAAKM,EAAOH,EAAOJ,EAAIK,EAAKjB,EAAOb,CAAK,EACtDD,EAAI,GAAGD,EAAI,GAAG4B,IAAKD,EAAIO,EAAOH,EAAOhB,EAAOiB,EAAK9B,CAAK,CAC5D,EAEIiC,GAAS,EAAW,EAAQ,IAAM,KAAK,MAAMhB,CAAC,EAAI,GAAMJ,EAAQ,EAMzDqB,GACX,EACA,EACA,EACA,IACmB,CACnB,IAAMV,EAAsB,CAAC,EACvBnC,EAAI8C,EAAM,MACVC,EAAMD,EAAM,OAClB,IAAK,IAAIE,EAAI,EAAGA,EAAID,EAAI,OAAQ,IAAK,CACnC,IAAME,EAAIF,EAAIC,EAAI,GACZE,EAAIH,EAAIC,GACRG,EAAK,KAAK,IAAIF,EAAE,EAAGC,EAAE,CAAC,EAAIE,EAC1BC,EAAK,KAAK,IAAIJ,EAAE,EAAGC,EAAE,CAAC,EAAII,EAEhCnB,EAAI,KACFc,EAAE,IAAMC,EAAE,EACNxC,EACE,GAAGD,EAAI,GAAGuC,IACVG,EAAKnD,EAAI,EACTqD,EAAKrD,EAAI,EACT,KAAK,IAAIkD,EAAE,EAAID,EAAE,CAAC,EAAIjD,EACtBA,EACA8C,EAAM,KACR,EACApC,EACE,GAAGD,EAAI,GAAGuC,IACVG,EAAKnD,EAAI,EACTqD,EAAKrD,EAAI,EACTA,EACA,KAAK,IAAIkD,EAAE,EAAID,EAAE,CAAC,EAAIjD,EACtB8C,EAAM,KACR,CACN,CACF,CACA,GAAM,CAACS,EAAKC,EAAIC,GAAMX,EAAM,KACtBvB,EAAS,KAAK,MAClBgC,EAAI,GAAKC,EAAG,EAAIC,EAAG,GAAK,EACxBF,EAAI,GAAKC,EAAG,EAAIC,EAAG,GAAK,CAC1B,EACMC,EAAO,KAAK,MAAMD,EAAG,EAAID,EAAG,EAAGC,EAAG,EAAID,EAAG,CAAC,EAAI,EAC9CG,EAAQ,cACRC,EAAmB,CAAE,SAAU,WAAY,MAAO,EAAG,OAAQ,CAAE,EAC/DC,GAASL,EAAG,EAAIC,EAAG,GAAK,EACxBK,GAASN,EAAG,EAAIC,EAAG,GAAK,EAC9B,GAAI,KAAK,IAAIF,EAAI,EAAIM,CAAK,GAAK,KAAK,IAAIN,EAAI,EAAIO,CAAK,EAAG,CACtD,IAAMC,EAAQR,EAAI,EAAIM,EACtB,OAAO,OAAOD,EAAO,CACnB,MAAOG,EAAQF,EAAQN,EAAI,GAAKH,EAChC,IAAKG,EAAI,EAAIG,EAAOJ,EACpB,eAAgBI,EAChB,kBAAmBA,EACnB,eAAgBC,EAChB,kBAAmBA,EACnB,GAAII,EACA,CAAE,gBAAiBxC,EAAQ,gBAAiBuB,EAAM,KAAM,EACxD,CAAE,iBAAkBvB,EAAQ,iBAAkBuB,EAAM,KAAM,CAChE,CAAC,CACH,KAAO,CACL,IAAMkB,EAAOT,EAAI,EAAIO,EACrB,OAAO,OAAOF,EAAO,CACnB,KAAML,EAAI,EAAIG,EAAON,EACrB,KAAMY,EAAOF,EAAQP,EAAI,GAAKD,EAC9B,gBAAiBI,EACjB,iBAAkBA,EAClB,gBAAiBC,EACjB,iBAAkBA,EAClB,GAAIK,EACA,CAAE,eAAgBzC,EAAQ,eAAgBuB,EAAM,KAAM,EACtD,CAAE,kBAAmBvB,EAAQ,kBAAmBuB,EAAM,KAAM,CAClE,CAAC,CACH,CAEA,OADAX,EAAI,MAAK,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAiC,OAAQ,EAA9B,GAAGoC,EAAI,MAAuB,CAAC,EAC5C0B,CACT,EAKA,SAAS8B,EAAK,EAAwB,EAAuB,CAC3D,IAAM,EAAIxB,EAAI,OAAS,EACjByB,EAAS,EAAIhC,EAAM,KAAK,KAAK,EAAIA,CAAG,EAAI,EACxCC,EAAgB,CAAC,EACvB,IAAK,IAAIE,EAAI,EAAGA,EAAI,EAAG,GAAK6B,EAAQ,CAClC,IAAM5D,EAAImC,EAAIJ,EAAI,GACZlC,EAAIsC,EAAIJ,EAAI,EAAI,GAChBW,EAAIb,EAAI,OACVa,GAAK,KAAK,MAAM1C,EAAI6B,EAAIa,EAAI,GAAI7C,EAAIgC,EAAIa,EAAI,EAAE,EAAI,KACtDb,EAAI,KAAK7B,EAAGH,CAAC,CACf,CACA,IAAMgE,EAAK1B,EAAI,EAAI,EAAI,GACjB2B,EAAK3B,EAAI,EAAI,EAAI,GACjBO,EAAIb,EAAI,OAEd,OADI,EAAI,IAAMA,EAAIa,EAAI,KAAOmB,GAAMhC,EAAIa,EAAI,KAAOoB,IAAKjC,EAAI,KAAKgC,EAAIC,CAAE,EAC/DjC,CACT,CAMA,SAASkC,EACP,EACA,EACA,EACA,EACA,EACA,EAEA,EAEA,EAAa,GACG,CAEhB,IAAM5B,EAAM6B,EACRC,EAAO,KAAK,EAAG,IAAMA,EAAOlC,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAE,EAClDkC,EACEC,EAAOF,EACT,CAAE,EAAGG,EAAM,EAAG,EAAGA,EAAM,EAAG,MAAOA,EAAM,OAAQ,OAAQA,EAAM,KAAM,EACnEA,EACEC,EAAIjC,EAAI,OAAS,EACvB,GAAIiC,EAAI,EAAG,MAAO,CAAC,EAEnB,IAAMC,EAAUlC,EAAI,IAAMA,EAAIiC,EAAI,EAAI,GAChCtC,EAAM,GAAeuC,EAAUtC,EAAIqC,EAAI,EAAIrC,EAC3CuC,EAAM,GAAcnC,EAAIL,EAAGC,CAAC,EAAI,GAChCwC,EAAM,GAAcpC,EAAIL,EAAGC,CAAC,EAAI,EAAI,GACpCyC,EAAM,GAAeC,EAASA,EAAO3C,EAAGC,CAAC,GAAK2C,EAC9CrC,EAAO,KAAK,IAAI6B,EAAK,EAAGI,EAAG,CAAC,CAAC,EAC7BK,EAAK,KAAK,IAAIT,EAAK,EAAIA,EAAK,MAAOI,EAAGF,EAAI,CAAC,CAAC,EAClD,GAAIO,GAAMtC,EAAM,MAAO,CAAC,EACxB,IAAMuC,EAAS,KAAK,IAAI,EAAGV,EAAK,MAAQlF,EAAa,WAAW,EAC1D6C,EAAsB,CAAC,EACzBgD,EAAI,EACR,IAAK,IAAIC,EAAO,KAAK,MAAMzC,CAAI,EAAG0C,EAAI,EAAGD,EAAOH,EAAI,IAAK,CACvD,IAAMlB,EAAQ,KAAK,IAAI,KAAK,KAAKkB,CAAE,EAAG,KAAK,MAAMG,EAAOF,CAAM,CAAC,EACzDI,GAAOF,EAAOrB,GAAS,EAC7B,KAAOoB,EAAIT,EAAI,GAAKE,EAAGO,EAAI,CAAC,EAAIG,GAAK,IACrC,IAAMnC,EAAKyB,EAAGO,CAAC,EACThE,EAAKyD,EAAGO,EAAI,CAAC,EACbI,EAAIpE,IAAOgC,EAAK,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAImC,EAAMnC,IAAOhC,EAAKgC,EAAG,CAAC,EACnEhD,EAAI0E,EAAGM,CAAC,GAAKN,EAAGM,EAAI,CAAC,EAAIN,EAAGM,CAAC,GAAKI,EAClCxD,EAAI+C,EAAGK,CAAC,GAAKL,EAAGK,EAAI,CAAC,EAAIL,EAAGK,CAAC,GAAKI,EACxC,GAAI,OAAO,SAASpF,CAAC,GAAK,OAAO,SAAS4B,CAAC,EAAG,CAC5C,IAAM9B,EAAM,KAAK,IAAIE,EAAG4B,CAAC,EACnByD,EAAI,KAAK,IAAIzD,EAAI5B,CAAC,EACxBgC,EAAI,KACFmC,EACI5D,EACE,GAAGD,EAAI,GAAG4E,IACVpF,EAAMuE,EAAK,EACXY,EAAOZ,EAAK,EACZgB,EACAzB,EAAQqB,EACRzE,EACA,CACE,SACF,CACF,EACAD,EACE,GAAGD,EAAI,GAAG4E,IACVD,EAAOZ,EAAK,EACZvE,EAAMuE,EAAK,EACXT,EAAQqB,EACRI,EACA7E,EACA,CACE,SACF,CACF,CACN,CACF,CACA,EAAOoD,CACT,CACA,OAAO5B,CACT,CAGA,SAAgBsD,EAAgB,EAAmB,CACjD,GAAM,CAAE,QAASC,EAAM,OACjBC,EAAUD,EAAM,MAAM,OAAO,OAAQ,GAAM,CAACE,EAAE,MAAM,EACpDC,EAAQF,EAAQ,OACnB,GAAMC,EAAE,OAAS,QAAUA,EAAE,OAAS,MACzC,CAAC,CAAC,OACIE,EAAWH,EAAQ,OAAQ,GAAMC,EAAE,OAAS,SAAS,CAAC,CAAC,OACvDG,EAAU,KAAK,IAAI,IAAKzG,EAAa,WAAa,KAAK,IAAI,EAAGuG,CAAK,CAAC,EACpEG,EAAU,KAAK,IACnB,IACA,KAAK,IACH1G,EAAa,cACbA,EAAa,KAAO,KAAK,IAAI,EAAGwG,CAAQ,CAC1C,CACF,EACA,MAAO,CACL,UACA,QAAS,CAEP,YAAa,KAAK,IAAI,EAAItB,EAAK,MAAQ,EAAKuB,CAAO,EACnD,UACA,QAASzG,EAAa,cACtB,QAAS,KAAK,IACZ,EACA,KAAK,KAAMkF,EAAK,MAAQA,EAAK,OAAUwB,CAAO,EAAI,KAAO,CAC3D,CACF,CACF,CACF,CAEA,SAASC,EAAS,EAAmC,CACnD,GAAM,CAAE,QAASP,EAAM,OACjB,CAAE,UAAS,WAAYD,EAAgBC,CAAK,EAC5CQ,EAA+B5H,EAAAA,gBAAgBoH,EAAOS,CAAO,EAC7D/C,EAAKoB,EAAK,EACVlB,EAAKkB,EAAK,EACVrC,EAAsB,CAAC,EACzBiE,EAAmB9G,EAAa,KAChC+G,EAAmB/G,EAAa,KA4GpC,OA3GA4G,EAAW,SAAS,EAAG,IAAM,CAC3B,IAAMzF,EAAM,GAAGwC,EAAE,OAAOA,EAAE,YAAY,GAAGD,IACzC,GAAIC,EAAE,OAAS,OAAQ,CACrBA,EAAE,SAAS,SAAS,EAAK,IACvBd,EAAI,KACF,GAAGkC,EACD,GAAG5D,EAAI,GAAG,IACVgC,EACAQ,EAAE,SACFA,EAAE,MACFA,EAAE,QACFuB,EACAvB,EAAE,UAAU,GACZA,EAAE,UACJ,CACF,CACF,EACA,MACF,CACA,GAAIA,EAAE,OAAS,OAAQ,CACrB,IAAIqD,EAAQ,EACZ,IAAK,IAAM7D,KAAOQ,EAAE,SAAU,GAASR,EAAI,OAAS,EACpDQ,EAAE,SAAS,SAAS,EAAK,IAAM,CAC7B,IAAMF,EAAMkB,EACVxB,EACA,KAAK,IACH,EACA,KAAK,MAAOsD,EAAUtD,EAAI,OAAU,EAAI,KAAK,IAAI,EAAG6D,CAAK,CAAC,CAC5D,CACF,EACA,GAAIvD,EAAI,SAAW,EAAG,CACpBZ,EAAI,KACFvB,EACE,GAAGH,EAAI,GAAG8F,IACVxD,EAAI,GAAKK,EACTL,EAAI,GAAKO,EACTL,EAAE,MAAQ,IACVA,EAAE,KACJ,CACF,EACA,MACF,CACA,IAAK,IAAIZ,EAAI,EAAGA,EAAI,EAAIU,EAAI,OAAQ,GAAK,EACvCZ,EAAI,KACFnB,EACE,GAAGP,EAAI,GAAG8F,EAAE,GAAGlE,IACfU,EAAIV,GAAKe,EACTL,EAAIV,EAAI,GAAKiB,EACbP,EAAIV,EAAI,GAAKe,EACbL,EAAIV,EAAI,GAAKiB,EACbL,EAAE,MACFA,EAAE,KACJ,CACF,CAEJ,CAAC,EACD,MACF,CACA,GAAIA,EAAE,OAAS,OAAQ,CACrB,IAAMuD,EAAQvD,EAAE,MAAM,OAAS,EACzBiB,EACJsC,EAAQH,EAAW,KAAK,KAAKG,EAAQ,KAAK,IAAI,EAAGH,CAAQ,CAAC,EAAI,EAChE,IAAK,IAAIhE,EAAI,EAAGA,EAAImE,EAAO,GAAKtC,EAAQ,CACtC,GAAM,CAAC5D,EAAGH,EAAGH,EAAGwF,GAAKvC,EAAE,MAAM,MAAMZ,EAAI,EAAGA,EAAI,EAAI,CAAC,EAC7CoE,EAAS,KAAK,IAAIxD,EAAE,QAAU,EAAGjD,EAAI,EAAGwF,EAAI,CAAC,EACnDrD,EAAI,KACFzB,EACE,GAAGD,EAAI,GAAG4B,IACV/B,EAAI8C,EACJjD,EAAImD,EACJ,KAAK,IAAItD,EAAG,EAAG,EACfwF,EACAvC,EAAE,SAASZ,IAAMY,EAAE,MACnBwD,EAAS,IAAOxD,EAAE,UAAY,IAAA,GAC1B,CACE,GAAIwD,EAAS,GAAM,CAAE,aAAcA,CAAO,EAAI,KAC9C,GAAIxD,EAAE,UAAY,IAAA,GAAqC,KAAzB,CAAE,QAASA,EAAE,OAAQ,CACrD,EACA,IAAA,EACN,CACF,CACF,CACA,EAAW,KAAK,IAAI,EAAGoD,EAAW,KAAK,KAAKG,EAAQtC,CAAM,CAAC,EAC3D,MACF,CACA,IAAMsC,EAAQvD,EAAE,KAAK,OAAS,EACxBiB,EACJsC,EAAQJ,EAAW,KAAK,KAAKI,EAAQ,KAAK,IAAI,EAAGJ,CAAQ,CAAC,EAAI,EAC1DM,EAASzD,EAAE,QAAU,EAC3B,IAAK,IAAIZ,EAAI,EAAGA,EAAImE,EAAO,GAAKtC,EAAQ,CACtC,IAAMvD,EAAQsC,EAAE,OAAOZ,IAAM,OAC7BF,EAAI,KACFvB,EACE,GAAGH,EAAI,GAAG4B,IACVY,EAAE,KAAKZ,EAAI,GAAKe,EAChBH,EAAE,KAAKZ,EAAI,EAAI,GAAKiB,EACpBL,EAAE,KAAKZ,EAAI,EAAI,GAEfY,EAAE,QAAU,EAAItC,EAAQ,cACxB+F,EAAS,GAAKzD,EAAE,QAAU,EACtB,CAAE,YAAayD,EAAQ,YAAa/F,EAAO,QAAS,CAAE,EACtD,CAAE,QAASsC,EAAE,OAAQ,CAC3B,CACF,CACF,CACA,EAAW,KAAK,IAAI,EAAGmD,EAAW,KAAK,KAAKI,EAAQtC,CAAM,CAAC,CAC7D,CAAC,EACM/B,CACT,CAIA,IAAMwE,GAAO,EAAS,IAAmBpI,EAAAA,MAAM8G,EAAGuB,CAAK,EAEvD,SAASC,EAAe,EAAmB,EAAiC,CAC1E,GAAM,CAAE,QAAO,QAAO,QAAO,SAAQ,eAAgBnB,EAC/C,CAAE,OAAM,SAAQ,WAAYoB,EAE5B1G,EAAa2G,EAAO,WACpBC,EAAa5G,EAAa6G,EAAM,EAAIA,EAAM,EAC1CC,EAAW9G,EAAa6G,EAAM,EAAIA,EAAM,EACxCE,EAAc/G,EAAa0G,EAAO,OAASA,EAAO,OAClDM,EAAYhH,EAAa0G,EAAO,OAASA,EAAO,OAChDO,EAAWjH,EAAa2G,EAAO,MAAQA,EAAO,MAC9CO,EAASlH,EAAa2G,EAAO,MAAQA,EAAO,MAC5CQ,EAAKC,EAAM,SACXrF,EAAsB,CAAC,EAE7BsF,EAAY,SAAS,EAAG,IAAM,CAC5B,GAAI3F,EAAE,OAAS,OAAQ,OACvB,IAAM,EAAItD,EAAAA,OAAesD,EAAGiF,CAAM,EAC9B,EAAE,OAAS,GAAK,EAAE,QAAU,GAChC5E,EAAI,KACFzB,EAAI,QAAQ2B,IAAK,EAAE,EAAG,EAAE,EAAG,EAAE,MAAO,EAAE,OAAQsE,EAAI7E,EAAE,MAAOA,EAAE,OAAO,CAAC,CACvE,CACF,CAAC,EAED,IAAM4F,EAAOf,EAAIa,EAAM,IAAI,EACvBN,EAAS,MACXE,EAAU,OAAO,SAAS,EAAG,IAAM,CACjC,IAAMO,EAAKL,EAAO1F,CAAC,EACf+F,EAAKnD,EAAK,EAAI,GAAKmD,EAAKnD,EAAK,EAAIA,EAAK,OAAS,GACnDrC,EAAI,KAAKzB,EAAI,SAAS2B,IAAKmC,EAAK,EAAG5B,EAAM+E,CAAE,EAAGnD,EAAK,MAAO,EAAGkD,CAAI,CAAC,CACpE,CAAC,EAECV,EAAW,MACbG,EAAY,OAAO,SAAS,EAAG,IAAM,CACnC,IAAMS,EAAKP,EAASzF,CAAC,EACjBgG,EAAKpD,EAAK,EAAI,GAAKoD,EAAKpD,EAAK,EAAIA,EAAK,MAAQ,GAClDrC,EAAI,KAAKzB,EAAI,SAAS2B,IAAKO,EAAMgF,CAAE,EAAGpD,EAAK,EAAG,EAAGA,EAAK,OAAQkD,CAAI,CAAC,CACrE,CAAC,EAGH,IAAMG,EAAO,KAAK,KAAKN,EAAK,GAAG,EACzBO,EAAoB,CAAE,KAAMP,EAAI,MAAOZ,EAAIa,EAAM,SAAS,EAAG,QAAO,EACpEO,EAAqB,CACzB,KAAMR,EAAK,EACX,OAAQ,IACR,MAAOZ,EAAIa,EAAM,KAAM,EAAG,EAC1B,QACF,EACMzC,EAASP,EAAK,EAAIA,EAAK,OAE7B,GAAIwC,EAAW,QAAS,CACtB7E,EAAI,KACFzB,EAAI,QAAS8D,EAAK,EAAG5B,EAAMmC,CAAM,EAAGP,EAAK,MAAO,EAAGmC,EAAIa,EAAM,IAAI,CAAC,CACpE,EACA,IAAIQ,EAAY,KAChBb,EAAY,OACT,KAAK,EAAG,KAAO,CAAE,GAAIE,EAASzF,CAAC,EAAG,KAAMuF,EAAY,OAAO9E,IAAM,EAAG,EAAE,CAAC,CACvE,MAAM,EAAG,IAAMP,EAAE,GAAKC,EAAE,EAAE,CAAC,CAC3B,SAAS,CAAE,KAAI,QAAQ,IAAM,CAC5B,GAAI,CAACpC,GAAQiI,EAAKpD,EAAK,EAAI,IAAOoD,EAAKpD,EAAK,EAAIA,EAAK,MAAQ,GAC3D,OACF,IAAMxE,EAAI7B,EAAAA,iBAAiBwB,EAAM,OAAO4H,EAAG,cAAc,EACnDnC,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI5D,EAAQxB,EAAG4H,EAAK5H,EAAI,CAAC,CAAC,EACpDoF,EAAO4C,EAAY,IACvB,EAAY5C,EAAOpF,EACnBmC,EAAI,KACFtC,EACE,SAASwC,IACT1C,EACAyF,EAAOpF,EAAI,EACX+E,EAAS,EACT,SACA,MACA+C,EACAtG,CACF,CACF,EACF,CAAC,EACCwF,EAAW,OACb7E,EAAI,KACFtC,EACE,SACAmH,EAAW,MACXxC,EAAK,EAAIA,EAAK,MAAQ,EACtBO,EAAS8C,EAAO,GAChB,SACA,MACAE,EACAvG,CACF,CACF,CACJ,CAEA,GAAI0F,EAAS,QAAS,CACpB,IAAIe,EAAa,KACjBb,EAAU,OACP,KAAK,EAAG,KAAO,CAAE,GAAIE,EAAO1F,CAAC,EAAG,KAAMwF,EAAU,OAAO/E,IAAM,EAAG,EAAE,CAAC,CACnE,MAAM,EAAG,IAAMP,EAAE,GAAKC,EAAE,EAAE,CAAC,CAC3B,SAAS,CAAE,KAAI,QAAQ,IAAM,CAC5B,GAAI,GAACpC,GAAQgI,EAAKnD,EAAK,EAAI,IAAOmD,EAAKnD,EAAK,EAAIA,EAAK,OAAS,IAG9D,IAAIpE,EAAY,CACd,GAAIuH,GAAMJ,EAAK,GAAK,EAAIU,EAAY,OACpC,EAAaN,GAAMJ,EAAK,GAAK,CAC/B,CACApF,EAAI,KACFtC,EACE,SAASwC,IACT1C,EACA6E,EAAK,EAAI,EACTmD,EACA,QACA,SACAG,EACAtG,CACF,CACF,CAZA,CAaF,CAAC,EACC0F,EAAS,OACX/E,EAAI,KACFtC,EACE,SACAqH,EAAS,MACTW,EAAO,EAAI,EACXrD,EAAK,EAAIA,EAAK,OAAS,EACvB,SACA,SACAuD,EACAvG,EACA,CACE,UAAW,CAAC,CAAE,OAAQ,QAAS,CAAC,CAClC,CACF,CACF,CACJ,CAEA,IAAMH,EAAKjB,EAAa,KAAO6G,EAAM,GACrC,GAAI5F,GAAM6G,GAAW7G,EAAG,QAAS,CAC/B,IAAM0C,EAAQS,EAAK,EAAIA,EAAK,MAC5B0D,EAAQ,OAAO,SAAS,EAAG,IAAM,CAC/B,IAAMP,EAAKZ,EAAO,MAAMnF,CAAC,EACnBjC,EAAOuI,EAAQ,OAAO7F,GACxB,CAAC1C,GAAQgI,EAAKnD,EAAK,EAAI,IAAOmD,EAAKnD,EAAK,EAAIA,EAAK,OAAS,IAC9DrC,EAAI,KACFtC,EACE,UAAUwC,IACV1C,EACAoE,EAAQ,EACR4D,EACA,OACA,SACAG,EACAtG,CACF,CACF,CACF,CAAC,EACGH,EAAG,OACLc,EAAI,KACFtC,EACE,UACAwB,EAAG,MACHG,EAAQqG,EAAO,EAAI,EACnBrD,EAAK,EAAIA,EAAK,OAAS,EACvB,SACA,SACAuD,EACAvG,EACA,CACE,UAAW,CAAC,CAAE,OAAQ,OAAQ,CAAC,CACjC,CACF,CACF,CACJ,CAEA,IAAM2G,EAAOzC,EAAM,QAAQ,OAC3B,GAAIyC,EAAM,CAER,GAAM,CAAE,MAAK,SAAUA,EACjB7F,EAAO8F,EAAI,MAAQ,KAAK,IAAI,EAAGC,EAAM,MAAM,EACjDlG,EAAI,MACF,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,GAAII,EAAAA,KAAKc,EAAG,cAAc,EAC1B,MAAO,CACL,SAAU,WACV,KAAM6I,EAAI,EACV,IAAKA,EAAI,EACT,MAAOA,EAAI,MACX,OAAQA,EAAI,OACZ,aAAcA,EAAI,OAAS,EAC3B,SAAU,SACV,cAAe,KACjB,EAEC,SAAAC,EAAM,KAAK,EAAG,KACb,EAAAhJ,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,MAAO,CAAE,MAAOiE,EAAM,OAAQ8F,EAAI,OAAQ,gBAAiB/C,CAAE,CAC9D,EAFMrC,CAEN,CACF,CACG,EAnBA,cAmBA,CACR,EACAmF,EAAK,MAAM,SAAS,EAAG,IACrBhG,EAAI,KACFzB,EACE,cAAcsC,IACd,KAAK,MAAMuC,CAAC,EACZ6C,EAAI,EAAI,EACR,EACAA,EAAI,OAAS,EACbzB,EAAIa,EAAM,KAAM,GAAI,CACtB,CACF,CACF,EACAW,EAAK,OAAO,SAAS,EAAG,IACtBhG,EAAI,KACFtC,EACE,eAAemD,IACfsF,EAAE,KACFA,EAAE,EACFA,EAAE,EACFA,EAAE,MACF,SACA,CAAE,KAAM,GAAI,MAAO3B,EAAIa,EAAM,SAAS,EAAG,QAAO,EAChDhG,CACF,CACF,CACF,CACF,CAEA,GAAIkE,EAAM,OACR,IAAK,IAAM6C,KAAK7C,EAAM,OAAO,QAAS,CAEpC,IAAM3E,EAAKwH,EAAE,IAAI,OAAS,EACpBC,EACJD,EAAE,QAAU,MACR3H,EAAI,SAAU,EAAGG,EAAI,EAAGwH,EAAE,KAAK,EAC/BA,EAAE,QAAU,OACV7H,EAAI,SAAU,EAAGK,EAAK,EAAG,GAAI,EAAGwH,EAAE,KAAK,EACvC7H,EAAI,SAAU,EAAGK,EAAK,EAAG,EAAG,EAAGwH,EAAE,KAAK,EAC9CpG,EAAI,MACF,EAAA9C,EAAA,KAAA,CAAChB,EAAAA,KAAD,CAEE,MAAO,CACL,SAAU,WACV,KAAMkK,EAAE,IAAI,EACZ,IAAKA,EAAE,IAAI,EACX,MAAOA,EAAE,IAAI,MACb,OAAQA,EAAE,IAAI,OACd,QAASA,EAAE,OAAS,IAAO,CAC7B,EACA,GAAI9J,EAAAA,KAAKc,EAAG,cAAe,CAAE,OAAQgJ,EAAE,MAAO,CAAC,EAVjD,SAAA,CAYGC,EACA3I,EACC,OACA0I,EAAE,KACF,GACAxH,EACA,OACA,SACA,CAAE,KAAM,GAAI,MAAO4F,EAAIa,EAAM,SAAS,EAAG,QAAO,EAChDe,EAAE,IAAI,MACNA,EAAE,OAAS,CAAE,mBAAoB,cAAe,EAAI,IAAA,EACtD,CACI,CAvBC,EAAA,UAAUA,EAAE,IAuBb,CACR,CACF,CAEF,OAAOpG,CACT,CAIA,SAASsG,EAAe,EAAmB,EAAiC,CAC1E,GAAM,CAAE,QAAO,cAAa,UAAW/C,EACjC,CAAE,OAAM,UAAWoB,EACnBS,EAAKC,EAAM,SACXpE,EAAKoB,EAAK,EACVlB,EAAKkB,EAAK,EACVkE,EAAKlE,EAAK,MACVmE,EAAOhC,EAAIa,EAAM,WAAY,EAAG,EAChCoB,EAAcrB,EAAK,EACnBpF,EAAsB,CAAC,EAG7BuD,EAAM,WAAW,SAAS,EAAG,IAAM,CACjC,IAAMmD,EAAQxD,EAAE,KAAOA,EAAE,GACzBlD,EAAI,KACF,GAAI0G,EACAtG,EACE,aAAaF,IACb,IACAO,EAAMyC,EAAE,GAAIA,EAAE,KAAK,EAAI/B,EACvB,KAAK,IAAI+B,EAAE,GAAIA,EAAE,EAAE,EAAIjC,EACvB,KAAK,IAAIiC,EAAE,GAAKA,EAAE,EAAE,EACpBA,EAAE,MACFA,EAAE,MACFA,EAAE,IACJ,EACA9C,EACE,aAAaF,IACb,IACAO,EAAMyC,EAAE,GAAIA,EAAE,KAAK,EAAIjC,EACvB,KAAK,IAAIiC,EAAE,GAAIA,EAAE,EAAE,EAAI/B,EACvB,KAAK,IAAI+B,EAAE,GAAKA,EAAE,EAAE,EACpBA,EAAE,MACFA,EAAE,MACFA,EAAE,IACJ,CACN,CACF,CAAC,EAGDK,EAAM,OAAO,SAAS,EAAG,IAAM,CAC7BvD,EAAI,KAAK,GAAGU,EAAW,SAASR,IAAKP,EAAGsB,EAAIE,CAAE,CAAC,CACjD,CAAC,EAEDmE,EAAY,SAAS,EAAG,IAAM,CAC5B,GAAI3F,EAAE,OAAS,OAAQ,OACvB,IAAMnB,EAAQgG,EAAI7E,EAAE,KAAK,EACnBgH,EAAQpK,EAAAA,OAAeoD,EAAGiF,CAAM,EACtC,GAAK+B,EAAM,SA2BJ,CACL,IAAMlB,EAAKkB,EAAM,GACjB3G,EAAI,KACF,GAAGI,EACD,QAAQF,IACR,IACAO,EAAMgF,EAAI9F,EAAE,KAAK,EAAIsB,EACrB,EACAoB,EAAK,OACL1C,EAAE,MACFnB,EACAmB,EAAE,IACJ,CACF,EACIA,EAAE,OACJK,EAAI,KACFtC,EACE,cAAcwC,IACdP,EAAE,MACF8F,EAAK,EAAIxE,EACT,EACA,OACA,MACA,CAAE,KAAMmE,EAAI,OAAQ,IAAK,QAAO,OAAM,QAAO,EAC7CmB,CACF,CACF,CACJ,KAtDqB,CACnB,IAAMf,EAAKmB,EAAM,GACjB3G,EAAI,KACF,GAAGI,EACD,QAAQF,IACR,IACAO,EAAM+E,EAAI7F,EAAE,KAAK,EAAIwB,EACrB,EACAkB,EAAK,MACL1C,EAAE,MACFnB,EACAmB,EAAE,IACJ,CACF,EACIA,EAAE,OACJK,EAAI,KACFtC,EACE,cAAcwC,IACdP,EAAE,MACF0C,EAAK,MAAQ,EACbmD,EAAK,EAAIrE,EACT,QACA,SACA,CAAE,KAAMiE,EAAI,OAAQ,IAAK,QAAO,OAAM,QAAO,EAC7CmB,CACF,CACF,CACJ,CA4BF,CAAC,EAEDjB,EAAY,SAAS,EAAG,IAAM,CAC5B,GAAI3F,EAAE,OAAS,OAAQ,OACvB,IAAMiG,EAAQpJ,EAAAA,gBACZmD,EACAtD,EAAAA,OAAesD,EAAGiF,CAAM,EACxBQ,GACC,EAAM,EAAM,IACXpJ,EAAAA,iBAAiBwB,EAAM,GAAGoJ,EAAO,GAAGtJ,EAAK,cAAc,CAC3D,EACA,GAAI,CAACsI,EAAO,OACZ,IAAMpH,EAAQgG,EAAI7E,EAAE,UAAU,EACxBkH,EAAQrC,EAAIa,EAAM,SAAS,EACjCO,EAAM,MAAM,SAAS,EAAG,IAAM,CAC5B,IAAMtH,EAAM,QAAQwC,EAAE,KAAK,GAAGZ,EAAE,GAAGW,IAC7BjC,EAAKkC,EAAE,EAAIA,EAAE,OAAS,EAAIK,EAChC,GAAIL,EAAE,OAAS,QAAS,CACtB,IAAMuC,EAAIvC,EAAE,OAAS,EACrBd,EAAI,KACFzB,EACE,GAAGD,EAAI,OACPwC,EAAE,EAAIG,EACNrC,EAAKyE,EAAI,EACTvC,EAAE,MACFuC,EACAmB,EAAI7E,EAAE,WAAY,GAAI,EACtB,CAAE,aAAc0D,EAAI,CAAE,CACxB,EACA3F,EACEY,EACAwC,EAAE,KACFA,EAAE,EAAIG,EAAKH,EAAE,MAAQ,EACrBlC,EACA,SACA,SACA,CAAE,KAAMkC,EAAE,KAAM,OAAQA,EAAE,OAAQ,QAAO,QAAO,EAChDyF,CACF,CACF,EACA,MACF,CACAvG,EAAI,KACFtC,EACEoD,EAAE,OAAS,QAAU,cAAcZ,IAAM5B,EACzCwC,EAAE,KACFA,EAAE,EAAIG,EACNrC,EACA,OACA,SACA,CACE,KAAMkC,EAAE,KACR,OAAQA,EAAE,OACV,MAAOA,EAAE,OAAS,QAAUtC,EAAQqI,EACpC,QACF,EACAN,CACF,CACF,CACF,CAAC,CACH,CAAC,EAEDjB,EAAY,SAAS,EAAG,IAAM,CAC5B,GAAI3F,EAAE,OAAS,QAAU,CAACA,EAAE,KAAM,OAClC,IAAM9B,EAAI7B,EAAAA,iBAAiB2D,EAAE,KAAM,GAAGA,EAAE,OAAO,GAAGyF,EAAG,cAAc,EAC7DxF,EAAInD,EAAAA,QAAkBkD,EAAGiF,EAAQ/G,EAAG4I,CAAW,EACrDzG,EAAI,KACFtC,EACE,QAAQwC,IACRP,EAAE,KACFC,EAAE,EAAIqB,EACNrB,EAAE,EAAIA,EAAE,OAAS,EAAIuB,EACrB,OACA,SACA,CAAE,KAAMiE,EAAI,OAAQzF,EAAE,OAAQ,MAAO6E,EAAI7E,EAAE,KAAK,EAAG,OAAM,QAAO,EAChE4G,CACF,CACF,CACF,CAAC,EAED,IAAMO,EAAatC,EAAIa,EAAM,KAAM,GAAI,EAsBvC,OArBA9B,EAAM,YAAY,SAAS,CAAE,MAAO4C,EAAG,IAAKvG,GAAK,IAAM,CAErD,IAAMqG,EAAME,EAAE,YAAc,SAAWA,EAAE,IAAM,IAAA,GAC/CnG,EAAI,KACFtC,EACE,eAAewC,IACfiG,EAAE,KACFvG,EAAE,EAAIqB,EACNrB,EAAE,EAAIA,EAAE,OAAS,EAAIuB,EACrB,OACA,SACAgF,EAAE,MACE,CAAE,KAAMf,EAAI,MAAOe,EAAE,MAAO,QAAO,EACnC,CAAE,KAAMf,EAAI,MAAO0B,EAAY,OAAM,QAAO,EAChDP,EACAN,EACI,CAAE,MAAO,KAAK,IAAIrG,EAAE,MAAOqG,EAAI,EAAIA,EAAI,MAAQ,EAAIrG,EAAE,CAAC,CAAE,EACxD,IAAA,EACN,CACF,CACF,CAAC,EACMI,CACT,CAEA,IAAM+G,EAAQ,IAAgC,CAC5C,SAAU,WACV,KAAM1E,EAAK,EACX,IAAKA,EAAK,EACV,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,SAAU,QACZ,GAMA,SAAgB2E,EAAW,EAAmB,EAA4B,CACxE,GAAM,CAAE,QAASzD,EAAM,OACvB,OACE,EAAArG,EAAA,KAAA,CAAAR,EAAAA,SAAA,CAAA,SAAA,CACGgI,EAAenB,EAAO0D,CAAM,GAC7B,EAAA/J,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAiB,MAAO6K,EAAK1E,CAAI,EAAG,GAAI/F,EAAAA,KAAKc,EAAG,MAAM,EACnD,SAAA0G,EAASP,CAAK,CACX,EAFI,MAEJ,GACN,EAAArG,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAmB,MAAO6K,EAAK1E,CAAI,EAAG,GAAI/F,EAAAA,KAAKc,EAAG,QAAQ,EACvD,SAAAkJ,EAAe/C,EAAO0D,CAAM,CACzB,EAFI,QAEJ,CACN,CAAA,CAAA,CAEN,CAGA,SAAgBC,EACd,EACA,EACA,EACW,CACX,GAAM,CAAE,QAAO,SAAQ,QAAO,YAAa3D,EACrC,CAAE,QAASoB,EACXwC,EAAa3C,EAAIa,EAAM,UAAU,EACjCrF,EAAsB,CAAC,EACzBoH,GAASA,EAAM,aAAe,MAChCpH,EAAI,MACF,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,MAAOS,EAAAA,WAAW,aAClB,GAAIL,EAAAA,KAAKc,EAAG,WAAW,EAEtB,SAAAgD,EACC,OACA,IACA,KAAK,MAAMgH,EAAM,UAAU,EAC3B/E,EAAK,EACLA,EAAK,MACL,EACAmC,EAAIa,EAAM,UAAW,GAAI,EACzB,CAAC,EAAG,CAAC,CACP,CACI,EAdA,aAcA,CACR,EAEE+B,GAASA,EAAM,aAAe,MAChCpH,EAAI,MACF,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,MAAOS,EAAAA,WAAW,aAClB,GAAIL,EAAAA,KAAKc,EAAG,WAAW,EAEtB,SAAAgD,EACC,OACA,IACA,KAAK,MAAMgH,EAAM,UAAU,EAC3B/E,EAAK,EACLA,EAAK,OACL,EACAmC,EAAIa,EAAM,UAAW,GAAI,EACzB,CAAC,EAAG,CAAC,CACP,CACI,EAdA,WAcA,CACR,EAEF+B,GAAO,MAAM,SAAS,EAAG,IAAM,CAC7B,GAAIC,EAAE,OAAS,OAAQ,CACrBrH,EAAI,KACFzB,EAAI,QAAQ2B,IAAKmH,EAAE,EAAGA,EAAE,EAAGA,EAAE,MAAOA,EAAE,OAAQ7C,EAAIa,EAAM,KAAM,GAAI,EAAG,CACnE,aAAc,CAChB,CAAC,CACH,EACA,MACF,CACA,GAAIgC,EAAE,OAAS,QAAS,CAEtBrH,EAAI,KACFzB,EAAI,QAAQ2B,IAAKmH,EAAE,EAAGA,EAAE,EAAGA,EAAE,MAAOA,EAAE,OAAQ7C,EAAIa,EAAM,KAAM,GAAI,CAAC,CACrE,EACA,MACF,CACA,GAAIgC,EAAE,OAAS,OAAQ,CAErB,IAAMC,EAAO,KAAK,IAAI,EAAGD,EAAE,MAAQ,IAAMA,EAAE,OAAS,GAAI,EAClDE,EAAQ,KAAK,IAAI,EAAGF,EAAE,MAAQ,EAAGA,EAAE,OAAS,CAAC,EACnDrH,EAAI,KACFzB,EACE,QAAQ2B,IACRmH,EAAE,EAAIC,EACND,EAAE,EAAIC,EACND,EAAE,MAAQC,EAAO,EACjBD,EAAE,OAASC,EAAO,EAClBD,EAAE,MACF,CACE,aAAc,KAAK,IAAI,EAAGA,EAAE,MAAM,EAClC,YAAa,UACb,cAAe,IACf,aAAc,EACd,aAAc,CAAE,MAAO,EAAG,OAAQ,CAAE,EACpC,UAAW,CACb,CACF,CACF,EACIA,EAAE,MAAQ,GAAKA,EAAE,OAAS,GAC5BrH,EAAI,KACFzB,EACE,QAAQ2B,IACRmH,EAAE,EAAIC,EAAOC,EACbF,EAAE,EAAIC,EAAOC,EACbF,EAAE,OAASC,EAAOC,GAAS,EAC3BF,EAAE,QAAUC,EAAOC,GAAS,EAC5B,cACA,CACE,aAAc,KAAK,IAAI,EAAGF,EAAE,OAASE,EAAQ,CAAC,EAC9C,YAAa,IACb,YAAaF,EAAE,IACjB,CACF,CACF,EACF,MACF,CAEArH,EAAI,KACFvB,EAAI,QAAQyB,IAAKmH,EAAE,EAAGA,EAAE,EAAGA,EAAE,KAAO,EAAGA,EAAE,IAAI,EAC7C5I,EAAI,QAAQyB,IAAKmH,EAAE,EAAGA,EAAE,EAAGA,EAAE,KAAMA,EAAE,MAAO,CAC1C,YAAa,EACb,YAAaF,CACf,CAAC,CACH,CACF,CAAC,EACGK,GACFxH,EAAI,MACF,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAiB,GAAII,EAAAA,KAAKc,EAAG,MAAM,EAAG,MAAOT,EAAAA,WAAW,aACrD,SAAA8B,EACC,QACA+I,EAAS,EACTA,EAAS,EACTA,EAAS,KAAO,EAChBA,EAAS,MACT,CACE,QAAS,IACT,YAAa,EACb,YAAaL,CACf,CACF,CACI,EAbI,MAaJ,CACR,EAEF,IAAM/F,EAAMgG,GAAO,QACnB,GAAIhG,GAAO,CAACqG,EAAe,CACzB,GAAM,CAAE,IAAK7H,EAAG,aAAY,UAAS,WAAYwB,EAC3C5D,EAAOgH,EAAIa,EAAM,IAAI,EACrBwB,EAAQrC,EAAIa,EAAM,SAAS,EAC3BqC,GAAQ,EAAgB,KAA8B,CAC1D,SAAU,GACV,aACA,QACA,WAAY,OAAOd,CAAM,EACzB,mBAAoB,GACpB,GAAIK,EAAS,CAAE,WAAYA,CAAO,EAAI,IACxC,GACMZ,EAAU,IACd,EAAAnJ,EAAA,IAAA,CAAChB,EAAAA,KAAD,CACE,MAAO,CACL,MAAO,EACP,OAAQ,EACR,aAAc,EACd,YAAa,EACb,gBAAiBsC,CACnB,CACD,CAAA,EAEGmJ,EAAiB,CACrB,OAAQC,EACR,cAAe,MACf,WAAY,QACd,EACA5H,EAAI,MACF,EAAA9C,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAEE,GAAII,EAAAA,KAAKc,EAAG,SAAS,EACrB,MAAO,CACLyK,EAAYtE,CAAK,EACjB,CACE,KAAM3D,EAAE,EACR,IAAKA,EAAE,EACP,MAAOA,EAAE,MACT,OAAQA,EAAE,OACV,kBAAmBkI,EAAU,EAC7B,gBAAiBA,EAAU,CAC7B,CACF,EAEC,SAAA1G,EAAI,KACDA,EAAI,KAAK,KAAK,EAAG,KACf,EAAAlE,EAAA,IAAA,CAACjB,EAAAA,KAAD,CAAc,cAAe,EAAG,MAAOyL,EAAK,IAAKlK,CAAI,EAClD,SAAA4F,CACG,EAFKlD,CAEL,CACP,EACD,EACE,EAAAhD,EAAA,KAAA,CAAChB,EAAAA,KAAD,CAAkB,MAAOyL,EAAzB,SAAA,CACGI,EAAQ,WAAa1B,EAAO0B,EAAQ,UAAU,EAAI,MACnD,EAAA7K,EAAA,IAAA,CAACjB,EAAAA,KAAD,CACE,cAAe,EACf,MAAO,CAACyL,EAAK,IAAKlK,CAAI,EAAG,CAAE,WAAY,CAAE,CAAC,EAEzC,SAAAuK,EAAQ,KACL,CAAA,CACF,CARI,EAAA,OAQJ,EACN,GAAIA,EAAQ,SACR,EACE,EAAA7K,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAqB,MAAOyL,EAC1B,UAAA,EAAAzK,EAAA,IAAA,CAACjB,EAAAA,KAAD,CACE,cAAe,EACf,MAAO,CACLyL,EAAK,IAAKb,CAAK,EACf,CACE,SAAU,GACV,YAAakB,EAAQ,WAAa,GAAK,CACzC,CACF,EAEC,SAAAA,EAAQ,QACL,CAAA,CACF,EAbI,UAaJ,CACR,EACA,CAAC,EAEL,GAAGA,EAAQ,KAAK,KAAK,EAAG,KACtB,EAAA7K,EAAA,KAAA,CAAChB,EAAAA,KAAD,CAAc,MAAOyL,EAArB,SAAA,CACGvG,EAAI,YAAc,GACjB,EAAAlE,EAAA,IAAA,CAAChB,EAAAA,KAAD,CAAM,MAAO,CAAE,MAAOkF,EAAI,WAAY,EACnC,SAAAgD,EAAE,MAAQiC,EAAOjC,EAAE,KAAK,EAAI,IACzB,CAAA,EACJ,MACJ,EAAAlH,EAAA,IAAA,CAACjB,EAAAA,KAAD,CACE,cAAe,EACf,MAAO,CAACyL,EAAK,IAAKb,CAAK,EAAG,CAAE,WAAY,CAAE,CAAC,EAE1C,SAAAzC,EAAE,IACC,CAAA,GACN,EAAAlH,EAAA,IAAA,CAACjB,EAAAA,KAAD,CACE,cAAe,EACf,MAAO,CACLyL,EAAK,IAAKlK,CAAI,EACd,CACE,SAAU,EACV,WAAY,GACZ,UAAW,QACX,YAAa,CAAC,cAAc,CAC9B,CACF,EAEC,SAAA4G,EAAE,KACC,CAAA,CACF,CA1BK,EAAAlE,CA0BL,CACP,CACH,CACA,EA/EA,SA+EA,CACR,CACF,CACA,OAAOF,CACT,CAGA,IAAa6H,EAAe,IAAkC,CAC5D,SAAU,WACV,gBAAiBrD,EAAIjB,EAAM,MAAM,UAAU,EAC3C,YAAaiB,EAAIjB,EAAM,MAAM,IAAI,EACjC,YAAa,EACb,aAAc,EACd,YAAa,UACb,cAAe,IACf,aAAc,EACd,aAAc,CAAE,MAAO,EAAG,OAAQ,CAAE,EACpC,UAAW,CACb"}
1
+ {"version":3,"file":"scene.cjs","names":["measureChartText","Text","View","scenePrimitives","toCss","annotationRect","part","annotationLine","annotationTitleLayout","annotationTextBox","_Fragment","StyleSheet","liftedBarRect","require_parts","require_color","require_overlay","require_scene","require_controller","require_measure","react_native","react_jsx_runtime","SHAPE_BUDGET","C","lineHeightOf","size","slack","text","o","label","lh","pad","w","top","valign","y","horizontal","align","x","frameWidth","extra","key","box","color","dot","cx","d","cy","segment","dx","x2","x1","dy","y2","y1","length","width","dashRuns","pattern","dash","v","period","a","b","runs","scale","max","out","at","i","step","dashedLine","start","run","axis","from","crisp","arrowViews","arrow","pts","k","p","q","x0","ox","y0","oy","tip","b0","b1","half","clear","style","baseX","baseY","right","down","thin","stride","lx","ly","areaStrips","transposed","points","plot","frame","n","forward","xs","ys","bs","bottom","baseline","to","column","j","left","c","mid","t","h","primitiveLimits","scene","visible","s","lines","scatters","perLine","maxDots","drawData","primitives","options","dotsLeft","barsLeft","total","r","count","radius","stroke","css","alpha","drawBackground","layout","scales","bottomAxis","model","leftAxis","bottomTicks","leftTicks","bottomPx","leftPx","fs","theme","annotations","grid","py","px","line","tick","title","lastRight","lastBottom","y2Ticks","ramp","bar","stops","l","e","swatch","drawForeground","fw","halo","labelHeight","along","where","weight","muted","pointColor","clip","drawStatic","family","drawHover","background","hover","veiled","m","grow","inset","dragging","customTooltip","font","row","lineHeight","tooltipCard","padding","content"],"sources":["../../../../../native/src/components/Chart/scene.tsx"],"sourcesContent":["// Draws a chart scene (`ChartController.getScene()`) with plain views: no\n// canvas, SVG or native drawing module. The engine already resolves every\n// position in pixels; this file only turns them into absolutely positioned\n// <View> / <Text> elements, keeping the number of views bounded by the size\n// of the chart (lines decimated per column, dots merged per cell, bars\n// merged per pixel column), whatever the size of the data.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport {\n StyleSheet,\n Text,\n View,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport {\n annotationLine,\n annotationRect,\n annotationTextBox,\n annotationTitleLayout,\n liftedBarRect,\n scenePrimitives,\n toCss,\n type ChartPrimitive,\n type ChartRect,\n type ChartScene,\n} from \"@minerva/charts/canvas\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\n\ntype Rgba = ChartScene[\"theme\"][\"text\"];\n\n/** Upper bounds of the views drawn for the data of a chart */\nexport const SHAPE_BUDGET = {\n /** Points of all the lines (one view per segment) */\n linePoints: 1200,\n /** Dots of one scatter series before they are merged per cell */\n dotsPerSeries: 800,\n /** Dots of all the series */\n dots: 2000,\n /** Bars of one series before neighbors are merged per pixel column */\n barsPerSeries: 600,\n /** Bars of all the series */\n bars: 1500,\n /** Vertical strips filling one area */\n areaColumns: 200,\n /** Dashes of one dashed line */\n dashes: 200,\n} as const;\n\nconst C = \"chart\";\n\n// ------------------------------------------------------------------ text\n\ninterface TextOptions {\n size: number;\n color: string;\n weight?: number;\n family?: string;\n /** Halo color: keeps the text readable over the data */\n halo?: string;\n}\n\ntype Align = \"left\" | \"center\" | \"right\";\ntype VAlign = \"top\" | \"middle\" | \"bottom\";\n\nconst lineHeightOf = (size: number) => Math.ceil(size * 1.35);\n\n/** Box wide enough for the estimated width (the real one may differ) */\nconst slack = (text: string, o: TextOptions) =>\n Math.ceil(\n measureChartText(text, `${o.weight ?? 400} ${o.size}px sans-serif`) * 1.4 +\n o.size * 2,\n );\n\n/**\n * A one-line text anchored at (x, y) of a container `frameWidth` wide:\n * `left` starts there, `right` ends there, `center` is centered on it;\n * `top` / `bottom` place the em box like the canvas text baselines\n */\nfunction label(\n key: string,\n text: string,\n x: number,\n y: number,\n align: Align,\n valign: VAlign,\n o: TextOptions,\n frameWidth: number,\n extra?: TextStyle,\n): ReactElement {\n const lh = lineHeightOf(o.size);\n const pad = (lh - o.size) / 2;\n const w = slack(text, o);\n const top =\n valign === \"top\"\n ? y - pad\n : valign === \"bottom\"\n ? y - lh + pad\n : y - lh / 2;\n const horizontal: TextStyle =\n align === \"left\"\n ? { left: x, width: w }\n : align === \"right\"\n ? { right: frameWidth - x, width: w }\n : { left: x - w / 2, width: w };\n return (\n <Text\n key={key}\n numberOfLines={1}\n style={[\n {\n position: \"absolute\",\n top,\n ...horizontal,\n textAlign: align,\n fontSize: o.size,\n lineHeight: lh,\n color: o.color,\n fontWeight: String(o.weight ?? 400) as TextStyle[\"fontWeight\"],\n includeFontPadding: false,\n ...(o.family ? { fontFamily: o.family } : null),\n ...(o.halo\n ? {\n textShadowColor: o.halo,\n textShadowRadius: 3,\n textShadowOffset: { width: 0, height: 0 },\n }\n : null),\n },\n extra,\n ]}\n >\n {text}\n </Text>\n );\n}\n\n// ---------------------------------------------------------------- shapes\n\nconst box = (\n key: string,\n x: number,\n y: number,\n width: number,\n height: number,\n color: string,\n extra?: ViewStyle,\n): ReactElement => (\n <View\n key={key}\n style={[\n {\n position: \"absolute\",\n left: x,\n top: y,\n width,\n height,\n backgroundColor: color,\n },\n extra,\n ]}\n />\n);\n\nconst dot = (\n key: string,\n cx: number,\n cy: number,\n d: number,\n color: string,\n extra?: ViewStyle,\n) =>\n box(key, cx - d / 2, cy - d / 2, d, d, color, {\n borderRadius: d / 2,\n ...extra,\n });\n\n/** A straight stroke: one view, rotated around its center */\nconst segment = (\n key: string,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n width: number,\n color: string,\n) => {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const length = Math.hypot(dx, dy) + width;\n return box(\n key,\n (x1 + x2) / 2 - length / 2,\n (y1 + y2) / 2 - width / 2,\n length,\n width,\n color,\n {\n borderRadius: width / 2,\n transform: [{ rotate: `${Math.atan2(dy, dx)}rad` }],\n },\n );\n};\n\n/** Dash runs `[start, length]` along a line (canvas `setLineDash` pattern) */\nexport function dashRuns(\n length: number,\n dash: readonly number[],\n max: number = SHAPE_BUDGET.dashes,\n): [number, number][] {\n let pattern = dash.filter((v) => Number.isFinite(v) && v >= 0);\n // odd patterns repeat twice, like the canvas\n if (pattern.length % 2) pattern = [...pattern, ...pattern];\n const period = pattern.reduce((a, b) => a + b, 0);\n if (!pattern.length || period <= 0) return [[0, length]];\n const runs = (length / period) * (pattern.length / 2);\n const scale = runs > max ? runs / max : 1;\n const out: [number, number][] = [];\n let at = 0;\n for (let i = 0; at < length; i = (i + 1) % pattern.length) {\n const step = pattern[i] * scale;\n if (i % 2 === 0 && step > 0) out.push([at, Math.min(step, length - at)]);\n at += Math.max(step, 0.5);\n }\n return out;\n}\n\nconst dashedLine = (\n key: string,\n axis: \"x\" | \"y\",\n at: number,\n from: number,\n length: number,\n width: number,\n color: string,\n dash: readonly number[],\n) =>\n dashRuns(length, dash).map(([start, run], i) =>\n axis === \"y\"\n ? box(`${key}-${i}`, from + start, at, run, width, color)\n : box(`${key}-${i}`, at, from + start, width, run, color),\n );\n\nconst crisp = (v: number, width = 1) => Math.round(v) + 0.5 - width / 2;\n\n/**\n * Views of an elbow arrow (relative to `ox`, `oy`): a thin box per leg (the\n * legs are horizontal or vertical) and a triangle made of borders\n */\nexport const arrowViews = (\n key: string,\n arrow: ChartScene[\"arrows\"][number],\n ox: number,\n oy: number,\n): ReactElement[] => {\n const out: ReactElement[] = [];\n const w = arrow.width;\n const pts = arrow.points;\n for (let k = 1; k < pts.length; k++) {\n const p = pts[k - 1]!;\n const q = pts[k]!;\n const x0 = Math.min(p.x, q.x) - ox;\n const y0 = Math.min(p.y, q.y) - oy;\n // legs overlap by half a width so the corners are closed\n out.push(\n p.y === q.y\n ? box(\n `${key}-${k}`,\n x0 - w / 2,\n y0 - w / 2,\n Math.abs(q.x - p.x) + w,\n w,\n arrow.color,\n )\n : box(\n `${key}-${k}`,\n x0 - w / 2,\n y0 - w / 2,\n w,\n Math.abs(q.y - p.y) + w,\n arrow.color,\n ),\n );\n }\n const [tip, b0, b1] = arrow.head;\n const length = Math.hypot(\n tip.x - (b0.x + b1.x) / 2,\n tip.y - (b0.y + b1.y) / 2,\n );\n const half = Math.hypot(b1.x - b0.x, b1.y - b0.y) / 2;\n const clear = \"transparent\";\n const style: ViewStyle = { position: \"absolute\", width: 0, height: 0 };\n const baseX = (b0.x + b1.x) / 2;\n const baseY = (b0.y + b1.y) / 2;\n if (Math.abs(tip.x - baseX) >= Math.abs(tip.y - baseY)) {\n const right = tip.x > baseX;\n Object.assign(style, {\n left: (right ? baseX : tip.x) - ox,\n top: tip.y - half - oy,\n borderTopWidth: half,\n borderBottomWidth: half,\n borderTopColor: clear,\n borderBottomColor: clear,\n ...(right\n ? { borderLeftWidth: length, borderLeftColor: arrow.color }\n : { borderRightWidth: length, borderRightColor: arrow.color }),\n });\n } else {\n const down = tip.y > baseY;\n Object.assign(style, {\n left: tip.x - half - ox,\n top: (down ? baseY : tip.y) - oy,\n borderLeftWidth: half,\n borderRightWidth: half,\n borderLeftColor: clear,\n borderRightColor: clear,\n ...(down\n ? { borderTopWidth: length, borderTopColor: arrow.color }\n : { borderBottomWidth: length, borderBottomColor: arrow.color }),\n });\n }\n out.push(<View key={`${key}-head`} style={style} />);\n return out;\n};\n\n// ------------------------------------------------------------------ data\n\n/** Thins a run of interleaved points to `max` points and drops sub-pixel steps */\nfunction thin(run: readonly number[], max: number): number[] {\n const n = run.length / 2;\n const stride = n > max ? Math.ceil(n / max) : 1;\n const out: number[] = [];\n for (let i = 0; i < n; i += stride) {\n const x = run[i * 2];\n const y = run[i * 2 + 1];\n const k = out.length;\n if (k && Math.hypot(x - out[k - 2], y - out[k - 1]) < 1.5) continue;\n out.push(x, y);\n }\n const lx = run[n * 2 - 2];\n const ly = run[n * 2 - 1];\n const k = out.length;\n if (n > 1 && (out[k - 2] !== lx || out[k - 1] !== ly)) out.push(lx, ly);\n return out;\n}\n\n/**\n * Vertical strips between the line and the baseline (or the stack below),\n * one per column; horizontal strips, one per row, for horizontal charts\n */\nfunction areaStrips(\n key: string,\n points: readonly number[],\n baseline: number,\n color: string,\n opacity: number,\n frame: ChartRect,\n /** Y pixel (x pixel when `transposed`) of the bottom edge under every point */\n bottom?: readonly number[],\n /** Horizontal charts: the area grows from the left edge */\n transposed = false,\n): ReactElement[] {\n // horizontal charts are filled like vertical ones with x and y swapped\n const run = transposed\n ? points.map((_, i) => points[i % 2 ? i - 1 : i + 1])\n : points;\n const plot = transposed\n ? { x: frame.y, y: frame.x, width: frame.height, height: frame.width }\n : frame;\n const n = run.length / 2;\n if (n < 2) return [];\n // left to right (reversed axes list their points right to left)\n const forward = run[0] <= run[n * 2 - 2];\n const at = (i: number) => (forward ? i : n - 1 - i);\n const xs = (i: number) => run[at(i) * 2];\n const ys = (i: number) => run[at(i) * 2 + 1];\n const bs = (i: number) => (bottom ? bottom[at(i)] : baseline);\n const from = Math.max(plot.x, xs(0));\n const to = Math.min(plot.x + plot.width, xs(n - 1));\n if (to <= from) return [];\n const column = Math.max(2, plot.width / SHAPE_BUDGET.areaColumns);\n const out: ReactElement[] = [];\n let j = 0;\n for (let left = Math.floor(from), c = 0; left < to; c++) {\n const right = Math.min(Math.ceil(to), Math.round(left + column));\n const mid = (left + right) / 2;\n while (j < n - 2 && xs(j + 1) < mid) j++;\n const x0 = xs(j);\n const x1 = xs(j + 1);\n const t = x1 === x0 ? 0 : Math.max(0, Math.min(1, (mid - x0) / (x1 - x0)));\n const y = ys(j) + (ys(j + 1) - ys(j)) * t;\n const b = bs(j) + (bs(j + 1) - bs(j)) * t;\n if (Number.isFinite(y) && Number.isFinite(b)) {\n const top = Math.min(y, b);\n const h = Math.abs(b - y);\n out.push(\n transposed\n ? box(\n `${key}-${c}`,\n top - plot.y,\n left - plot.x,\n h,\n right - left,\n color,\n {\n opacity,\n },\n )\n : box(\n `${key}-${c}`,\n left - plot.x,\n top - plot.y,\n right - left,\n h,\n color,\n {\n opacity,\n },\n ),\n );\n }\n left = right;\n }\n return out;\n}\n\n/** Limits of `scenePrimitives` for the views budget */\nexport function primitiveLimits(scene: ChartScene) {\n const { plot } = scene.layout;\n const visible = scene.model.series.filter((s) => !s.hidden);\n const lines = visible.filter(\n (s) => s.type === \"line\" || s.type === \"area\",\n ).length;\n const scatters = visible.filter((s) => s.type === \"scatter\").length;\n const perLine = Math.max(150, SHAPE_BUDGET.linePoints / Math.max(1, lines));\n const maxDots = Math.max(\n 100,\n Math.min(\n SHAPE_BUDGET.dotsPerSeries,\n SHAPE_BUDGET.dots / Math.max(1, scatters),\n ),\n );\n return {\n perLine,\n options: {\n // decimation keeps up to 4 points per column\n columnWidth: Math.max(3, (plot.width * 4) / perLine),\n maxDots,\n maxBars: SHAPE_BUDGET.barsPerSeries,\n dotCell: Math.max(\n 4,\n Math.sqrt((plot.width * plot.height) / maxDots) * 1.15 + 1,\n ),\n },\n };\n}\n\nfunction drawData(scene: ChartScene): ReactElement[] {\n const { plot } = scene.layout;\n const { perLine, options } = primitiveLimits(scene);\n const primitives: ChartPrimitive[] = scenePrimitives(scene, options);\n const ox = plot.x;\n const oy = plot.y;\n const out: ReactElement[] = [];\n let dotsLeft: number = SHAPE_BUDGET.dots;\n let barsLeft: number = SHAPE_BUDGET.bars;\n primitives.forEach((p, k) => {\n const key = `${p.kind}${p.seriesIndex}-${k}`;\n if (p.kind === \"area\") {\n p.segments.forEach((run, r) =>\n out.push(\n ...areaStrips(\n `${key}-${r}`,\n run,\n p.baseline,\n p.color,\n p.opacity,\n plot,\n p.bottoms?.[r],\n p.horizontal,\n ),\n ),\n );\n return;\n }\n if (p.kind === \"line\") {\n let total = 0;\n for (const run of p.segments) total += run.length / 2;\n p.segments.forEach((run, r) => {\n const pts = thin(\n run,\n Math.max(\n 2,\n Math.round((perLine * run.length) / 2 / Math.max(1, total)),\n ),\n );\n if (pts.length === 2) {\n out.push(\n dot(\n `${key}-${r}`,\n pts[0] - ox,\n pts[1] - oy,\n p.width * 1.5,\n p.color,\n ),\n );\n return;\n }\n for (let i = 0; i + 3 < pts.length; i += 2) {\n out.push(\n segment(\n `${key}-${r}-${i}`,\n pts[i] - ox,\n pts[i + 1] - oy,\n pts[i + 2] - ox,\n pts[i + 3] - oy,\n p.width,\n p.color,\n ),\n );\n }\n });\n return;\n }\n if (p.kind === \"bars\") {\n const count = p.rects.length / 4;\n const stride =\n count > barsLeft ? Math.ceil(count / Math.max(1, barsLeft)) : 1;\n for (let i = 0; i < count; i += stride) {\n const [x, y, w, h] = p.rects.slice(i * 4, i * 4 + 4);\n const radius = Math.min(p.radius ?? 0, w / 2, h / 2);\n out.push(\n box(\n `${key}-${i}`,\n x - ox,\n y - oy,\n Math.max(w, 0.5),\n h,\n p.colors?.[i] ?? p.color,\n radius > 0.5 || p.opacity !== undefined\n ? {\n ...(radius > 0.5 ? { borderRadius: radius } : null),\n ...(p.opacity !== undefined ? { opacity: p.opacity } : null),\n }\n : undefined,\n ),\n );\n }\n barsLeft = Math.max(0, barsLeft - Math.ceil(count / stride));\n return;\n }\n const count = p.dots.length / 3;\n const stride =\n count > dotsLeft ? Math.ceil(count / Math.max(1, dotsLeft)) : 1;\n const stroke = p.stroke ?? 0;\n for (let i = 0; i < count; i += stride) {\n const color = p.colors[i] ?? \"#888\";\n out.push(\n dot(\n `${key}-${i}`,\n p.dots[i * 3] - ox,\n p.dots[i * 3 + 1] - oy,\n p.dots[i * 3 + 2],\n // rings (hollow box plot outliers): the border only\n p.opacity > 0 ? color : \"transparent\",\n stroke > 0 && p.opacity < 1\n ? { borderWidth: stroke, borderColor: color, opacity: 1 }\n : { opacity: p.opacity },\n ),\n );\n }\n dotsLeft = Math.max(0, dotsLeft - Math.ceil(count / stride));\n });\n return out;\n}\n\n// ------------------------------------------------------------ background\n\nconst css = (c: Rgba, alpha?: number) => toCss(c, alpha);\n\nfunction drawBackground(scene: ChartScene, family?: string): ReactElement[] {\n const { width, theme, model, layout, annotations } = scene;\n const { plot, scales, y2Ticks } = layout;\n // horizontal charts: the value axis along the bottom, the x axis on the left\n const horizontal = scales.horizontal;\n const bottomAxis = horizontal ? model.y : model.x;\n const leftAxis = horizontal ? model.x : model.y;\n const bottomTicks = horizontal ? layout.yTicks : layout.xTicks;\n const leftTicks = horizontal ? layout.xTicks : layout.yTicks;\n const bottomPx = horizontal ? scales.yToPx : scales.xToPx;\n const leftPx = horizontal ? scales.xToPx : scales.yToPx;\n const fs = theme.fontSize;\n const out: ReactElement[] = [];\n\n annotations.forEach((a, i) => {\n if (a.type !== \"rect\") return;\n const r = annotationRect(a, scales);\n if (r.width <= 0 || r.height <= 0) return;\n out.push(\n box(`area-${i}`, r.x, r.y, r.width, r.height, css(a.color, a.opacity)),\n );\n });\n\n const grid = css(theme.grid);\n if (leftAxis.grid) {\n leftTicks.values.forEach((v, i) => {\n const py = leftPx(v);\n if (py < plot.y - 1 || py > plot.y + plot.height + 1) return;\n out.push(box(`ygrid-${i}`, plot.x, crisp(py), plot.width, 1, grid));\n });\n }\n if (bottomAxis.grid) {\n bottomTicks.values.forEach((v, i) => {\n const px = bottomPx(v);\n if (px < plot.x - 1 || px > plot.x + plot.width + 1) return;\n out.push(box(`xgrid-${i}`, crisp(px), plot.y, 1, plot.height, grid));\n });\n }\n\n const line = Math.ceil(fs * 1.4);\n const tick: TextOptions = { size: fs, color: css(theme.textMuted), family };\n const title: TextOptions = {\n size: fs + 1,\n weight: 500,\n color: css(theme.text, 0.8),\n family,\n };\n const bottom = plot.y + plot.height;\n\n if (bottomAxis.visible) {\n out.push(\n box(\"xaxis\", plot.x, crisp(bottom), plot.width, 1, css(theme.axis)),\n );\n let lastRight = -Infinity;\n bottomTicks.values\n .map((v, i) => ({ px: bottomPx(v), text: bottomTicks.labels[i] ?? \"\" }))\n .sort((a, b) => a.px - b.px)\n .forEach(({ px, text }, i) => {\n if (!text || px < plot.x - 0.5 || px > plot.x + plot.width + 0.5)\n return;\n const w = measureChartText(text, `400 ${fs}px sans-serif`);\n const left = Math.max(0, Math.min(width - w, px - w / 2));\n if (left < lastRight + 6) return;\n lastRight = left + w;\n out.push(\n label(\n `xtick-${i}`,\n text,\n left + w / 2,\n bottom + 7,\n \"center\",\n \"top\",\n tick,\n width,\n ),\n );\n });\n if (bottomAxis.title)\n out.push(\n label(\n \"xtitle\",\n bottomAxis.title,\n plot.x + plot.width / 2,\n bottom + line + 10,\n \"center\",\n \"top\",\n title,\n width,\n ),\n );\n }\n\n if (leftAxis.visible) {\n let lastBottom = -Infinity;\n leftTicks.values\n .map((v, i) => ({ py: leftPx(v), text: leftTicks.labels[i] ?? \"\" }))\n .sort((a, b) => a.py - b.py)\n .forEach(({ py, text }, i) => {\n if (!text || py < plot.y - 0.5 || py > plot.y + plot.height + 0.5)\n return;\n // category rows of horizontal charts never overlap\n if (horizontal) {\n if (py - (fs + 2) / 2 < lastBottom) return;\n lastBottom = py + (fs + 2) / 2;\n }\n out.push(\n label(\n `ytick-${i}`,\n text,\n plot.x - 8,\n py,\n \"right\",\n \"middle\",\n tick,\n width,\n ),\n );\n });\n if (leftAxis.title)\n out.push(\n label(\n \"ytitle\",\n leftAxis.title,\n line / 2 + 4,\n plot.y + plot.height / 2,\n \"center\",\n \"middle\",\n title,\n width,\n {\n transform: [{ rotate: \"-90deg\" }],\n },\n ),\n );\n }\n\n const y2 = horizontal ? null : model.y2;\n if (y2 && y2Ticks && y2.visible) {\n const right = plot.x + plot.width;\n y2Ticks.values.forEach((v, i) => {\n const py = scales.yToPx(v);\n const text = y2Ticks.labels[i];\n if (!text || py < plot.y - 0.5 || py > plot.y + plot.height + 0.5) return;\n out.push(\n label(\n `y2tick-${i}`,\n text,\n right + 8,\n py,\n \"left\",\n \"middle\",\n tick,\n width,\n ),\n );\n });\n if (y2.title)\n out.push(\n label(\n \"y2title\",\n y2.title,\n width - line / 2 - 4,\n plot.y + plot.height / 2,\n \"center\",\n \"middle\",\n title,\n width,\n {\n transform: [{ rotate: \"90deg\" }],\n },\n ),\n );\n }\n\n const ramp = scene.legend?.colors;\n if (ramp) {\n // visual map: the ramp in even steps, the values at its ends\n const { bar, stops } = ramp;\n const step = bar.width / Math.max(1, stops.length);\n out.push(\n <View\n key=\"color-legend\"\n {...part(C, \"color-legend\")}\n style={{\n position: \"absolute\",\n left: bar.x,\n top: bar.y,\n width: bar.width,\n height: bar.height,\n borderRadius: bar.height / 2,\n overflow: \"hidden\",\n flexDirection: \"row\",\n }}\n >\n {stops.map((c, k) => (\n <View\n key={k}\n style={{ width: step, height: bar.height, backgroundColor: c }}\n />\n ))}\n </View>,\n );\n ramp.ticks.forEach((t, k) =>\n out.push(\n box(\n `color-tick-${k}`,\n Math.round(t),\n bar.y - 2,\n 1,\n bar.height + 4,\n css(theme.text, 0.35),\n ),\n ),\n );\n ramp.labels.forEach((l, k) =>\n out.push(\n label(\n `color-label-${k}`,\n l.text,\n l.x,\n l.y,\n l.align,\n \"middle\",\n { size: 11, color: css(theme.textMuted), family },\n width,\n ),\n ),\n );\n }\n\n if (scene.legend) {\n for (const e of scene.legend.entries) {\n // coordinates relative to the entry box\n const cy = e.box.height / 2;\n const swatch =\n e.shape === \"dot\"\n ? dot(\"swatch\", 5, cy, 8, e.color)\n : e.shape === \"line\"\n ? box(\"swatch\", 0, cy - 1, 10, 2, e.color)\n : box(\"swatch\", 1, cy - 4, 8, 8, e.color);\n out.push(\n <View\n key={`legend-${e.id}`}\n style={{\n position: \"absolute\",\n left: e.box.x,\n top: e.box.y,\n width: e.box.width,\n height: e.box.height,\n opacity: e.hidden ? 0.45 : 1,\n }}\n {...part(C, \"legend-item\", { hidden: e.hidden })}\n >\n {swatch}\n {label(\n \"name\",\n e.name,\n 14,\n cy,\n \"left\",\n \"middle\",\n { size: 12, color: css(theme.textMuted), family },\n e.box.width,\n e.hidden ? { textDecorationLine: \"line-through\" } : undefined,\n )}\n </View>,\n );\n }\n }\n return out;\n}\n\n// ------------------------------------------------------------ foreground\n\nfunction drawForeground(scene: ChartScene, family?: string): ReactElement[] {\n const { theme, annotations, layout } = scene;\n const { plot, scales } = layout;\n const fs = theme.fontSize;\n const ox = plot.x;\n const oy = plot.y;\n const fw = plot.width;\n const halo = css(theme.background, 0.9);\n const labelHeight = fs + 4;\n const out: ReactElement[] = [];\n\n // waterfall connectors: thin dashed lines between the bars\n scene.connectors.forEach((c, i) => {\n const along = c.y0 === c.y1;\n out.push(\n ...(along\n ? dashedLine(\n `connector-${i}`,\n \"y\",\n crisp(c.y0, c.width) - oy,\n Math.min(c.x0, c.x1) - ox,\n Math.abs(c.x1 - c.x0),\n c.width,\n c.color,\n c.dash,\n )\n : dashedLine(\n `connector-${i}`,\n \"x\",\n crisp(c.x0, c.width) - ox,\n Math.min(c.y0, c.y1) - oy,\n Math.abs(c.y1 - c.y0),\n c.width,\n c.color,\n c.dash,\n )),\n );\n });\n\n // dependency arrows (Gantt charts): axis-aligned legs and a border triangle\n scene.arrows.forEach((a, i) => {\n out.push(...arrowViews(`arrow-${i}`, a, ox, oy));\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"line\") return;\n const color = css(a.color);\n const where = annotationLine(a, scales);\n if (!where.vertical) {\n const py = where.at;\n out.push(\n ...dashedLine(\n `line-${i}`,\n \"y\",\n crisp(py, a.width) - oy,\n 0,\n plot.width,\n a.width,\n color,\n a.dash,\n ),\n );\n if (a.label)\n out.push(\n label(\n `line-label-${i}`,\n a.label,\n plot.width - 6,\n py - 3 - oy,\n \"right\",\n \"bottom\",\n { size: fs, weight: 500, color, halo, family },\n fw,\n ),\n );\n } else {\n const px = where.at;\n out.push(\n ...dashedLine(\n `line-${i}`,\n \"x\",\n crisp(px, a.width) - ox,\n 0,\n plot.height,\n a.width,\n color,\n a.dash,\n ),\n );\n if (a.label)\n out.push(\n label(\n `line-label-${i}`,\n a.label,\n px + 5 - ox,\n 5,\n \"left\",\n \"top\",\n { size: fs, weight: 500, color, halo, family },\n fw,\n ),\n );\n }\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"rect\") return;\n const title = annotationTitleLayout(\n a,\n annotationRect(a, scales),\n fs,\n (text, size, weight) =>\n measureChartText(text, `${weight} ${size}px sans-serif`),\n );\n if (!title) return;\n const color = css(a.labelColor);\n const muted = css(theme.textMuted);\n title.parts.forEach((p, k) => {\n const key = `area-${p.kind}-${i}-${k}`;\n const cy = p.y + p.height / 2 - oy;\n if (p.kind === \"badge\") {\n const h = p.height - 2;\n out.push(\n box(\n `${key}-pill`,\n p.x - ox,\n cy - h / 2,\n p.width,\n h,\n css(a.labelColor, 0.16),\n { borderRadius: h / 2 },\n ),\n label(\n key,\n p.text,\n p.x - ox + p.width / 2,\n cy,\n \"center\",\n \"middle\",\n { size: p.size, weight: p.weight, color, family },\n fw,\n ),\n );\n return;\n }\n out.push(\n label(\n p.kind === \"label\" ? `area-label-${i}` : key,\n p.text,\n p.x - ox,\n cy,\n \"left\",\n \"middle\",\n {\n size: p.size,\n weight: p.weight,\n color: p.kind === \"label\" ? color : muted,\n family,\n },\n fw,\n ),\n );\n });\n });\n\n annotations.forEach((a, i) => {\n if (a.type !== \"text\" || !a.text) return;\n const w = measureChartText(a.text, `${a.weight} ${fs}px sans-serif`);\n const b = annotationTextBox(a, scales, w, labelHeight);\n out.push(\n label(\n `text-${i}`,\n a.text,\n b.x - ox,\n b.y + b.height / 2 - oy,\n \"left\",\n \"middle\",\n { size: fs, weight: a.weight, color: css(a.color), halo, family },\n fw,\n ),\n );\n });\n\n const pointColor = css(theme.text, 0.85);\n scene.pointLabels.forEach(({ label: l, box: b }, i) => {\n // inside a bar: its contrasting color, no halo, cut at the end of the bar\n const bar = l.placement === \"inside\" ? l.bar : undefined;\n out.push(\n label(\n `point-label-${i}`,\n l.text,\n b.x - ox,\n b.y + b.height / 2 - oy,\n \"left\",\n \"middle\",\n l.color\n ? { size: fs, color: l.color, family }\n : { size: fs, color: pointColor, halo, family },\n fw,\n bar\n ? { width: Math.max(b.width, bar.x + bar.width - 6 - b.x) }\n : undefined,\n ),\n );\n });\n return out;\n}\n\nconst clip = (plot: ChartRect): ViewStyle => ({\n position: \"absolute\",\n left: plot.x,\n top: plot.y,\n width: plot.width,\n height: plot.height,\n overflow: \"hidden\",\n});\n\n/**\n * Everything but the hover state: axes, grid, legend, annotations, data and\n * labels (cached by the caller while the model, view and size are the same)\n */\nexport function drawStatic(scene: ChartScene, family?: string): ReactNode {\n const { plot } = scene.layout;\n return (\n <>\n {drawBackground(scene, family)}\n <View key=\"data\" style={clip(plot)} {...part(C, \"data\")}>\n {drawData(scene)}\n </View>\n <View key=\"labels\" style={clip(plot)} {...part(C, \"labels\")}>\n {drawForeground(scene, family)}\n </View>\n </>\n );\n}\n\n/** Crosshair, highlighted points, dragged point and the default tooltip */\nexport function drawHover(\n scene: ChartScene,\n family: string | undefined,\n customTooltip: boolean,\n): ReactNode {\n const { theme, layout, hover, dragging } = scene;\n const { plot } = layout;\n const background = css(theme.background);\n const out: ReactElement[] = [];\n if (hover && hover.crosshairY !== null) {\n out.push(\n <View\n key=\"crosshair-y\"\n style={StyleSheet.absoluteFill}\n {...part(C, \"crosshair\")}\n >\n {dashedLine(\n \"dash\",\n \"y\",\n Math.round(hover.crosshairY),\n plot.x,\n plot.width,\n 1,\n css(theme.textMuted, 0.55),\n [3, 3],\n )}\n </View>,\n );\n }\n if (hover && hover.crosshairX !== null) {\n out.push(\n <View\n key=\"crosshair\"\n style={StyleSheet.absoluteFill}\n {...part(C, \"crosshair\")}\n >\n {dashedLine(\n \"dash\",\n \"x\",\n Math.round(hover.crosshairX),\n plot.y,\n plot.height,\n 1,\n css(theme.textMuted, 0.55),\n [3, 3],\n )}\n </View>,\n );\n }\n let veiled = false;\n hover?.marks.forEach((m, i) => {\n if (m.kind === \"band\") {\n out.push(\n box(`mark-${i}`, m.x, m.y, m.width, m.height, css(theme.text, 0.05), {\n borderRadius: 6,\n }),\n );\n return;\n }\n if (m.kind === \"guide\") {\n // the row / column of the hovered heatmap cell\n out.push(\n box(`mark-${i}`, m.x, m.y, m.width, m.height, css(theme.text, 0.06)),\n );\n return;\n }\n if (m.kind === \"bar\") {\n // the plot behind lifted bars is veiled so the hovered one stands out\n if (!veiled) {\n veiled = true;\n out.push(\n box(\n \"veil\",\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n css(theme.background, 0.42),\n ),\n );\n }\n // lifted: thicker across (never longer: the length is the value), a\n // shadow and a ring inside its edge\n const r = liftedBarRect(m);\n if (m.backdrop)\n out.push(\n box(\n `under-${i}`,\n r.x,\n r.y,\n r.width,\n r.height,\n css(theme.background),\n {\n borderRadius: m.radius,\n },\n ),\n );\n out.push(\n box(`mark-${i}`, r.x, r.y, r.width, r.height, m.color, {\n borderRadius: m.radius,\n ...(m.ring\n ? {\n borderWidth: m.backdrop ? 2 : 1.5,\n borderColor: m.ring,\n shadowColor: \"#0f172a\",\n shadowOpacity: 0.4,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 3 },\n elevation: 4,\n }\n : null),\n }),\n );\n return;\n }\n if (m.kind === \"cell\") {\n // lifted: a little larger, a shadow, a ring inside its edge\n const grow = Math.min(3, m.width * 0.06, m.height * 0.06);\n const inset = Math.min(2, m.width / 5, m.height / 5);\n out.push(\n box(\n `mark-${i}`,\n m.x - grow,\n m.y - grow,\n m.width + grow * 2,\n m.height + grow * 2,\n m.color,\n {\n borderRadius: Math.max(2, m.radius),\n shadowColor: \"#0f172a\",\n shadowOpacity: 0.45,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 3 },\n elevation: 4,\n },\n ),\n );\n if (m.width > 8 && m.height > 8)\n out.push(\n box(\n `ring-${i}`,\n m.x - grow + inset,\n m.y - grow + inset,\n m.width + (grow - inset) * 2,\n m.height + (grow - inset) * 2,\n \"transparent\",\n {\n borderRadius: Math.max(1, m.radius - inset / 2),\n borderWidth: 2,\n borderColor: m.ring,\n },\n ),\n );\n return;\n }\n // soft halo, then the dot with a thin ring in the background color\n out.push(\n dot(`halo-${i}`, m.x, m.y, m.size + 8, m.halo),\n dot(`mark-${i}`, m.x, m.y, m.size, m.color, {\n borderWidth: 2,\n borderColor: background,\n }),\n );\n });\n if (dragging) {\n out.push(\n <View key=\"drag\" {...part(C, \"drag\")} style={StyleSheet.absoluteFill}>\n {dot(\n \"ghost\",\n dragging.x,\n dragging.y,\n dragging.size + 2,\n dragging.color,\n {\n opacity: 0.85,\n borderWidth: 2,\n borderColor: background,\n },\n )}\n </View>,\n );\n }\n const tip = hover?.tooltip;\n if (tip && !customTooltip) {\n const { box: b, lineHeight, padding, content } = tip;\n const text = css(theme.text);\n const muted = css(theme.textMuted);\n const font = (weight: number, color: string): TextStyle => ({\n fontSize: 12,\n lineHeight,\n color,\n fontWeight: String(weight) as TextStyle[\"fontWeight\"],\n includeFontPadding: false,\n ...(family ? { fontFamily: family } : null),\n });\n const swatch = (color: string) => (\n <View\n style={{\n width: 8,\n height: 8,\n borderRadius: 4,\n marginRight: 6,\n backgroundColor: color,\n }}\n />\n );\n const row: ViewStyle = {\n height: lineHeight,\n flexDirection: \"row\",\n alignItems: \"center\",\n };\n out.push(\n <View\n key=\"tooltip\"\n {...part(C, \"tooltip\")}\n style={[\n tooltipCard(scene),\n {\n left: b.x,\n top: b.y,\n width: b.width,\n height: b.height,\n paddingHorizontal: padding + 1,\n paddingVertical: padding - 1,\n },\n ]}\n >\n {tip.text\n ? tip.text.map((t, i) => (\n <Text key={i} numberOfLines={1} style={font(400, text)}>\n {t}\n </Text>\n ))\n : [\n <View key=\"title\" style={row}>\n {content.titleColor ? swatch(content.titleColor) : null}\n <Text\n numberOfLines={1}\n style={[font(600, text), { flexShrink: 1 }]}\n >\n {content.title}\n </Text>\n </View>,\n ...(content.subtitle\n ? [\n <View key=\"subtitle\" style={row}>\n <Text\n numberOfLines={1}\n style={[\n font(400, muted),\n {\n fontSize: 11,\n paddingLeft: content.titleColor ? 14 : 0,\n },\n ]}\n >\n {content.subtitle}\n </Text>\n </View>,\n ]\n : []),\n // a label column (after the swatch column) and right-aligned values\n ...content.rows.map((r, i) => (\n <View key={i} style={row}>\n {tip.swatchWidth > 0 ? (\n <View style={{ width: tip.swatchWidth }}>\n {r.color ? swatch(r.color) : null}\n </View>\n ) : null}\n <Text\n numberOfLines={1}\n style={[font(400, muted), { flexShrink: 1 }]}\n >\n {r.name}\n </Text>\n <Text\n numberOfLines={1}\n style={[\n font(600, text),\n {\n flexGrow: 1,\n marginLeft: 16,\n textAlign: \"right\",\n fontVariant: [\"tabular-nums\"],\n },\n ]}\n >\n {r.value}\n </Text>\n </View>\n )),\n ]}\n </View>,\n );\n }\n return out;\n}\n\n/** Look of the tooltips (default and `renderTooltip` content) */\nexport const tooltipCard = (scene: ChartScene): ViewStyle => ({\n position: \"absolute\",\n // translucent: the marks behind stay visible (no backdrop blur on native)\n backgroundColor: css(scene.theme.background, 0.9),\n borderColor: css(scene.theme.axis),\n borderWidth: 1,\n borderRadius: 8,\n shadowColor: \"#0f172a\",\n shadowOpacity: 0.18,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 6 },\n elevation: 6,\n});\n"],"mappings":"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"}