@wavemaker/react-native-echarts 1.0.0-dev.1 → 1.0.0-dev.10

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 (189) hide show
  1. package/README.md +360 -3
  2. package/area/area-chart.d.ts +1 -1
  3. package/area/area-chart.d.ts.map +1 -1
  4. package/area/area-chart.js +81 -50
  5. package/area/area-chart.props.d.ts +4 -0
  6. package/area/area-chart.props.d.ts.map +1 -1
  7. package/area/index.d.ts +1 -1
  8. package/area/index.d.ts.map +1 -1
  9. package/axis.d.ts +26 -0
  10. package/axis.d.ts.map +1 -1
  11. package/axis.js +35 -0
  12. package/bubble/bubble-chart.d.ts.map +1 -1
  13. package/bubble/bubble-chart.js +66 -35
  14. package/candlestick/candlestick-chart.d.ts.map +1 -1
  15. package/candlestick/candlestick-chart.js +37 -8
  16. package/cartesian/tooltip/axis-tooltip-presets.d.ts +5 -0
  17. package/cartesian/tooltip/axis-tooltip-presets.d.ts.map +1 -0
  18. package/cartesian/tooltip/axis-tooltip-presets.js +46 -0
  19. package/cartesian/tooltip/axis-tooltip.types.d.ts +38 -0
  20. package/cartesian/tooltip/axis-tooltip.types.d.ts.map +1 -0
  21. package/cartesian/tooltip/axis-tooltip.types.js +4 -0
  22. package/cartesian/tooltip/axis-tooltip.utils.d.ts +10 -0
  23. package/cartesian/tooltip/axis-tooltip.utils.d.ts.map +1 -0
  24. package/cartesian/tooltip/axis-tooltip.utils.js +121 -0
  25. package/cartesian/tooltip/default-axis-tooltip.d.ts +9 -0
  26. package/cartesian/tooltip/default-axis-tooltip.d.ts.map +1 -0
  27. package/cartesian/tooltip/default-axis-tooltip.js +53 -0
  28. package/cartesian/tooltip/index.d.ts +7 -0
  29. package/cartesian/tooltip/index.d.ts.map +1 -0
  30. package/cartesian/tooltip/index.js +4 -0
  31. package/cartesian/tooltip/use-axis-tooltip.d.ts +38 -0
  32. package/cartesian/tooltip/use-axis-tooltip.d.ts.map +1 -0
  33. package/cartesian/tooltip/use-axis-tooltip.js +54 -0
  34. package/column/column-chart.d.ts.map +1 -1
  35. package/column/column-chart.js +93 -33
  36. package/geo/geo-chart.d.ts.map +1 -1
  37. package/geo/geo-chart.js +56 -24
  38. package/geo/geo-chart.props.d.ts +11 -5
  39. package/geo/geo-chart.props.d.ts.map +1 -1
  40. package/geo/index.d.ts +1 -0
  41. package/geo/index.d.ts.map +1 -1
  42. package/geo/index.js +1 -0
  43. package/geo/tooltip/default-geo-tooltip.d.ts +6 -0
  44. package/geo/tooltip/default-geo-tooltip.d.ts.map +1 -0
  45. package/geo/tooltip/default-geo-tooltip.js +47 -0
  46. package/geo/tooltip/geo-item-tooltip-presets.d.ts +5 -0
  47. package/geo/tooltip/geo-item-tooltip-presets.d.ts.map +1 -0
  48. package/geo/tooltip/geo-item-tooltip-presets.js +35 -0
  49. package/geo/tooltip/geo-item-tooltip.types.d.ts +19 -0
  50. package/geo/tooltip/geo-item-tooltip.types.d.ts.map +1 -0
  51. package/geo/tooltip/geo-item-tooltip.types.js +3 -0
  52. package/geo/tooltip/geo-item-tooltip.utils.d.ts +14 -0
  53. package/geo/tooltip/geo-item-tooltip.utils.d.ts.map +1 -0
  54. package/geo/tooltip/geo-item-tooltip.utils.js +220 -0
  55. package/geo/tooltip/index.d.ts +7 -0
  56. package/geo/tooltip/index.d.ts.map +1 -0
  57. package/geo/tooltip/index.js +4 -0
  58. package/geo/tooltip/use-geo-item-tooltip.d.ts +26 -0
  59. package/geo/tooltip/use-geo-item-tooltip.d.ts.map +1 -0
  60. package/geo/tooltip/use-geo-item-tooltip.js +59 -0
  61. package/geo/us-chart.js +1 -1
  62. package/geo/us-states.json +54 -0
  63. package/geo/world.json +1 -0
  64. package/index.d.ts +2 -0
  65. package/index.d.ts.map +1 -1
  66. package/index.js +2 -0
  67. package/legend/echarts-legend-layout.d.ts +20 -0
  68. package/legend/echarts-legend-layout.d.ts.map +1 -0
  69. package/legend/echarts-legend-layout.js +103 -0
  70. package/line/index.d.ts +1 -1
  71. package/line/index.d.ts.map +1 -1
  72. package/line/line-chart.d.ts +1 -1
  73. package/line/line-chart.d.ts.map +1 -1
  74. package/line/line-chart.props.d.ts +5 -0
  75. package/line/line-chart.props.d.ts.map +1 -1
  76. package/package.json +7 -4
  77. package/pie/index.d.ts +1 -0
  78. package/pie/index.d.ts.map +1 -1
  79. package/pie/index.js +1 -0
  80. package/pie/pie-chart.d.ts.map +1 -1
  81. package/pie/pie-chart.js +69 -45
  82. package/pie/pie-chart.props.d.ts +19 -8
  83. package/pie/pie-chart.props.d.ts.map +1 -1
  84. package/pie/tooltip/default-pie-tooltip.d.ts +5 -0
  85. package/pie/tooltip/default-pie-tooltip.d.ts.map +1 -0
  86. package/pie/tooltip/default-pie-tooltip.js +57 -0
  87. package/pie/tooltip/index.d.ts +7 -0
  88. package/pie/tooltip/index.d.ts.map +1 -0
  89. package/pie/tooltip/index.js +4 -0
  90. package/pie/tooltip/pie-item-tooltip-presets.d.ts +5 -0
  91. package/pie/tooltip/pie-item-tooltip-presets.d.ts.map +1 -0
  92. package/pie/tooltip/pie-item-tooltip-presets.js +39 -0
  93. package/pie/tooltip/pie-item-tooltip.types.d.ts +28 -0
  94. package/pie/tooltip/pie-item-tooltip.types.d.ts.map +1 -0
  95. package/pie/tooltip/pie-item-tooltip.types.js +3 -0
  96. package/pie/tooltip/pie-item-tooltip.utils.d.ts +9 -0
  97. package/pie/tooltip/pie-item-tooltip.utils.d.ts.map +1 -0
  98. package/pie/tooltip/pie-item-tooltip.utils.js +139 -0
  99. package/pie/tooltip/use-pie-item-tooltip.d.ts +24 -0
  100. package/pie/tooltip/use-pie-item-tooltip.d.ts.map +1 -0
  101. package/pie/tooltip/use-pie-item-tooltip.js +45 -0
  102. package/props/cartesian.d.ts +50 -13
  103. package/props/cartesian.d.ts.map +1 -1
  104. package/props/common.d.ts +2 -0
  105. package/props/common.d.ts.map +1 -1
  106. package/radar/index.d.ts +1 -0
  107. package/radar/index.d.ts.map +1 -1
  108. package/radar/index.js +1 -0
  109. package/radar/radar-chart.d.ts.map +1 -1
  110. package/radar/radar-chart.js +59 -12
  111. package/radar/radar-chart.props.d.ts +20 -2
  112. package/radar/radar-chart.props.d.ts.map +1 -1
  113. package/radar/tooltip/default-radar-tooltip.d.ts +6 -0
  114. package/radar/tooltip/default-radar-tooltip.d.ts.map +1 -0
  115. package/radar/tooltip/default-radar-tooltip.js +47 -0
  116. package/radar/tooltip/index.d.ts +7 -0
  117. package/radar/tooltip/index.d.ts.map +1 -0
  118. package/radar/tooltip/index.js +4 -0
  119. package/radar/tooltip/radar-item-tooltip-presets.d.ts +5 -0
  120. package/radar/tooltip/radar-item-tooltip-presets.d.ts.map +1 -0
  121. package/radar/tooltip/radar-item-tooltip-presets.js +50 -0
  122. package/radar/tooltip/radar-item-tooltip.types.d.ts +28 -0
  123. package/radar/tooltip/radar-item-tooltip.types.d.ts.map +1 -0
  124. package/radar/tooltip/radar-item-tooltip.types.js +3 -0
  125. package/radar/tooltip/radar-item-tooltip.utils.d.ts +9 -0
  126. package/radar/tooltip/radar-item-tooltip.utils.d.ts.map +1 -0
  127. package/radar/tooltip/radar-item-tooltip.utils.js +77 -0
  128. package/radar/tooltip/use-radar-item-tooltip.d.ts +22 -0
  129. package/radar/tooltip/use-radar-item-tooltip.d.ts.map +1 -0
  130. package/radar/tooltip/use-radar-item-tooltip.js +43 -0
  131. package/radial/index.d.ts +1 -0
  132. package/radial/index.d.ts.map +1 -1
  133. package/radial/index.js +1 -0
  134. package/radial/radial-chart.d.ts.map +1 -1
  135. package/radial/radial-chart.js +44 -16
  136. package/radial/radial-chart.props.d.ts +16 -3
  137. package/radial/radial-chart.props.d.ts.map +1 -1
  138. package/radial/tooltip/default-radial-tooltip.d.ts +6 -0
  139. package/radial/tooltip/default-radial-tooltip.d.ts.map +1 -0
  140. package/radial/tooltip/default-radial-tooltip.js +52 -0
  141. package/radial/tooltip/index.d.ts +7 -0
  142. package/radial/tooltip/index.d.ts.map +1 -0
  143. package/radial/tooltip/index.js +4 -0
  144. package/radial/tooltip/radial-item-tooltip-presets.d.ts +5 -0
  145. package/radial/tooltip/radial-item-tooltip-presets.d.ts.map +1 -0
  146. package/radial/tooltip/radial-item-tooltip-presets.js +43 -0
  147. package/radial/tooltip/radial-item-tooltip.types.d.ts +23 -0
  148. package/radial/tooltip/radial-item-tooltip.types.d.ts.map +1 -0
  149. package/radial/tooltip/radial-item-tooltip.types.js +3 -0
  150. package/radial/tooltip/radial-item-tooltip.utils.d.ts +9 -0
  151. package/radial/tooltip/radial-item-tooltip.utils.d.ts.map +1 -0
  152. package/radial/tooltip/radial-item-tooltip.utils.js +122 -0
  153. package/radial/tooltip/use-radial-item-tooltip.d.ts +22 -0
  154. package/radial/tooltip/use-radial-item-tooltip.d.ts.map +1 -0
  155. package/radial/tooltip/use-radial-item-tooltip.js +43 -0
  156. package/scatter/index.d.ts +1 -0
  157. package/scatter/index.d.ts.map +1 -1
  158. package/scatter/index.js +1 -0
  159. package/scatter/scatter-chart.d.ts.map +1 -1
  160. package/scatter/scatter-chart.js +64 -22
  161. package/scatter/scatter-chart.props.d.ts +7 -1
  162. package/scatter/scatter-chart.props.d.ts.map +1 -1
  163. package/scatter/tooltip/default-scatter-tooltip.d.ts +8 -0
  164. package/scatter/tooltip/default-scatter-tooltip.d.ts.map +1 -0
  165. package/scatter/tooltip/default-scatter-tooltip.js +57 -0
  166. package/scatter/tooltip/index.d.ts +7 -0
  167. package/scatter/tooltip/index.d.ts.map +1 -0
  168. package/scatter/tooltip/index.js +4 -0
  169. package/scatter/tooltip/scatter-item-tooltip-presets.d.ts +5 -0
  170. package/scatter/tooltip/scatter-item-tooltip-presets.d.ts.map +1 -0
  171. package/scatter/tooltip/scatter-item-tooltip-presets.js +49 -0
  172. package/scatter/tooltip/scatter-item-tooltip.types.d.ts +22 -0
  173. package/scatter/tooltip/scatter-item-tooltip.types.d.ts.map +1 -0
  174. package/scatter/tooltip/scatter-item-tooltip.types.js +3 -0
  175. package/scatter/tooltip/scatter-item-tooltip.utils.d.ts +9 -0
  176. package/scatter/tooltip/scatter-item-tooltip.utils.d.ts.map +1 -0
  177. package/scatter/tooltip/scatter-item-tooltip.utils.js +83 -0
  178. package/scatter/tooltip/use-scatter-item-tooltip.d.ts +25 -0
  179. package/scatter/tooltip/use-scatter-item-tooltip.d.ts.map +1 -0
  180. package/scatter/tooltip/use-scatter-item-tooltip.js +46 -0
  181. package/tooltip/chart-pointer-tooltip-overlay.d.ts +11 -0
  182. package/tooltip/chart-pointer-tooltip-overlay.d.ts.map +1 -0
  183. package/tooltip/chart-pointer-tooltip-overlay.js +88 -0
  184. package/tooltip/chart-tooltip-preset-shells.d.ts +66 -0
  185. package/tooltip/chart-tooltip-preset-shells.d.ts.map +1 -0
  186. package/tooltip/chart-tooltip-preset-shells.js +409 -0
  187. package/tooltip/index.d.ts +7 -0
  188. package/tooltip/index.d.ts.map +1 -0
  189. package/tooltip/index.js +1 -0
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { StyleSheet, Text, View } from 'react-native';
3
+ /**
4
+ * Themed default scatter/bubble item tooltip (React Native).
5
+ */
6
+ export function createDefaultScatterTooltip(theme) {
7
+ const t = theme.tooltip;
8
+ return function DefaultScatterTooltip(params) {
9
+ const { seriesName, x, y, z, color } = params;
10
+ return (<View style={{
11
+ backgroundColor: t.backgroundColor,
12
+ borderColor: t.borderColor,
13
+ borderWidth: t.borderWidth,
14
+ borderRadius: t.borderRadius,
15
+ padding: t.padding,
16
+ }}>
17
+ <View style={{ flexDirection: 'row', alignItems: 'center', marginBottom: 4 }}>
18
+ {color != null && color !== '' ? (<View style={[styles.swatch, { backgroundColor: color }]}/>) : (<View style={styles.swatchPlaceholder}/>)}
19
+ <Text style={[styles.title, { color: t.labelColor }]}>{seriesName}</Text>
20
+ </View>
21
+ <Text style={[styles.line, { color: t.valueColor }]}>
22
+ <Text style={{ color: t.labelColor }}>x: </Text>
23
+ {String(x)}
24
+ </Text>
25
+ <Text style={[styles.line, { color: t.valueColor }]}>
26
+ <Text style={{ color: t.labelColor }}>y: </Text>
27
+ {String(y)}
28
+ </Text>
29
+ {z != null && Number.isFinite(z) ? (<Text style={[styles.line, { color: t.valueColor }]}>
30
+ <Text style={{ color: t.labelColor }}>size: </Text>
31
+ {String(z)}
32
+ </Text>) : null}
33
+ </View>);
34
+ };
35
+ }
36
+ const styles = StyleSheet.create({
37
+ title: {
38
+ fontWeight: '600',
39
+ fontSize: 13,
40
+ flex: 1,
41
+ },
42
+ line: {
43
+ fontSize: 12,
44
+ marginTop: 2,
45
+ },
46
+ swatch: {
47
+ width: 8,
48
+ height: 8,
49
+ borderRadius: 4,
50
+ marginRight: 6,
51
+ },
52
+ swatchPlaceholder: {
53
+ width: 8,
54
+ height: 8,
55
+ marginRight: 6,
56
+ },
57
+ });
@@ -0,0 +1,7 @@
1
+ export { createDefaultScatterTooltip } from './default-scatter-tooltip';
2
+ export { createScatterTooltipPreset } from './scatter-item-tooltip-presets';
3
+ export type { ScatterItemTooltipContext, ScatterItemTooltipParams } from './scatter-item-tooltip.types';
4
+ export { scatterItemParamsFromShowTip } from './scatter-item-tooltip.utils';
5
+ export { useScatterItemTooltip } from './use-scatter-item-tooltip';
6
+ export type { UseScatterItemTooltipOptions, UseScatterItemTooltipResult } from './use-scatter-item-tooltip';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../components/chart/scatter/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createDefaultScatterTooltip } from './default-scatter-tooltip';
2
+ export { createScatterTooltipPreset } from './scatter-item-tooltip-presets';
3
+ export { scatterItemParamsFromShowTip } from './scatter-item-tooltip.utils';
4
+ export { useScatterItemTooltip } from './use-scatter-item-tooltip';
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { ChartTooltipPreset } from '../../tooltip';
3
+ import type { ScatterItemTooltipParams } from './scatter-item-tooltip.types';
4
+ export declare function createScatterTooltipPreset(preset: ChartTooltipPreset): (params: ScatterItemTooltipParams) => React.ReactElement;
5
+ //# sourceMappingURL=scatter-item-tooltip-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scatter-item-tooltip-presets.d.ts","sourceRoot":"","sources":["../../../../../components/chart/scatter/tooltip/scatter-item-tooltip-presets.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AA8D7E,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,GACzB,CAAC,MAAM,EAAE,wBAAwB,KAAK,KAAK,CAAC,YAAY,CAY1D"}
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { TooltipPresetCard, TooltipPresetCompact, TooltipPresetKpi, TooltipPresetStriped, } from '../../tooltip/chart-tooltip-preset-shells';
4
+ function scatterCardFromParams(p) {
5
+ const { seriesName, x, y, z, color } = p;
6
+ return (<TooltipPresetCard header={{ swatchColor: color, title: seriesName }}>
7
+ <Text style={{ fontSize: 14, fontWeight: '700', color: '#0f172a' }}>
8
+ ({String(x)}, {String(y)})
9
+ </Text>
10
+ {z != null && Number.isFinite(z) ? (<Text style={{ fontSize: 12, color: '#64748b', marginTop: 4 }}>size: {String(z)}</Text>) : null}
11
+ </TooltipPresetCard>);
12
+ }
13
+ function scatterCompactFromParams(p) {
14
+ const { seriesName, x, y, z } = p;
15
+ const zPart = z != null && Number.isFinite(z) ? ` · ${String(z)}` : '';
16
+ return (<TooltipPresetCompact emphasis={seriesName} detail={`(${String(x)}, ${String(y)}${zPart})`} wrap/>);
17
+ }
18
+ function scatterKpiFromParams(p) {
19
+ const { seriesName, x, y, z, color } = p;
20
+ return (<TooltipPresetKpi accentColor={color ?? '#3b82f6'} minWidth={140} overline={seriesName} metric={String(y)} caption={`y at x = ${String(x)}${z != null && Number.isFinite(z) ? ` · size ${String(z)}` : ''}`}/>);
21
+ }
22
+ function scatterStripedFromParams(p) {
23
+ const { seriesName, x, y, z, color } = p;
24
+ const rows = [
25
+ { key: 'x', leftLabel: 'x', right: String(x) },
26
+ { key: 'y', leftLabel: 'y', right: String(y) },
27
+ ...(z != null && Number.isFinite(z)
28
+ ? [{ key: 'size', leftLabel: 'size', right: String(z) }]
29
+ : []),
30
+ ];
31
+ return (<TooltipPresetStriped headerSwatch={{ color: color ?? '#64748b', title: seriesName }} rows={rows.map((row) => ({
32
+ key: row.key,
33
+ leftLabel: row.leftLabel,
34
+ right: row.right,
35
+ }))}/>);
36
+ }
37
+ export function createScatterTooltipPreset(preset) {
38
+ switch (preset) {
39
+ case 'card':
40
+ return (p) => scatterCardFromParams(p);
41
+ case 'compact':
42
+ return (p) => scatterCompactFromParams(p);
43
+ case 'kpi':
44
+ return (p) => scatterKpiFromParams(p);
45
+ case 'striped':
46
+ return (p) => scatterStripedFromParams(p);
47
+ }
48
+ throw new Error(`Unknown tooltip preset: ${String(preset)}`);
49
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Item tooltip payload for scatter / bubble (ECharts `trigger: 'item'`, `showTip` without `dataByCoordSys`).
3
+ */
4
+ export interface ScatterItemTooltipParams {
5
+ pointerX: number;
6
+ pointerY: number;
7
+ seriesIndex: number;
8
+ dataIndex: number;
9
+ seriesName: string;
10
+ x: number;
11
+ y: number;
12
+ /** Third dimension (bubble size) when present. */
13
+ z?: number;
14
+ color?: string;
15
+ }
16
+ export interface ScatterItemTooltipContext {
17
+ normalizedSeries: Array<{
18
+ name?: string;
19
+ data: number[][];
20
+ }>;
21
+ }
22
+ //# sourceMappingURL=scatter-item-tooltip.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scatter-item-tooltip.types.d.ts","sourceRoot":"","sources":["../../../../../components/chart/scatter/tooltip/scatter-item-tooltip.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,kDAAkD;IAClD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAC9D"}
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Item tooltip payload for scatter / bubble (ECharts `trigger: 'item'`, `showTip` without `dataByCoordSys`).
3
+ */
@@ -0,0 +1,9 @@
1
+ import type { ScatterItemTooltipContext, ScatterItemTooltipParams } from './scatter-item-tooltip.types';
2
+ /**
3
+ * Build scatter/bubble tooltip params from an ECharts `showTip` action and chart instance.
4
+ * Ignores axis-style payloads (`dataByCoordSys`). Skips non-scatter series (e.g. regression line).
5
+ */
6
+ export declare function scatterItemParamsFromShowTip(chart: any, evt: any, ctx: ScatterItemTooltipContext, themeSeries: Array<{
7
+ color: string;
8
+ }>): ScatterItemTooltipParams | null;
9
+ //# sourceMappingURL=scatter-item-tooltip.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scatter-item-tooltip.utils.d.ts","sourceRoot":"","sources":["../../../../../components/chart/scatter/tooltip/scatter-item-tooltip.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAoCxG;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,yBAAyB,EAC9B,WAAW,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACpC,wBAAwB,GAAG,IAAI,CA6CjC"}
@@ -0,0 +1,83 @@
1
+ function resolveDataIndexInside(data, evt) {
2
+ if (typeof evt?.dataIndexInside === 'number' && !Number.isNaN(evt.dataIndexInside)) {
3
+ return evt.dataIndexInside;
4
+ }
5
+ if (typeof evt?.dataIndex === 'number' && !Number.isNaN(evt.dataIndex)) {
6
+ const mapped = typeof data?.indexOfRawIndex === 'function' ? data.indexOfRawIndex(evt.dataIndex) : evt.dataIndex;
7
+ if (typeof mapped === 'number' && !Number.isNaN(mapped))
8
+ return mapped;
9
+ }
10
+ return null;
11
+ }
12
+ function scatterItemPixel(chart, seriesModel, data, diInside) {
13
+ const layout = data.getItemLayout?.(diInside);
14
+ if (layout && Number.isFinite(layout.x) && Number.isFinite(layout.y)) {
15
+ const w = typeof layout.width === 'number' ? layout.width : 0;
16
+ const h = typeof layout.height === 'number' ? layout.height : 0;
17
+ return { x: layout.x + w / 2, y: layout.y + h / 2 };
18
+ }
19
+ try {
20
+ const dims = data.dimensions ?? [];
21
+ if (dims.length >= 2 && typeof chart.convertToPixel === 'function') {
22
+ const v0 = data.get(dims[0], diInside);
23
+ const v1 = data.get(dims[1], diInside);
24
+ const pt = chart.convertToPixel({ seriesIndex: seriesModel.seriesIndex }, [v0, v1]);
25
+ if (Array.isArray(pt) && pt.length >= 2 && Number.isFinite(pt[0]) && Number.isFinite(pt[1])) {
26
+ return { x: pt[0], y: pt[1] };
27
+ }
28
+ }
29
+ }
30
+ catch {
31
+ /* ignore */
32
+ }
33
+ return null;
34
+ }
35
+ /**
36
+ * Build scatter/bubble tooltip params from an ECharts `showTip` action and chart instance.
37
+ * Ignores axis-style payloads (`dataByCoordSys`). Skips non-scatter series (e.g. regression line).
38
+ */
39
+ export function scatterItemParamsFromShowTip(chart, evt, ctx, themeSeries) {
40
+ if (!chart || !evt)
41
+ return null;
42
+ if (Array.isArray(evt.dataByCoordSys) && evt.dataByCoordSys.length > 0)
43
+ return null;
44
+ const si = evt.seriesIndex;
45
+ if (typeof si !== 'number' || si < 0)
46
+ return null;
47
+ const seriesModel = chart.getModel?.().getSeriesByIndex?.(si);
48
+ const seriesKind = seriesModel?.subType ?? seriesModel?.get?.('type');
49
+ if (!seriesModel || seriesKind !== 'scatter')
50
+ return null;
51
+ const data = seriesModel.getData?.();
52
+ if (!data)
53
+ return null;
54
+ const diInside = resolveDataIndexInside(data, evt);
55
+ if (diInside == null || diInside < 0)
56
+ return null;
57
+ const pixel = scatterItemPixel(chart, seriesModel, data, diInside);
58
+ if (!pixel)
59
+ return null;
60
+ const s = ctx.normalizedSeries[si];
61
+ const row = s?.data?.[diInside];
62
+ if (!row || row.length < 2)
63
+ return null;
64
+ const x = Number(row[0]);
65
+ const y = Number(row[1]);
66
+ const z = row.length >= 3 ? Number(row[2]) : undefined;
67
+ if (!Number.isFinite(x) || !Number.isFinite(y))
68
+ return null;
69
+ const seriesName = s?.name != null && s.name !== '' ? String(s.name) : `Series ${si + 1}`;
70
+ const themeLen = Math.max(themeSeries.length, 1);
71
+ const color = themeSeries[si % themeLen]?.color;
72
+ return {
73
+ pointerX: pixel.x,
74
+ pointerY: pixel.y,
75
+ seriesIndex: si,
76
+ dataIndex: diInside,
77
+ seriesName,
78
+ x,
79
+ y,
80
+ ...(Number.isFinite(z) ? { z } : {}),
81
+ ...(typeof color === 'string' ? { color } : {}),
82
+ };
83
+ }
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { ScatterItemTooltipContext, ScatterItemTooltipParams } from './scatter-item-tooltip.types';
3
+ export interface UseScatterItemTooltipOptions {
4
+ active: boolean;
5
+ renderTooltip: (params: ScatterItemTooltipParams) => React.ReactNode;
6
+ contextRef: React.RefObject<ScatterItemTooltipContext>;
7
+ themeSeriesRef: React.RefObject<Array<{
8
+ color: string;
9
+ }>>;
10
+ width: number;
11
+ height: number;
12
+ }
13
+ export interface UseScatterItemTooltipResult {
14
+ attachScatterItemTooltipListeners: (chart: {
15
+ on: (ev: string, fn: (...args: any[]) => void) => void;
16
+ off: (ev: string, fn: (...args: any[]) => void) => void;
17
+ }) => () => void;
18
+ renderScatterTooltipOverlay: () => React.ReactNode;
19
+ }
20
+ /**
21
+ * Scatter/bubble item tooltip as React Native UI (`trigger: 'item'`).
22
+ * Listens to `showTip` / `hideTip` and maps with {@link scatterItemParamsFromShowTip}.
23
+ */
24
+ export declare function useScatterItemTooltip(options: UseScatterItemTooltipOptions): UseScatterItemTooltipResult;
25
+ //# sourceMappingURL=use-scatter-item-tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scatter-item-tooltip.d.ts","sourceRoot":"","sources":["../../../../../components/chart/scatter/tooltip/use-scatter-item-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxG,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,KAAK,CAAC,SAAS,CAAC;IACrE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACvD,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,iCAAiC,EAAE,CAAC,KAAK,EAAE;QACzC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;QACvD,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;KACzD,KAAK,MAAM,IAAI,CAAC;IACjB,2BAA2B,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;CACpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,2BAA2B,CAiDxG"}
@@ -0,0 +1,46 @@
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
+ import { ChartPointerTooltipOverlay } from '../../tooltip/chart-pointer-tooltip-overlay';
3
+ import { scatterItemParamsFromShowTip } from './scatter-item-tooltip.utils';
4
+ /**
5
+ * Scatter/bubble item tooltip as React Native UI (`trigger: 'item'`).
6
+ * Listens to `showTip` / `hideTip` and maps with {@link scatterItemParamsFromShowTip}.
7
+ */
8
+ export function useScatterItemTooltip(options) {
9
+ const { active, renderTooltip, contextRef, themeSeriesRef, width, height } = options;
10
+ const [params, setParams] = useState(null);
11
+ useEffect(() => {
12
+ if (!active)
13
+ setParams(null);
14
+ }, [active]);
15
+ const attachScatterItemTooltipListeners = useCallback((chart) => {
16
+ if (!active)
17
+ return () => { };
18
+ const onShowTip = (evt) => {
19
+ const ctx = contextRef.current;
20
+ if (!ctx?.normalizedSeries?.length) {
21
+ setParams(null);
22
+ return;
23
+ }
24
+ const next = scatterItemParamsFromShowTip(chart, evt, ctx, themeSeriesRef.current ?? []);
25
+ setParams(next);
26
+ };
27
+ const onHideTip = () => setParams(null);
28
+ chart.on('showTip', onShowTip);
29
+ chart.on('hideTip', onHideTip);
30
+ return () => {
31
+ chart.off('showTip', onShowTip);
32
+ chart.off('hideTip', onHideTip);
33
+ };
34
+ }, [active, contextRef, themeSeriesRef]);
35
+ const renderScatterTooltipOverlay = useCallback(() => {
36
+ if (!active || params == null)
37
+ return null;
38
+ return (<ChartPointerTooltipOverlay width={width} height={height} pointerX={params.pointerX} pointerY={params.pointerY}>
39
+ {renderTooltip(params)}
40
+ </ChartPointerTooltipOverlay>);
41
+ }, [active, renderTooltip, params, width, height]);
42
+ return {
43
+ attachScatterItemTooltipListeners,
44
+ renderScatterTooltipOverlay,
45
+ };
46
+ }
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface ChartPointerTooltipOverlayProps {
3
+ width: number;
4
+ height: number;
5
+ pointerX: number;
6
+ pointerY: number;
7
+ children: React.ReactNode;
8
+ }
9
+ /** Positions tooltip UI near `(pointerX, pointerY)` in chart pixel space. */
10
+ export declare function ChartPointerTooltipOverlay({ width, height, pointerX, pointerY, children, }: ChartPointerTooltipOverlayProps): React.JSX.Element;
11
+ //# sourceMappingURL=chart-pointer-tooltip-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-pointer-tooltip-overlay.d.ts","sourceRoot":"","sources":["../../../../components/chart/tooltip/chart-pointer-tooltip-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AA0EjE,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,+BAA+B,qBAiDjC"}
@@ -0,0 +1,88 @@
1
+ import React, { useLayoutEffect, useRef, useState } from 'react';
2
+ import { StyleSheet, View } from 'react-native';
3
+ const TOOLTIP_EDGE_PAD = 4;
4
+ const TOOLTIP_GAP_H = 12;
5
+ const TOOLTIP_GAP_V = 8;
6
+ const TOOLTIP_FLIP_HYSTERESIS = 28;
7
+ function tooltipPositionSticky(pointerX, pointerY, chartW, chartH, tooltipW, tooltipH, placeLeftRef, placeAboveRef) {
8
+ let left = pointerX + TOOLTIP_GAP_H;
9
+ let top = pointerY + TOOLTIP_GAP_V;
10
+ if (tooltipW > 0) {
11
+ let useLeft = placeLeftRef.current;
12
+ if (!useLeft && pointerX + TOOLTIP_GAP_H + tooltipW > chartW - TOOLTIP_EDGE_PAD) {
13
+ useLeft = true;
14
+ placeLeftRef.current = true;
15
+ }
16
+ if (useLeft &&
17
+ pointerX + TOOLTIP_GAP_H + tooltipW <= chartW - TOOLTIP_EDGE_PAD - TOOLTIP_FLIP_HYSTERESIS &&
18
+ pointerX - TOOLTIP_GAP_H - tooltipW >= TOOLTIP_EDGE_PAD) {
19
+ useLeft = false;
20
+ placeLeftRef.current = false;
21
+ }
22
+ if (useLeft && pointerX - TOOLTIP_GAP_H - tooltipW < TOOLTIP_EDGE_PAD) {
23
+ useLeft = false;
24
+ placeLeftRef.current = false;
25
+ }
26
+ left = useLeft ? pointerX - TOOLTIP_GAP_H - tooltipW : pointerX + TOOLTIP_GAP_H;
27
+ const maxL = Math.max(TOOLTIP_EDGE_PAD, chartW - tooltipW - TOOLTIP_EDGE_PAD);
28
+ left = Math.min(Math.max(TOOLTIP_EDGE_PAD, left), maxL);
29
+ }
30
+ else {
31
+ left = Math.min(Math.max(TOOLTIP_EDGE_PAD, left), chartW - TOOLTIP_EDGE_PAD - 24);
32
+ }
33
+ if (tooltipH > 0) {
34
+ let useAbove = placeAboveRef.current;
35
+ if (!useAbove && pointerY + TOOLTIP_GAP_V + tooltipH > chartH - TOOLTIP_EDGE_PAD) {
36
+ useAbove = true;
37
+ placeAboveRef.current = true;
38
+ }
39
+ if (useAbove &&
40
+ pointerY + TOOLTIP_GAP_V + tooltipH <= chartH - TOOLTIP_EDGE_PAD - TOOLTIP_FLIP_HYSTERESIS &&
41
+ pointerY - TOOLTIP_GAP_V - tooltipH >= TOOLTIP_EDGE_PAD) {
42
+ useAbove = false;
43
+ placeAboveRef.current = false;
44
+ }
45
+ if (useAbove && pointerY - TOOLTIP_GAP_V - tooltipH < TOOLTIP_EDGE_PAD) {
46
+ useAbove = false;
47
+ placeAboveRef.current = false;
48
+ }
49
+ top = useAbove ? pointerY - TOOLTIP_GAP_V - tooltipH : pointerY + TOOLTIP_GAP_V;
50
+ const maxT = Math.max(TOOLTIP_EDGE_PAD, chartH - tooltipH - TOOLTIP_EDGE_PAD);
51
+ top = Math.min(Math.max(TOOLTIP_EDGE_PAD, top), maxT);
52
+ }
53
+ else {
54
+ top = Math.max(TOOLTIP_EDGE_PAD, top);
55
+ }
56
+ return { left, top };
57
+ }
58
+ /** Positions tooltip UI near `(pointerX, pointerY)` in chart pixel space. */
59
+ export function ChartPointerTooltipOverlay({ width, height, pointerX, pointerY, children, }) {
60
+ const [measured, setMeasured] = useState(null);
61
+ const placeLeftRef = useRef(false);
62
+ const placeAboveRef = useRef(false);
63
+ useLayoutEffect(() => {
64
+ setMeasured(null);
65
+ placeLeftRef.current = false;
66
+ placeAboveRef.current = false;
67
+ }, [width, height]);
68
+ const tw = measured?.w ?? 0;
69
+ const th = measured?.h ?? 0;
70
+ const { left, top } = tooltipPositionSticky(pointerX, pointerY, width, height, tw, th, placeLeftRef, placeAboveRef);
71
+ const maxBoxWidth = width - 2 * TOOLTIP_EDGE_PAD;
72
+ return (<View pointerEvents="box-none" style={[StyleSheet.absoluteFillObject, { alignItems: 'flex-start' }]}>
73
+ <View pointerEvents="none" onLayout={(e) => {
74
+ const { width: w, height: h } = e.nativeEvent.layout;
75
+ if (w <= 0 || h <= 0)
76
+ return;
77
+ setMeasured((prev) => (prev?.w === w && prev?.h === h ? prev : { w, h }));
78
+ }} style={{
79
+ position: 'absolute',
80
+ left,
81
+ top,
82
+ maxWidth: maxBoxWidth,
83
+ opacity: measured != null ? 1 : 0,
84
+ }} collapsable={false}>
85
+ {children}
86
+ </View>
87
+ </View>);
88
+ }
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ /** White card + shadow (axis category + series, or item header + body). */
3
+ export declare function TooltipPresetCard({ minWidth, eyebrow, categoryTitle, header, seriesRows, keyValueRows, children, }: {
4
+ minWidth?: number;
5
+ eyebrow?: string;
6
+ categoryTitle?: string;
7
+ header?: {
8
+ swatchColor?: string;
9
+ title: string;
10
+ titleVariant?: 'muted' | 'emphasis';
11
+ marginBottom?: number;
12
+ };
13
+ seriesRows?: Array<{
14
+ key: string | number;
15
+ swatchColor: string;
16
+ label: string;
17
+ value: React.ReactNode;
18
+ }>;
19
+ /** Optional label/value rows on light background (e.g. radar). */
20
+ keyValueRows?: Array<{
21
+ key: string;
22
+ left: string;
23
+ right: React.ReactNode;
24
+ }>;
25
+ children?: React.ReactNode;
26
+ }): React.JSX.Element;
27
+ /** Pill chip on dark glass. */
28
+ export declare function TooltipPresetCompact({ emphasis, detail, wrap, }: {
29
+ emphasis: string;
30
+ detail: string;
31
+ wrap?: boolean;
32
+ }): React.JSX.Element;
33
+ /** KPI strip with optional footer metric rows. */
34
+ export declare function TooltipPresetKpi({ accentColor, minWidth, overline, metric, caption, footerRows, }: {
35
+ accentColor: string;
36
+ minWidth?: number;
37
+ overline: string;
38
+ metric: React.ReactNode;
39
+ caption?: string;
40
+ footerRows?: Array<{
41
+ key: string | number;
42
+ left: string;
43
+ right: React.ReactNode;
44
+ }>;
45
+ }): React.JSX.Element;
46
+ export type TooltipStripedRow = {
47
+ key: string;
48
+ right: string | number;
49
+ left?: React.ReactNode;
50
+ leftLabel?: string;
51
+ leftSwatchColor?: string;
52
+ };
53
+ /** Banded header + zebra rows. */
54
+ export declare function TooltipPresetStriped({ header, headerTitle, headerSwatch, rows, }: {
55
+ /** Custom header content; wins over `headerTitle` / `headerSwatch`. */
56
+ header?: React.ReactNode;
57
+ /** Bold title only (e.g. axis category). */
58
+ headerTitle?: string;
59
+ /** Small swatch + bold title (item tooltips). */
60
+ headerSwatch?: {
61
+ color: string;
62
+ title: string;
63
+ };
64
+ rows: TooltipStripedRow[];
65
+ }): React.JSX.Element;
66
+ //# sourceMappingURL=chart-tooltip-preset-shells.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-tooltip-preset-shells.d.ts","sourceRoot":"","sources":["../../../../components/chart/tooltip/chart-tooltip-preset-shells.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAoNvC,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,OAAO,EACP,aAAa,EACb,MAAM,EACN,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QACpC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;KACxB,CAAC,CAAC;IACH,kEAAkE;IAClE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;IAC5E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,qBA0CA;AAED,+BAA+B;AAC/B,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,EACN,IAAW,GACZ,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,qBAUA;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,QAAc,EACd,QAAQ,EACR,MAAM,EACN,OAAO,EACP,UAAU,GACX,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;CACpF,qBAyBA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,WAAW,EACX,YAAY,EACZ,IAAI,GACL,EAAE;IACD,uEAAuE;IACvE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B,qBAwDA"}