@impulse-ui-native/charts 2.1.0 → 2.1.1

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 (131) hide show
  1. package/dist/components/index.d.mts +17 -0
  2. package/dist/components/index.js +8 -0
  3. package/dist/components/index.js.map +1 -0
  4. package/dist/components/line-chart-body.d.mts +14 -0
  5. package/dist/components/line-chart-body.js +90 -0
  6. package/dist/components/line-chart-body.js.map +1 -0
  7. package/dist/components/line-chart.d.mts +10 -0
  8. package/dist/components/line-chart.js +21 -0
  9. package/dist/components/line-chart.js.map +1 -0
  10. package/dist/components/multi-line-chart-body.d.mts +11 -0
  11. package/dist/components/multi-line-chart-body.js +98 -0
  12. package/dist/components/multi-line-chart-body.js.map +1 -0
  13. package/dist/components/multi-line-chart.d.mts +11 -0
  14. package/dist/components/multi-line-chart.js +21 -0
  15. package/dist/components/multi-line-chart.js.map +1 -0
  16. package/dist/components/primitives/grid.d.mts +10 -0
  17. package/dist/components/primitives/grid.js +65 -0
  18. package/dist/components/primitives/grid.js.map +1 -0
  19. package/dist/components/primitives/index.d.mts +14 -0
  20. package/dist/components/primitives/index.js +13 -0
  21. package/dist/components/primitives/index.js.map +1 -0
  22. package/dist/components/primitives/label.d.mts +10 -0
  23. package/dist/components/primitives/label.js +94 -0
  24. package/dist/components/primitives/label.js.map +1 -0
  25. package/dist/components/primitives/line.d.mts +11 -0
  26. package/dist/components/primitives/line.js +50 -0
  27. package/dist/components/primitives/line.js.map +1 -0
  28. package/dist/components/primitives/x-axis.d.mts +11 -0
  29. package/dist/components/primitives/x-axis.js +93 -0
  30. package/dist/components/primitives/x-axis.js.map +1 -0
  31. package/dist/components/primitives/y-axis.d.mts +11 -0
  32. package/dist/components/primitives/y-axis.js +95 -0
  33. package/dist/components/primitives/y-axis.js.map +1 -0
  34. package/dist/constants/axis.constants.d.mts +6 -0
  35. package/dist/constants/axis.constants.js +11 -0
  36. package/dist/constants/axis.constants.js.map +1 -0
  37. package/dist/constants/grid.constants.d.mts +6 -0
  38. package/dist/constants/grid.constants.js +11 -0
  39. package/dist/constants/grid.constants.js.map +1 -0
  40. package/dist/constants/index.d.mts +11 -0
  41. package/dist/constants/index.js +6 -0
  42. package/dist/constants/index.js.map +1 -0
  43. package/dist/constants/label.constants.d.mts +11 -0
  44. package/dist/constants/label.constants.js +12 -0
  45. package/dist/constants/label.constants.js.map +1 -0
  46. package/dist/constants/line-chart.constants.d.mts +8 -0
  47. package/dist/constants/line-chart.constants.js +7 -0
  48. package/dist/constants/line-chart.constants.js.map +1 -0
  49. package/dist/constants/line.constants.d.mts +15 -0
  50. package/dist/constants/line.constants.js +18 -0
  51. package/dist/constants/line.constants.js.map +1 -0
  52. package/dist/contexts/index.d.mts +2 -0
  53. package/dist/contexts/index.js +1 -0
  54. package/dist/contexts/index.js.map +1 -0
  55. package/dist/hooks/index.d.mts +12 -0
  56. package/dist/hooks/index.js +9 -0
  57. package/dist/hooks/index.js.map +1 -0
  58. package/dist/hooks/use-chart-canvas.hook.d.mts +9 -0
  59. package/dist/hooks/use-chart-canvas.hook.js +10 -0
  60. package/dist/hooks/use-chart-canvas.hook.js.map +1 -0
  61. package/dist/hooks/use-line-chart.hook.d.mts +10 -0
  62. package/dist/hooks/use-line-chart.hook.js +13 -0
  63. package/dist/hooks/use-line-chart.hook.js.map +1 -0
  64. package/dist/hooks/use-multi-line-chart.hook.d.mts +12 -0
  65. package/dist/hooks/use-multi-line-chart.hook.js +44 -0
  66. package/dist/hooks/use-multi-line-chart.hook.js.map +1 -0
  67. package/dist/index.d.mts +36 -321
  68. package/dist/index.js +6 -1083
  69. package/dist/index.js.map +1 -1
  70. package/dist/line-chart.types-yxru5uWc.d.mts +62 -0
  71. package/dist/types/axis.types.d.mts +49 -0
  72. package/dist/types/axis.types.js +1 -0
  73. package/dist/types/axis.types.js.map +1 -0
  74. package/dist/types/common.types.d.mts +57 -0
  75. package/dist/types/common.types.js +1 -0
  76. package/dist/types/common.types.js.map +1 -0
  77. package/dist/types/grid.types.d.mts +5 -0
  78. package/dist/types/grid.types.js +1 -0
  79. package/dist/types/grid.types.js.map +1 -0
  80. package/dist/types/index.d.mts +11 -0
  81. package/dist/types/index.js +11 -0
  82. package/dist/types/index.js.map +1 -0
  83. package/dist/types/label.types.d.mts +24 -0
  84. package/dist/types/label.types.js +1 -0
  85. package/dist/types/label.types.js.map +1 -0
  86. package/dist/types/line-chart.types.d.mts +5 -0
  87. package/dist/types/line-chart.types.js +1 -0
  88. package/dist/types/line-chart.types.js.map +1 -0
  89. package/dist/types/line.types.d.mts +11 -0
  90. package/dist/types/line.types.js +1 -0
  91. package/dist/types/line.types.js.map +1 -0
  92. package/dist/types/multi-line-chart.types.d.mts +23 -0
  93. package/dist/types/multi-line-chart.types.js +1 -0
  94. package/dist/types/multi-line-chart.types.js.map +1 -0
  95. package/dist/types/style.types.d.mts +19 -0
  96. package/dist/types/style.types.js +1 -0
  97. package/dist/types/style.types.js.map +1 -0
  98. package/dist/types/use-line-chart.types.d.mts +29 -0
  99. package/dist/types/use-line-chart.types.js +1 -0
  100. package/dist/types/use-line-chart.types.js.map +1 -0
  101. package/dist/types/use-multi-line-chart.types.d.mts +16 -0
  102. package/dist/types/use-multi-line-chart.types.js +1 -0
  103. package/dist/types/use-multi-line-chart.types.js.map +1 -0
  104. package/dist/utils/axis.util.d.mts +15 -0
  105. package/dist/utils/axis.util.js +82 -0
  106. package/dist/utils/axis.util.js.map +1 -0
  107. package/dist/utils/chart-layout.util.d.mts +8 -0
  108. package/dist/utils/chart-layout.util.js +55 -0
  109. package/dist/utils/chart-layout.util.js.map +1 -0
  110. package/dist/utils/grid.util.d.mts +11 -0
  111. package/dist/utils/grid.util.js +56 -0
  112. package/dist/utils/grid.util.js.map +1 -0
  113. package/dist/utils/index.d.mts +17 -0
  114. package/dist/utils/index.js +44 -0
  115. package/dist/utils/index.js.map +1 -0
  116. package/dist/utils/label.util.d.mts +10 -0
  117. package/dist/utils/label.util.js +24 -0
  118. package/dist/utils/label.util.js.map +1 -0
  119. package/dist/utils/line-chart.util.d.mts +11 -0
  120. package/dist/utils/line-chart.util.js +133 -0
  121. package/dist/utils/line-chart.util.js.map +1 -0
  122. package/dist/utils/line.util.d.mts +10 -0
  123. package/dist/utils/line.util.js +36 -0
  124. package/dist/utils/line.util.js.map +1 -0
  125. package/dist/utils/multi-line-chart.util.d.mts +10 -0
  126. package/dist/utils/multi-line-chart.util.js +23 -0
  127. package/dist/utils/multi-line-chart.util.js.map +1 -0
  128. package/dist/utils/paragraph-builder.util.d.mts +10 -0
  129. package/dist/utils/paragraph-builder.util.js +16 -0
  130. package/dist/utils/paragraph-builder.util.js.map +1 -0
  131. package/package.json +7 -6
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/primitives/grid.tsx","../src/constants/axis.constants.ts","../src/constants/grid.constants.ts","../src/constants/label.constants.ts","../src/constants/line.constants.ts","../src/constants/line-chart.constants.ts","../src/utils/axis.util.ts","../src/utils/chart-layout.util.ts","../src/utils/grid.util.ts","../src/utils/label.util.ts","../src/utils/line.util.ts","../src/utils/line-chart.util.ts","../src/utils/multi-line-chart.util.ts","../src/utils/paragraph-builder.util.ts","../src/components/primitives/label.tsx","../src/components/primitives/line.tsx","../src/components/primitives/x-axis.tsx","../src/components/primitives/y-axis.tsx","../src/components/line-chart.tsx","../src/hooks/use-chart-canvas.hook.ts","../src/hooks/use-line-chart.hook.ts","../src/hooks/use-multi-line-chart.hook.ts","../src/components/line-chart-body.tsx","../src/components/multi-line-chart.tsx","../src/components/multi-line-chart-body.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { DashPathEffect, Group, Path } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport { GridDefaultXVisible, GridDefaultYVisible } from \"../../constants\";\nimport { ChartXValue, GridProps } from \"../../types\";\nimport {\n createHorizontalGridPath,\n createVerticalGridPath,\n resolveGridLineOptions,\n} from \"../../utils\";\n\nexport const Grid = memo(function Grid<X extends ChartXValue = number>(\n props: GridProps<X>,\n) {\n const { options, plot, theme, xScale, xTicks, yScale, yTicks } = props;\n\n const xStyle = useMemo(\n () =>\n resolveGridLineOptions(\n options?.x,\n GridDefaultXVisible,\n theme.colors.border.subtle.value,\n ),\n [options?.x, theme.colors.border.subtle.value],\n );\n\n const yStyle = useMemo(\n () =>\n resolveGridLineOptions(\n options?.y,\n GridDefaultYVisible,\n theme.colors.border.subtle.value,\n ),\n [options?.y, theme.colors.border.subtle.value],\n );\n\n const xPath = useMemo(\n () => createVerticalGridPath(xTicks, xScale, plot),\n [plot, xScale, xTicks],\n );\n\n const yPath = useMemo(\n () => createHorizontalGridPath(yTicks, yScale, plot),\n [plot, yScale, yTicks],\n );\n\n return (\n <Group>\n {xStyle.visible && xPath ? (\n <Path\n path={xPath}\n color={xStyle.color}\n opacity={xStyle.opacity}\n strokeWidth={xStyle.width}\n style=\"stroke\"\n >\n {xStyle.dash?.length ? (\n <DashPathEffect intervals={[...xStyle.dash]} />\n ) : null}\n </Path>\n ) : null}\n\n {yStyle.visible && yPath ? (\n <Path\n path={yPath}\n color={yStyle.color}\n opacity={yStyle.opacity}\n strokeWidth={yStyle.width}\n style=\"stroke\"\n >\n {yStyle.dash?.length ? (\n <DashPathEffect intervals={[...yStyle.dash]} />\n ) : null}\n </Path>\n ) : null}\n </Group>\n );\n});\n","export const AxisDefaultWidth = 1;\nexport const AxisDefaultOpacity = 1;\nexport const AxisDefaultTickLength = 4;\nexport const AxisDefaultLabelGap = 4;\n","export const GridDefaultWidth = 1;\nexport const GridDefaultOpacity = 1;\nexport const GridDefaultXVisible = true;\nexport const GridDefaultYVisible = true;\n","import { SkTextFontFeatures } from \"@shopify/react-native-skia\";\n\nimport { LabelHorizontalAlignment, LabelVerticalAlignment } from \"../types\";\n\nexport const TabularNumsFeature: SkTextFontFeatures = {\n name: \"tnum\",\n value: 1,\n};\n\nexport const LabelDefaultHorizontalAlignment: LabelHorizontalAlignment = \"left\";\nexport const LabelDefaultVerticalAlignment: LabelVerticalAlignment = \"top\";\n","import { ChartColorTokens } from \"@impulse-ui-native/theme\";\n\nimport { ChartStrokeCap, ChartStrokeJoin, LineChartCurve } from \"../types\";\n\nexport const LineDefaultColor = ChartColorTokens[0];\nexport const LineDefaultColors = ChartColorTokens;\nexport const LineDefaultWidth = 2;\nexport const LineDefaultOpacity = 1;\nexport const LineDefaultCurve: LineChartCurve = \"linear\";\nexport const LineDefaultCap: ChartStrokeCap = \"round\";\nexport const LineDefaultJoin: ChartStrokeJoin = \"round\";\n","import { ChartNumericDomain } from \"../types\";\n\nexport const LineChartDefaultTickCount = 5;\n\nexport const LineChartDefaultNumericDomain: ChartNumericDomain = [0, 1];\n","import {\n AxisLayout,\n AxisTick,\n ChartRect,\n CreateAxisLayoutProps,\n CreateYAxisLayoutProps,\n LineChartScale,\n} from \"../types\";\n\nexport function createAxisTicks<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n): AxisTick<Value>[] {\n return values.reduce<AxisTick<Value>[]>((ticks, value) => {\n const position = scale(value);\n\n if (position !== undefined && Number.isFinite(position)) {\n ticks.push({ value, position });\n }\n\n return ticks;\n }, []);\n}\n\nexport function createXAxisLayout<Value>(\n props: CreateAxisLayoutProps<Value>,\n): AxisLayout<Value> {\n const ticks = createAxisTicks(props.values, props.scale);\n const axisY = props.plot.y + props.plot.height;\n const labelOffset = props.tickLength + props.labelGap;\n\n return {\n line: {\n start: { x: props.plot.x, y: axisY },\n end: { x: props.plot.x + props.plot.width, y: axisY },\n },\n ticks: ticks.map((tick, index) => ({\n ...tick,\n start: { x: tick.position, y: axisY },\n end: { x: tick.position, y: axisY + props.tickLength },\n labelRect: createXAxisLabelRect(ticks, index, props.region, labelOffset),\n })),\n };\n}\n\nexport function createYAxisLayout(\n props: CreateYAxisLayoutProps,\n): AxisLayout<number> {\n const ticks = createAxisTicks(props.values, props.scale);\n const axisX = props.plot.x;\n const labelWidth = props.region.width - props.tickLength - props.labelGap;\n\n return {\n line: {\n start: { x: axisX, y: props.plot.y },\n end: { x: axisX, y: props.plot.y + props.plot.height },\n },\n ticks: ticks.map((tick) => ({\n ...tick,\n start: { x: axisX - props.tickLength, y: tick.position },\n end: { x: axisX, y: tick.position },\n labelRect: createYAxisLabelRect(\n tick.position,\n props.region,\n labelWidth,\n props.fontSize,\n ),\n })),\n };\n}\n\nexport function createXAxisLabelRect(\n ticks: readonly AxisTick<unknown>[],\n index: number,\n region: ChartRect,\n offset: number,\n): ChartRect {\n const tick = ticks[index]!;\n const previous = ticks[index - 1];\n const next = ticks[index + 1];\n const previousSpacing = previous\n ? Math.abs(tick.position - previous.position)\n : next\n ? Math.abs(next.position - tick.position)\n : region.width;\n const nextSpacing = next\n ? Math.abs(next.position - tick.position)\n : previous\n ? Math.abs(tick.position - previous.position)\n : region.width;\n const width = Math.max(0, Math.min(previousSpacing, nextSpacing));\n\n return {\n x: tick.position - width / 2,\n y: region.y + offset,\n width,\n height: Math.max(0, region.height - offset),\n };\n}\n\nexport function createYAxisLabelRect(\n position: number,\n region: ChartRect,\n width: number,\n fontSize: number,\n): ChartRect {\n return {\n x: region.x,\n y: position - fontSize,\n width: Math.max(0, width),\n height: fontSize * 2,\n };\n}\n\nexport function formatAxisTick<Value>(\n value: Value,\n format?: (value: Value) => string,\n): string {\n return format ? format(value) : String(value);\n}\n","import { ChartInsets, ChartLayout, ChartRect, ChartSize } from \"../types\";\n\nexport function createChartLayout(\n size: ChartSize,\n insets: Partial<ChartInsets> = {},\n): ChartLayout {\n const resolvedInsets: ChartInsets = {\n top: insets.top ?? 0,\n right: insets.right ?? 0,\n bottom: insets.bottom ?? 0,\n left: insets.left ?? 0,\n };\n\n const plotWidth = Math.max(\n 0,\n size.width - resolvedInsets.left - resolvedInsets.right,\n );\n const plotHeight = Math.max(\n 0,\n size.height - resolvedInsets.top - resolvedInsets.bottom,\n );\n\n const plot = {\n x: resolvedInsets.left,\n y: resolvedInsets.top,\n width: plotWidth,\n height: plotHeight,\n };\n\n return {\n size,\n insets: resolvedInsets,\n plot,\n xAxis: {\n x: plot.x,\n y: plot.y + plot.height,\n width: plot.width,\n height: resolvedInsets.bottom,\n },\n yAxis: {\n x: 0,\n y: plot.y,\n width: resolvedInsets.left,\n height: plot.height,\n },\n };\n}\n\nexport function createInsetRect(rect: ChartRect, amount: number): ChartRect {\n const inset = Math.max(0, amount);\n const horizontalInset = Math.min(inset, rect.width / 2);\n const verticalInset = Math.min(inset, rect.height / 2);\n\n return {\n x: rect.x + horizontalInset,\n y: rect.y + verticalInset,\n width: Math.max(0, rect.width - horizontalInset * 2),\n height: Math.max(0, rect.height - verticalInset * 2),\n };\n}\n","import { Skia, SkPath } from \"@shopify/react-native-skia\";\n\nimport { GridDefaultOpacity, GridDefaultWidth } from \"../constants\";\nimport {\n ChartGridLineOptions,\n ChartRect,\n LineChartScale,\n ResolvedGridLineOptions,\n} from \"../types\";\nimport { createAxisTicks } from \"./axis.util\";\n\nexport function createVerticalGridPath<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n plot: ChartRect,\n): SkPath | null {\n const ticks = createAxisTicks(values, scale);\n\n if (ticks.length === 0) {\n return null;\n }\n\n const path = Skia.Path.Make();\n\n ticks.forEach(({ position }) => {\n path.moveTo(position, plot.y);\n path.lineTo(position, plot.y + plot.height);\n });\n\n return path;\n}\n\nexport function createHorizontalGridPath<Value>(\n values: readonly Value[],\n scale: LineChartScale<Value>,\n plot: ChartRect,\n): SkPath | null {\n const ticks = createAxisTicks(values, scale);\n\n if (ticks.length === 0) {\n return null;\n }\n\n const path = Skia.Path.Make();\n\n ticks.forEach(({ position }) => {\n path.moveTo(plot.x, position);\n path.lineTo(plot.x + plot.width, position);\n });\n\n return path;\n}\n\nexport function resolveGridLineOptions(\n options: boolean | ChartGridLineOptions | undefined,\n defaultVisible: boolean,\n defaultColor: string,\n): ResolvedGridLineOptions {\n if (typeof options === \"boolean\") {\n return {\n visible: options,\n color: defaultColor,\n width: GridDefaultWidth,\n opacity: GridDefaultOpacity,\n };\n }\n\n return {\n visible: isGridLineVisible(options, defaultVisible),\n color: options?.color ?? defaultColor,\n width: options?.width ?? GridDefaultWidth,\n opacity: options?.opacity ?? GridDefaultOpacity,\n dash: options?.dash,\n };\n}\n\nfunction isGridLineVisible(\n options: boolean | ChartGridLineOptions | undefined,\n defaultVisible: boolean,\n): boolean {\n if (typeof options === \"boolean\") {\n return options;\n }\n\n return options?.visible ?? defaultVisible;\n}\n","import { TextAlign } from \"@shopify/react-native-skia\";\n\nimport {\n ChartRect,\n LabelHorizontalAlignment,\n LabelVerticalAlignment,\n} from \"../types\";\n\nexport function getLabelTextAlign(\n alignment: LabelHorizontalAlignment,\n): TextAlign {\n if (alignment === \"center\") {\n return TextAlign.Center;\n }\n\n if (alignment === \"right\") {\n return TextAlign.Right;\n }\n\n return TextAlign.Left;\n}\n\nexport function getLabelY(\n rect: ChartRect,\n paragraphHeight: number,\n alignment: LabelVerticalAlignment,\n): number {\n if (alignment === \"center\") {\n return rect.y + (rect.height - paragraphHeight) / 2;\n }\n\n if (alignment === \"bottom\") {\n return rect.y + rect.height - paragraphHeight;\n }\n\n return rect.y;\n}\n","import { Skia, SkPath } from \"@shopify/react-native-skia\";\nimport { line as createD3Line, curveLinear, curveMonotoneX } from \"d3-shape\";\n\nimport {\n ChartRect,\n ChartXValue,\n LineChartCoordinate,\n LineChartCurve,\n} from \"../types\";\n\nexport function createLinePath<X extends ChartXValue>(\n coordinates: readonly LineChartCoordinate<X>[],\n curve: LineChartCurve,\n): SkPath | null {\n const pathData = createD3Line<LineChartCoordinate<X>>()\n .defined((coordinate) => coordinate.x !== null && coordinate.y !== null)\n .x((coordinate) => coordinate.x!)\n .y((coordinate) => coordinate.y!)\n .curve(curve === \"monotone\" ? curveMonotoneX : curveLinear)(coordinates);\n\n return pathData ? Skia.Path.MakeFromSVGString(pathData) : null;\n}\n\nexport function fitLineCoordinatesToRect<X extends ChartXValue>(\n coordinates: readonly LineChartCoordinate<X>[],\n source: ChartRect,\n target: ChartRect,\n): LineChartCoordinate<X>[] {\n return coordinates.map((coordinate) => ({\n ...coordinate,\n x:\n coordinate.x === null\n ? null\n : mapCoordinate(\n coordinate.x,\n source.x,\n source.width,\n target.x,\n target.width,\n ),\n y:\n coordinate.y === null\n ? null\n : mapCoordinate(\n coordinate.y,\n source.y,\n source.height,\n target.y,\n target.height,\n ),\n }));\n}\n\nfunction mapCoordinate(\n value: number,\n sourceStart: number,\n sourceLength: number,\n targetStart: number,\n targetLength: number,\n): number {\n if (sourceLength <= 0) {\n return targetStart + targetLength / 2;\n }\n\n return targetStart + ((value - sourceStart) / sourceLength) * targetLength;\n}\n","import { extent } from \"d3-array\";\nimport { scaleLinear, scalePoint, scaleTime } from \"d3-scale\";\n\nimport {\n LineChartDefaultNumericDomain,\n LineChartDefaultTickCount,\n} from \"../constants\";\nimport {\n ChartNumericDomain,\n ChartXValue,\n LineChartCoordinate,\n LineChartPoint,\n LineChartScale,\n LineChartXScaleModel,\n UseLineChartProps,\n UseLineChartResult,\n} from \"../types\";\n\nexport function createLineChartModel<X extends ChartXValue>(\n props: UseLineChartProps<X>,\n): UseLineChartResult<X> {\n const xTickCount = getTickCount(props.xAxis?.tickCount);\n const yTickCount = getTickCount(props.yAxis?.tickCount);\n const xRange: ChartNumericDomain = [\n props.plot.x,\n props.plot.x + props.plot.width,\n ];\n const yRange: ChartNumericDomain = [\n props.plot.y + props.plot.height,\n props.plot.y,\n ];\n\n const xModel = createXScale(\n props.data.map((point) => point.x),\n props.xScaleType ?? \"linear\",\n xRange,\n xTickCount,\n );\n\n const yValues = props.data.reduce<number[]>((values, point) => {\n if (point.y !== null && Number.isFinite(point.y)) {\n values.push(point.y);\n }\n\n return values;\n }, []);\n const yDomain = props.yAxis?.domain ?? getNumericDomain(yValues);\n const d3YScale = scaleLinear().domain(yDomain).range(yRange);\n\n if (!props.yAxis?.domain && yTickCount > 0) {\n d3YScale.nice(yTickCount);\n }\n\n const resolvedYDomain = d3YScale.domain() as [number, number];\n const yScale: LineChartScale<number> = (value) => d3YScale(value);\n const coordinates = createLineChartCoordinates(\n props.data,\n xModel.scale,\n yScale,\n );\n\n return {\n xDomain: xModel.domain,\n yDomain: resolvedYDomain,\n xTicks: xModel.ticks,\n yTicks: d3YScale.ticks(yTickCount),\n coordinates,\n xScale: xModel.scale,\n yScale,\n };\n}\n\nexport function createLineChartCoordinates<X extends ChartXValue>(\n data: readonly LineChartPoint<X>[],\n xScale: LineChartScale<X>,\n yScale: LineChartScale<number>,\n): LineChartCoordinate<X>[] {\n return data.map((datum, index) => {\n const x = xScale(datum.x);\n const y = datum.y === null ? undefined : yScale(datum.y);\n\n return {\n datum,\n index,\n x: isFiniteCoordinate(x) ? x : null,\n y: isFiniteCoordinate(y) ? y : null,\n };\n });\n}\n\nfunction createXScale<X extends ChartXValue>(\n values: readonly X[],\n scaleType: UseLineChartProps<X>[\"xScaleType\"],\n range: ChartNumericDomain,\n tickCount: number,\n): LineChartXScaleModel<X> {\n if (scaleType === \"point\") {\n const d3Scale = scalePoint<X>().domain(values).range(range);\n const domain = d3Scale.domain();\n\n return {\n domain,\n ticks: selectPointTicks(domain, tickCount),\n scale: (value) => d3Scale(value),\n };\n }\n\n if (scaleType === \"time\") {\n const dates = values.filter(\n (value): value is Extract<X, Date> =>\n value instanceof Date && Number.isFinite(value.getTime()),\n );\n const [minimum, maximum] = extent(dates);\n const domain =\n minimum && maximum\n ? ([minimum, maximum] as const)\n : ([new Date(0), new Date(1)] as const);\n const d3Scale = scaleTime().domain(domain).range(range);\n\n if (tickCount > 0) {\n d3Scale.nice(tickCount);\n }\n\n return {\n domain: d3Scale.domain() as X[],\n ticks: d3Scale.ticks(tickCount) as X[],\n scale: (value) =>\n value instanceof Date && Number.isFinite(value.getTime())\n ? d3Scale(value)\n : undefined,\n };\n }\n\n const numbers = values.filter(\n (value): value is Extract<X, number> =>\n typeof value === \"number\" && Number.isFinite(value),\n );\n const d3Scale = scaleLinear().domain(getNumericDomain(numbers)).range(range);\n\n if (tickCount > 0) {\n d3Scale.nice(tickCount);\n }\n\n return {\n domain: d3Scale.domain() as X[],\n ticks: d3Scale.ticks(tickCount) as X[],\n scale: (value) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? d3Scale(value)\n : undefined,\n };\n}\n\nfunction getNumericDomain(values: readonly number[]): ChartNumericDomain {\n const [minimum, maximum] = extent(values);\n\n return minimum === undefined || maximum === undefined\n ? LineChartDefaultNumericDomain\n : [minimum, maximum];\n}\n\nfunction getTickCount(tickCount: number | undefined): number {\n return tickCount === undefined || !Number.isFinite(tickCount)\n ? LineChartDefaultTickCount\n : Math.max(0, Math.floor(tickCount));\n}\n\nfunction selectPointTicks<X>(values: readonly X[], tickCount: number): X[] {\n if (tickCount <= 0 || values.length === 0) {\n return [];\n }\n\n if (values.length <= tickCount) {\n return [...values];\n }\n\n if (tickCount === 1) {\n return [values[0]!];\n }\n\n const lastIndex = values.length - 1;\n\n return Array.from({ length: tickCount }, (_, index) => {\n const valueIndex = Math.round((index * lastIndex) / (tickCount - 1));\n\n return values[valueIndex]!;\n });\n}\n\nfunction isFiniteCoordinate(value: number | undefined): value is number {\n return value !== undefined && Number.isFinite(value);\n}\n","import {\n LineDefaultColor,\n LineDefaultColors,\n LineDefaultWidth,\n} from \"../constants\";\nimport { ChartRect, ChartXValue, MultiLineChartSeriesModel } from \"../types\";\nimport { createInsetRect } from \"./chart-layout.util\";\nimport { fitLineCoordinatesToRect } from \"./line.util\";\n\nexport function createDrawableMultiLineChartSeries<X extends ChartXValue>(\n series: MultiLineChartSeriesModel<X>,\n index: number,\n plot: ChartRect,\n): MultiLineChartSeriesModel<X> {\n const width = series.line?.width ?? LineDefaultWidth;\n const linePlot = createInsetRect(plot, width / 2);\n\n return {\n ...series,\n coordinates: fitLineCoordinatesToRect(series.coordinates, plot, linePlot),\n line: {\n ...series.line,\n color:\n series.line?.color ??\n LineDefaultColors[index % LineDefaultColors.length] ??\n LineDefaultColor,\n },\n };\n}\n","import {\n Skia,\n SkParagraphStyle,\n SkTypefaceFontProvider,\n} from \"@shopify/react-native-skia\";\n\ninterface CreateParagraphBuilderProps {\n paragraphStyle?: SkParagraphStyle;\n typefaceProvider?: SkTypefaceFontProvider;\n}\n\nexport function createParagraphBuilder(props: CreateParagraphBuilderProps) {\n if (props.typefaceProvider) {\n return Skia.ParagraphBuilder.Make(\n props.paragraphStyle,\n props.typefaceProvider,\n );\n }\n\n return Skia.ParagraphBuilder.Make(props.paragraphStyle);\n}\n","import { useMemo } from \"react\";\nimport {\n Group,\n Paragraph,\n Skia,\n SkTextFontFeatures,\n SkTextStyle,\n} from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport {\n LabelDefaultHorizontalAlignment,\n LabelDefaultVerticalAlignment,\n TabularNumsFeature,\n} from \"../../constants\";\nimport { LabelProps } from \"../../types\";\nimport {\n createParagraphBuilder,\n getLabelTextAlign,\n getLabelY,\n} from \"../../utils\";\n\nexport const Label = memo(function Label(props: LabelProps) {\n const {\n color,\n fontManager,\n fontSize,\n fontFamily,\n fontWeight,\n horizontalAlign = LabelDefaultHorizontalAlignment,\n rect,\n rotation = 0,\n text,\n theme,\n tnum,\n maxLines = 1,\n verticalAlign = LabelDefaultVerticalAlignment,\n } = props;\n\n const paragraph = useMemo(() => {\n const fontFeatures: SkTextFontFeatures[] = [];\n\n if (tnum) {\n fontFeatures.push(TabularNumsFeature);\n }\n\n const textStyle: SkTextStyle = {\n color: Skia.Color(color ?? theme.colors.text.secondary),\n fontSize: fontSize ?? theme.fontSize.xs,\n fontFeatures,\n };\n\n if (fontFamily) {\n textStyle.fontFamilies = [fontFamily];\n }\n\n if (fontWeight !== undefined) {\n textStyle.fontStyle = { weight: fontWeight };\n }\n\n const result = createParagraphBuilder({\n paragraphStyle: {\n ellipsis: \"\\u2026\",\n maxLines: Math.max(1, Math.floor(maxLines)),\n textAlign: getLabelTextAlign(horizontalAlign),\n },\n typefaceProvider: fontManager,\n })\n .pushStyle(textStyle)\n .addText(text)\n .pop()\n .build();\n\n result.layout(rect.width);\n\n return result;\n }, [\n color,\n fontManager,\n fontFamily,\n fontSize,\n fontWeight,\n horizontalAlign,\n rect.width,\n text,\n theme.colors.text.secondary,\n theme.fontSize.xs,\n tnum,\n maxLines,\n ]);\n\n const rotationProps = useMemo(\n () => ({\n origin: {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2,\n },\n transform: [{ rotate: (rotation * Math.PI) / 180 }],\n }),\n [rect.height, rect.width, rect.x, rect.y, rotation],\n );\n\n if (!paragraph) {\n return null;\n }\n\n const y = getLabelY(rect, paragraph.getHeight(), verticalAlign);\n\n return (\n <Group origin={rotationProps.origin} transform={rotationProps.transform}>\n <Paragraph paragraph={paragraph} x={rect.x} y={y} width={rect.width} />\n </Group>\n );\n});\n","import { useMemo } from \"react\";\nimport { DashPathEffect, Path } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport {\n LineDefaultCap,\n LineDefaultColor,\n LineDefaultCurve,\n LineDefaultJoin,\n LineDefaultOpacity,\n LineDefaultWidth,\n} from \"../../constants\";\nimport { ChartXValue, LineProps } from \"../../types\";\nimport { createLinePath } from \"../../utils\";\n\nexport const Line = memo(function Line<X extends ChartXValue = number>(\n props: LineProps<X>,\n) {\n const {\n cap = LineDefaultCap,\n color = LineDefaultColor,\n coordinates,\n curve = LineDefaultCurve,\n dash,\n join = LineDefaultJoin,\n opacity = LineDefaultOpacity,\n visible = true,\n width = LineDefaultWidth,\n } = props;\n\n const path = useMemo(\n () => createLinePath(coordinates, curve),\n [coordinates, curve],\n );\n\n if (!visible || !path) {\n return null;\n }\n\n return (\n <Path\n path={path}\n color={color}\n opacity={opacity}\n strokeWidth={width}\n style=\"stroke\"\n strokeCap={cap}\n strokeJoin={join}\n >\n {dash?.length ? <DashPathEffect intervals={[...dash]} /> : null}\n </Path>\n );\n});\n","import { Fragment, useMemo } from \"react\";\nimport {\n DashPathEffect,\n Group,\n Line as SkiaLine,\n} from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport {\n AxisDefaultLabelGap,\n AxisDefaultOpacity,\n AxisDefaultTickLength,\n AxisDefaultWidth,\n} from \"../../constants\";\nimport { ChartXValue, XAxisProps } from \"../../types\";\nimport { createXAxisLayout, formatAxisTick } from \"../../utils\";\nimport { Label } from \"./label\";\n\nexport const XAxis = memo(function XAxis<X extends ChartXValue = number>(\n props: XAxisProps<X>,\n) {\n const {\n fontManager,\n lineVisible = true,\n options,\n plot,\n region,\n scale,\n theme,\n ticks,\n tickVisible = true,\n } = props;\n\n const line = options?.line;\n const tick = options?.tick;\n const label = options?.label;\n const tickLength = tick?.length ?? AxisDefaultTickLength;\n const labelGap = label?.gap ?? AxisDefaultLabelGap;\n const fontSize = label?.fontSize ?? theme.fontSize.xs;\n\n const layout = useMemo(\n () =>\n createXAxisLayout({\n values: ticks,\n scale,\n plot,\n region,\n tickLength,\n labelGap,\n }),\n [labelGap, plot, region, scale, tickLength, ticks],\n );\n\n return (\n <Group>\n {lineVisible && line?.visible !== false ? (\n <SkiaLine\n p1={layout.line.start}\n p2={layout.line.end}\n color={line?.color ?? theme.colors.border.default.value}\n opacity={line?.opacity ?? AxisDefaultOpacity}\n strokeWidth={line?.width ?? AxisDefaultWidth}\n >\n {line?.dash?.length ? (\n <DashPathEffect intervals={[...line.dash]} />\n ) : null}\n </SkiaLine>\n ) : null}\n\n {layout.ticks.map((tick, index) => (\n <Fragment key={`${String(tick.value)}-${index}`}>\n {tickVisible && options?.tick?.visible !== false ? (\n <SkiaLine\n p1={tick.start}\n p2={tick.end}\n color={options?.tick?.color ?? theme.colors.border.default.value}\n opacity={options?.tick?.opacity ?? AxisDefaultOpacity}\n strokeWidth={options?.tick?.width ?? AxisDefaultWidth}\n >\n {options?.tick?.dash?.length ? (\n <DashPathEffect intervals={[...options.tick.dash]} />\n ) : null}\n </SkiaLine>\n ) : null}\n {label?.visible !== false ? (\n <Label\n text={formatAxisTick(tick.value, options?.format)}\n rect={tick.labelRect}\n horizontalAlign=\"center\"\n color={label?.color}\n fontSize={fontSize}\n fontFamily={label?.fontFamily}\n fontWeight={label?.fontWeight}\n fontManager={fontManager}\n maxLines={label?.maxLines}\n rotation={label?.rotation}\n theme={theme}\n tnum={typeof tick.value === \"number\"}\n />\n ) : null}\n </Fragment>\n ))}\n </Group>\n );\n});\n","import { Fragment, useMemo } from \"react\";\nimport {\n DashPathEffect,\n Group,\n Line as SkiaLine,\n} from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport {\n AxisDefaultLabelGap,\n AxisDefaultOpacity,\n AxisDefaultTickLength,\n AxisDefaultWidth,\n} from \"../../constants\";\nimport { YAxisProps } from \"../../types\";\nimport { createYAxisLayout, formatAxisTick } from \"../../utils\";\nimport { Label } from \"./label\";\n\nexport const YAxis = memo(function YAxis(props: YAxisProps) {\n const {\n fontManager,\n lineVisible = true,\n options,\n plot,\n region,\n scale,\n theme,\n ticks,\n tickVisible = true,\n } = props;\n\n const line = options?.line;\n const tick = options?.tick;\n const label = options?.label;\n const tickLength = tick?.length ?? AxisDefaultTickLength;\n const labelGap = label?.gap ?? AxisDefaultLabelGap;\n const fontSize = label?.fontSize ?? theme.fontSize.xs;\n\n const layout = useMemo(\n () =>\n createYAxisLayout({\n values: ticks,\n scale,\n plot,\n region,\n tickLength,\n labelGap,\n fontSize,\n }),\n [fontSize, labelGap, plot, region, scale, tickLength, ticks],\n );\n\n return (\n <Group>\n {lineVisible && line?.visible !== false ? (\n <SkiaLine\n p1={layout.line.start}\n p2={layout.line.end}\n color={line?.color ?? theme.colors.border.default.value}\n opacity={line?.opacity ?? AxisDefaultOpacity}\n strokeWidth={line?.width ?? AxisDefaultWidth}\n >\n {line?.dash?.length ? (\n <DashPathEffect intervals={[...line.dash]} />\n ) : null}\n </SkiaLine>\n ) : null}\n\n {layout.ticks.map((tick, index) => (\n <Fragment key={`${tick.value}-${index}`}>\n {tickVisible && options?.tick?.visible !== false ? (\n <SkiaLine\n p1={tick.start}\n p2={tick.end}\n color={options?.tick?.color ?? theme.colors.border.default.value}\n opacity={options?.tick?.opacity ?? AxisDefaultOpacity}\n strokeWidth={options?.tick?.width ?? AxisDefaultWidth}\n >\n {options?.tick?.dash?.length ? (\n <DashPathEffect intervals={[...options.tick.dash]} />\n ) : null}\n </SkiaLine>\n ) : null}\n {label?.visible !== false ? (\n <Label\n text={formatAxisTick(tick.value, options?.format)}\n rect={tick.labelRect}\n horizontalAlign=\"right\"\n verticalAlign=\"center\"\n color={label?.color}\n fontSize={fontSize}\n fontFamily={label?.fontFamily}\n fontWeight={label?.fontWeight}\n fontManager={fontManager}\n maxLines={label?.maxLines}\n rotation={label?.rotation}\n theme={theme}\n tnum\n />\n ) : null}\n </Fragment>\n ))}\n </Group>\n );\n});\n","import { StyleSheet } from \"react-native\";\nimport { Canvas } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\nimport { useTheme } from \"@impulse-ui-native/theme\";\n\nimport { useChartCanvas } from \"../hooks\";\nimport { ChartXValue, LineChartProps } from \"../types\";\nimport { LineChartBody } from \"./line-chart-body\";\n\nexport const LineChart = memo(function LineChart<\n X extends ChartXValue = number,\n>(props: LineChartProps<X>) {\n const theme = useTheme();\n\n const { ref, size } = useChartCanvas();\n\n return (\n <Canvas ref={ref} style={styles.container}>\n <LineChartBody {...props} size={size} theme={theme} />\n </Canvas>\n );\n});\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","import { useCanvasRef, useCanvasSize } from \"@shopify/react-native-skia\";\n\nexport function useChartCanvas() {\n const ref = useCanvasRef();\n const { size } = useCanvasSize(ref);\n\n return { ref, size };\n}\n","import { useMemo } from \"react\";\n\nimport { ChartXValue, UseLineChartProps, UseLineChartResult } from \"../types\";\nimport { createLineChartModel } from \"../utils\";\n\nexport function useLineChart<X extends ChartXValue = number>(\n props: UseLineChartProps<X>,\n): UseLineChartResult<X> {\n const { data, plot, xAxis, xScaleType, yAxis } = props;\n\n return useMemo(\n () => createLineChartModel({ data, plot, xAxis, xScaleType, yAxis }),\n [data, plot, xAxis, xScaleType, yAxis],\n );\n}\n","import { useMemo } from \"react\";\n\nimport {\n ChartXValue,\n UseMultiLineChartProps,\n UseMultiLineChartResult,\n} from \"../types\";\nimport { createLineChartCoordinates } from \"../utils\";\nimport { useLineChart } from \"./use-line-chart.hook\";\n\nexport function useMultiLineChart<X extends ChartXValue = number>(\n props: UseMultiLineChartProps<X>,\n): UseMultiLineChartResult<X> {\n const { plot, series, xAxis, xScaleType, yAxis } = props;\n\n const data = useMemo(\n () => series.flatMap((currentSeries) => currentSeries.data),\n [series],\n );\n\n const { xDomain, xScale, xTicks, yDomain, yScale, yTicks } = useLineChart({\n data,\n plot,\n xAxis,\n xScaleType,\n yAxis,\n });\n\n const seriesModels = useMemo(\n () =>\n series.map((currentSeries) => ({\n ...currentSeries,\n coordinates: createLineChartCoordinates(\n currentSeries.data,\n xScale,\n yScale,\n ),\n })),\n [series, xScale, yScale],\n );\n\n return useMemo(\n () => ({\n series: seriesModels,\n xDomain,\n xScale,\n xTicks,\n yDomain,\n yScale,\n yTicks,\n }),\n [seriesModels, xDomain, xScale, xTicks, yDomain, yScale, yTicks],\n );\n}\n","import { useMemo } from \"react\";\nimport { Group } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\nimport { AppTheme } from \"@impulse-ui-native/theme\";\n\nimport { LineDefaultWidth } from \"../constants\";\nimport { useLineChart } from \"../hooks\";\nimport { ChartSize, ChartXValue, LineChartProps } from \"../types\";\nimport {\n createChartLayout,\n createInsetRect,\n fitLineCoordinatesToRect,\n} from \"../utils\";\nimport { Grid, Line, XAxis, YAxis } from \"./primitives\";\n\ninterface LineChartBodyProps<X extends ChartXValue> extends LineChartProps<X> {\n size: ChartSize;\n theme: AppTheme;\n}\n\nexport const LineChartBody = memo(function LineChartBodyComponent<\n X extends ChartXValue = number,\n>(props: LineChartBodyProps<X>) {\n const {\n data,\n fontManager,\n grid,\n insets,\n line,\n size,\n theme,\n xAxis,\n xScaleType,\n yAxis,\n } = props;\n\n const layout = useMemo(() => createChartLayout(size, insets), [insets, size]);\n\n const { coordinates, xScale, xTicks, yScale, yTicks } = useLineChart({\n data,\n plot: layout.plot,\n xAxis,\n xScaleType,\n yAxis,\n });\n\n const linePlot = useMemo(\n () => createInsetRect(layout.plot, (line?.width ?? LineDefaultWidth) / 2),\n [layout.plot, line?.width],\n );\n\n const lineCoordinates = useMemo(\n () => fitLineCoordinatesToRect(coordinates, layout.plot, linePlot),\n [coordinates, layout.plot, linePlot],\n );\n\n const isGridStyle = grid !== undefined;\n\n return (\n <>\n {isGridStyle ? (\n <Grid\n options={grid}\n plot={layout.plot}\n theme={theme}\n xTicks={xTicks}\n xScale={xScale}\n yTicks={yTicks}\n yScale={yScale}\n />\n ) : null}\n\n {xAxis?.visible !== false ? (\n <XAxis\n ticks={xTicks}\n scale={xScale}\n plot={layout.plot}\n region={layout.xAxis}\n theme={theme}\n options={xAxis}\n fontManager={fontManager}\n lineVisible={!isGridStyle}\n tickVisible={!isGridStyle}\n />\n ) : null}\n\n {yAxis?.visible !== false ? (\n <YAxis\n ticks={yTicks}\n scale={yScale}\n plot={layout.plot}\n region={layout.yAxis}\n theme={theme}\n options={yAxis}\n fontManager={fontManager}\n lineVisible={!isGridStyle}\n tickVisible={!isGridStyle}\n />\n ) : null}\n\n <Group clip={layout.plot}>\n <Line coordinates={lineCoordinates} {...line} />\n </Group>\n </>\n );\n});\n","import { StyleSheet } from \"react-native\";\nimport { Canvas } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\nimport { useTheme } from \"@impulse-ui-native/theme\";\n\nimport { useChartCanvas } from \"../hooks\";\nimport { ChartXValue, MultiLineChartProps } from \"../types\";\nimport { MultiLineChartBody } from \"./multi-line-chart-body\";\n\nexport const MultiLineChart = memo(function MultiLineChart<\n X extends ChartXValue = number,\n>(props: MultiLineChartProps<X>) {\n const theme = useTheme();\n\n const { ref, size } = useChartCanvas();\n\n return (\n <Canvas ref={ref} style={styles.container}>\n <MultiLineChartBody {...props} size={size} theme={theme} />\n </Canvas>\n );\n});\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","import { useMemo } from \"react\";\nimport { Group } from \"@shopify/react-native-skia\";\n\nimport { memo } from \"@impulse-ui-native/core\";\n\nimport { useMultiLineChart } from \"../hooks\";\nimport { ChartXValue, MultiLineChartBodyProps } from \"../types\";\nimport {\n createChartLayout,\n createDrawableMultiLineChartSeries,\n} from \"../utils\";\nimport { Grid, Line, XAxis, YAxis } from \"./primitives\";\n\nexport const MultiLineChartBody = memo(function MultiLineChartBodyComponent<\n X extends ChartXValue = number,\n>(props: MultiLineChartBodyProps<X>) {\n const {\n fontManager,\n grid,\n insets,\n series,\n size,\n theme,\n xAxis,\n xScaleType,\n yAxis,\n } = props;\n\n const layout = useMemo(() => createChartLayout(size, insets), [insets, size]);\n\n const {\n series: seriesModels,\n xScale,\n xTicks,\n yScale,\n yTicks,\n } = useMultiLineChart({\n plot: layout.plot,\n series,\n xAxis,\n xScaleType,\n yAxis,\n });\n\n const drawableSeries = useMemo(\n () =>\n seriesModels.map((currentSeries, index) =>\n createDrawableMultiLineChartSeries(currentSeries, index, layout.plot),\n ),\n [layout.plot, seriesModels],\n );\n\n const isGridStyle = grid !== undefined;\n\n return (\n <>\n {isGridStyle ? (\n <Grid\n options={grid}\n plot={layout.plot}\n theme={theme}\n xTicks={xTicks}\n xScale={xScale}\n yTicks={yTicks}\n yScale={yScale}\n />\n ) : null}\n\n {xAxis?.visible !== false ? (\n <XAxis\n ticks={xTicks}\n scale={xScale}\n plot={layout.plot}\n region={layout.xAxis}\n theme={theme}\n options={xAxis}\n fontManager={fontManager}\n lineVisible={!isGridStyle}\n tickVisible={!isGridStyle}\n />\n ) : null}\n\n {yAxis?.visible !== false ? (\n <YAxis\n ticks={yTicks}\n scale={yScale}\n plot={layout.plot}\n region={layout.yAxis}\n theme={theme}\n options={yAxis}\n fontManager={fontManager}\n lineVisible={!isGridStyle}\n tickVisible={!isGridStyle}\n />\n ) : null}\n\n <Group clip={layout.plot}>\n {drawableSeries.map((currentSeries) => (\n <Line\n key={currentSeries.id}\n coordinates={currentSeries.coordinates}\n {...currentSeries.line}\n />\n ))}\n </Group>\n </>\n );\n});\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,SAAS,gBAAgB,OAAO,YAAY;AAE5C,SAAS,YAAY;;;ACHd,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,wBAAwB;AAC9B,IAAM,sBAAsB;;;ACH5B,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;;;ACC5B,IAAM,qBAAyC;AAAA,EACpD,MAAM;AAAA,EACN,OAAO;AACT;AAEO,IAAM,kCAA4D;AAClE,IAAM,gCAAwD;;;ACVrE,SAAS,wBAAwB;AAI1B,IAAM,mBAAmB,iBAAiB,CAAC;AAC3C,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,mBAAmC;AACzC,IAAM,iBAAiC;AACvC,IAAM,kBAAmC;;;ACRzC,IAAM,4BAA4B;AAElC,IAAM,gCAAoD,CAAC,GAAG,CAAC;;;ACK/D,SAAS,gBACd,QACA,OACmB;AACnB,SAAO,OAAO,OAA0B,CAAC,OAAO,UAAU;AACxD,UAAM,WAAW,MAAM,KAAK;AAE5B,QAAI,aAAa,UAAa,OAAO,SAAS,QAAQ,GAAG;AACvD,YAAM,KAAK,EAAE,OAAO,SAAS,CAAC;AAAA,IAChC;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAEO,SAAS,kBACd,OACmB;AACnB,QAAM,QAAQ,gBAAgB,MAAM,QAAQ,MAAM,KAAK;AACvD,QAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,KAAK;AACxC,QAAM,cAAc,MAAM,aAAa,MAAM;AAE7C,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,OAAO,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,MAAM;AAAA,MACnC,KAAK,EAAE,GAAG,MAAM,KAAK,IAAI,MAAM,KAAK,OAAO,GAAG,MAAM;AAAA,IACtD;AAAA,IACA,OAAO,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,MACjC,GAAG;AAAA,MACH,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,MAAM;AAAA,MACpC,KAAK,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ,MAAM,WAAW;AAAA,MACrD,WAAW,qBAAqB,OAAO,OAAO,MAAM,QAAQ,WAAW;AAAA,IACzE,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,kBACd,OACoB;AACpB,QAAM,QAAQ,gBAAgB,MAAM,QAAQ,MAAM,KAAK;AACvD,QAAM,QAAQ,MAAM,KAAK;AACzB,QAAM,aAAa,MAAM,OAAO,QAAQ,MAAM,aAAa,MAAM;AAEjE,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,OAAO,EAAE,GAAG,OAAO,GAAG,MAAM,KAAK,EAAE;AAAA,MACnC,KAAK,EAAE,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,IACvD;AAAA,IACA,OAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1B,GAAG;AAAA,MACH,OAAO,EAAE,GAAG,QAAQ,MAAM,YAAY,GAAG,KAAK,SAAS;AAAA,MACvD,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK,SAAS;AAAA,MAClC,WAAW;AAAA,QACT,KAAK;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,MACR;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,qBACd,OACA,OACA,QACA,QACW;AACX,QAAM,OAAO,MAAM,KAAK;AACxB,QAAM,WAAW,MAAM,QAAQ,CAAC;AAChC,QAAM,OAAO,MAAM,QAAQ,CAAC;AAC5B,QAAM,kBAAkB,WACpB,KAAK,IAAI,KAAK,WAAW,SAAS,QAAQ,IAC1C,OACE,KAAK,IAAI,KAAK,WAAW,KAAK,QAAQ,IACtC,OAAO;AACb,QAAM,cAAc,OAChB,KAAK,IAAI,KAAK,WAAW,KAAK,QAAQ,IACtC,WACE,KAAK,IAAI,KAAK,WAAW,SAAS,QAAQ,IAC1C,OAAO;AACb,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,iBAAiB,WAAW,CAAC;AAEhE,SAAO;AAAA,IACL,GAAG,KAAK,WAAW,QAAQ;AAAA,IAC3B,GAAG,OAAO,IAAI;AAAA,IACd;AAAA,IACA,QAAQ,KAAK,IAAI,GAAG,OAAO,SAAS,MAAM;AAAA,EAC5C;AACF;AAEO,SAAS,qBACd,UACA,QACA,OACA,UACW;AACX,SAAO;AAAA,IACL,GAAG,OAAO;AAAA,IACV,GAAG,WAAW;AAAA,IACd,OAAO,KAAK,IAAI,GAAG,KAAK;AAAA,IACxB,QAAQ,WAAW;AAAA,EACrB;AACF;AAEO,SAAS,eACd,OACA,QACQ;AACR,SAAO,SAAS,OAAO,KAAK,IAAI,OAAO,KAAK;AAC9C;;;ACrHO,SAAS,kBACd,MACA,SAA+B,CAAC,GACnB;AACb,QAAM,iBAA8B;AAAA,IAClC,KAAK,OAAO,OAAO;AAAA,IACnB,OAAO,OAAO,SAAS;AAAA,IACvB,QAAQ,OAAO,UAAU;AAAA,IACzB,MAAM,OAAO,QAAQ;AAAA,EACvB;AAEA,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,IACA,KAAK,QAAQ,eAAe,OAAO,eAAe;AAAA,EACpD;AACA,QAAM,aAAa,KAAK;AAAA,IACtB;AAAA,IACA,KAAK,SAAS,eAAe,MAAM,eAAe;AAAA,EACpD;AAEA,QAAM,OAAO;AAAA,IACX,GAAG,eAAe;AAAA,IAClB,GAAG,eAAe;AAAA,IAClB,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,GAAG,KAAK,IAAI,KAAK;AAAA,MACjB,OAAO,KAAK;AAAA,MACZ,QAAQ,eAAe;AAAA,IACzB;AAAA,IACA,OAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG,KAAK;AAAA,MACR,OAAO,eAAe;AAAA,MACtB,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,MAAiB,QAA2B;AAC1E,QAAM,QAAQ,KAAK,IAAI,GAAG,MAAM;AAChC,QAAM,kBAAkB,KAAK,IAAI,OAAO,KAAK,QAAQ,CAAC;AACtD,QAAM,gBAAgB,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;AAErD,SAAO;AAAA,IACL,GAAG,KAAK,IAAI;AAAA,IACZ,GAAG,KAAK,IAAI;AAAA,IACZ,OAAO,KAAK,IAAI,GAAG,KAAK,QAAQ,kBAAkB,CAAC;AAAA,IACnD,QAAQ,KAAK,IAAI,GAAG,KAAK,SAAS,gBAAgB,CAAC;AAAA,EACrD;AACF;;;AC3DA,SAAS,YAAoB;AAWtB,SAAS,uBACd,QACA,OACA,MACe;AACf,QAAM,QAAQ,gBAAgB,QAAQ,KAAK;AAE3C,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,KAAK,KAAK,KAAK;AAE5B,QAAM,QAAQ,CAAC,EAAE,SAAS,MAAM;AAC9B,SAAK,OAAO,UAAU,KAAK,CAAC;AAC5B,SAAK,OAAO,UAAU,KAAK,IAAI,KAAK,MAAM;AAAA,EAC5C,CAAC;AAED,SAAO;AACT;AAEO,SAAS,yBACd,QACA,OACA,MACe;AACf,QAAM,QAAQ,gBAAgB,QAAQ,KAAK;AAE3C,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,KAAK,KAAK,KAAK;AAE5B,QAAM,QAAQ,CAAC,EAAE,SAAS,MAAM;AAC9B,SAAK,OAAO,KAAK,GAAG,QAAQ;AAC5B,SAAK,OAAO,KAAK,IAAI,KAAK,OAAO,QAAQ;AAAA,EAC3C,CAAC;AAED,SAAO;AACT;AAEO,SAAS,uBACd,SACA,gBACA,cACyB;AACzB,MAAI,OAAO,YAAY,WAAW;AAChC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,kBAAkB,SAAS,cAAc;AAAA,IAClD,OAAO,SAAS,SAAS;AAAA,IACzB,OAAO,SAAS,SAAS;AAAA,IACzB,SAAS,SAAS,WAAW;AAAA,IAC7B,MAAM,SAAS;AAAA,EACjB;AACF;AAEA,SAAS,kBACP,SACA,gBACS;AACT,MAAI,OAAO,YAAY,WAAW;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,WAAW;AAC7B;;;ACrFA,SAAS,iBAAiB;AAQnB,SAAS,kBACd,WACW;AACX,MAAI,cAAc,UAAU;AAC1B,WAAO,UAAU;AAAA,EACnB;AAEA,MAAI,cAAc,SAAS;AACzB,WAAO,UAAU;AAAA,EACnB;AAEA,SAAO,UAAU;AACnB;AAEO,SAAS,UACd,MACA,iBACA,WACQ;AACR,MAAI,cAAc,UAAU;AAC1B,WAAO,KAAK,KAAK,KAAK,SAAS,mBAAmB;AAAA,EACpD;AAEA,MAAI,cAAc,UAAU;AAC1B,WAAO,KAAK,IAAI,KAAK,SAAS;AAAA,EAChC;AAEA,SAAO,KAAK;AACd;;;ACpCA,SAAS,QAAAA,aAAoB;AAC7B,SAAS,QAAQ,cAAc,aAAa,sBAAsB;AAS3D,SAAS,eACd,aACA,OACe;AACf,QAAM,WAAW,aAAqC,EACnD,QAAQ,CAAC,eAAe,WAAW,MAAM,QAAQ,WAAW,MAAM,IAAI,EACtE,EAAE,CAAC,eAAe,WAAW,CAAE,EAC/B,EAAE,CAAC,eAAe,WAAW,CAAE,EAC/B,MAAM,UAAU,aAAa,iBAAiB,WAAW,EAAE,WAAW;AAEzE,SAAO,WAAWA,MAAK,KAAK,kBAAkB,QAAQ,IAAI;AAC5D;AAEO,SAAS,yBACd,aACA,QACA,QAC0B;AAC1B,SAAO,YAAY,IAAI,CAAC,gBAAgB;AAAA,IACtC,GAAG;AAAA,IACH,GACE,WAAW,MAAM,OACb,OACA;AAAA,MACE,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACN,GACE,WAAW,MAAM,OACb,OACA;AAAA,MACE,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACR,EAAE;AACJ;AAEA,SAAS,cACP,OACA,aACA,cACA,aACA,cACQ;AACR,MAAI,gBAAgB,GAAG;AACrB,WAAO,cAAc,eAAe;AAAA,EACtC;AAEA,SAAO,eAAgB,QAAQ,eAAe,eAAgB;AAChE;;;ACjEA,SAAS,cAAc;AACvB,SAAS,aAAa,YAAY,iBAAiB;AAiB5C,SAAS,qBACd,OACuB;AACvB,QAAM,aAAa,aAAa,MAAM,OAAO,SAAS;AACtD,QAAM,aAAa,aAAa,MAAM,OAAO,SAAS;AACtD,QAAM,SAA6B;AAAA,IACjC,MAAM,KAAK;AAAA,IACX,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA,EAC5B;AACA,QAAM,SAA6B;AAAA,IACjC,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA,IAC1B,MAAM,KAAK;AAAA,EACb;AAEA,QAAM,SAAS;AAAA,IACb,MAAM,KAAK,IAAI,CAAC,UAAU,MAAM,CAAC;AAAA,IACjC,MAAM,cAAc;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,KAAK,OAAiB,CAAC,QAAQ,UAAU;AAC7D,QAAI,MAAM,MAAM,QAAQ,OAAO,SAAS,MAAM,CAAC,GAAG;AAChD,aAAO,KAAK,MAAM,CAAC;AAAA,IACrB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACL,QAAM,UAAU,MAAM,OAAO,UAAU,iBAAiB,OAAO;AAC/D,QAAM,WAAW,YAAY,EAAE,OAAO,OAAO,EAAE,MAAM,MAAM;AAE3D,MAAI,CAAC,MAAM,OAAO,UAAU,aAAa,GAAG;AAC1C,aAAS,KAAK,UAAU;AAAA,EAC1B;AAEA,QAAM,kBAAkB,SAAS,OAAO;AACxC,QAAM,SAAiC,CAAC,UAAU,SAAS,KAAK;AAChE,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,SAAS;AAAA,IACT,QAAQ,OAAO;AAAA,IACf,QAAQ,SAAS,MAAM,UAAU;AAAA,IACjC;AAAA,IACA,QAAQ,OAAO;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,2BACd,MACA,QACA,QAC0B;AAC1B,SAAO,KAAK,IAAI,CAAC,OAAO,UAAU;AAChC,UAAM,IAAI,OAAO,MAAM,CAAC;AACxB,UAAM,IAAI,MAAM,MAAM,OAAO,SAAY,OAAO,MAAM,CAAC;AAEvD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG,mBAAmB,CAAC,IAAI,IAAI;AAAA,MAC/B,GAAG,mBAAmB,CAAC,IAAI,IAAI;AAAA,IACjC;AAAA,EACF,CAAC;AACH;AAEA,SAAS,aACP,QACA,WACA,OACA,WACyB;AACzB,MAAI,cAAc,SAAS;AACzB,UAAMC,WAAU,WAAc,EAAE,OAAO,MAAM,EAAE,MAAM,KAAK;AAC1D,UAAM,SAASA,SAAQ,OAAO;AAE9B,WAAO;AAAA,MACL;AAAA,MACA,OAAO,iBAAiB,QAAQ,SAAS;AAAA,MACzC,OAAO,CAAC,UAAUA,SAAQ,KAAK;AAAA,IACjC;AAAA,EACF;AAEA,MAAI,cAAc,QAAQ;AACxB,UAAM,QAAQ,OAAO;AAAA,MACnB,CAAC,UACC,iBAAiB,QAAQ,OAAO,SAAS,MAAM,QAAQ,CAAC;AAAA,IAC5D;AACA,UAAM,CAAC,SAAS,OAAO,IAAI,OAAO,KAAK;AACvC,UAAM,SACJ,WAAW,UACN,CAAC,SAAS,OAAO,IACjB,CAAC,oBAAI,KAAK,CAAC,GAAG,oBAAI,KAAK,CAAC,CAAC;AAChC,UAAMA,WAAU,UAAU,EAAE,OAAO,MAAM,EAAE,MAAM,KAAK;AAEtD,QAAI,YAAY,GAAG;AACjB,MAAAA,SAAQ,KAAK,SAAS;AAAA,IACxB;AAEA,WAAO;AAAA,MACL,QAAQA,SAAQ,OAAO;AAAA,MACvB,OAAOA,SAAQ,MAAM,SAAS;AAAA,MAC9B,OAAO,CAAC,UACN,iBAAiB,QAAQ,OAAO,SAAS,MAAM,QAAQ,CAAC,IACpDA,SAAQ,KAAK,IACb;AAAA,IACR;AAAA,EACF;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB,CAAC,UACC,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAAA,EACtD;AACA,QAAM,UAAU,YAAY,EAAE,OAAO,iBAAiB,OAAO,CAAC,EAAE,MAAM,KAAK;AAE3E,MAAI,YAAY,GAAG;AACjB,YAAQ,KAAK,SAAS;AAAA,EACxB;AAEA,SAAO;AAAA,IACL,QAAQ,QAAQ,OAAO;AAAA,IACvB,OAAO,QAAQ,MAAM,SAAS;AAAA,IAC9B,OAAO,CAAC,UACN,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAC9C,QAAQ,KAAK,IACb;AAAA,EACR;AACF;AAEA,SAAS,iBAAiB,QAA+C;AACvE,QAAM,CAAC,SAAS,OAAO,IAAI,OAAO,MAAM;AAExC,SAAO,YAAY,UAAa,YAAY,SACxC,gCACA,CAAC,SAAS,OAAO;AACvB;AAEA,SAAS,aAAa,WAAuC;AAC3D,SAAO,cAAc,UAAa,CAAC,OAAO,SAAS,SAAS,IACxD,4BACA,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC;AACvC;AAEA,SAAS,iBAAoB,QAAsB,WAAwB;AACzE,MAAI,aAAa,KAAK,OAAO,WAAW,GAAG;AACzC,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO,CAAC,GAAG,MAAM;AAAA,EACnB;AAEA,MAAI,cAAc,GAAG;AACnB,WAAO,CAAC,OAAO,CAAC,CAAE;AAAA,EACpB;AAEA,QAAM,YAAY,OAAO,SAAS;AAElC,SAAO,MAAM,KAAK,EAAE,QAAQ,UAAU,GAAG,CAAC,GAAG,UAAU;AACrD,UAAM,aAAa,KAAK,MAAO,QAAQ,aAAc,YAAY,EAAE;AAEnE,WAAO,OAAO,UAAU;AAAA,EAC1B,CAAC;AACH;AAEA,SAAS,mBAAmB,OAA4C;AACtE,SAAO,UAAU,UAAa,OAAO,SAAS,KAAK;AACrD;;;ACtLO,SAAS,mCACd,QACA,OACA,MAC8B;AAC9B,QAAM,QAAQ,OAAO,MAAM,SAAS;AACpC,QAAM,WAAW,gBAAgB,MAAM,QAAQ,CAAC;AAEhD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa,yBAAyB,OAAO,aAAa,MAAM,QAAQ;AAAA,IACxE,MAAM;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OACE,OAAO,MAAM,SACb,kBAAkB,QAAQ,kBAAkB,MAAM,KAClD;AAAA,IACJ;AAAA,EACF;AACF;;;AC5BA;AAAA,EACE,QAAAC;AAAA,OAGK;AAOA,SAAS,uBAAuB,OAAoC;AACzE,MAAI,MAAM,kBAAkB;AAC1B,WAAOA,MAAK,iBAAiB;AAAA,MAC3B,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAOA,MAAK,iBAAiB,KAAK,MAAM,cAAc;AACxD;;;Ab6BI,SAUQ,KAVR;AApCG,IAAM,OAAO,KAAK,SAASC,MAChC,OACA;AACA,QAAM,EAAE,SAAS,MAAM,OAAO,QAAQ,QAAQ,QAAQ,OAAO,IAAI;AAEjE,QAAM,SAAS;AAAA,IACb,MACE;AAAA,MACE,SAAS;AAAA,MACT;AAAA,MACA,MAAM,OAAO,OAAO,OAAO;AAAA,IAC7B;AAAA,IACF,CAAC,SAAS,GAAG,MAAM,OAAO,OAAO,OAAO,KAAK;AAAA,EAC/C;AAEA,QAAM,SAAS;AAAA,IACb,MACE;AAAA,MACE,SAAS;AAAA,MACT;AAAA,MACA,MAAM,OAAO,OAAO,OAAO;AAAA,IAC7B;AAAA,IACF,CAAC,SAAS,GAAG,MAAM,OAAO,OAAO,OAAO,KAAK;AAAA,EAC/C;AAEA,QAAM,QAAQ;AAAA,IACZ,MAAM,uBAAuB,QAAQ,QAAQ,IAAI;AAAA,IACjD,CAAC,MAAM,QAAQ,MAAM;AAAA,EACvB;AAEA,QAAM,QAAQ;AAAA,IACZ,MAAM,yBAAyB,QAAQ,QAAQ,IAAI;AAAA,IACnD,CAAC,MAAM,QAAQ,MAAM;AAAA,EACvB;AAEA,SACE,qBAAC,SACE;AAAA,WAAO,WAAW,QACjB;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,OAAO,OAAO;AAAA,QACd,SAAS,OAAO;AAAA,QAChB,aAAa,OAAO;AAAA,QACpB,OAAM;AAAA,QAEL,iBAAO,MAAM,SACZ,oBAAC,kBAAe,WAAW,CAAC,GAAG,OAAO,IAAI,GAAG,IAC3C;AAAA;AAAA,IACN,IACE;AAAA,IAEH,OAAO,WAAW,QACjB;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,OAAO,OAAO;AAAA,QACd,SAAS,OAAO;AAAA,QAChB,aAAa,OAAO;AAAA,QACpB,OAAM;AAAA,QAEL,iBAAO,MAAM,SACZ,oBAAC,kBAAe,WAAW,CAAC,GAAG,OAAO,IAAI,GAAG,IAC3C;AAAA;AAAA,IACN,IACE;AAAA,KACN;AAEJ,CAAC;;;Ac/ED,SAAS,WAAAC,gBAAe;AACxB;AAAA,EACE,SAAAC;AAAA,EACA;AAAA,EACA,QAAAC;AAAA,OAGK;AAEP,SAAS,QAAAC,aAAY;AAsGf,gBAAAC,YAAA;AAxFC,IAAM,QAAQC,MAAK,SAASC,OAAM,OAAmB;AAC1D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB,IAAI;AAEJ,QAAM,YAAYC,SAAQ,MAAM;AAC9B,UAAM,eAAqC,CAAC;AAE5C,QAAI,MAAM;AACR,mBAAa,KAAK,kBAAkB;AAAA,IACtC;AAEA,UAAM,YAAyB;AAAA,MAC7B,OAAOC,MAAK,MAAM,SAAS,MAAM,OAAO,KAAK,SAAS;AAAA,MACtD,UAAU,YAAY,MAAM,SAAS;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,YAAY;AACd,gBAAU,eAAe,CAAC,UAAU;AAAA,IACtC;AAEA,QAAI,eAAe,QAAW;AAC5B,gBAAU,YAAY,EAAE,QAAQ,WAAW;AAAA,IAC7C;AAEA,UAAM,SAAS,uBAAuB;AAAA,MACpC,gBAAgB;AAAA,QACd,UAAU;AAAA,QACV,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,CAAC;AAAA,QAC1C,WAAW,kBAAkB,eAAe;AAAA,MAC9C;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC,EACE,UAAU,SAAS,EACnB,QAAQ,IAAI,EACZ,IAAI,EACJ,MAAM;AAET,WAAO,OAAO,KAAK,KAAK;AAExB,WAAO;AAAA,EACT,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA,MAAM,OAAO,KAAK;AAAA,IAClB,MAAM,SAAS;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgBD;AAAA,IACpB,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,GAAG,KAAK,IAAI,KAAK,QAAQ;AAAA,QACzB,GAAG,KAAK,IAAI,KAAK,SAAS;AAAA,MAC5B;AAAA,MACA,WAAW,CAAC,EAAE,QAAS,WAAW,KAAK,KAAM,IAAI,CAAC;AAAA,IACpD;AAAA,IACA,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,GAAG,KAAK,GAAG,QAAQ;AAAA,EACpD;AAEA,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,UAAU,MAAM,UAAU,UAAU,GAAG,aAAa;AAE9D,SACE,gBAAAH,KAACK,QAAA,EAAM,QAAQ,cAAc,QAAQ,WAAW,cAAc,WAC5D,0BAAAL,KAAC,aAAU,WAAsB,GAAG,KAAK,GAAG,GAAM,OAAO,KAAK,OAAO,GACvE;AAEJ,CAAC;;;AClHD,SAAS,WAAAM,gBAAe;AACxB,SAAS,kBAAAC,iBAAgB,QAAAC,aAAY;AAErC,SAAS,QAAAC,aAAY;AA+CC,gBAAAC,YAAA;AAlCf,IAAM,OAAOC,MAAK,SAASC,MAChC,OACA;AACA,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,EACV,IAAI;AAEJ,QAAM,OAAOC;AAAA,IACX,MAAM,eAAe,aAAa,KAAK;AAAA,IACvC,CAAC,aAAa,KAAK;AAAA,EACrB;AAEA,MAAI,CAAC,WAAW,CAAC,MAAM;AACrB,WAAO;AAAA,EACT;AAEA,SACE,gBAAAH;AAAA,IAACI;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,OAAM;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,MAEX,gBAAM,SAAS,gBAAAJ,KAACK,iBAAA,EAAe,WAAW,CAAC,GAAG,IAAI,GAAG,IAAK;AAAA;AAAA,EAC7D;AAEJ,CAAC;;;ACrDD,SAAS,UAAU,WAAAC,gBAAe;AAClC;AAAA,EACE,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAQ;AAAA,OACH;AAEP,SAAS,QAAAC,aAAY;AA0DT,gBAAAC,MAMJ,QAAAC,aANI;AA9CL,IAAM,QAAQC,MAAK,SAASC,OACjC,OACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,IAAI;AAEJ,QAAM,OAAO,SAAS;AACtB,QAAM,OAAO,SAAS;AACtB,QAAM,QAAQ,SAAS;AACvB,QAAM,aAAa,MAAM,UAAU;AACnC,QAAM,WAAW,OAAO,OAAO;AAC/B,QAAM,WAAW,OAAO,YAAY,MAAM,SAAS;AAEnD,QAAM,SAASC;AAAA,IACb,MACE,kBAAkB;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,UAAU,MAAM,QAAQ,OAAO,YAAY,KAAK;AAAA,EACnD;AAEA,SACE,gBAAAH,MAACI,QAAA,EACE;AAAA,mBAAe,MAAM,YAAY,QAChC,gBAAAL;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,OAAO,KAAK;AAAA,QAChB,IAAI,OAAO,KAAK;AAAA,QAChB,OAAO,MAAM,SAAS,MAAM,OAAO,OAAO,QAAQ;AAAA,QAClD,SAAS,MAAM,WAAW;AAAA,QAC1B,aAAa,MAAM,SAAS;AAAA,QAE3B,gBAAM,MAAM,SACX,gBAAAA,KAACM,iBAAA,EAAe,WAAW,CAAC,GAAG,KAAK,IAAI,GAAG,IACzC;AAAA;AAAA,IACN,IACE;AAAA,IAEH,OAAO,MAAM,IAAI,CAACC,OAAM,UACvB,gBAAAN,MAAC,YACE;AAAA,qBAAe,SAAS,MAAM,YAAY,QACzC,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,IAAIO,MAAK;AAAA,UACT,IAAIA,MAAK;AAAA,UACT,OAAO,SAAS,MAAM,SAAS,MAAM,OAAO,OAAO,QAAQ;AAAA,UAC3D,SAAS,SAAS,MAAM,WAAW;AAAA,UACnC,aAAa,SAAS,MAAM,SAAS;AAAA,UAEpC,mBAAS,MAAM,MAAM,SACpB,gBAAAP,KAACM,iBAAA,EAAe,WAAW,CAAC,GAAG,QAAQ,KAAK,IAAI,GAAG,IACjD;AAAA;AAAA,MACN,IACE;AAAA,MACH,OAAO,YAAY,QAClB,gBAAAN;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,eAAeO,MAAK,OAAO,SAAS,MAAM;AAAA,UAChD,MAAMA,MAAK;AAAA,UACX,iBAAgB;AAAA,UAChB,OAAO,OAAO;AAAA,UACd;AAAA,UACA,YAAY,OAAO;AAAA,UACnB,YAAY,OAAO;AAAA,UACnB;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,UAAU,OAAO;AAAA,UACjB;AAAA,UACA,MAAM,OAAOA,MAAK,UAAU;AAAA;AAAA,MAC9B,IACE;AAAA,SA7BS,GAAG,OAAOA,MAAK,KAAK,CAAC,IAAI,KAAK,EA8B7C,CACD;AAAA,KACH;AAEJ,CAAC;;;ACzGD,SAAS,YAAAC,WAAU,WAAAC,gBAAe;AAClC;AAAA,EACE,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAQC;AAAA,OACH;AAEP,SAAS,QAAAC,aAAY;AAyDT,gBAAAC,MAMJ,QAAAC,aANI;AA7CL,IAAM,QAAQC,MAAK,SAASC,OAAM,OAAmB;AAC1D,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,IAAI;AAEJ,QAAM,OAAO,SAAS;AACtB,QAAM,OAAO,SAAS;AACtB,QAAM,QAAQ,SAAS;AACvB,QAAM,aAAa,MAAM,UAAU;AACnC,QAAM,WAAW,OAAO,OAAO;AAC/B,QAAM,WAAW,OAAO,YAAY,MAAM,SAAS;AAEnD,QAAM,SAASC;AAAA,IACb,MACE,kBAAkB;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,UAAU,UAAU,MAAM,QAAQ,OAAO,YAAY,KAAK;AAAA,EAC7D;AAEA,SACE,gBAAAH,MAACI,QAAA,EACE;AAAA,mBAAe,MAAM,YAAY,QAChC,gBAAAL;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,IAAI,OAAO,KAAK;AAAA,QAChB,IAAI,OAAO,KAAK;AAAA,QAChB,OAAO,MAAM,SAAS,MAAM,OAAO,OAAO,QAAQ;AAAA,QAClD,SAAS,MAAM,WAAW;AAAA,QAC1B,aAAa,MAAM,SAAS;AAAA,QAE3B,gBAAM,MAAM,SACX,gBAAAN,KAACO,iBAAA,EAAe,WAAW,CAAC,GAAG,KAAK,IAAI,GAAG,IACzC;AAAA;AAAA,IACN,IACE;AAAA,IAEH,OAAO,MAAM,IAAI,CAACC,OAAM,UACvB,gBAAAP,MAACQ,WAAA,EACE;AAAA,qBAAe,SAAS,MAAM,YAAY,QACzC,gBAAAT;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,IAAIE,MAAK;AAAA,UACT,IAAIA,MAAK;AAAA,UACT,OAAO,SAAS,MAAM,SAAS,MAAM,OAAO,OAAO,QAAQ;AAAA,UAC3D,SAAS,SAAS,MAAM,WAAW;AAAA,UACnC,aAAa,SAAS,MAAM,SAAS;AAAA,UAEpC,mBAAS,MAAM,MAAM,SACpB,gBAAAR,KAACO,iBAAA,EAAe,WAAW,CAAC,GAAG,QAAQ,KAAK,IAAI,GAAG,IACjD;AAAA;AAAA,MACN,IACE;AAAA,MACH,OAAO,YAAY,QAClB,gBAAAP;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,eAAeQ,MAAK,OAAO,SAAS,MAAM;AAAA,UAChD,MAAMA,MAAK;AAAA,UACX,iBAAgB;AAAA,UAChB,eAAc;AAAA,UACd,OAAO,OAAO;AAAA,UACd;AAAA,UACA,YAAY,OAAO;AAAA,UACnB,YAAY,OAAO;AAAA,UACnB;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,UAAU,OAAO;AAAA,UACjB;AAAA,UACA,MAAI;AAAA;AAAA,MACN,IACE;AAAA,SA9BS,GAAGA,MAAK,KAAK,IAAI,KAAK,EA+BrC,CACD;AAAA,KACH;AAEJ,CAAC;;;ACzGD,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AAEvB,SAAS,QAAAE,aAAY;AACrB,SAAS,gBAAgB;;;ACJzB,SAAS,cAAc,qBAAqB;AAErC,SAAS,iBAAiB;AAC/B,QAAM,MAAM,aAAa;AACzB,QAAM,EAAE,KAAK,IAAI,cAAc,GAAG;AAElC,SAAO,EAAE,KAAK,KAAK;AACrB;;;ACPA,SAAS,WAAAC,gBAAe;AAKjB,SAAS,aACd,OACuB;AACvB,QAAM,EAAE,MAAM,MAAM,OAAO,YAAY,MAAM,IAAI;AAEjD,SAAOC;AAAA,IACL,MAAM,qBAAqB,EAAE,MAAM,MAAM,OAAO,YAAY,MAAM,CAAC;AAAA,IACnE,CAAC,MAAM,MAAM,OAAO,YAAY,KAAK;AAAA,EACvC;AACF;;;ACdA,SAAS,WAAAC,gBAAe;AAUjB,SAAS,kBACd,OAC4B;AAC5B,QAAM,EAAE,MAAM,QAAQ,OAAO,YAAY,MAAM,IAAI;AAEnD,QAAM,OAAOC;AAAA,IACX,MAAM,OAAO,QAAQ,CAAC,kBAAkB,cAAc,IAAI;AAAA,IAC1D,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,QAAQ,QAAQ,SAAS,QAAQ,OAAO,IAAI,aAAa;AAAA,IACxE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAAeA;AAAA,IACnB,MACE,OAAO,IAAI,CAAC,mBAAmB;AAAA,MAC7B,GAAG;AAAA,MACH,aAAa;AAAA,QACX,cAAc;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAAA,IACF,EAAE;AAAA,IACJ,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACzB;AAEA,SAAOA;AAAA,IACL,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,cAAc,SAAS,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAAA,EACjE;AACF;;;ACrDA,SAAS,WAAAC,gBAAe;AACxB,SAAS,SAAAC,cAAa;AAEtB,SAAS,QAAAC,aAAY;AAyDjB,qBAAAC,WAEI,OAAAC,MAFJ,QAAAC,aAAA;AAvCG,IAAM,gBAAgBC,MAAK,SAAS,uBAEzC,OAA8B;AAC9B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,SAASC,SAAQ,MAAM,kBAAkB,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC;AAE5E,QAAM,EAAE,aAAa,QAAQ,QAAQ,QAAQ,OAAO,IAAI,aAAa;AAAA,IACnE;AAAA,IACA,MAAM,OAAO;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,WAAWA;AAAA,IACf,MAAM,gBAAgB,OAAO,OAAO,MAAM,SAAS,oBAAoB,CAAC;AAAA,IACxE,CAAC,OAAO,MAAM,MAAM,KAAK;AAAA,EAC3B;AAEA,QAAM,kBAAkBA;AAAA,IACtB,MAAM,yBAAyB,aAAa,OAAO,MAAM,QAAQ;AAAA,IACjE,CAAC,aAAa,OAAO,MAAM,QAAQ;AAAA,EACrC;AAEA,QAAM,cAAc,SAAS;AAE7B,SACE,gBAAAF,MAAAF,WAAA,EACG;AAAA,kBACC,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,MAAM,OAAO;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IACE;AAAA,IAEH,OAAO,YAAY,QAClB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,aAAa,CAAC;AAAA,QACd,aAAa,CAAC;AAAA;AAAA,IAChB,IACE;AAAA,IAEH,OAAO,YAAY,QAClB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,aAAa,CAAC;AAAA,QACd,aAAa,CAAC;AAAA;AAAA,IAChB,IACE;AAAA,IAEJ,gBAAAA,KAACI,QAAA,EAAM,MAAM,OAAO,MAClB,0BAAAJ,KAAC,QAAK,aAAa,iBAAkB,GAAG,MAAM,GAChD;AAAA,KACF;AAEJ,CAAC;;;AJvFK,gBAAAK,YAAA;AATC,IAAM,YAAYC,MAAK,SAASC,WAErC,OAA0B;AAC1B,QAAM,QAAQ,SAAS;AAEvB,QAAM,EAAE,KAAK,KAAK,IAAI,eAAe;AAErC,SACE,gBAAAF,KAAC,UAAO,KAAU,OAAO,OAAO,WAC9B,0BAAAA,KAAC,iBAAe,GAAG,OAAO,MAAY,OAAc,GACtD;AAEJ,CAAC;AAED,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AACF,CAAC;;;AK5BD,SAAS,cAAAG,mBAAkB;AAC3B,SAAS,UAAAC,eAAc;AAEvB,SAAS,QAAAC,aAAY;AACrB,SAAS,YAAAC,iBAAgB;;;ACJzB,SAAS,WAAAC,gBAAe;AACxB,SAAS,SAAAC,cAAa;AAEtB,SAAS,QAAAC,aAAY;AAoDjB,qBAAAC,WAEI,OAAAC,MAFJ,QAAAC,aAAA;AA1CG,IAAM,qBAAqBC,MAAK,SAAS,4BAE9C,OAAmC;AACnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,SAASC,SAAQ,MAAM,kBAAkB,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC;AAE5E,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AAAA,IACpB,MAAM,OAAO;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,iBAAiBA;AAAA,IACrB,MACE,aAAa;AAAA,MAAI,CAAC,eAAe,UAC/B,mCAAmC,eAAe,OAAO,OAAO,IAAI;AAAA,IACtE;AAAA,IACF,CAAC,OAAO,MAAM,YAAY;AAAA,EAC5B;AAEA,QAAM,cAAc,SAAS;AAE7B,SACE,gBAAAF,MAAAF,WAAA,EACG;AAAA,kBACC,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,MAAM,OAAO;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IACE;AAAA,IAEH,OAAO,YAAY,QAClB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,aAAa,CAAC;AAAA,QACd,aAAa,CAAC;AAAA;AAAA,IAChB,IACE;AAAA,IAEH,OAAO,YAAY,QAClB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,aAAa,CAAC;AAAA,QACd,aAAa,CAAC;AAAA;AAAA,IAChB,IACE;AAAA,IAEJ,gBAAAA,KAACI,QAAA,EAAM,MAAM,OAAO,MACjB,yBAAe,IAAI,CAAC,kBACnB,gBAAAJ;AAAA,MAAC;AAAA;AAAA,QAEC,aAAa,cAAc;AAAA,QAC1B,GAAG,cAAc;AAAA;AAAA,MAFb,cAAc;AAAA,IAGrB,CACD,GACH;AAAA,KACF;AAEJ,CAAC;;;ADxFK,gBAAAK,YAAA;AATC,IAAM,iBAAiBC,MAAK,SAASC,gBAE1C,OAA+B;AAC/B,QAAM,QAAQC,UAAS;AAEvB,QAAM,EAAE,KAAK,KAAK,IAAI,eAAe;AAErC,SACE,gBAAAH,KAACI,SAAA,EAAO,KAAU,OAAOC,QAAO,WAC9B,0BAAAL,KAAC,sBAAoB,GAAG,OAAO,MAAY,OAAc,GAC3D;AAEJ,CAAC;AAED,IAAMK,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AACF,CAAC;","names":["Skia","d3Scale","Skia","Grid","useMemo","Group","Skia","memo","jsx","memo","Label","useMemo","Skia","Group","useMemo","DashPathEffect","Path","memo","jsx","memo","Line","useMemo","Path","DashPathEffect","useMemo","DashPathEffect","Group","memo","jsx","jsxs","memo","XAxis","useMemo","Group","DashPathEffect","tick","Fragment","useMemo","DashPathEffect","Group","SkiaLine","memo","jsx","jsxs","memo","YAxis","useMemo","Group","SkiaLine","DashPathEffect","tick","Fragment","memo","useMemo","useMemo","useMemo","useMemo","useMemo","Group","memo","Fragment","jsx","jsxs","memo","useMemo","Group","jsx","memo","LineChart","StyleSheet","Canvas","memo","useTheme","useMemo","Group","memo","Fragment","jsx","jsxs","memo","useMemo","Group","jsx","memo","MultiLineChart","useTheme","Canvas","styles","StyleSheet"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./constants\";\nexport * from \"./hooks\";\nexport * from \"./types\";\nexport * from \"./utils\";\nexport * from \"./contexts\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,62 @@
1
+ import { SkTypefaceFontProvider } from '@shopify/react-native-skia';
2
+ import { ChartRect, ChartScaleType, ChartXAxisOptions, ChartYAxisOptions, ChartInsets } from './types/common.types.mjs';
3
+ import { AppTheme } from '@impulse-ui-native/theme';
4
+ import { ChartStrokeStyle, ChartStrokeCap, ChartStrokeJoin } from './types/style.types.mjs';
5
+
6
+ interface ChartGridLineOptions extends ChartStrokeStyle {
7
+ visible?: boolean;
8
+ }
9
+ interface ChartGridOptions {
10
+ x?: boolean | ChartGridLineOptions;
11
+ y?: boolean | ChartGridLineOptions;
12
+ }
13
+ interface ResolvedGridLineOptions {
14
+ visible: boolean;
15
+ color: string;
16
+ width: number;
17
+ opacity: number;
18
+ dash?: readonly number[];
19
+ }
20
+ interface GridProps<X extends ChartXValue = number> {
21
+ options?: ChartGridOptions;
22
+ plot: ChartRect;
23
+ theme: AppTheme;
24
+ xTicks: readonly X[];
25
+ xScale: LineChartScale<X>;
26
+ yTicks: readonly number[];
27
+ yScale: LineChartScale<number>;
28
+ }
29
+
30
+ type ChartXValue = number | string | Date;
31
+ type LineChartCurve = "linear" | "monotone";
32
+ type LineChartScale<Value> = (value: Value) => number | undefined;
33
+ interface LineChartPoint<X extends ChartXValue = number> {
34
+ x: X;
35
+ y: number | null;
36
+ }
37
+ interface LineChartCoordinate<X extends ChartXValue = number> {
38
+ datum: LineChartPoint<X>;
39
+ index: number;
40
+ x: number | null;
41
+ y: number | null;
42
+ }
43
+ interface LineChartLineOptions extends ChartStrokeStyle {
44
+ visible?: boolean;
45
+ curve?: LineChartCurve;
46
+ cap?: ChartStrokeCap;
47
+ join?: ChartStrokeJoin;
48
+ }
49
+ interface LineChartCommonProps<X extends ChartXValue = number> {
50
+ fontManager?: SkTypefaceFontProvider;
51
+ grid?: ChartGridOptions;
52
+ xScaleType?: ChartScaleType;
53
+ xAxis?: ChartXAxisOptions<X>;
54
+ yAxis?: ChartYAxisOptions;
55
+ insets?: Partial<ChartInsets>;
56
+ }
57
+ interface LineChartProps<X extends ChartXValue = number> extends LineChartCommonProps<X> {
58
+ data: readonly LineChartPoint<X>[];
59
+ line?: LineChartLineOptions;
60
+ }
61
+
62
+ export type { ChartGridLineOptions as C, GridProps as G, LineChartCommonProps as L, ResolvedGridLineOptions as R, ChartGridOptions as a, ChartXValue as b, LineChartCoordinate as c, LineChartCurve as d, LineChartLineOptions as e, LineChartPoint as f, LineChartProps as g, LineChartScale as h };
@@ -0,0 +1,49 @@
1
+ import { SkTypefaceFontProvider } from '@shopify/react-native-skia';
2
+ import { AppTheme } from '@impulse-ui-native/theme';
3
+ import { ChartPoint, ChartRect, ChartAxisOptions } from './common.types.mjs';
4
+ import { h as LineChartScale, b as ChartXValue } from '../line-chart.types-yxru5uWc.mjs';
5
+ import './style.types.mjs';
6
+
7
+ interface AxisTick<Value> {
8
+ value: Value;
9
+ position: number;
10
+ }
11
+ interface AxisLineLayout {
12
+ start: ChartPoint;
13
+ end: ChartPoint;
14
+ }
15
+ interface AxisTickLayout<Value> extends AxisTick<Value>, AxisLineLayout {
16
+ labelRect: ChartRect;
17
+ }
18
+ interface AxisLayout<Value> {
19
+ line: AxisLineLayout;
20
+ ticks: readonly AxisTickLayout<Value>[];
21
+ }
22
+ interface CreateAxisLayoutProps<Value> {
23
+ values: readonly Value[];
24
+ scale: LineChartScale<Value>;
25
+ plot: ChartRect;
26
+ region: ChartRect;
27
+ tickLength: number;
28
+ labelGap: number;
29
+ }
30
+ interface CreateYAxisLayoutProps extends CreateAxisLayoutProps<number> {
31
+ fontSize: number;
32
+ }
33
+ interface AxisProps<Value> {
34
+ ticks: readonly Value[];
35
+ scale: LineChartScale<Value>;
36
+ plot: ChartRect;
37
+ region: ChartRect;
38
+ theme: AppTheme;
39
+ options?: ChartAxisOptions<Value>;
40
+ fontManager?: SkTypefaceFontProvider;
41
+ lineVisible?: boolean;
42
+ tickVisible?: boolean;
43
+ }
44
+ interface XAxisProps<X extends ChartXValue = number> extends AxisProps<X> {
45
+ }
46
+ interface YAxisProps extends AxisProps<number> {
47
+ }
48
+
49
+ export type { AxisLayout, AxisLineLayout, AxisProps, AxisTick, AxisTickLayout, CreateAxisLayoutProps, CreateYAxisLayoutProps, XAxisProps, YAxisProps };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=axis.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,57 @@
1
+ import { ChartStrokeStyle, ChartLabelStyle } from './style.types.mjs';
2
+ import '@shopify/react-native-skia';
3
+
4
+ type ChartScaleType = "linear" | "point" | "time";
5
+ type ChartNumericDomain = readonly [minimum: number, maximum: number];
6
+ interface ChartInsets {
7
+ top: number;
8
+ right: number;
9
+ bottom: number;
10
+ left: number;
11
+ }
12
+ interface ChartSize {
13
+ width: number;
14
+ height: number;
15
+ }
16
+ interface ChartPoint {
17
+ x: number;
18
+ y: number;
19
+ }
20
+ interface ChartRect extends ChartSize {
21
+ x: number;
22
+ y: number;
23
+ }
24
+ interface ChartLayout {
25
+ size: ChartSize;
26
+ insets: ChartInsets;
27
+ plot: ChartRect;
28
+ xAxis: ChartRect;
29
+ yAxis: ChartRect;
30
+ }
31
+ interface ChartAxisOptions<Value> {
32
+ visible?: boolean;
33
+ tickCount?: number;
34
+ format?: (value: Value) => string;
35
+ line?: ChartAxisLineOptions;
36
+ tick?: ChartAxisTickOptions;
37
+ label?: ChartAxisLabelOptions;
38
+ }
39
+ interface ChartAxisLineOptions extends ChartStrokeStyle {
40
+ visible?: boolean;
41
+ }
42
+ interface ChartAxisTickOptions extends ChartStrokeStyle {
43
+ visible?: boolean;
44
+ length?: number;
45
+ }
46
+ interface ChartAxisLabelOptions extends ChartLabelStyle {
47
+ visible?: boolean;
48
+ gap?: number;
49
+ rotation?: number;
50
+ }
51
+ interface ChartXAxisOptions<X> extends ChartAxisOptions<X> {
52
+ }
53
+ interface ChartYAxisOptions extends ChartAxisOptions<number> {
54
+ domain?: ChartNumericDomain;
55
+ }
56
+
57
+ export type { ChartAxisLabelOptions, ChartAxisLineOptions, ChartAxisOptions, ChartAxisTickOptions, ChartInsets, ChartLayout, ChartNumericDomain, ChartPoint, ChartRect, ChartScaleType, ChartSize, ChartXAxisOptions, ChartYAxisOptions };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=common.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import '@impulse-ui-native/theme';
2
+ import './common.types.mjs';
3
+ export { C as ChartGridLineOptions, a as ChartGridOptions, G as GridProps, R as ResolvedGridLineOptions } from '../line-chart.types-yxru5uWc.mjs';
4
+ import './style.types.mjs';
5
+ import '@shopify/react-native-skia';
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=grid.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,11 @@
1
+ export { AxisLayout, AxisLineLayout, AxisProps, AxisTick, AxisTickLayout, CreateAxisLayoutProps, CreateYAxisLayoutProps, XAxisProps, YAxisProps } from './axis.types.mjs';
2
+ export { ChartAxisLabelOptions, ChartAxisLineOptions, ChartAxisOptions, ChartAxisTickOptions, ChartInsets, ChartLayout, ChartNumericDomain, ChartPoint, ChartRect, ChartScaleType, ChartSize, ChartXAxisOptions, ChartYAxisOptions } from './common.types.mjs';
3
+ export { C as ChartGridLineOptions, a as ChartGridOptions, b as ChartXValue, G as GridProps, L as LineChartCommonProps, c as LineChartCoordinate, d as LineChartCurve, e as LineChartLineOptions, f as LineChartPoint, g as LineChartProps, h as LineChartScale, R as ResolvedGridLineOptions } from '../line-chart.types-yxru5uWc.mjs';
4
+ export { LabelHorizontalAlignment, LabelProps, LabelVerticalAlignment } from './label.types.mjs';
5
+ export { LineProps } from './line.types.mjs';
6
+ export { MultiLineChartBodyProps, MultiLineChartProps, MultiLineChartSeries, MultiLineChartSeriesModel } from './multi-line-chart.types.mjs';
7
+ export { ChartLabelStyle, ChartStrokeCap, ChartStrokeJoin, ChartStrokeStyle } from './style.types.mjs';
8
+ export { LineChartXScaleModel, UseLineChartProps, UseLineChartResult } from './use-line-chart.types.mjs';
9
+ export { UseMultiLineChartProps, UseMultiLineChartResult } from './use-multi-line-chart.types.mjs';
10
+ import '@shopify/react-native-skia';
11
+ import '@impulse-ui-native/theme';
@@ -0,0 +1,11 @@
1
+ export * from "./axis.types";
2
+ export * from "./common.types";
3
+ export * from "./grid.types";
4
+ export * from "./label.types";
5
+ export * from "./line.types";
6
+ export * from "./line-chart.types";
7
+ export * from "./multi-line-chart.types";
8
+ export * from "./style.types";
9
+ export * from "./use-line-chart.types";
10
+ export * from "./use-multi-line-chart.types";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export * from \"./axis.types\";\nexport * from \"./common.types\";\nexport * from \"./grid.types\";\nexport * from \"./label.types\";\nexport * from \"./line.types\";\nexport * from \"./line-chart.types\";\nexport * from \"./multi-line-chart.types\";\nexport * from \"./style.types\";\nexport * from \"./use-line-chart.types\";\nexport * from \"./use-multi-line-chart.types\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,24 @@
1
+ import { FontWeight, SkTypefaceFontProvider } from '@shopify/react-native-skia';
2
+ import { AppTheme } from '@impulse-ui-native/theme';
3
+ import { ChartRect } from './common.types.mjs';
4
+ import './style.types.mjs';
5
+
6
+ type LabelHorizontalAlignment = "left" | "center" | "right";
7
+ type LabelVerticalAlignment = "top" | "center" | "bottom";
8
+ interface LabelProps {
9
+ text: string;
10
+ rect: ChartRect;
11
+ theme: AppTheme;
12
+ horizontalAlign?: LabelHorizontalAlignment;
13
+ verticalAlign?: LabelVerticalAlignment;
14
+ color?: string;
15
+ fontSize?: number;
16
+ fontFamily?: string;
17
+ fontWeight?: FontWeight;
18
+ fontManager?: SkTypefaceFontProvider;
19
+ maxLines?: number;
20
+ rotation?: number;
21
+ tnum?: boolean;
22
+ }
23
+
24
+ export type { LabelHorizontalAlignment, LabelProps, LabelVerticalAlignment };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=label.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import '@shopify/react-native-skia';
2
+ import './common.types.mjs';
3
+ export { b as ChartXValue, L as LineChartCommonProps, c as LineChartCoordinate, d as LineChartCurve, e as LineChartLineOptions, f as LineChartPoint, g as LineChartProps, h as LineChartScale } from '../line-chart.types-yxru5uWc.mjs';
4
+ import './style.types.mjs';
5
+ import '@impulse-ui-native/theme';
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=line-chart.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,11 @@
1
+ import { b as ChartXValue, e as LineChartLineOptions, c as LineChartCoordinate } from '../line-chart.types-yxru5uWc.mjs';
2
+ import '@shopify/react-native-skia';
3
+ import './common.types.mjs';
4
+ import './style.types.mjs';
5
+ import '@impulse-ui-native/theme';
6
+
7
+ interface LineProps<X extends ChartXValue = number> extends LineChartLineOptions {
8
+ coordinates: readonly LineChartCoordinate<X>[];
9
+ }
10
+
11
+ export type { LineProps };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=line.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,23 @@
1
+ import { AppTheme } from '@impulse-ui-native/theme';
2
+ import { ChartSize } from './common.types.mjs';
3
+ import { b as ChartXValue, L as LineChartCommonProps, f as LineChartPoint, e as LineChartLineOptions, c as LineChartCoordinate } from '../line-chart.types-yxru5uWc.mjs';
4
+ import './style.types.mjs';
5
+ import '@shopify/react-native-skia';
6
+
7
+ interface MultiLineChartSeries<X extends ChartXValue = number> {
8
+ id: string;
9
+ data: readonly LineChartPoint<X>[];
10
+ line?: LineChartLineOptions;
11
+ }
12
+ interface MultiLineChartSeriesModel<X extends ChartXValue = number> extends MultiLineChartSeries<X> {
13
+ coordinates: readonly LineChartCoordinate<X>[];
14
+ }
15
+ interface MultiLineChartProps<X extends ChartXValue = number> extends LineChartCommonProps<X> {
16
+ series: readonly MultiLineChartSeries<X>[];
17
+ }
18
+ interface MultiLineChartBodyProps<X extends ChartXValue = number> extends MultiLineChartProps<X> {
19
+ size: ChartSize;
20
+ theme: AppTheme;
21
+ }
22
+
23
+ export type { MultiLineChartBodyProps, MultiLineChartProps, MultiLineChartSeries, MultiLineChartSeriesModel };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=multi-line-chart.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,19 @@
1
+ import { FontWeight } from '@shopify/react-native-skia';
2
+
3
+ type ChartStrokeCap = "butt" | "round" | "square";
4
+ type ChartStrokeJoin = "bevel" | "miter" | "round";
5
+ interface ChartStrokeStyle {
6
+ color?: string;
7
+ width?: number;
8
+ opacity?: number;
9
+ dash?: readonly number[];
10
+ }
11
+ interface ChartLabelStyle {
12
+ color?: string;
13
+ fontSize?: number;
14
+ fontFamily?: string;
15
+ fontWeight?: FontWeight;
16
+ maxLines?: number;
17
+ }
18
+
19
+ export type { ChartLabelStyle, ChartStrokeCap, ChartStrokeJoin, ChartStrokeStyle };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=style.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,29 @@
1
+ import { ChartRect, ChartScaleType, ChartXAxisOptions, ChartYAxisOptions, ChartNumericDomain } from './common.types.mjs';
2
+ import { b as ChartXValue, h as LineChartScale, f as LineChartPoint, c as LineChartCoordinate } from '../line-chart.types-yxru5uWc.mjs';
3
+ import './style.types.mjs';
4
+ import '@shopify/react-native-skia';
5
+ import '@impulse-ui-native/theme';
6
+
7
+ interface UseLineChartProps<X extends ChartXValue = number> {
8
+ data: readonly LineChartPoint<X>[];
9
+ plot: ChartRect;
10
+ xScaleType?: ChartScaleType;
11
+ xAxis?: ChartXAxisOptions<X>;
12
+ yAxis?: ChartYAxisOptions;
13
+ }
14
+ interface UseLineChartResult<X extends ChartXValue = number> {
15
+ xDomain: readonly X[];
16
+ yDomain: ChartNumericDomain;
17
+ xTicks: readonly X[];
18
+ yTicks: readonly number[];
19
+ coordinates: readonly LineChartCoordinate<X>[];
20
+ xScale: LineChartScale<X>;
21
+ yScale: LineChartScale<number>;
22
+ }
23
+ interface LineChartXScaleModel<X extends ChartXValue> {
24
+ domain: readonly X[];
25
+ ticks: readonly X[];
26
+ scale: LineChartScale<X>;
27
+ }
28
+
29
+ export type { LineChartXScaleModel, UseLineChartProps, UseLineChartResult };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=use-line-chart.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,16 @@
1
+ import { ChartRect } from './common.types.mjs';
2
+ import { b as ChartXValue } from '../line-chart.types-yxru5uWc.mjs';
3
+ import { MultiLineChartProps, MultiLineChartSeriesModel } from './multi-line-chart.types.mjs';
4
+ import { UseLineChartResult } from './use-line-chart.types.mjs';
5
+ import './style.types.mjs';
6
+ import '@shopify/react-native-skia';
7
+ import '@impulse-ui-native/theme';
8
+
9
+ interface UseMultiLineChartProps<X extends ChartXValue = number> extends Pick<MultiLineChartProps<X>, "series" | "xAxis" | "xScaleType" | "yAxis"> {
10
+ plot: ChartRect;
11
+ }
12
+ interface UseMultiLineChartResult<X extends ChartXValue = number> extends Omit<UseLineChartResult<X>, "coordinates"> {
13
+ series: readonly MultiLineChartSeriesModel<X>[];
14
+ }
15
+
16
+ export type { UseMultiLineChartProps, UseMultiLineChartResult };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=use-multi-line-chart.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ import { AxisTick, CreateAxisLayoutProps, AxisLayout, CreateYAxisLayoutProps } from '../types/axis.types.mjs';
2
+ import { ChartRect } from '../types/common.types.mjs';
3
+ import { h as LineChartScale } from '../line-chart.types-yxru5uWc.mjs';
4
+ import '@shopify/react-native-skia';
5
+ import '@impulse-ui-native/theme';
6
+ import '../types/style.types.mjs';
7
+
8
+ declare function createAxisTicks<Value>(values: readonly Value[], scale: LineChartScale<Value>): AxisTick<Value>[];
9
+ declare function createXAxisLayout<Value>(props: CreateAxisLayoutProps<Value>): AxisLayout<Value>;
10
+ declare function createYAxisLayout(props: CreateYAxisLayoutProps): AxisLayout<number>;
11
+ declare function createXAxisLabelRect(ticks: readonly AxisTick<unknown>[], index: number, region: ChartRect, offset: number): ChartRect;
12
+ declare function createYAxisLabelRect(position: number, region: ChartRect, width: number, fontSize: number): ChartRect;
13
+ declare function formatAxisTick<Value>(value: Value, format?: (value: Value) => string): string;
14
+
15
+ export { createAxisTicks, createXAxisLabelRect, createXAxisLayout, createYAxisLabelRect, createYAxisLayout, formatAxisTick };