@automattic/charts 0.46.2 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/dist/{chunk-HZZTNJYP.cjs → chunk-22TV5IPN.cjs} +139 -101
  3. package/dist/chunk-22TV5IPN.cjs.map +1 -0
  4. package/dist/{chunk-N36WJKYM.cjs → chunk-ACYRVLI5.cjs} +3 -3
  5. package/dist/{chunk-N36WJKYM.cjs.map → chunk-ACYRVLI5.cjs.map} +1 -1
  6. package/dist/{chunk-QPHNEQCK.cjs → chunk-J6XON6FM.cjs} +8 -3
  7. package/dist/chunk-J6XON6FM.cjs.map +1 -0
  8. package/dist/{chunk-CNAKHZMW.cjs → chunk-KC3ITX3B.cjs} +10 -3
  9. package/dist/chunk-KC3ITX3B.cjs.map +1 -0
  10. package/dist/{chunk-KEBKTDOQ.js → chunk-MCFIVI3D.js} +8 -3
  11. package/dist/chunk-MCFIVI3D.js.map +1 -0
  12. package/dist/{chunk-JGX3ZNK5.js → chunk-MWFUJOQX.js} +11 -3
  13. package/dist/chunk-MWFUJOQX.js.map +1 -0
  14. package/dist/{chunk-HVWETEEV.js → chunk-NEANE7H4.js} +10 -3
  15. package/dist/chunk-NEANE7H4.js.map +1 -0
  16. package/dist/{chunk-GEB4GELE.cjs → chunk-S5H6V6VU.cjs} +11 -3
  17. package/dist/chunk-S5H6V6VU.cjs.map +1 -0
  18. package/dist/{chunk-JI6OGGGF.js → chunk-UG756X62.js} +2 -2
  19. package/dist/{chunk-Q2RJUTMN.js → chunk-WIBQECQE.js} +138 -100
  20. package/dist/chunk-WIBQECQE.js.map +1 -0
  21. package/dist/components/bar-chart/index.cjs +2 -2
  22. package/dist/components/bar-chart/index.css +22 -0
  23. package/dist/components/bar-chart/index.css.map +1 -1
  24. package/dist/components/bar-chart/index.d.cts +1 -1
  25. package/dist/components/bar-chart/index.d.ts +1 -1
  26. package/dist/components/bar-chart/index.js +1 -1
  27. package/dist/components/bar-list-chart/index.cjs +3 -3
  28. package/dist/components/bar-list-chart/index.css +22 -0
  29. package/dist/components/bar-list-chart/index.css.map +1 -1
  30. package/dist/components/bar-list-chart/index.d.cts +1 -1
  31. package/dist/components/bar-list-chart/index.d.ts +1 -1
  32. package/dist/components/bar-list-chart/index.js +2 -2
  33. package/dist/components/conversion-funnel-chart/index.cjs +2 -2
  34. package/dist/components/conversion-funnel-chart/index.css +11 -0
  35. package/dist/components/conversion-funnel-chart/index.css.map +1 -1
  36. package/dist/components/conversion-funnel-chart/index.d.cts +2 -2
  37. package/dist/components/conversion-funnel-chart/index.d.ts +2 -2
  38. package/dist/components/conversion-funnel-chart/index.js +1 -1
  39. package/dist/components/leaderboard-chart/index.cjs +2 -2
  40. package/dist/components/leaderboard-chart/index.css +11 -1
  41. package/dist/components/leaderboard-chart/index.css.map +1 -1
  42. package/dist/components/leaderboard-chart/index.d.cts +2 -2
  43. package/dist/components/leaderboard-chart/index.d.ts +2 -2
  44. package/dist/components/leaderboard-chart/index.js +1 -1
  45. package/dist/components/legend/index.d.cts +1 -1
  46. package/dist/components/legend/index.d.ts +1 -1
  47. package/dist/components/line-chart/index.cjs +2 -2
  48. package/dist/components/line-chart/index.css +10 -0
  49. package/dist/components/line-chart/index.css.map +1 -1
  50. package/dist/components/line-chart/index.d.cts +2 -1
  51. package/dist/components/line-chart/index.d.ts +2 -1
  52. package/dist/components/line-chart/index.js +1 -1
  53. package/dist/components/pie-chart/index.d.cts +1 -1
  54. package/dist/components/pie-chart/index.d.ts +1 -1
  55. package/dist/components/pie-semi-circle-chart/index.d.cts +1 -1
  56. package/dist/components/pie-semi-circle-chart/index.d.ts +1 -1
  57. package/dist/components/tooltip/index.d.cts +1 -1
  58. package/dist/components/tooltip/index.d.ts +1 -1
  59. package/dist/hooks/index.d.cts +1 -1
  60. package/dist/hooks/index.d.ts +1 -1
  61. package/dist/index.cjs +6 -6
  62. package/dist/index.css +54 -1
  63. package/dist/index.css.map +1 -1
  64. package/dist/index.d.cts +3 -3
  65. package/dist/index.d.ts +3 -3
  66. package/dist/index.js +5 -5
  67. package/dist/{leaderboard-chart-B5JRimc9.d.cts → leaderboard-chart-B3CQbXhp.d.cts} +2 -2
  68. package/dist/{leaderboard-chart-DQ8i8GMA.d.ts → leaderboard-chart-CaZgGytL.d.ts} +2 -2
  69. package/dist/providers/index.d.cts +2 -2
  70. package/dist/providers/index.d.ts +2 -2
  71. package/dist/{themes-TIJq1lG_.d.cts → themes-DL0AAxyZ.d.cts} +1 -1
  72. package/dist/{themes-CN85BQM1.d.ts → themes-_t_7uxnQ.d.ts} +1 -1
  73. package/dist/{types-73KOEWs9.d.ts → types-DU5eF3uf.d.cts} +4 -0
  74. package/dist/{types-73KOEWs9.d.cts → types-DU5eF3uf.d.ts} +4 -0
  75. package/package.json +8 -22
  76. package/src/components/bar-chart/bar-chart.module.scss +28 -0
  77. package/src/components/bar-chart/bar-chart.tsx +4 -1
  78. package/src/components/conversion-funnel-chart/conversion-funnel-chart.module.scss +13 -0
  79. package/src/components/conversion-funnel-chart/conversion-funnel-chart.tsx +5 -1
  80. package/src/components/conversion-funnel-chart/types.ts +1 -1
  81. package/src/components/leaderboard-chart/leaderboard-chart.module.scss +13 -1
  82. package/src/components/leaderboard-chart/leaderboard-chart.tsx +11 -2
  83. package/src/components/leaderboard-chart/types.ts +1 -0
  84. package/src/components/line-chart/line-chart.module.scss +15 -0
  85. package/src/components/line-chart/line-chart.tsx +7 -1
  86. package/src/components/line-chart/types.ts +1 -0
  87. package/src/types.ts +4 -0
  88. package/dist/chunk-CNAKHZMW.cjs.map +0 -1
  89. package/dist/chunk-GEB4GELE.cjs.map +0 -1
  90. package/dist/chunk-HVWETEEV.js.map +0 -1
  91. package/dist/chunk-HZZTNJYP.cjs.map +0 -1
  92. package/dist/chunk-JGX3ZNK5.js.map +0 -1
  93. package/dist/chunk-KEBKTDOQ.js.map +0 -1
  94. package/dist/chunk-Q2RJUTMN.js.map +0 -1
  95. package/dist/chunk-QPHNEQCK.cjs.map +0 -1
  96. /package/dist/{chunk-JI6OGGGF.js.map → chunk-UG756X62.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkCNAKHZMWcjs = require('./chunk-CNAKHZMW.cjs');
3
+ var _chunkKC3ITX3Bcjs = require('./chunk-KC3ITX3B.cjs');
4
4
 
5
5
 
6
6
  var _chunkFX2PTUFCcjs = require('./chunk-FX2PTUFC.cjs');
@@ -142,7 +142,7 @@ var BarListChartInternal = ({
142
142
  };
143
143
  }, [options, width, data, height]);
144
144
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
145
- _chunkCNAKHZMWcjs.BarChartResponsive,
145
+ _chunkKC3ITX3Bcjs.BarChartResponsive,
146
146
  {
147
147
  orientation: "horizontal",
148
148
  gridVisibility: "none",
@@ -193,4 +193,4 @@ var BarListChartResponsive = _chunkFX2PTUFCcjs.withResponsive.call(void 0, BarLi
193
193
 
194
194
 
195
195
  exports.BarListChart = BarListChart; exports.BarListChartResponsive = BarListChartResponsive;
196
- //# sourceMappingURL=chunk-N36WJKYM.cjs.map
196
+ //# sourceMappingURL=chunk-ACYRVLI5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-N36WJKYM.cjs","../src/components/bar-list-chart/bar-list-chart.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-N36WJKYM.cjs","sourcesContent":[null,"import { formatNumberCompact } from '@automattic/number-formatters';\nimport { Group } from '@visx/group';\nimport { createScale, scaleBand } from '@visx/scale';\nimport { Text, type TextProps } from '@visx/text';\nimport { useContext, useMemo } from 'react';\nimport { GlobalChartsContext, GlobalChartsProvider } from '../../providers';\nimport { BarChart } from '../bar-chart';\nimport { withResponsive } from '../private/with-responsive';\nimport type { SeriesData } from '../..';\nimport type { ScaleOptions } from '../../types';\nimport type { BarChartProps } from '../bar-chart/bar-chart';\nimport type { AxisRendererProps, AxisScale } from '@visx/axis';\nimport type { AnyD3Scale } from '@visx/scale';\nimport type { ComponentType, FC } from 'react';\n\nexport interface BarListChartProps\n\textends Exclude< BarChartProps, 'orientation' | 'size' | 'gridVisibility' > {\n\toptions?: {\n\t\t/**\n\t\t * Scale for the y axis. Exclude the type property.\n\t\t */\n\t\tyScale: Omit< ScaleOptions, 'type' >;\n\t\t/**\n\t\t * Scale for the x axis. Exclude the type property.\n\t\t */\n\t\txScale: Omit< ScaleOptions, 'type' >;\n\t\t/**\n\t\t * Formatter for the label.\n\t\t */\n\t\tlabelFormatter?: ( value: string ) => string;\n\t\t/**\n\t\t * Formatter for the value.\n\t\t */\n\t\tvalueFormatter?: ( value: number ) => string;\n\t\t/**\n\t\t * y offset of the label and value. Default is based on the number of series, automatically computed.\n\t\t */\n\t\tyOffset?: number;\n\t\t/**\n\t\t * x position of the label.\n\t\t */\n\t\tlabelPosition?: number;\n\t\t/**\n\t\t * x position of the value.\n\t\t */\n\t\tvaluePosition?: number;\n\t\t/**\n\t\t * Custom render function for the label.\n\t\t */\n\t\tlabelComponent?: ComponentType< RenderLabelProps >;\n\t\t/**\n\t\t * Custom render function for the value.\n\t\t */\n\t\tvalueComponent?: ComponentType< RenderValueProps >;\n\t};\n}\n\nexport interface RenderLabelProps {\n\ttextProps: TextProps;\n\tx: number;\n\ty: number;\n\tlabel: string;\n\tformatter: ( value: string ) => string;\n}\n\nexport interface RenderValueProps {\n\ttextProps: TextProps;\n\tx: number;\n\ty: number;\n\tvalue: number;\n\t/**\n\t * Original data\n\t */\n\tdata: SeriesData[];\n\t/**\n\t * Index of the data point\n\t */\n\tindex: number;\n\tformatter: ( value: number ) => string;\n}\n\n/**\n * Get the bandwidth of a scale\n * @param scale - The scale to get the bandwidth of\n * @return The bandwidth of the scale\n */\nconst getScaleBandwidth = < Scale extends AxisScale >( scale?: Scale ) => {\n\t// Broaden type before using 'xxx' in s as typeguard.\n\tconst s = scale as AxisScale;\n\treturn s && 'bandwidth' in s ? s?.bandwidth() ?? 0 : 0;\n};\n\nconst DefaultLabelComponent = ( { textProps, x, y, label, formatter } ) => {\n\treturn (\n\t\t<Text { ...textProps } textAnchor=\"start\" x={ x } y={ y }>\n\t\t\t{ formatter( label ) }\n\t\t</Text>\n\t);\n};\n\nconst DefaultValueComponent = ( { textProps, x, y, value, formatter }: RenderValueProps ) => {\n\treturn (\n\t\t<Text { ...textProps } textAnchor=\"end\" x={ x } y={ y } fontWeight={ 500 }>\n\t\t\t{ formatter( value ) }\n\t\t</Text>\n\t);\n};\n\nconst AxisRenderer = ( {\n\tticks,\n\ttickLabelProps,\n\tyOffset,\n\tlabelPosition,\n\tvaluePosition,\n\tdata,\n\tlabelFormatter,\n\tvalueFormatter,\n\tLabelComponent = DefaultLabelComponent,\n\tValueComponent = DefaultValueComponent,\n}: AxisRendererProps< AnyD3Scale > & {\n\tyOffset: number;\n\tlabelPosition: number;\n\tvaluePosition: number;\n\tdata: SeriesData[];\n\tlabelFormatter?: ( value: string ) => string;\n\tvalueFormatter?: ( value: number ) => string;\n\tLabelComponent?: ComponentType< RenderLabelProps >;\n\tValueComponent?: ComponentType< RenderValueProps >;\n} ) => {\n\tif ( ticks.length === 0 ) {\n\t\treturn null;\n\t}\n\n\t// compute the max tick label size to compute label offset\n\tconst allTickLabelProps = ticks.map( ( { value, index } ) =>\n\t\ttypeof tickLabelProps === 'function' ? tickLabelProps( value, index, ticks ) : {}\n\t);\n\n\treturn ticks.map( ( { from, formattedValue }, index ) => {\n\t\tconst textProps = allTickLabelProps[ index ] ?? {};\n\t\t// No need to pass textAnchor and dx. It will be handled by the component.\n\t\tdelete textProps.textAnchor;\n\t\tdelete textProps.dx;\n\n\t\tconst sum = data.reduce(\n\t\t\t( acc, { data: seriesData } ) => acc + ( seriesData[ index ]?.value ?? 0 ),\n\t\t\t0\n\t\t);\n\t\tconst y = from.y + yOffset;\n\n\t\treturn (\n\t\t\t<Group key={ index }>\n\t\t\t\t<LabelComponent\n\t\t\t\t\ttextProps={ textProps }\n\t\t\t\t\tx={ labelPosition }\n\t\t\t\t\ty={ y }\n\t\t\t\t\tlabel={ formattedValue }\n\t\t\t\t\tformatter={ labelFormatter }\n\t\t\t\t/>\n\t\t\t\t<ValueComponent\n\t\t\t\t\ttextProps={ textProps }\n\t\t\t\t\tx={ valuePosition }\n\t\t\t\t\ty={ y }\n\t\t\t\t\tvalue={ sum }\n\t\t\t\t\tformatter={ valueFormatter }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tindex={ index }\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t);\n\t} );\n};\n\n/**\n * Calculate the default y offset for the bar list chart.\n * @param data - The data to calculate the default y offset for.\n * @param yScaleConfig - The y scale configuration.\n * @param height - The height of the chart.\n * @param isMultiSeries - Whether the chart is a multi series chart.\n * @return The default y offset.\n */\nconst getDefaultYOffset = (\n\tdata: SeriesData[],\n\tyScaleConfig: Omit< ScaleOptions, 'type' >,\n\theight: number,\n\tisMultiSeries: boolean\n) => {\n\tif ( ! isMultiSeries ) {\n\t\treturn 0;\n\t}\n\n\tconst dataKeys = data.map( ( { label } ) => label );\n\n\tconst yScale = createScale< string >( {\n\t\ttype: 'band' as const,\n\t\trange: [ 0, height ],\n\t\tdomain: dataKeys,\n\t\t...yScaleConfig,\n\t} );\n\n\tconst groupScale = scaleBand< string >( {\n\t\tdomain: dataKeys,\n\t\trange: [ 0, getScaleBandwidth( yScale ) ],\n\t\tpadding: yScaleConfig.paddingInner,\n\t} );\n\n\tconst GAP_BETWEEN_BARS = 6;\n\tconst barThickness = getScaleBandwidth( groupScale );\n\n\t// Use negative value to move the label up.\n\treturn -( barThickness + GAP_BETWEEN_BARS );\n};\n\nconst BarListChartInternal: FC< BarListChartProps > = ( {\n\tdata,\n\twidth,\n\theight,\n\toptions = {},\n\tmargin = {\n\t\tleft: 0,\n\t\tright: 20,\n\t\tbottom: 0,\n\t\ttop: 0,\n\t},\n\t...rest\n} ) => {\n\tconst chartOptions = useMemo( () => {\n\t\tconst isMultiSeries = data.length > 1;\n\n\t\tconst defaultYScale = {\n\t\t\t// For multi series, set default padding larger to look better.\n\t\t\tpaddingInner: isMultiSeries ? 0.3 : 0.1,\n\t\t\tpadding: isMultiSeries ? 0.3 : 0.1,\n\t\t};\n\t\tconst defaultXScale = {\n\t\t\t// Always begin at zero since the x axis is hidden.\n\t\t\tzero: true,\n\t\t};\n\t\tconst yScale = {\n\t\t\t...defaultYScale,\n\t\t\t...( options.yScale ?? {} ),\n\t\t};\n\t\tconst xScale = {\n\t\t\t...defaultXScale,\n\t\t\t...( options.xScale ?? {} ),\n\t\t};\n\n\t\treturn {\n\t\t\tyScale,\n\t\t\txScale,\n\t\t\tlabelPosition: options.labelPosition ?? ( isMultiSeries ? 0 : 10 ),\n\t\t\tvalueFormatter: options.valueFormatter ?? ( value => formatNumberCompact( value ) ),\n\t\t\tlabelFormatter: options.labelFormatter ?? ( value => String( value ) ),\n\t\t\tvaluePosition: options.valuePosition ?? width,\n\t\t\tyOffset: options.yOffset ?? getDefaultYOffset( data, yScale, height, isMultiSeries ),\n\t\t};\n\t}, [ options, width, data, height ] );\n\n\treturn (\n\t\t<BarChart\n\t\t\torientation=\"horizontal\"\n\t\t\tgridVisibility={ 'none' }\n\t\t\tdata={ data }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\tmargin={ margin }\n\t\t\toptions={ {\n\t\t\t\taxis: {\n\t\t\t\t\ty: {\n\t\t\t\t\t\tchildren: ( renderProps: AxisRendererProps< AnyD3Scale > ) => (\n\t\t\t\t\t\t\t<AxisRenderer\n\t\t\t\t\t\t\t\t{ ...renderProps }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tyOffset={ chartOptions.yOffset }\n\t\t\t\t\t\t\t\tlabelPosition={ chartOptions.labelPosition }\n\t\t\t\t\t\t\t\tvaluePosition={ chartOptions.valuePosition }\n\t\t\t\t\t\t\t\tlabelFormatter={ chartOptions.labelFormatter }\n\t\t\t\t\t\t\t\tvalueFormatter={ chartOptions.valueFormatter }\n\t\t\t\t\t\t\t\tLabelComponent={ options.labelComponent }\n\t\t\t\t\t\t\t\tValueComponent={ options.valueComponent }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\tx: {\n\t\t\t\t\t\tchildren: () => null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\txScale: chartOptions.xScale,\n\t\t\t\tyScale: chartOptions.yScale,\n\t\t\t} }\n\t\t\t{ ...rest }\n\t\t/>\n\t);\n};\n\nconst BarListChart: FC< BarListChartProps > = props => {\n\tconst existingContext = useContext( GlobalChartsContext );\n\n\t// If we're already in a GlobalChartsProvider context, render the core component directly\n\tif ( existingContext ) {\n\t\treturn <BarListChartInternal { ...props } />;\n\t}\n\n\t// Otherwise, wrap with our own GlobalChartsProvider\n\treturn (\n\t\t<GlobalChartsProvider>\n\t\t\t<BarListChartInternal { ...props } />\n\t\t</GlobalChartsProvider>\n\t);\n};\n\nBarListChart.displayName = 'BarListChart';\n\nconst BarListChartResponsive = withResponsive< BarListChartProps >( BarListChart );\n\nexport { BarListChartResponsive as default, BarListChart as BarListChartUnresponsive };\n"]}
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-ACYRVLI5.cjs","../src/components/bar-list-chart/bar-list-chart.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-ACYRVLI5.cjs","sourcesContent":[null,"import { formatNumberCompact } from '@automattic/number-formatters';\nimport { Group } from '@visx/group';\nimport { createScale, scaleBand } from '@visx/scale';\nimport { Text, type TextProps } from '@visx/text';\nimport { useContext, useMemo } from 'react';\nimport { GlobalChartsContext, GlobalChartsProvider } from '../../providers';\nimport { BarChart } from '../bar-chart';\nimport { withResponsive } from '../private/with-responsive';\nimport type { SeriesData } from '../..';\nimport type { ScaleOptions } from '../../types';\nimport type { BarChartProps } from '../bar-chart/bar-chart';\nimport type { AxisRendererProps, AxisScale } from '@visx/axis';\nimport type { AnyD3Scale } from '@visx/scale';\nimport type { ComponentType, FC } from 'react';\n\nexport interface BarListChartProps\n\textends Exclude< BarChartProps, 'orientation' | 'size' | 'gridVisibility' > {\n\toptions?: {\n\t\t/**\n\t\t * Scale for the y axis. Exclude the type property.\n\t\t */\n\t\tyScale: Omit< ScaleOptions, 'type' >;\n\t\t/**\n\t\t * Scale for the x axis. Exclude the type property.\n\t\t */\n\t\txScale: Omit< ScaleOptions, 'type' >;\n\t\t/**\n\t\t * Formatter for the label.\n\t\t */\n\t\tlabelFormatter?: ( value: string ) => string;\n\t\t/**\n\t\t * Formatter for the value.\n\t\t */\n\t\tvalueFormatter?: ( value: number ) => string;\n\t\t/**\n\t\t * y offset of the label and value. Default is based on the number of series, automatically computed.\n\t\t */\n\t\tyOffset?: number;\n\t\t/**\n\t\t * x position of the label.\n\t\t */\n\t\tlabelPosition?: number;\n\t\t/**\n\t\t * x position of the value.\n\t\t */\n\t\tvaluePosition?: number;\n\t\t/**\n\t\t * Custom render function for the label.\n\t\t */\n\t\tlabelComponent?: ComponentType< RenderLabelProps >;\n\t\t/**\n\t\t * Custom render function for the value.\n\t\t */\n\t\tvalueComponent?: ComponentType< RenderValueProps >;\n\t};\n}\n\nexport interface RenderLabelProps {\n\ttextProps: TextProps;\n\tx: number;\n\ty: number;\n\tlabel: string;\n\tformatter: ( value: string ) => string;\n}\n\nexport interface RenderValueProps {\n\ttextProps: TextProps;\n\tx: number;\n\ty: number;\n\tvalue: number;\n\t/**\n\t * Original data\n\t */\n\tdata: SeriesData[];\n\t/**\n\t * Index of the data point\n\t */\n\tindex: number;\n\tformatter: ( value: number ) => string;\n}\n\n/**\n * Get the bandwidth of a scale\n * @param scale - The scale to get the bandwidth of\n * @return The bandwidth of the scale\n */\nconst getScaleBandwidth = < Scale extends AxisScale >( scale?: Scale ) => {\n\t// Broaden type before using 'xxx' in s as typeguard.\n\tconst s = scale as AxisScale;\n\treturn s && 'bandwidth' in s ? s?.bandwidth() ?? 0 : 0;\n};\n\nconst DefaultLabelComponent = ( { textProps, x, y, label, formatter } ) => {\n\treturn (\n\t\t<Text { ...textProps } textAnchor=\"start\" x={ x } y={ y }>\n\t\t\t{ formatter( label ) }\n\t\t</Text>\n\t);\n};\n\nconst DefaultValueComponent = ( { textProps, x, y, value, formatter }: RenderValueProps ) => {\n\treturn (\n\t\t<Text { ...textProps } textAnchor=\"end\" x={ x } y={ y } fontWeight={ 500 }>\n\t\t\t{ formatter( value ) }\n\t\t</Text>\n\t);\n};\n\nconst AxisRenderer = ( {\n\tticks,\n\ttickLabelProps,\n\tyOffset,\n\tlabelPosition,\n\tvaluePosition,\n\tdata,\n\tlabelFormatter,\n\tvalueFormatter,\n\tLabelComponent = DefaultLabelComponent,\n\tValueComponent = DefaultValueComponent,\n}: AxisRendererProps< AnyD3Scale > & {\n\tyOffset: number;\n\tlabelPosition: number;\n\tvaluePosition: number;\n\tdata: SeriesData[];\n\tlabelFormatter?: ( value: string ) => string;\n\tvalueFormatter?: ( value: number ) => string;\n\tLabelComponent?: ComponentType< RenderLabelProps >;\n\tValueComponent?: ComponentType< RenderValueProps >;\n} ) => {\n\tif ( ticks.length === 0 ) {\n\t\treturn null;\n\t}\n\n\t// compute the max tick label size to compute label offset\n\tconst allTickLabelProps = ticks.map( ( { value, index } ) =>\n\t\ttypeof tickLabelProps === 'function' ? tickLabelProps( value, index, ticks ) : {}\n\t);\n\n\treturn ticks.map( ( { from, formattedValue }, index ) => {\n\t\tconst textProps = allTickLabelProps[ index ] ?? {};\n\t\t// No need to pass textAnchor and dx. It will be handled by the component.\n\t\tdelete textProps.textAnchor;\n\t\tdelete textProps.dx;\n\n\t\tconst sum = data.reduce(\n\t\t\t( acc, { data: seriesData } ) => acc + ( seriesData[ index ]?.value ?? 0 ),\n\t\t\t0\n\t\t);\n\t\tconst y = from.y + yOffset;\n\n\t\treturn (\n\t\t\t<Group key={ index }>\n\t\t\t\t<LabelComponent\n\t\t\t\t\ttextProps={ textProps }\n\t\t\t\t\tx={ labelPosition }\n\t\t\t\t\ty={ y }\n\t\t\t\t\tlabel={ formattedValue }\n\t\t\t\t\tformatter={ labelFormatter }\n\t\t\t\t/>\n\t\t\t\t<ValueComponent\n\t\t\t\t\ttextProps={ textProps }\n\t\t\t\t\tx={ valuePosition }\n\t\t\t\t\ty={ y }\n\t\t\t\t\tvalue={ sum }\n\t\t\t\t\tformatter={ valueFormatter }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tindex={ index }\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t);\n\t} );\n};\n\n/**\n * Calculate the default y offset for the bar list chart.\n * @param data - The data to calculate the default y offset for.\n * @param yScaleConfig - The y scale configuration.\n * @param height - The height of the chart.\n * @param isMultiSeries - Whether the chart is a multi series chart.\n * @return The default y offset.\n */\nconst getDefaultYOffset = (\n\tdata: SeriesData[],\n\tyScaleConfig: Omit< ScaleOptions, 'type' >,\n\theight: number,\n\tisMultiSeries: boolean\n) => {\n\tif ( ! isMultiSeries ) {\n\t\treturn 0;\n\t}\n\n\tconst dataKeys = data.map( ( { label } ) => label );\n\n\tconst yScale = createScale< string >( {\n\t\ttype: 'band' as const,\n\t\trange: [ 0, height ],\n\t\tdomain: dataKeys,\n\t\t...yScaleConfig,\n\t} );\n\n\tconst groupScale = scaleBand< string >( {\n\t\tdomain: dataKeys,\n\t\trange: [ 0, getScaleBandwidth( yScale ) ],\n\t\tpadding: yScaleConfig.paddingInner,\n\t} );\n\n\tconst GAP_BETWEEN_BARS = 6;\n\tconst barThickness = getScaleBandwidth( groupScale );\n\n\t// Use negative value to move the label up.\n\treturn -( barThickness + GAP_BETWEEN_BARS );\n};\n\nconst BarListChartInternal: FC< BarListChartProps > = ( {\n\tdata,\n\twidth,\n\theight,\n\toptions = {},\n\tmargin = {\n\t\tleft: 0,\n\t\tright: 20,\n\t\tbottom: 0,\n\t\ttop: 0,\n\t},\n\t...rest\n} ) => {\n\tconst chartOptions = useMemo( () => {\n\t\tconst isMultiSeries = data.length > 1;\n\n\t\tconst defaultYScale = {\n\t\t\t// For multi series, set default padding larger to look better.\n\t\t\tpaddingInner: isMultiSeries ? 0.3 : 0.1,\n\t\t\tpadding: isMultiSeries ? 0.3 : 0.1,\n\t\t};\n\t\tconst defaultXScale = {\n\t\t\t// Always begin at zero since the x axis is hidden.\n\t\t\tzero: true,\n\t\t};\n\t\tconst yScale = {\n\t\t\t...defaultYScale,\n\t\t\t...( options.yScale ?? {} ),\n\t\t};\n\t\tconst xScale = {\n\t\t\t...defaultXScale,\n\t\t\t...( options.xScale ?? {} ),\n\t\t};\n\n\t\treturn {\n\t\t\tyScale,\n\t\t\txScale,\n\t\t\tlabelPosition: options.labelPosition ?? ( isMultiSeries ? 0 : 10 ),\n\t\t\tvalueFormatter: options.valueFormatter ?? ( value => formatNumberCompact( value ) ),\n\t\t\tlabelFormatter: options.labelFormatter ?? ( value => String( value ) ),\n\t\t\tvaluePosition: options.valuePosition ?? width,\n\t\t\tyOffset: options.yOffset ?? getDefaultYOffset( data, yScale, height, isMultiSeries ),\n\t\t};\n\t}, [ options, width, data, height ] );\n\n\treturn (\n\t\t<BarChart\n\t\t\torientation=\"horizontal\"\n\t\t\tgridVisibility={ 'none' }\n\t\t\tdata={ data }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\tmargin={ margin }\n\t\t\toptions={ {\n\t\t\t\taxis: {\n\t\t\t\t\ty: {\n\t\t\t\t\t\tchildren: ( renderProps: AxisRendererProps< AnyD3Scale > ) => (\n\t\t\t\t\t\t\t<AxisRenderer\n\t\t\t\t\t\t\t\t{ ...renderProps }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tyOffset={ chartOptions.yOffset }\n\t\t\t\t\t\t\t\tlabelPosition={ chartOptions.labelPosition }\n\t\t\t\t\t\t\t\tvaluePosition={ chartOptions.valuePosition }\n\t\t\t\t\t\t\t\tlabelFormatter={ chartOptions.labelFormatter }\n\t\t\t\t\t\t\t\tvalueFormatter={ chartOptions.valueFormatter }\n\t\t\t\t\t\t\t\tLabelComponent={ options.labelComponent }\n\t\t\t\t\t\t\t\tValueComponent={ options.valueComponent }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\tx: {\n\t\t\t\t\t\tchildren: () => null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\txScale: chartOptions.xScale,\n\t\t\t\tyScale: chartOptions.yScale,\n\t\t\t} }\n\t\t\t{ ...rest }\n\t\t/>\n\t);\n};\n\nconst BarListChart: FC< BarListChartProps > = props => {\n\tconst existingContext = useContext( GlobalChartsContext );\n\n\t// If we're already in a GlobalChartsProvider context, render the core component directly\n\tif ( existingContext ) {\n\t\treturn <BarListChartInternal { ...props } />;\n\t}\n\n\t// Otherwise, wrap with our own GlobalChartsProvider\n\treturn (\n\t\t<GlobalChartsProvider>\n\t\t\t<BarListChartInternal { ...props } />\n\t\t</GlobalChartsProvider>\n\t);\n};\n\nBarListChart.displayName = 'BarListChart';\n\nconst BarListChartResponsive = withResponsive< BarListChartProps >( BarListChart );\n\nexport { BarListChartResponsive as default, BarListChart as BarListChartUnresponsive };\n"]}
@@ -34,7 +34,9 @@ var conversion_funnel_chart_module_default = {
34
34
  "tooltip-wrapper": "a8ccharts-NohPt6",
35
35
  "tooltip-title": "a8ccharts-hjZr33",
36
36
  "tooltip-content": "a8ccharts-ocwAPj",
37
- "empty-state": "a8ccharts-9c0psv"
37
+ "empty-state": "a8ccharts-9c0psv",
38
+ "funnel-bar__animated": "a8ccharts-wvCpVT",
39
+ "stretch": "a8ccharts-4otxiv"
38
40
  };
39
41
 
40
42
  // src/components/conversion-funnel-chart/private/use-funnel-selection.ts
@@ -97,6 +99,7 @@ var ConversionFunnelChartInternal = ({
97
99
  changeIndicator,
98
100
  steps,
99
101
  loading = false,
102
+ animation,
100
103
  className,
101
104
  chartId: providedChartId,
102
105
  style,
@@ -315,7 +318,9 @@ var ConversionFunnelChartInternal = ({
315
318
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
316
319
  "div",
317
320
  {
318
- className: conversion_funnel_chart_module_default["funnel-bar"],
321
+ className: _clsx2.default.call(void 0, conversion_funnel_chart_module_default["funnel-bar"], {
322
+ [conversion_funnel_chart_module_default["funnel-bar__animated"]]: animation && !loading
323
+ }),
319
324
  style: {
320
325
  height: `${barHeight}%`,
321
326
  backgroundColor: barColor
@@ -366,4 +371,4 @@ ConversionFunnelChartWithProvider.displayName = "ConversionFunnelChart";
366
371
 
367
372
 
368
373
  exports.ConversionFunnelChartWithProvider = ConversionFunnelChartWithProvider;
369
- //# sourceMappingURL=chunk-QPHNEQCK.cjs.map
374
+ //# sourceMappingURL=chunk-J6XON6FM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-J6XON6FM.cjs","../src/components/conversion-funnel-chart/conversion-funnel-chart.tsx","../src/components/conversion-funnel-chart/conversion-funnel-chart.module.scss","../src/components/conversion-funnel-chart/private/use-funnel-selection.ts"],"names":["useCallback"],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-J6XON6FM.cjs","sourcesContent":[null,"import { localPoint } from '@visx/event';\nimport { useTooltip, useTooltipInPortal } from '@visx/tooltip';\nimport clsx from 'clsx';\nimport { type FC, useRef, useMemo, useEffect, useCallback, useContext } from 'react';\nimport {\n\tGlobalChartsProvider,\n\tGlobalChartsContext,\n\tuseChartId,\n\tuseChartRegistration,\n\tuseGlobalChartsTheme,\n} from '../../providers';\nimport { hexToRgba, formatPercentage } from '../../utils';\nimport styles from './conversion-funnel-chart.module.scss';\nimport { useFunnelSelection } from './private';\nimport type { FunnelStep, ConversionFunnelChartProps } from './types';\n\n/**\n * Internal ConversionFunnelChart component with chart registration\n *\n * @param props - Component props\n * @param props.chartId - Optional unique identifier for the chart\n * @param props.mainRate - Main conversion rate to highlight\n * @param props.changeIndicator - Change indicator (e.g., +2%, -1.5%)\n * @param props.steps - Array of funnel steps\n * @param props.loading - Whether the chart is in loading state\n * @param props.animation - Whether to show chart animation on initial render or not\n * @param props.className - Additional CSS class name\n * @param props.style - Custom styling\n * @param props.renderStepLabel - Custom render function for step labels\n * @param props.renderStepRate - Custom render function for step rates\n * @param props.renderMainMetric - Custom render function for the entire main metric section\n * @param props.renderTooltip - Custom render function for tooltip content\n * @return JSX element representing the conversion funnel chart\n */\nconst ConversionFunnelChartInternal: FC< ConversionFunnelChartProps > = ( {\n\tmainRate,\n\tchangeIndicator,\n\tsteps,\n\tloading = false,\n\tanimation,\n\tclassName,\n\tchartId: providedChartId,\n\tstyle,\n\trenderStepLabel,\n\trenderStepRate,\n\trenderMainMetric,\n\trenderTooltip,\n} ) => {\n\tconst chartId = useChartId( providedChartId );\n\tconst { conversionFunnelChart: conversionFunnelChartSettings } = useGlobalChartsTheme();\n\tconst chartRef = useRef< HTMLDivElement >( null );\n\tconst selectedBarRef = useRef< HTMLDivElement | null >( null );\n\n\t// Use @visx/tooltip hooks for tooltip positioning\n\tconst { tooltipData, tooltipLeft, tooltipTop, tooltipOpen, showTooltip, hideTooltip } =\n\t\tuseTooltip();\n\n\t// Use custom hook for selection management\n\tconst { handleBarClick, handleBarKeyDown, clearSelection, getStepState } =\n\t\tuseFunnelSelection( hideTooltip );\n\tconst { containerRef: portalContainerRef, TooltipInPortal } = useTooltipInPortal( {\n\t\t// use TooltipWithBounds for boundary detection\n\t\tdetectBounds: true,\n\t\t// when tooltip containers are scrolled, this will correctly update the Tooltip position\n\t\tscroll: true,\n\t} );\n\n\t// Wrapper to clear selectedBarRef after clearing selection\n\tconst clearSelectionAndRef = useCallback( () => {\n\t\tclearSelection();\n\t\tselectedBarRef.current = null;\n\t\thideTooltip();\n\t}, [ clearSelection, hideTooltip ] );\n\n\t// Helper function to show tooltip at specific coordinates\n\tconst showTooltipAt = useCallback(\n\t\t( step: FunnelStep, x: number, y: number ) => {\n\t\t\tshowTooltip( {\n\t\t\t\ttooltipData: step,\n\t\t\t\ttooltipLeft: x,\n\t\t\t\ttooltipTop: y - 10,\n\t\t\t} );\n\t\t},\n\t\t[ showTooltip ]\n\t);\n\n\t// Helper function to get tooltip coordinates for mouse events\n\tconst getMouseTooltipCoords = useCallback( ( event: React.MouseEvent ) => {\n\t\tconst containerElement = chartRef.current;\n\t\tif ( containerElement ) {\n\t\t\tconst coords = localPoint( containerElement, event.nativeEvent );\n\t\t\tif ( coords ) {\n\t\t\t\treturn { x: coords.x, y: coords.y };\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}, [] );\n\n\t// Helper function to get tooltip coordinates for keyboard events\n\tconst getKeyboardTooltipCoords = useCallback( ( event: React.KeyboardEvent ) => {\n\t\tconst rect = event.currentTarget.getBoundingClientRect();\n\t\tconst containerElement = chartRef.current;\n\t\tif ( containerElement ) {\n\t\t\tconst containerRect = containerElement.getBoundingClientRect();\n\t\t\tconst x = rect.left + rect.width / 2 - containerRect.left;\n\t\t\tconst y = rect.top - containerRect.top;\n\t\t\treturn { x, y };\n\t\t}\n\t\treturn null;\n\t}, [] );\n\n\t// Helper function to handle step interaction (both click and keyboard)\n\tconst handleStepInteraction = useCallback(\n\t\t(\n\t\t\tstep: FunnelStep,\n\t\t\tevent: React.MouseEvent | React.KeyboardEvent,\n\t\t\tinteractionType: 'click' | 'keyboard'\n\t\t) => {\n\t\t\t// Store reference to the interacted element\n\t\t\tselectedBarRef.current = event.currentTarget as HTMLDivElement;\n\n\t\t\t// Check if deselecting the same step\n\t\t\tconst { isClicked } = getStepState( step.id );\n\t\t\tif ( isClicked ) {\n\t\t\t\t// Deselecting - clear selection (tooltip will be hidden by hook)\n\t\t\t\tif ( interactionType === 'click' ) {\n\t\t\t\t\thandleBarClick( step.id );\n\t\t\t\t} else {\n\t\t\t\t\thandleBarKeyDown( step.id, event as React.KeyboardEvent );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Selecting - handle selection and show tooltip\n\t\t\tif ( interactionType === 'click' ) {\n\t\t\t\thandleBarClick( step.id );\n\t\t\t\tconst coords = getMouseTooltipCoords( event as React.MouseEvent );\n\t\t\t\tif ( coords ) {\n\t\t\t\t\tshowTooltipAt( step, coords.x, coords.y );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thandleBarKeyDown( step.id, event as React.KeyboardEvent );\n\t\t\t\tconst coords = getKeyboardTooltipCoords( event as React.KeyboardEvent );\n\t\t\t\tif ( coords ) {\n\t\t\t\t\tshowTooltipAt( step, coords.x, coords.y );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tgetStepState,\n\t\t\thandleBarClick,\n\t\t\thandleBarKeyDown,\n\t\t\tshowTooltipAt,\n\t\t\tgetMouseTooltipCoords,\n\t\t\tgetKeyboardTooltipCoords,\n\t\t]\n\t);\n\n\t// Create handler factories to avoid arrow functions in JSX\n\tconst stepHandlers = useMemo( () => {\n\t\tconst handlers = new Map<\n\t\t\tstring,\n\t\t\t{\n\t\t\t\tonClick: ( event: React.MouseEvent ) => void;\n\t\t\t\tonKeyDown: ( event: React.KeyboardEvent ) => void;\n\t\t\t}\n\t\t>();\n\n\t\tsteps.forEach( step => {\n\t\t\tconst onClick = ( event: React.MouseEvent ) => {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\thandleStepInteraction( step, event, 'click' );\n\t\t\t};\n\n\t\t\tconst onKeyDown = ( event: React.KeyboardEvent ) => {\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\thandleStepInteraction( step, event, 'keyboard' );\n\t\t\t\t} else {\n\t\t\t\t\t// For other keys (like Escape), just handle the selection\n\t\t\t\t\tselectedBarRef.current = event.currentTarget as HTMLDivElement;\n\t\t\t\t\thandleBarKeyDown( step.id, event );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\thandlers.set( step.id, { onClick, onKeyDown } );\n\t\t} );\n\n\t\treturn handlers;\n\t}, [ steps, handleStepInteraction, handleBarKeyDown ] );\n\n\t// Handle document-level click to clear selection when clicking outside selected bar\n\tuseEffect( () => {\n\t\tconst handleDocumentClick = ( event: MouseEvent ) => {\n\t\t\t// Only clear selection if there's an active selection and click is outside the selected bar\n\t\t\tif ( selectedBarRef.current && ! selectedBarRef.current.contains( event.target as Node ) ) {\n\t\t\t\tclearSelectionAndRef();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener( 'mousedown', handleDocumentClick );\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener( 'mousedown', handleDocumentClick );\n\t\t};\n\t}, [ clearSelectionAndRef ] );\n\n\t// Get component settings from theme with fallbacks\n\tconst {\n\t\tprimaryColor: barColor,\n\t\tbackgroundColor,\n\t\tpositiveChangeColor,\n\t\tnegativeChangeColor,\n\t} = conversionFunnelChartSettings;\n\n\t// Determine change indicator color\n\tconst isPositiveChange = changeIndicator?.startsWith( '+' );\n\tconst changeColor = isPositiveChange ? positiveChangeColor : negativeChangeColor;\n\n\t// Create light background version of primary color if not set\n\tconst barBackgroundColor = backgroundColor || hexToRgba( barColor, 0.08 );\n\n\t// Default main metric rendering function\n\tconst renderDefaultMainMetric = () => (\n\t\t<>\n\t\t\t<span className={ styles[ 'main-rate' ] }>{ formatPercentage( mainRate ) }</span>\n\t\t\t{ changeIndicator && (\n\t\t\t\t<span className={ styles[ 'change-indicator' ] } style={ { color: changeColor } }>\n\t\t\t\t\t{ changeIndicator }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</>\n\t);\n\n\t// Default tooltip rendering function\n\tconst renderDefaultTooltip = ( step: FunnelStep ) => (\n\t\t<>\n\t\t\t<div className={ styles[ 'tooltip-title' ] }>{ step.label }</div>\n\t\t\t<div className={ styles[ 'tooltip-content' ] }>\n\t\t\t\t{ formatPercentage( step.rate ) }\n\t\t\t\t{ step.count && ` • ${ step.count.toLocaleString() } items` }\n\t\t\t</div>\n\t\t</>\n\t);\n\n\t// Validate data\n\tconst isDataValid = Boolean( steps && steps.length > 0 );\n\n\t// Memoize metadata to prevent unnecessary re-registration\n\tconst chartMetadata = useMemo(\n\t\t() => ( {\n\t\t\tmainRate,\n\t\t\tchangeIndicator,\n\t\t\tstepsCount: steps?.length || 0,\n\t\t} ),\n\t\t[ mainRate, changeIndicator, steps?.length ]\n\t);\n\n\tuseChartRegistration( {\n\t\tchartId,\n\t\tlegendItems: [],\n\t\tchartType: 'conversion-funnel',\n\t\tisDataValid,\n\t\tmetadata: chartMetadata,\n\t} );\n\n\t// Handle empty or undefined data\n\tif ( ! isDataValid ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( styles.conversionFunnelChart, loading && styles.loading, className ) }\n\t\t\t\tstyle={ style }\n\t\t\t>\n\t\t\t\t<div className={ styles[ 'empty-state' ] }>\n\t\t\t\t\t{ loading ? 'Loading...' : 'No data available' }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Calculate bar heights relative to the maximum (first step)\n\tconst maxRate = Math.max( ...steps.map( step => step.rate ) );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={ node => {\n\t\t\t\t\t// Set containerRef for @visx coordinate system\n\t\t\t\t\tportalContainerRef( node );\n\t\t\t\t\tchartRef.current = node;\n\t\t\t\t} }\n\t\t\t\tclassName={ clsx( styles.conversionFunnelChart, loading && styles.loading, className ) }\n\t\t\t\tstyle={ style }\n\t\t\t>\n\t\t\t\t{ /* Main Metric */ }\n\t\t\t\t{ renderMainMetric ? (\n\t\t\t\t\trenderMainMetric( {\n\t\t\t\t\t\tmainRate,\n\t\t\t\t\t\tchangeIndicator,\n\t\t\t\t\t\tclassName: styles[ 'main-metric' ],\n\t\t\t\t\t\tchangeColor,\n\t\t\t\t\t} )\n\t\t\t\t) : (\n\t\t\t\t\t<div className={ styles[ 'main-metric' ] }>{ renderDefaultMainMetric() }</div>\n\t\t\t\t) }\n\n\t\t\t\t{ /* Funnel Steps */ }\n\t\t\t\t<div className={ styles[ 'funnel-container' ] }>\n\t\t\t\t\t{ steps.map( ( step, index ) => {\n\t\t\t\t\t\tconst barHeight = ( step.rate / maxRate ) * 100;\n\t\t\t\t\t\tconst { isBlurred } = getStepState( step.id );\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={ step.id }\n\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'funnel-step' ], isBlurred && styles.blurred ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ /* Step Label and Rate */ }\n\t\t\t\t\t\t\t\t<div className={ styles[ 'step-header' ] }>\n\t\t\t\t\t\t\t\t\t{ renderStepLabel ? (\n\t\t\t\t\t\t\t\t\t\trenderStepLabel( {\n\t\t\t\t\t\t\t\t\t\t\tstep,\n\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\tclassName: styles[ 'step-label' ],\n\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<span className={ styles[ 'step-label' ] }>{ step.label }</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ renderStepRate ? (\n\t\t\t\t\t\t\t\t\t\trenderStepRate( {\n\t\t\t\t\t\t\t\t\t\t\tstep,\n\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\tclassName: styles[ 'step-rate' ],\n\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<span className={ styles[ 'step-rate' ] }>\n\t\t\t\t\t\t\t\t\t\t\t{ formatPercentage( step.rate ) }\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{ /* Funnel Bar */ }\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'bar-container' ], isBlurred && styles.disabled ) }\n\t\t\t\t\t\t\t\t\tonClick={ stepHandlers.get( step.id )?.onClick }\n\t\t\t\t\t\t\t\t\tonKeyDown={ stepHandlers.get( step.id )?.onKeyDown }\n\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={ isBlurred ? -1 : 0 }\n\t\t\t\t\t\t\t\t\taria-label={ step.label }\n\t\t\t\t\t\t\t\t\tstyle={ { backgroundColor: barBackgroundColor } }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'funnel-bar' ], {\n\t\t\t\t\t\t\t\t\t\t\t[ styles[ 'funnel-bar__animated' ] ]: animation && ! loading,\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\t\t\theight: `${ barHeight }%`,\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: barColor,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{ /* Tooltip Portal */ }\n\t\t\t{ tooltipOpen &&\n\t\t\t\ttooltipData &&\n\t\t\t\t( () => {\n\t\t\t\t\tconst tooltipContent = renderTooltip\n\t\t\t\t\t\t? renderTooltip( {\n\t\t\t\t\t\t\t\tstep: tooltipData as FunnelStep,\n\t\t\t\t\t\t\t\tindex: steps.findIndex( s => s.id === ( tooltipData as FunnelStep ).id ),\n\t\t\t\t\t\t\t\ttop: tooltipTop,\n\t\t\t\t\t\t\t\tleft: tooltipLeft,\n\t\t\t\t\t\t\t\tclassName: styles[ 'tooltip-wrapper' ],\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: renderDefaultTooltip( tooltipData as FunnelStep );\n\n\t\t\t\t\t// Don't render tooltip if renderTooltip returns falsy\n\t\t\t\t\tif ( ! tooltipContent ) return null;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TooltipInPortal\n\t\t\t\t\t\t\t// set this to random so it correctly updates with parent bounds\n\t\t\t\t\t\t\tkey={ Math.random() }\n\t\t\t\t\t\t\ttop={ tooltipTop }\n\t\t\t\t\t\t\tleft={ tooltipLeft }\n\t\t\t\t\t\t\tclassName={ styles[ 'tooltip-wrapper' ] }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ tooltipContent }\n\t\t\t\t\t\t</TooltipInPortal>\n\t\t\t\t\t);\n\t\t\t\t} )() }\n\t\t</>\n\t);\n};\n\n/**\n * ConversionFunnelChart component with provider wrapper\n *\n * @param props - Component props\n * @return JSX element representing the conversion funnel chart\n */\nconst ConversionFunnelChartWithProvider: FC< ConversionFunnelChartProps > = props => {\n\tconst existingContext = useContext( GlobalChartsContext );\n\n\t// If we're already in a GlobalChartsProvider context, don't create a new one\n\tif ( existingContext ) {\n\t\treturn <ConversionFunnelChartInternal { ...props } />;\n\t}\n\n\t// Otherwise, create our own GlobalChartsProvider\n\treturn (\n\t\t<GlobalChartsProvider>\n\t\t\t<ConversionFunnelChartInternal { ...props } />\n\t\t</GlobalChartsProvider>\n\t);\n};\n\nConversionFunnelChartWithProvider.displayName = 'ConversionFunnelChart';\n\nexport { ConversionFunnelChartWithProvider as default };\n","import 'css-chunk:src/components/conversion-funnel-chart/conversion-funnel-chart.module.scss';export default {\n \"conversionFunnelChart\": \"a8ccharts--9Qsb0\",\n \"loading\": \"a8ccharts-Kw-iZo\",\n \"main-metric\": \"a8ccharts-8mIwVL\",\n \"main-rate\": \"a8ccharts-D93Ubo\",\n \"change-indicator\": \"a8ccharts-QWypVS\",\n \"funnel-container\": \"a8ccharts-RR7xaC\",\n \"funnel-step\": \"a8ccharts-VIVztE\",\n \"blurred\": \"a8ccharts-Ax4cuC\",\n \"step-header\": \"a8ccharts-bUrZ0x\",\n \"step-label\": \"a8ccharts-SCy8FA\",\n \"step-rate\": \"a8ccharts-A0irBo\",\n \"bar-container\": \"a8ccharts-5Dl5-j\",\n \"disabled\": \"a8ccharts-Reovk6\",\n \"funnel-bar\": \"a8ccharts-tG5m3L\",\n \"selected\": \"a8ccharts-W40FYh\",\n \"tooltip-wrapper\": \"a8ccharts-NohPt6\",\n \"tooltip-title\": \"a8ccharts-hjZr33\",\n \"tooltip-content\": \"a8ccharts-ocwAPj\",\n \"empty-state\": \"a8ccharts-9c0psv\",\n \"funnel-bar__animated\": \"a8ccharts-wvCpVT\",\n \"stretch\": \"a8ccharts-4otxiv\"\n};","import { useCallback, useState } from 'react';\n\n/**\n * Custom hook to manage funnel bar selection state and interactions\n * @param hideTooltip - Function to hide tooltip when selection is cleared\n * @return Object containing selection state and event handlers\n */\nexport const useFunnelSelection = ( hideTooltip?: () => void ) => {\n\tconst [ clickedStep, setClickedStep ] = useState< string | null >( null );\n\n\t// Handle bar click\n\tconst handleBarClick = useCallback(\n\t\t( stepId: string ) => {\n\t\t\tif ( clickedStep === stepId ) {\n\t\t\t\t// If clicking the same step, deselect it\n\t\t\t\tsetClickedStep( null );\n\t\t\t\thideTooltip?.();\n\t\t\t} else {\n\t\t\t\t// Otherwise, select this step\n\t\t\t\tsetClickedStep( stepId );\n\t\t\t}\n\t\t},\n\t\t[ clickedStep, hideTooltip ]\n\t);\n\n\t// Handle bar keydown\n\tconst handleBarKeyDown = useCallback(\n\t\t( stepId: string, event: React.KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( clickedStep === stepId ) {\n\t\t\t\t\tsetClickedStep( null );\n\t\t\t\t\thideTooltip?.();\n\t\t\t\t} else {\n\t\t\t\t\tsetClickedStep( stepId );\n\t\t\t\t}\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetClickedStep( null );\n\t\t\t\thideTooltip?.();\n\t\t\t}\n\t\t},\n\t\t[ clickedStep, hideTooltip ]\n\t);\n\n\t// Clear selection (for chart-level click)\n\tconst clearSelection = useCallback( () => {\n\t\tsetClickedStep( null );\n\t\thideTooltip?.();\n\t}, [ hideTooltip ] );\n\n\t// Get step state helpers\n\tconst getStepState = useCallback(\n\t\t( stepId: string ) => ( {\n\t\t\tisClicked: clickedStep === stepId,\n\t\t\tisBlurred: clickedStep !== null && clickedStep !== stepId,\n\t\t} ),\n\t\t[ clickedStep ]\n\t);\n\n\treturn {\n\t\tclickedStep,\n\t\thandleBarClick,\n\t\thandleBarKeyDown,\n\t\tclearSelection,\n\t\tgetStepState,\n\t};\n};\n"]}
@@ -35,7 +35,11 @@ var _react = require('react');
35
35
  // src/components/bar-chart/bar-chart.module.scss
36
36
  var bar_chart_module_default = {
37
37
  "bar-chart": "a8ccharts-lmYNi-",
38
- "bar-chart-legend": "a8ccharts-vgKKqG"
38
+ "bar-chart-legend": "a8ccharts-vgKKqG",
39
+ "bar-chart__animated": "a8ccharts-vHWVsO",
40
+ "rise": "a8ccharts-wCPctT",
41
+ "bar-chart__animated-horizontal": "a8ccharts-3kCz4q",
42
+ "stretch": "a8ccharts-MtfGVm"
39
43
  };
40
44
 
41
45
  // src/components/bar-chart/private/use-bar-chart-options.ts
@@ -176,6 +180,7 @@ var BarChartInternal = ({
176
180
  withPatterns = false,
177
181
  showZeroValues = false,
178
182
  legendInteractive = false,
183
+ animation,
179
184
  children
180
185
  }) => {
181
186
  const horizontal = orientation === "horizontal";
@@ -343,7 +348,9 @@ var BarChartInternal = ({
343
348
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
344
349
  "div",
345
350
  {
346
- className: _clsx2.default.call(void 0, "bar-chart", bar_chart_module_default["bar-chart"], className),
351
+ className: _clsx2.default.call(void 0, "bar-chart", bar_chart_module_default["bar-chart"], className, {
352
+ [bar_chart_module_default[`bar-chart__animated${horizontal ? "-horizontal" : ""}`]]: animation
353
+ }),
347
354
  "data-testid": "bar-chart",
348
355
  role: "grid",
349
356
  "aria-label": _i18n.__.call(void 0, "Bar chart", "jetpack-charts"),
@@ -488,4 +495,4 @@ var BarChartResponsive = _chunkLSGYIUQXcjs.attachSubComponents.call(void 0,
488
495
 
489
496
 
490
497
  exports.BarChart = BarChart; exports.BarChartResponsive = BarChartResponsive;
491
- //# sourceMappingURL=chunk-CNAKHZMW.cjs.map
498
+ //# sourceMappingURL=chunk-KC3ITX3B.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-KC3ITX3B.cjs","../src/components/bar-chart/bar-chart.tsx","../src/components/bar-chart/bar-chart.module.scss","../src/components/bar-chart/private/use-bar-chart-options.ts"],"names":["useMemo"],"mappings":"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","file":"/home/runner/work/jetpack/jetpack/projects/js-packages/charts/dist/chunk-KC3ITX3B.cjs","sourcesContent":[null,"import { PatternLines, PatternCircles, PatternWaves, PatternHexagons } from '@visx/pattern';\nimport { Axis, BarSeries, BarGroup, Grid, XYChart } from '@visx/xychart';\nimport { __ } from '@wordpress/i18n';\nimport clsx from 'clsx';\nimport { useCallback, useContext, useState, useRef, useMemo } from 'react';\nimport {\n\tuseXYChartTheme,\n\tuseChartDataTransform,\n\tuseZeroValueDisplay,\n\tuseChartMargin,\n\tuseElementHeight,\n} from '../../hooks';\nimport {\n\tGlobalChartsProvider,\n\tuseChartId,\n\tuseChartRegistration,\n\tuseGlobalChartsContext,\n\tuseGlobalChartsTheme,\n\tGlobalChartsContext,\n} from '../../providers';\nimport { attachSubComponents } from '../../utils';\nimport { Legend, useChartLegendItems } from '../legend';\nimport { SingleChartContext } from '../private/single-chart-context';\nimport { withResponsive } from '../private/with-responsive';\nimport { AccessibleTooltip, useKeyboardNavigation } from '../tooltip';\nimport styles from './bar-chart.module.scss';\nimport { useBarChartOptions } from './private';\nimport type { BaseChartProps, DataPointDate, SeriesData, Optional } from '../../types';\nimport type { ResponsiveConfig } from '../private/with-responsive';\nimport type { RenderTooltipParams } from '@visx/xychart/lib/components/Tooltip';\nimport type { FC, ReactNode, ComponentType } from 'react';\n\nexport interface BarChartProps extends BaseChartProps< SeriesData[] > {\n\trenderTooltip?: ( params: RenderTooltipParams< DataPointDate > ) => ReactNode;\n\torientation?: 'horizontal' | 'vertical';\n\twithPatterns?: boolean;\n\tshowZeroValues?: boolean;\n\tlegendInteractive?: boolean;\n\tchildren?: ReactNode;\n}\n\n// Base props type with optional responsive properties\ntype BarChartBaseProps = Optional< BarChartProps, 'width' | 'height' | 'size' >;\n\n// Composition API types\ninterface BarChartSubComponents {\n\tLegend: ComponentType< React.ComponentProps< typeof Legend > >;\n}\n\ntype BarChartComponent = FC< BarChartBaseProps > & BarChartSubComponents;\ntype BarChartResponsiveComponent = FC< BarChartBaseProps & ResponsiveConfig > &\n\tBarChartSubComponents;\n\n// Validation function similar to LineChart\nconst validateData = ( data: SeriesData[] ) => {\n\tif ( ! data?.length ) return 'No data available';\n\n\tconst hasInvalidData = data.some( series =>\n\t\tseries.data.some(\n\t\t\tpoint =>\n\t\t\t\tisNaN( point.value as number ) ||\n\t\t\t\tpoint.value === null ||\n\t\t\t\tpoint.value === undefined ||\n\t\t\t\t( ! point.label &&\n\t\t\t\t\t( ! ( 'date' in point && point.date ) || isNaN( point.date.getTime() ) ) )\n\t\t)\n\t);\n\n\tif ( hasInvalidData ) return 'Invalid data';\n\treturn null;\n};\n\nconst getPatternId = ( chartId: string, index: number ) => `bar-pattern-${ chartId }-${ index }`;\n\nconst BarChartInternal: FC< BarChartProps > = ( {\n\tdata,\n\tchartId: providedChartId,\n\twidth,\n\theight = 400,\n\tclassName,\n\tmargin,\n\twithTooltips = false,\n\tshowLegend = false,\n\tlegendOrientation = 'horizontal',\n\tlegendPosition = 'bottom',\n\tlegendAlignment = 'center',\n\tlegendMaxWidth,\n\tlegendTextOverflow = 'wrap',\n\tlegendItemClassName,\n\tlegendShape = 'rect',\n\tgridVisibility: gridVisibilityProp,\n\trenderTooltip,\n\toptions = {},\n\torientation = 'vertical',\n\twithPatterns = false,\n\tshowZeroValues = false,\n\tlegendInteractive = false,\n\tanimation,\n\tchildren,\n} ) => {\n\tconst horizontal = orientation === 'horizontal';\n\tconst chartId = useChartId( providedChartId );\n\tconst theme = useXYChartTheme( data );\n\n\tconst dataSorted = useChartDataTransform( data );\n\n\t// Transform data to add a small value for zero bars to make them visible\n\tconst dataWithVisibleZeros = useZeroValueDisplay( dataSorted, {\n\t\tenabled: showZeroValues,\n\t} );\n\n\t// Create legend items using the reusable hook\n\tconst legendItems = useChartLegendItems( dataSorted );\n\tconst chartOptions = useBarChartOptions( dataWithVisibleZeros, horizontal, options );\n\tconst defaultMargin = useChartMargin( height, chartOptions, dataSorted, theme, horizontal );\n\tconst [ legendRef, legendHeight ] = useElementHeight< HTMLDivElement >();\n\tconst chartRef = useRef< HTMLDivElement >( null );\n\tconst [ selectedIndex, setSelectedIndex ] = useState< number | undefined >( undefined );\n\tconst [ isNavigating, setIsNavigating ] = useState( false );\n\n\tconst totalPoints =\n\t\tMath.max( 0, ...data.map( series => series.data?.length || 0 ) ) * data.length;\n\n\t// Use the keyboard navigation hook\n\tconst { tooltipRef, onChartFocus, onChartBlur, onChartKeyDown } = useKeyboardNavigation( {\n\t\tselectedIndex,\n\t\tsetSelectedIndex,\n\t\tisNavigating,\n\t\tsetIsNavigating,\n\t\tchartRef,\n\t\ttotalPoints,\n\t} );\n\n\tconst { getElementStyles, isSeriesVisible } = useGlobalChartsContext();\n\tconst providerTheme = useGlobalChartsTheme();\n\n\t// Add visibility information to series when using interactive legends\n\tconst seriesWithVisibility = useMemo( () => {\n\t\tif ( ! chartId || ! legendInteractive ) {\n\t\t\treturn dataWithVisibleZeros.map( ( series, index ) => ( {\n\t\t\t\tseries,\n\t\t\t\tindex,\n\t\t\t\tisVisible: true,\n\t\t\t} ) );\n\t\t}\n\t\treturn dataWithVisibleZeros.map( ( series, index ) => ( {\n\t\t\tseries,\n\t\t\tindex,\n\t\t\tisVisible: isSeriesVisible( chartId, series.label ),\n\t\t} ) );\n\t}, [ dataWithVisibleZeros, chartId, isSeriesVisible, legendInteractive ] );\n\n\t// Check if all series are hidden\n\tconst allSeriesHidden = useMemo( () => {\n\t\treturn seriesWithVisibility.every( ( { isVisible } ) => ! isVisible );\n\t}, [ seriesWithVisibility ] );\n\n\tconst getBarBackground = useCallback(\n\t\t( index: number ) => () =>\n\t\t\twithPatterns\n\t\t\t\t? `url(#${ getPatternId( chartId, index ) })`\n\t\t\t\t: getElementStyles( { data: dataSorted[ index ], index } ).color,\n\t\t[ withPatterns, getElementStyles, dataSorted, chartId ]\n\t);\n\n\tconst renderDefaultTooltip = useCallback(\n\t\t( { tooltipData }: RenderTooltipParams< DataPointDate > ) => {\n\t\t\tconst nearestDatum = tooltipData?.nearestDatum?.datum;\n\t\t\tif ( ! nearestDatum ) return null;\n\n\t\t\treturn (\n\t\t\t\t<div className={ styles[ 'bar-chart__tooltip' ] }>\n\t\t\t\t\t<div className={ styles[ 'bar-chart__tooltip-header' ] }>\n\t\t\t\t\t\t{ tooltipData?.nearestDatum?.key }\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={ styles[ 'bar-chart__tooltip-row' ] }>\n\t\t\t\t\t\t<span className={ styles[ 'bar-chart__tooltip-label' ] }>\n\t\t\t\t\t\t\t{ chartOptions.tooltip.labelFormatter(\n\t\t\t\t\t\t\t\tnearestDatum.label || ( nearestDatum.date ? nearestDatum.date.getTime() : 0 ),\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t[]\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className={ styles[ 'bar-chart__tooltip-value' ] }>{ nearestDatum.value }</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[ chartOptions.tooltip ]\n\t);\n\n\tconst renderPattern = useCallback(\n\t\t( index: number, color: string ) => {\n\t\t\tconst patternType = index % 4;\n\t\t\tconst id = getPatternId( chartId, index );\n\t\t\tconst commonProps = {\n\t\t\t\tid,\n\t\t\t\tstroke: 'white',\n\t\t\t\tstrokeWidth: 1,\n\t\t\t\tbackground: color,\n\t\t\t};\n\n\t\t\tswitch ( patternType ) {\n\t\t\t\tcase 0:\n\t\t\t\tdefault:\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<PatternLines\n\t\t\t\t\t\t\tkey={ id }\n\t\t\t\t\t\t\t{ ...commonProps }\n\t\t\t\t\t\t\twidth={ 5 }\n\t\t\t\t\t\t\theight={ 5 }\n\t\t\t\t\t\t\torientation={ [ 'diagonal' ] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\tcase 1:\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<PatternCircles key={ id } { ...commonProps } width={ 6 } height={ 6 } fill=\"white\" />\n\t\t\t\t\t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn <PatternWaves key={ id } { ...commonProps } width={ 4 } height={ 4 } />;\n\t\t\t\tcase 3:\n\t\t\t\t\treturn <PatternHexagons key={ id } { ...commonProps } size={ 8 } height={ 3 } />;\n\t\t\t}\n\t\t},\n\t\t[ chartId ]\n\t);\n\n\tconst createPatternBorderStyle = useCallback(\n\t\t( index: number, color: string ) => {\n\t\t\tconst patternId = getPatternId( chartId, index );\n\t\t\treturn `\n\t\t\t.visx-bar[fill=\"url(#${ patternId })\"] {\n\t\t\t\tstroke: ${ color };\n\t\t\t\tstroke-width: 1;\n\t\t\t\t}\n\t\t\t`;\n\t\t},\n\t\t[ chartId ]\n\t);\n\n\tconst createKeyboardHighlightStyle = useCallback( () => {\n\t\tif ( selectedIndex === undefined ) return '';\n\n\t\t// Calculate which bar should be highlighted based on selectedIndex\n\t\t// Pattern: [series1[0], series2[0], series3[0], series1[1], series2[1], series3[1], ...]\n\t\tconst maxDataPoints = Math.max( ...data.map( s => s.data.length ) );\n\t\tconst dataPointIndex = Math.floor( selectedIndex / data.length );\n\t\tconst seriesIndex = selectedIndex % data.length;\n\n\t\t// Only highlight if we're within valid bounds\n\t\tif ( dataPointIndex >= maxDataPoints || seriesIndex >= data.length ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst seriesData = data[ seriesIndex ];\n\t\tif ( dataPointIndex >= seriesData.data.length ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Based on the DOM structure analysis:\n\t\t// - All bars are in a single .visx-bar-group\n\t\t// - Bars are ordered as: [series1[0], series1[1], series2[0], series2[1], ...]\n\t\t// - So we need to calculate the actual bar index in the DOM\n\t\tconst actualBarIndex = seriesIndex * maxDataPoints + dataPointIndex;\n\n\t\t// Use a CSS class selector instead of ID since useId() generates invalid CSS ID characters\n\t\tconst generatedStyles = `\n\t\t\t.bar-chart[data-chart-id=\"bar-chart-${ chartId }\"] .visx-bar-group .visx-bar:nth-child(${\n\t\t\t\tactualBarIndex + 1\n\t\t\t}) {\n\t\t\t\tstroke: #005fcc;\n\t\t\t\tstroke-width: 2px;\n\t\t\t}\n\t\t`;\n\n\t\treturn generatedStyles;\n\t}, [ selectedIndex, data, chartId ] );\n\n\t// Validate data first\n\tconst error = validateData( dataSorted );\n\tconst isDataValid = ! error;\n\n\t// Memoize metadata to prevent unnecessary re-registration\n\tconst chartMetadata = useMemo(\n\t\t() => ( {\n\t\t\torientation,\n\t\t\twithPatterns,\n\t\t} ),\n\t\t[ orientation, withPatterns ]\n\t);\n\n\t// Register chart with context only if data is valid\n\tuseChartRegistration( {\n\t\tchartId,\n\t\tlegendItems,\n\t\tchartType: 'bar',\n\t\tisDataValid,\n\t\tmetadata: chartMetadata,\n\t} );\n\n\tif ( error ) {\n\t\treturn <div className={ clsx( 'bar-chart', styles[ 'bar-chart' ] ) }>{ error }</div>;\n\t}\n\n\tconst gridVisibility = gridVisibilityProp ?? chartOptions.gridVisibility;\n\tconst highlightedBarStyle = createKeyboardHighlightStyle();\n\n\treturn (\n\t\t<SingleChartContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tchartId,\n\t\t\t\tchartWidth: width,\n\t\t\t\tchartHeight: height - ( showLegend ? legendHeight : 0 ),\n\t\t\t} }\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={ clsx( 'bar-chart', styles[ 'bar-chart' ], className, {\n\t\t\t\t\t[ styles[ `bar-chart__animated${ horizontal ? '-horizontal' : '' }` ] ]: animation,\n\t\t\t\t} ) }\n\t\t\t\tdata-testid=\"bar-chart\"\n\t\t\t\trole=\"grid\"\n\t\t\t\taria-label={ __( 'Bar chart', 'jetpack-charts' ) }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: showLegend && legendPosition === 'top' ? 'column-reverse' : 'column',\n\t\t\t\t} }\n\t\t\t\ttabIndex={ 0 }\n\t\t\t\tonKeyDown={ onChartKeyDown }\n\t\t\t\tonFocus={ onChartFocus }\n\t\t\t\tonBlur={ onChartBlur }\n\t\t\t\tref={ chartRef }\n\t\t\t\tdata-chart-id={ `bar-chart-${ chartId }` } // Unique ID for the chart\n\t\t\t>\n\t\t\t\t<XYChart\n\t\t\t\t\ttheme={ theme }\n\t\t\t\t\twidth={ width }\n\t\t\t\t\theight={ height - ( showLegend ? legendHeight : 0 ) }\n\t\t\t\t\tmargin={ {\n\t\t\t\t\t\t...defaultMargin,\n\t\t\t\t\t\t...margin,\n\t\t\t\t\t\t...( showLegend && legendPosition === 'top'\n\t\t\t\t\t\t\t? { top: ( defaultMargin.top || 0 ) + legendHeight }\n\t\t\t\t\t\t\t: {} ),\n\t\t\t\t\t} }\n\t\t\t\t\txScale={ chartOptions.xScale }\n\t\t\t\t\tyScale={ chartOptions.yScale }\n\t\t\t\t\thorizontal={ horizontal }\n\t\t\t\t\tpointerEventsDataKey=\"nearest\"\n\t\t\t\t>\n\t\t\t\t\t<Grid\n\t\t\t\t\t\tcolumns={ gridVisibility.includes( 'y' ) }\n\t\t\t\t\t\trows={ gridVisibility.includes( 'x' ) }\n\t\t\t\t\t\tnumTicks={ 4 }\n\t\t\t\t\t/>\n\n\t\t\t\t\t{ withPatterns && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<defs data-testid=\"bar-chart-patterns\">\n\t\t\t\t\t\t\t\t{ dataSorted.map( ( seriesData, index ) =>\n\t\t\t\t\t\t\t\t\trenderPattern( index, getElementStyles( { data: seriesData, index } ).color )\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t{ dataSorted.map( ( seriesData, index ) =>\n\t\t\t\t\t\t\t\t\tcreatePatternBorderStyle(\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tgetElementStyles( { data: seriesData, index } ).color\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ highlightedBarStyle && <style>{ highlightedBarStyle }</style> }\n\n\t\t\t\t\t{ allSeriesHidden ? (\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tx={ width / 2 }\n\t\t\t\t\t\t\ty={ ( height - ( showLegend ? legendHeight : 0 ) ) / 2 }\n\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\tfill={ providerTheme.gridStyles?.stroke || '#ccc' }\n\t\t\t\t\t\t\tfontSize=\"14\"\n\t\t\t\t\t\t\tfontFamily=\"-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'All series are hidden. Click legend items to show data.', 'jetpack-charts' ) }\n\t\t\t\t\t\t</text>\n\t\t\t\t\t) : null }\n\n\t\t\t\t\t<BarGroup padding={ chartOptions.barGroup.padding }>\n\t\t\t\t\t\t{ seriesWithVisibility.map( ( { series: seriesData, index, isVisible } ) => {\n\t\t\t\t\t\t\t// Skip rendering invisible series\n\t\t\t\t\t\t\tif ( ! isVisible ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<BarSeries\n\t\t\t\t\t\t\t\t\tkey={ seriesData?.label }\n\t\t\t\t\t\t\t\t\tdataKey={ seriesData?.label }\n\t\t\t\t\t\t\t\t\tdata={ seriesData.data as DataPointDate[] }\n\t\t\t\t\t\t\t\t\tyAccessor={ chartOptions.accessors.yAccessor }\n\t\t\t\t\t\t\t\t\txAccessor={ chartOptions.accessors.xAccessor }\n\t\t\t\t\t\t\t\t\tcolorAccessor={ getBarBackground( index ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</BarGroup>\n\n\t\t\t\t\t<Axis { ...chartOptions.axis.x } />\n\t\t\t\t\t<Axis { ...chartOptions.axis.y } />\n\n\t\t\t\t\t{ withTooltips && (\n\t\t\t\t\t\t<AccessibleTooltip\n\t\t\t\t\t\t\tdetectBounds\n\t\t\t\t\t\t\tsnapTooltipToDatumX\n\t\t\t\t\t\t\tsnapTooltipToDatumY\n\t\t\t\t\t\t\trenderTooltip={ renderTooltip || renderDefaultTooltip }\n\t\t\t\t\t\t\tselectedIndex={ selectedIndex }\n\t\t\t\t\t\t\ttooltipRef={ tooltipRef }\n\t\t\t\t\t\t\tkeyboardFocusedClassName={ styles[ 'bar-chart__tooltip--keyboard-focused' ] }\n\t\t\t\t\t\t\tseries={ data }\n\t\t\t\t\t\t\tmode=\"individual\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</XYChart>\n\n\t\t\t\t{ showLegend && (\n\t\t\t\t\t<Legend\n\t\t\t\t\t\torientation={ legendOrientation }\n\t\t\t\t\t\tposition={ legendPosition }\n\t\t\t\t\t\talignment={ legendAlignment }\n\t\t\t\t\t\tmaxWidth={ legendMaxWidth }\n\t\t\t\t\t\ttextOverflow={ legendTextOverflow }\n\t\t\t\t\t\tlegendItemClassName={ legendItemClassName }\n\t\t\t\t\t\tclassName={ styles[ 'bar-chart__legend' ] }\n\t\t\t\t\t\tshape={ legendShape }\n\t\t\t\t\t\tref={ legendRef }\n\t\t\t\t\t\tchartId={ chartId }\n\t\t\t\t\t\tinteractive={ legendInteractive }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ children }\n\t\t\t</div>\n\t\t</SingleChartContext.Provider>\n\t);\n};\n\nconst BarChartWithProvider: FC< BarChartProps > = props => {\n\tconst existingContext = useContext( GlobalChartsContext );\n\n\t// If we're already in a GlobalChartsProvider context, don't create a new one\n\tif ( existingContext ) {\n\t\treturn <BarChartInternal { ...props } />;\n\t}\n\n\t// Otherwise, create our own GlobalChartsProvider\n\treturn (\n\t\t<GlobalChartsProvider>\n\t\t\t<BarChartInternal { ...props } />\n\t\t</GlobalChartsProvider>\n\t);\n};\n\nBarChartWithProvider.displayName = 'BarChart';\n\n// Create BarChart with composition API\nconst BarChart = attachSubComponents( BarChartWithProvider, {\n\tLegend: Legend,\n} ) as BarChartComponent;\n\n// Create responsive BarChart with composition API\nconst BarChartResponsive = attachSubComponents(\n\twithResponsive< BarChartProps >( BarChartWithProvider ),\n\t{\n\t\tLegend: Legend,\n\t}\n) as BarChartResponsiveComponent;\n\nexport { BarChartResponsive as default, BarChart as BarChartUnresponsive };\n","import 'css-chunk:src/components/bar-chart/bar-chart.module.scss';export default {\n \"bar-chart\": \"a8ccharts-lmYNi-\",\n \"bar-chart-legend\": \"a8ccharts-vgKKqG\",\n \"bar-chart__animated\": \"a8ccharts-vHWVsO\",\n \"rise\": \"a8ccharts-wCPctT\",\n \"bar-chart__animated-horizontal\": \"a8ccharts-3kCz4q\",\n \"stretch\": \"a8ccharts-MtfGVm\"\n};","import { formatNumberCompact } from '@automattic/number-formatters';\nimport { useMemo } from 'react';\nimport type { EnhancedDataPoint } from '../../../hooks/use-zero-value-display';\nimport type { DataPointDate, BaseChartProps, SeriesData } from '../../../types';\nimport type { TickFormatter } from '@visx/axis';\n\nconst formatDateTick = ( timestamp: number ) => {\n\tconst date = new Date( timestamp );\n\treturn date.toLocaleDateString( undefined, {\n\t\tmonth: 'short',\n\t\tday: 'numeric',\n\t} );\n};\n\n/**\n * Get the group padding of a scale.\n *\n * @param scale - The scale to get the group padding of.\n * @return The group padding of the scale.\n */\nconst getGroupPadding = ( scale: Record< string, unknown > ): number => {\n\treturn typeof scale.paddingInner === 'number' ? ( scale.paddingInner as number ) : 0;\n};\n\n/**\n * Returns the merged options for the bar chart, including axis and scale configuration based on the orientation.\n *\n * @param data - The data to be displayed in the chart.\n * @param horizontal - Whether the chart is horizontal or vertical.\n * @param options - The options for the chart.\n * @return The merged options for the chart.\n */\nexport function useBarChartOptions(\n\tdata: SeriesData[],\n\thorizontal: boolean,\n\toptions: BaseChartProps[ 'options' ] = {}\n) {\n\tconst defaultOptions = useMemo( () => {\n\t\tconst bandScale = {\n\t\t\ttype: 'band' as const,\n\t\t\tpadding: 0.2,\n\t\t\tpaddingInner: 0.1,\n\t\t};\n\t\tconst linearScale = {\n\t\t\ttype: 'linear' as const,\n\t\t\tnice: true,\n\t\t\tzero: false,\n\t\t};\n\n\t\tconst labelFormatter = data?.[ 0 ]?.data?.[ 0 ]?.label\n\t\t\t? ( label: string ) => label\n\t\t\t: formatDateTick;\n\t\tconst valueFormatter = formatNumberCompact as TickFormatter< unknown >;\n\n\t\tconst labelAccessor = ( d: DataPointDate ) => d?.label || d?.date;\n\t\tconst valueAccessor = ( d: DataPointDate | EnhancedDataPoint ) => {\n\t\t\t// Use visualValue for bar rendering if available (for zero values), otherwise use value\n\t\t\tconst enhancedPoint = d as EnhancedDataPoint;\n\t\t\treturn enhancedPoint?.visualValue !== undefined ? enhancedPoint.visualValue : d?.value;\n\t\t};\n\n\t\treturn {\n\t\t\tvertical: {\n\t\t\t\txTickFormat: labelFormatter,\n\t\t\t\tyTickFormat: valueFormatter,\n\t\t\t\ttooltipLabelFormatter: labelFormatter,\n\t\t\t\txAccessor: labelAccessor,\n\t\t\t\tyAccessor: valueAccessor,\n\t\t\t\tgridVisibility: 'x',\n\t\t\t\txScale: bandScale,\n\t\t\t\tyScale: linearScale,\n\t\t\t},\n\t\t\thorizontal: {\n\t\t\t\txTickFormat: valueFormatter,\n\t\t\t\tyTickFormat: labelFormatter,\n\t\t\t\ttooltipLabelFormatter: labelFormatter,\n\t\t\t\txAccessor: valueAccessor,\n\t\t\t\tyAccessor: labelAccessor,\n\t\t\t\tgridVisibility: 'y',\n\t\t\t\txScale: linearScale,\n\t\t\t\tyScale: bandScale,\n\t\t\t},\n\t\t};\n\t}, [ data ] );\n\n\treturn useMemo( () => {\n\t\tconst orientationKey = horizontal ? 'horizontal' : 'vertical';\n\t\tconst {\n\t\t\txTickFormat,\n\t\t\tyTickFormat,\n\t\t\ttooltipLabelFormatter: defaultTooltipLabelFormatter,\n\t\t\txAccessor,\n\t\t\tyAccessor,\n\t\t\tgridVisibility,\n\t\t\txScale: baseXScale,\n\t\t\tyScale: baseYScale,\n\t\t} = defaultOptions[ orientationKey ];\n\n\t\tconst xScale = { ...baseXScale, ...( options.xScale || {} ) };\n\t\tconst yScale = { ...baseYScale, ...( options.yScale || {} ) };\n\t\tconst providedToolTipLabelFormatter = horizontal\n\t\t\t? options.axis?.y?.tickFormat\n\t\t\t: options.axis?.x?.tickFormat;\n\n\t\treturn {\n\t\t\tgridVisibility,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\taccessors: {\n\t\t\t\txAccessor,\n\t\t\t\tyAccessor,\n\t\t\t},\n\t\t\taxis: {\n\t\t\t\tx: {\n\t\t\t\t\torientation: 'bottom' as const,\n\t\t\t\t\tnumTicks: 4,\n\t\t\t\t\ttickFormat: xTickFormat,\n\t\t\t\t\t...( options.axis?.x || {} ),\n\t\t\t\t},\n\t\t\t\ty: {\n\t\t\t\t\torientation: 'left' as const,\n\t\t\t\t\tnumTicks: 4,\n\t\t\t\t\ttickFormat: yTickFormat,\n\t\t\t\t\t...( options.axis?.y || {} ),\n\t\t\t\t},\n\t\t\t},\n\t\t\tbarGroup: {\n\t\t\t\tpadding: getGroupPadding( horizontal ? yScale : xScale ),\n\t\t\t},\n\t\t\ttooltip: {\n\t\t\t\tlabelFormatter: providedToolTipLabelFormatter || defaultTooltipLabelFormatter,\n\t\t\t},\n\t\t};\n\t}, [ defaultOptions, options, horizontal ] );\n}\n"]}
@@ -34,7 +34,9 @@ var conversion_funnel_chart_module_default = {
34
34
  "tooltip-wrapper": "a8ccharts-NohPt6",
35
35
  "tooltip-title": "a8ccharts-hjZr33",
36
36
  "tooltip-content": "a8ccharts-ocwAPj",
37
- "empty-state": "a8ccharts-9c0psv"
37
+ "empty-state": "a8ccharts-9c0psv",
38
+ "funnel-bar__animated": "a8ccharts-wvCpVT",
39
+ "stretch": "a8ccharts-4otxiv"
38
40
  };
39
41
 
40
42
  // src/components/conversion-funnel-chart/private/use-funnel-selection.ts
@@ -97,6 +99,7 @@ var ConversionFunnelChartInternal = ({
97
99
  changeIndicator,
98
100
  steps,
99
101
  loading = false,
102
+ animation,
100
103
  className,
101
104
  chartId: providedChartId,
102
105
  style,
@@ -315,7 +318,9 @@ var ConversionFunnelChartInternal = ({
315
318
  children: /* @__PURE__ */ jsx(
316
319
  "div",
317
320
  {
318
- className: conversion_funnel_chart_module_default["funnel-bar"],
321
+ className: clsx(conversion_funnel_chart_module_default["funnel-bar"], {
322
+ [conversion_funnel_chart_module_default["funnel-bar__animated"]]: animation && !loading
323
+ }),
319
324
  style: {
320
325
  height: `${barHeight}%`,
321
326
  backgroundColor: barColor
@@ -366,4 +371,4 @@ ConversionFunnelChartWithProvider.displayName = "ConversionFunnelChart";
366
371
  export {
367
372
  ConversionFunnelChartWithProvider
368
373
  };
369
- //# sourceMappingURL=chunk-KEBKTDOQ.js.map
374
+ //# sourceMappingURL=chunk-MCFIVI3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/conversion-funnel-chart/conversion-funnel-chart.tsx","../src/components/conversion-funnel-chart/conversion-funnel-chart.module.scss","../src/components/conversion-funnel-chart/private/use-funnel-selection.ts"],"sourcesContent":["import { localPoint } from '@visx/event';\nimport { useTooltip, useTooltipInPortal } from '@visx/tooltip';\nimport clsx from 'clsx';\nimport { type FC, useRef, useMemo, useEffect, useCallback, useContext } from 'react';\nimport {\n\tGlobalChartsProvider,\n\tGlobalChartsContext,\n\tuseChartId,\n\tuseChartRegistration,\n\tuseGlobalChartsTheme,\n} from '../../providers';\nimport { hexToRgba, formatPercentage } from '../../utils';\nimport styles from './conversion-funnel-chart.module.scss';\nimport { useFunnelSelection } from './private';\nimport type { FunnelStep, ConversionFunnelChartProps } from './types';\n\n/**\n * Internal ConversionFunnelChart component with chart registration\n *\n * @param props - Component props\n * @param props.chartId - Optional unique identifier for the chart\n * @param props.mainRate - Main conversion rate to highlight\n * @param props.changeIndicator - Change indicator (e.g., +2%, -1.5%)\n * @param props.steps - Array of funnel steps\n * @param props.loading - Whether the chart is in loading state\n * @param props.animation - Whether to show chart animation on initial render or not\n * @param props.className - Additional CSS class name\n * @param props.style - Custom styling\n * @param props.renderStepLabel - Custom render function for step labels\n * @param props.renderStepRate - Custom render function for step rates\n * @param props.renderMainMetric - Custom render function for the entire main metric section\n * @param props.renderTooltip - Custom render function for tooltip content\n * @return JSX element representing the conversion funnel chart\n */\nconst ConversionFunnelChartInternal: FC< ConversionFunnelChartProps > = ( {\n\tmainRate,\n\tchangeIndicator,\n\tsteps,\n\tloading = false,\n\tanimation,\n\tclassName,\n\tchartId: providedChartId,\n\tstyle,\n\trenderStepLabel,\n\trenderStepRate,\n\trenderMainMetric,\n\trenderTooltip,\n} ) => {\n\tconst chartId = useChartId( providedChartId );\n\tconst { conversionFunnelChart: conversionFunnelChartSettings } = useGlobalChartsTheme();\n\tconst chartRef = useRef< HTMLDivElement >( null );\n\tconst selectedBarRef = useRef< HTMLDivElement | null >( null );\n\n\t// Use @visx/tooltip hooks for tooltip positioning\n\tconst { tooltipData, tooltipLeft, tooltipTop, tooltipOpen, showTooltip, hideTooltip } =\n\t\tuseTooltip();\n\n\t// Use custom hook for selection management\n\tconst { handleBarClick, handleBarKeyDown, clearSelection, getStepState } =\n\t\tuseFunnelSelection( hideTooltip );\n\tconst { containerRef: portalContainerRef, TooltipInPortal } = useTooltipInPortal( {\n\t\t// use TooltipWithBounds for boundary detection\n\t\tdetectBounds: true,\n\t\t// when tooltip containers are scrolled, this will correctly update the Tooltip position\n\t\tscroll: true,\n\t} );\n\n\t// Wrapper to clear selectedBarRef after clearing selection\n\tconst clearSelectionAndRef = useCallback( () => {\n\t\tclearSelection();\n\t\tselectedBarRef.current = null;\n\t\thideTooltip();\n\t}, [ clearSelection, hideTooltip ] );\n\n\t// Helper function to show tooltip at specific coordinates\n\tconst showTooltipAt = useCallback(\n\t\t( step: FunnelStep, x: number, y: number ) => {\n\t\t\tshowTooltip( {\n\t\t\t\ttooltipData: step,\n\t\t\t\ttooltipLeft: x,\n\t\t\t\ttooltipTop: y - 10,\n\t\t\t} );\n\t\t},\n\t\t[ showTooltip ]\n\t);\n\n\t// Helper function to get tooltip coordinates for mouse events\n\tconst getMouseTooltipCoords = useCallback( ( event: React.MouseEvent ) => {\n\t\tconst containerElement = chartRef.current;\n\t\tif ( containerElement ) {\n\t\t\tconst coords = localPoint( containerElement, event.nativeEvent );\n\t\t\tif ( coords ) {\n\t\t\t\treturn { x: coords.x, y: coords.y };\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}, [] );\n\n\t// Helper function to get tooltip coordinates for keyboard events\n\tconst getKeyboardTooltipCoords = useCallback( ( event: React.KeyboardEvent ) => {\n\t\tconst rect = event.currentTarget.getBoundingClientRect();\n\t\tconst containerElement = chartRef.current;\n\t\tif ( containerElement ) {\n\t\t\tconst containerRect = containerElement.getBoundingClientRect();\n\t\t\tconst x = rect.left + rect.width / 2 - containerRect.left;\n\t\t\tconst y = rect.top - containerRect.top;\n\t\t\treturn { x, y };\n\t\t}\n\t\treturn null;\n\t}, [] );\n\n\t// Helper function to handle step interaction (both click and keyboard)\n\tconst handleStepInteraction = useCallback(\n\t\t(\n\t\t\tstep: FunnelStep,\n\t\t\tevent: React.MouseEvent | React.KeyboardEvent,\n\t\t\tinteractionType: 'click' | 'keyboard'\n\t\t) => {\n\t\t\t// Store reference to the interacted element\n\t\t\tselectedBarRef.current = event.currentTarget as HTMLDivElement;\n\n\t\t\t// Check if deselecting the same step\n\t\t\tconst { isClicked } = getStepState( step.id );\n\t\t\tif ( isClicked ) {\n\t\t\t\t// Deselecting - clear selection (tooltip will be hidden by hook)\n\t\t\t\tif ( interactionType === 'click' ) {\n\t\t\t\t\thandleBarClick( step.id );\n\t\t\t\t} else {\n\t\t\t\t\thandleBarKeyDown( step.id, event as React.KeyboardEvent );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Selecting - handle selection and show tooltip\n\t\t\tif ( interactionType === 'click' ) {\n\t\t\t\thandleBarClick( step.id );\n\t\t\t\tconst coords = getMouseTooltipCoords( event as React.MouseEvent );\n\t\t\t\tif ( coords ) {\n\t\t\t\t\tshowTooltipAt( step, coords.x, coords.y );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thandleBarKeyDown( step.id, event as React.KeyboardEvent );\n\t\t\t\tconst coords = getKeyboardTooltipCoords( event as React.KeyboardEvent );\n\t\t\t\tif ( coords ) {\n\t\t\t\t\tshowTooltipAt( step, coords.x, coords.y );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tgetStepState,\n\t\t\thandleBarClick,\n\t\t\thandleBarKeyDown,\n\t\t\tshowTooltipAt,\n\t\t\tgetMouseTooltipCoords,\n\t\t\tgetKeyboardTooltipCoords,\n\t\t]\n\t);\n\n\t// Create handler factories to avoid arrow functions in JSX\n\tconst stepHandlers = useMemo( () => {\n\t\tconst handlers = new Map<\n\t\t\tstring,\n\t\t\t{\n\t\t\t\tonClick: ( event: React.MouseEvent ) => void;\n\t\t\t\tonKeyDown: ( event: React.KeyboardEvent ) => void;\n\t\t\t}\n\t\t>();\n\n\t\tsteps.forEach( step => {\n\t\t\tconst onClick = ( event: React.MouseEvent ) => {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\thandleStepInteraction( step, event, 'click' );\n\t\t\t};\n\n\t\t\tconst onKeyDown = ( event: React.KeyboardEvent ) => {\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\thandleStepInteraction( step, event, 'keyboard' );\n\t\t\t\t} else {\n\t\t\t\t\t// For other keys (like Escape), just handle the selection\n\t\t\t\t\tselectedBarRef.current = event.currentTarget as HTMLDivElement;\n\t\t\t\t\thandleBarKeyDown( step.id, event );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\thandlers.set( step.id, { onClick, onKeyDown } );\n\t\t} );\n\n\t\treturn handlers;\n\t}, [ steps, handleStepInteraction, handleBarKeyDown ] );\n\n\t// Handle document-level click to clear selection when clicking outside selected bar\n\tuseEffect( () => {\n\t\tconst handleDocumentClick = ( event: MouseEvent ) => {\n\t\t\t// Only clear selection if there's an active selection and click is outside the selected bar\n\t\t\tif ( selectedBarRef.current && ! selectedBarRef.current.contains( event.target as Node ) ) {\n\t\t\t\tclearSelectionAndRef();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener( 'mousedown', handleDocumentClick );\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener( 'mousedown', handleDocumentClick );\n\t\t};\n\t}, [ clearSelectionAndRef ] );\n\n\t// Get component settings from theme with fallbacks\n\tconst {\n\t\tprimaryColor: barColor,\n\t\tbackgroundColor,\n\t\tpositiveChangeColor,\n\t\tnegativeChangeColor,\n\t} = conversionFunnelChartSettings;\n\n\t// Determine change indicator color\n\tconst isPositiveChange = changeIndicator?.startsWith( '+' );\n\tconst changeColor = isPositiveChange ? positiveChangeColor : negativeChangeColor;\n\n\t// Create light background version of primary color if not set\n\tconst barBackgroundColor = backgroundColor || hexToRgba( barColor, 0.08 );\n\n\t// Default main metric rendering function\n\tconst renderDefaultMainMetric = () => (\n\t\t<>\n\t\t\t<span className={ styles[ 'main-rate' ] }>{ formatPercentage( mainRate ) }</span>\n\t\t\t{ changeIndicator && (\n\t\t\t\t<span className={ styles[ 'change-indicator' ] } style={ { color: changeColor } }>\n\t\t\t\t\t{ changeIndicator }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</>\n\t);\n\n\t// Default tooltip rendering function\n\tconst renderDefaultTooltip = ( step: FunnelStep ) => (\n\t\t<>\n\t\t\t<div className={ styles[ 'tooltip-title' ] }>{ step.label }</div>\n\t\t\t<div className={ styles[ 'tooltip-content' ] }>\n\t\t\t\t{ formatPercentage( step.rate ) }\n\t\t\t\t{ step.count && ` • ${ step.count.toLocaleString() } items` }\n\t\t\t</div>\n\t\t</>\n\t);\n\n\t// Validate data\n\tconst isDataValid = Boolean( steps && steps.length > 0 );\n\n\t// Memoize metadata to prevent unnecessary re-registration\n\tconst chartMetadata = useMemo(\n\t\t() => ( {\n\t\t\tmainRate,\n\t\t\tchangeIndicator,\n\t\t\tstepsCount: steps?.length || 0,\n\t\t} ),\n\t\t[ mainRate, changeIndicator, steps?.length ]\n\t);\n\n\tuseChartRegistration( {\n\t\tchartId,\n\t\tlegendItems: [],\n\t\tchartType: 'conversion-funnel',\n\t\tisDataValid,\n\t\tmetadata: chartMetadata,\n\t} );\n\n\t// Handle empty or undefined data\n\tif ( ! isDataValid ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( styles.conversionFunnelChart, loading && styles.loading, className ) }\n\t\t\t\tstyle={ style }\n\t\t\t>\n\t\t\t\t<div className={ styles[ 'empty-state' ] }>\n\t\t\t\t\t{ loading ? 'Loading...' : 'No data available' }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Calculate bar heights relative to the maximum (first step)\n\tconst maxRate = Math.max( ...steps.map( step => step.rate ) );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={ node => {\n\t\t\t\t\t// Set containerRef for @visx coordinate system\n\t\t\t\t\tportalContainerRef( node );\n\t\t\t\t\tchartRef.current = node;\n\t\t\t\t} }\n\t\t\t\tclassName={ clsx( styles.conversionFunnelChart, loading && styles.loading, className ) }\n\t\t\t\tstyle={ style }\n\t\t\t>\n\t\t\t\t{ /* Main Metric */ }\n\t\t\t\t{ renderMainMetric ? (\n\t\t\t\t\trenderMainMetric( {\n\t\t\t\t\t\tmainRate,\n\t\t\t\t\t\tchangeIndicator,\n\t\t\t\t\t\tclassName: styles[ 'main-metric' ],\n\t\t\t\t\t\tchangeColor,\n\t\t\t\t\t} )\n\t\t\t\t) : (\n\t\t\t\t\t<div className={ styles[ 'main-metric' ] }>{ renderDefaultMainMetric() }</div>\n\t\t\t\t) }\n\n\t\t\t\t{ /* Funnel Steps */ }\n\t\t\t\t<div className={ styles[ 'funnel-container' ] }>\n\t\t\t\t\t{ steps.map( ( step, index ) => {\n\t\t\t\t\t\tconst barHeight = ( step.rate / maxRate ) * 100;\n\t\t\t\t\t\tconst { isBlurred } = getStepState( step.id );\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={ step.id }\n\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'funnel-step' ], isBlurred && styles.blurred ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ /* Step Label and Rate */ }\n\t\t\t\t\t\t\t\t<div className={ styles[ 'step-header' ] }>\n\t\t\t\t\t\t\t\t\t{ renderStepLabel ? (\n\t\t\t\t\t\t\t\t\t\trenderStepLabel( {\n\t\t\t\t\t\t\t\t\t\t\tstep,\n\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\tclassName: styles[ 'step-label' ],\n\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<span className={ styles[ 'step-label' ] }>{ step.label }</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ renderStepRate ? (\n\t\t\t\t\t\t\t\t\t\trenderStepRate( {\n\t\t\t\t\t\t\t\t\t\t\tstep,\n\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\tclassName: styles[ 'step-rate' ],\n\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<span className={ styles[ 'step-rate' ] }>\n\t\t\t\t\t\t\t\t\t\t\t{ formatPercentage( step.rate ) }\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{ /* Funnel Bar */ }\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'bar-container' ], isBlurred && styles.disabled ) }\n\t\t\t\t\t\t\t\t\tonClick={ stepHandlers.get( step.id )?.onClick }\n\t\t\t\t\t\t\t\t\tonKeyDown={ stepHandlers.get( step.id )?.onKeyDown }\n\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={ isBlurred ? -1 : 0 }\n\t\t\t\t\t\t\t\t\taria-label={ step.label }\n\t\t\t\t\t\t\t\t\tstyle={ { backgroundColor: barBackgroundColor } }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={ clsx( styles[ 'funnel-bar' ], {\n\t\t\t\t\t\t\t\t\t\t\t[ styles[ 'funnel-bar__animated' ] ]: animation && ! loading,\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\t\t\theight: `${ barHeight }%`,\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: barColor,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{ /* Tooltip Portal */ }\n\t\t\t{ tooltipOpen &&\n\t\t\t\ttooltipData &&\n\t\t\t\t( () => {\n\t\t\t\t\tconst tooltipContent = renderTooltip\n\t\t\t\t\t\t? renderTooltip( {\n\t\t\t\t\t\t\t\tstep: tooltipData as FunnelStep,\n\t\t\t\t\t\t\t\tindex: steps.findIndex( s => s.id === ( tooltipData as FunnelStep ).id ),\n\t\t\t\t\t\t\t\ttop: tooltipTop,\n\t\t\t\t\t\t\t\tleft: tooltipLeft,\n\t\t\t\t\t\t\t\tclassName: styles[ 'tooltip-wrapper' ],\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: renderDefaultTooltip( tooltipData as FunnelStep );\n\n\t\t\t\t\t// Don't render tooltip if renderTooltip returns falsy\n\t\t\t\t\tif ( ! tooltipContent ) return null;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TooltipInPortal\n\t\t\t\t\t\t\t// set this to random so it correctly updates with parent bounds\n\t\t\t\t\t\t\tkey={ Math.random() }\n\t\t\t\t\t\t\ttop={ tooltipTop }\n\t\t\t\t\t\t\tleft={ tooltipLeft }\n\t\t\t\t\t\t\tclassName={ styles[ 'tooltip-wrapper' ] }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ tooltipContent }\n\t\t\t\t\t\t</TooltipInPortal>\n\t\t\t\t\t);\n\t\t\t\t} )() }\n\t\t</>\n\t);\n};\n\n/**\n * ConversionFunnelChart component with provider wrapper\n *\n * @param props - Component props\n * @return JSX element representing the conversion funnel chart\n */\nconst ConversionFunnelChartWithProvider: FC< ConversionFunnelChartProps > = props => {\n\tconst existingContext = useContext( GlobalChartsContext );\n\n\t// If we're already in a GlobalChartsProvider context, don't create a new one\n\tif ( existingContext ) {\n\t\treturn <ConversionFunnelChartInternal { ...props } />;\n\t}\n\n\t// Otherwise, create our own GlobalChartsProvider\n\treturn (\n\t\t<GlobalChartsProvider>\n\t\t\t<ConversionFunnelChartInternal { ...props } />\n\t\t</GlobalChartsProvider>\n\t);\n};\n\nConversionFunnelChartWithProvider.displayName = 'ConversionFunnelChart';\n\nexport { ConversionFunnelChartWithProvider as default };\n","import 'css-chunk:src/components/conversion-funnel-chart/conversion-funnel-chart.module.scss';export default {\n \"conversionFunnelChart\": \"a8ccharts--9Qsb0\",\n \"loading\": \"a8ccharts-Kw-iZo\",\n \"main-metric\": \"a8ccharts-8mIwVL\",\n \"main-rate\": \"a8ccharts-D93Ubo\",\n \"change-indicator\": \"a8ccharts-QWypVS\",\n \"funnel-container\": \"a8ccharts-RR7xaC\",\n \"funnel-step\": \"a8ccharts-VIVztE\",\n \"blurred\": \"a8ccharts-Ax4cuC\",\n \"step-header\": \"a8ccharts-bUrZ0x\",\n \"step-label\": \"a8ccharts-SCy8FA\",\n \"step-rate\": \"a8ccharts-A0irBo\",\n \"bar-container\": \"a8ccharts-5Dl5-j\",\n \"disabled\": \"a8ccharts-Reovk6\",\n \"funnel-bar\": \"a8ccharts-tG5m3L\",\n \"selected\": \"a8ccharts-W40FYh\",\n \"tooltip-wrapper\": \"a8ccharts-NohPt6\",\n \"tooltip-title\": \"a8ccharts-hjZr33\",\n \"tooltip-content\": \"a8ccharts-ocwAPj\",\n \"empty-state\": \"a8ccharts-9c0psv\",\n \"funnel-bar__animated\": \"a8ccharts-wvCpVT\",\n \"stretch\": \"a8ccharts-4otxiv\"\n};","import { useCallback, useState } from 'react';\n\n/**\n * Custom hook to manage funnel bar selection state and interactions\n * @param hideTooltip - Function to hide tooltip when selection is cleared\n * @return Object containing selection state and event handlers\n */\nexport const useFunnelSelection = ( hideTooltip?: () => void ) => {\n\tconst [ clickedStep, setClickedStep ] = useState< string | null >( null );\n\n\t// Handle bar click\n\tconst handleBarClick = useCallback(\n\t\t( stepId: string ) => {\n\t\t\tif ( clickedStep === stepId ) {\n\t\t\t\t// If clicking the same step, deselect it\n\t\t\t\tsetClickedStep( null );\n\t\t\t\thideTooltip?.();\n\t\t\t} else {\n\t\t\t\t// Otherwise, select this step\n\t\t\t\tsetClickedStep( stepId );\n\t\t\t}\n\t\t},\n\t\t[ clickedStep, hideTooltip ]\n\t);\n\n\t// Handle bar keydown\n\tconst handleBarKeyDown = useCallback(\n\t\t( stepId: string, event: React.KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( clickedStep === stepId ) {\n\t\t\t\t\tsetClickedStep( null );\n\t\t\t\t\thideTooltip?.();\n\t\t\t\t} else {\n\t\t\t\t\tsetClickedStep( stepId );\n\t\t\t\t}\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetClickedStep( null );\n\t\t\t\thideTooltip?.();\n\t\t\t}\n\t\t},\n\t\t[ clickedStep, hideTooltip ]\n\t);\n\n\t// Clear selection (for chart-level click)\n\tconst clearSelection = useCallback( () => {\n\t\tsetClickedStep( null );\n\t\thideTooltip?.();\n\t}, [ hideTooltip ] );\n\n\t// Get step state helpers\n\tconst getStepState = useCallback(\n\t\t( stepId: string ) => ( {\n\t\t\tisClicked: clickedStep === stepId,\n\t\t\tisBlurred: clickedStep !== null && clickedStep !== stepId,\n\t\t} ),\n\t\t[ clickedStep ]\n\t);\n\n\treturn {\n\t\tclickedStep,\n\t\thandleBarClick,\n\t\thandleBarKeyDown,\n\t\tclearSelection,\n\t\tgetStepState,\n\t};\n};\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -75,7 +75,9 @@ var line_chart_module_default = {
75
75
  "line-chart__annotation-label-popover--safari": "a8ccharts-i3NHTh",
76
76
  "line-chart__annotation-label-popover-header": "a8ccharts-OwypoS",
77
77
  "line-chart__annotation-label-popover-content": "a8ccharts-vtgQtP",
78
- "line-chart__annotation-label-popover-close-button": "a8ccharts-i8KUcG"
78
+ "line-chart__annotation-label-popover-close-button": "a8ccharts-i8KUcG",
79
+ "line-chart__animated": "a8ccharts-Hj6YbD",
80
+ "rise": "a8ccharts-gb7M8E"
79
81
  };
80
82
 
81
83
  // src/components/line-chart/private/line-chart-annotation-label-popover.tsx
@@ -676,6 +678,7 @@ var LineChartInternal = forwardRef(
676
678
  withStartGlyphs = false,
677
679
  withEndGlyphs = false,
678
680
  legendInteractive = false,
681
+ animation,
679
682
  options = {},
680
683
  onPointerDown = void 0,
681
684
  onPointerUp = void 0,
@@ -814,7 +817,12 @@ var LineChartInternal = forwardRef(
814
817
  children: /* @__PURE__ */ jsxs3(
815
818
  "div",
816
819
  {
817
- className: clsx2("line-chart", line_chart_module_default["line-chart"], className),
820
+ className: clsx2(
821
+ "line-chart",
822
+ line_chart_module_default["line-chart"],
823
+ animation ? line_chart_module_default["line-chart__animated"] : null,
824
+ className
825
+ ),
818
826
  "data-testid": "line-chart",
819
827
  style: {
820
828
  width,
@@ -1027,4 +1035,4 @@ export {
1027
1035
  LineChart,
1028
1036
  LineChartResponsive
1029
1037
  };
1030
- //# sourceMappingURL=chunk-JGX3ZNK5.js.map
1038
+ //# sourceMappingURL=chunk-MWFUJOQX.js.map