@semcore/d3-chart 17.0.0-prerelease.31 → 17.0.0-prerelease.34

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.
package/CHANGELOG.md CHANGED
@@ -2,12 +2,22 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
- ## [17.0.0] - 2026-03-27
5
+ ## [17.0.0] - 2026-04-08
6
6
 
7
7
  ### BREAK
8
8
 
9
9
  - Removed 2px border-radius for Bars.
10
10
 
11
+ ### Changed
12
+
13
+ - Refined a11y module invocation logic
14
+
15
+ ## [16.6.0] - 2026-04-01
16
+
17
+ ### Fixed
18
+
19
+ - Bubble chart plot size calculation.
20
+
11
21
  ### Added
12
22
 
13
23
  - `percentFormatter` for Cigarette.
@@ -15,10 +25,6 @@ CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangel
15
25
  clickable.
16
26
  - `minimalBarWidth` for `Cigarette` chart.
17
27
 
18
- ### Changed
19
-
20
- - Refined a11y module invocation logic
21
-
22
28
  ## [16.5.0] - 2026-02-10
23
29
 
24
30
  ### Added
package/lib/cjs/utils.js CHANGED
@@ -199,7 +199,8 @@ const getChartDefaultColorName = index => {
199
199
  };
200
200
  exports.getChartDefaultColorName = getChartDefaultColorName;
201
201
  const getBubbleChartValueScale = (data, key) => {
202
- const z = (0, _d3Scale.scaleSqrt)().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]);
202
+ const z = (0, _d3Scale.scaleSqrt)().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]); // min/max radius
203
+
203
204
  return z;
204
205
  };
205
206
  exports.getBubbleChartValueScale = getBubbleChartValueScale;
@@ -235,7 +236,7 @@ const calculateBubbleDomain = (data, key, range) => {
235
236
  const maxValueShift = valueScale(maxestValue) * pixelRatio;
236
237
  min -= minValueShift * 2;
237
238
  max += maxValueShift * 2;
238
- return [min, max];
239
+ return [Math.floor(min), Math.floor(max)];
239
240
  };
240
241
  exports.calculateBubbleDomain = calculateBubbleDomain;
241
242
  const PlotEventEmitter = exports.PlotEventEmitter = _eventEmitter.default;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_eventEmitter","_interopRequireDefault","require","_d3Array","_d3Scale","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","exports","invert","scale","value","range","domain","paddingOuter","step","scaleQuantize","slice","reverse","definedNullData","x","y","plot","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","extent","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","Array","isArray","bisect","bisector","center","index","findIndex","keys","Object","map","_key","item","interpolateValue","lastKeyIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","result","scaleToBand","band","scaleBand","memoize","func","results","args","argsKey","join","measureText","text","fontSize","span","document","createElement","style","line","split","append","createTextNode","display","body","textWidth","offsetWidth","textHeight","offsetHeight","remove","Math","max","idCounter","uniqueId","prefix","Symbol","getChartDefaultColorName","getBubbleChartValueScale","z","scaleSqrt","el","getScatterPlotRadius","valueKey","calculateBubbleDomain","miniestValue","min","maxestValue","pixelRatio","abs","valueScale","minValueShift","maxValueShift","PlotEventEmitter","EventEmitter"],"sources":["../../src/utils.ts"],"sourcesContent":["import EventEmitter from '@semcore/core/lib/utils/eventEmitter';\nimport { extent, bisector, type Numeric } from 'd3-array';\nimport {\n scaleQuantize,\n type ScaleIdentity,\n type ScaleTime,\n type ScaleContinuousNumeric,\n type ScaleBand,\n type ScalePoint,\n type NumberValue,\n scaleBand,\n scaleSqrt,\n} from 'd3-scale';\nimport type React from 'react';\n\nexport const eventToPoint = (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => {\n const node = (event.currentTarget || event.target) as HTMLElement;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n};\n\ntype InvertableScale =\n | ScaleIdentity\n | ScaleBand<{}>\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>;\nexport const invert = <Scale extends InvertableScale = InvertableScale>(\n scale: Scale,\n value: number,\n) => {\n if ('invert' in scale && scale.invert) return scale.invert(value);\n\n const range = scale.range() as [number, number];\n const domain = scale.domain();\n if ('paddingOuter' in scale) {\n range[0] += scale.paddingOuter() * scale.step();\n range[1] -= scale.paddingOuter() * scale.step();\n }\n\n return scaleQuantize()\n .domain((range[0] <= range[1] ? range : range.slice().reverse()) as NumberValue[])\n .range((range[0] <= range[1] ? domain : domain.slice().reverse()) as number[])(value);\n};\n\nexport const definedNullData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[y] !== null;\n\nexport const definedData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;\n\nexport const scaleOfBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale, value: number) =>\n scale.bandwidth ? scale(value)! + scale.bandwidth() / 2 : scale(value);\n\nexport const minMax = <\n Key extends string = string,\n Data extends { [key: string]: Numeric | null | undefined }[] = {\n [key: string]: Numeric | null | undefined;\n }[],\n>(\n data: Data,\n key: Key,\n): [min: Data[0][Key], max: Data[0][Key]] => {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]) as any;\n }\n return extent(data, key) as any;\n};\n\nexport const getNullData = <\n Name extends string = string,\n Data extends { [name in Name]?: unknown | null } = {},\n>(\n data: Data[],\n defined: (data: Data) => boolean,\n name: Name,\n) =>\n data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n } as Data);\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, [] as Data[]);\n\ntype IndexFromDataScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>\n | ScaleBand<{}>\n | ScalePoint<{}>;\nexport const getIndexFromData = <\n Key extends string,\n Data extends {\n [key in Key]: number;\n } = { [key in Key]: number },\n Scale extends IndexFromDataScale = IndexFromDataScale,\n>(\n data: Data[],\n scale: Scale,\n key: Key,\n value: number,\n) => {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function' && Array.isArray(data)) {\n const bisect = bisector((d: { [key: string]: number }) => d[key]).center;\n return bisect(data, value);\n } else if ('step' in scale && typeof scale.step !== 'undefined' && Array.isArray(data)) { // detect bar chart\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else if ('invert' in scale && typeof scale.invert === 'function' && !Array.isArray(data)) { // detect cigarette chart\n const keys = Object.keys(data);\n const domain = keys.map((_key, index) => {\n return keys.slice(0, index).reduce((acc, item) => {\n if (data[item] !== interpolateValue) {\n acc = acc + data[item];\n }\n\n return acc;\n }, 0);\n });\n\n let key = null;\n\n const lastKeyIndex = keys.length - 1;\n\n if (value > domain[lastKeyIndex]) {\n key = keys[lastKeyIndex];\n } else {\n for (let i = 0; i < lastKeyIndex; i++) {\n if (i === 0 && value < domain[i]) {\n break;\n }\n\n if (value > domain[i] && value < domain[i + 1]) {\n key = keys[i];\n break;\n }\n }\n }\n\n return key;\n } else {\n // eslint-disable-next-line no-console\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n};\n\nexport const roundedPath = (\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n) => {\n let result = `M${x + r},${y}`;\n result += `h${w - 2 * r}`;\n if (tr) {\n result += `a${r},${r} 0 0 1 ${r},${r}`;\n } else {\n result += `h${r}`;\n result += `v${r}`;\n }\n result += `v${h - 2 * r}`;\n if (br) {\n result += `a${r},${r} 0 0 1 ${-r},${r}`;\n } else {\n result += `v${r}`;\n result += `h${-r}`;\n }\n result += `h${2 * r - w}`;\n if (bl) {\n result += `a${r},${r} 0 0 1 ${-r},${-r}`;\n } else {\n result += `h${-r}`;\n result += `v${-r}`;\n }\n result += `v${2 * r - h}`;\n if (tl) {\n result += `a${r},${r} 0 0 1 ${r},${-r}`;\n } else {\n result += `v${-r}`;\n result += `h${r}`;\n }\n result += 'z';\n return result;\n};\n\nexport const scaleToBand = (scale: ScaleBand<{}>) => {\n if ('bandwidth' in scale) {\n return scale;\n }\n\n const band = scaleBand()\n .range((scale as any).range())\n .domain((scale as any).domain());\n\n return band;\n};\n\nexport const memoize = <Func extends (...args: any[]) => any>(func: Func): Func => {\n const results: { [cacheKey: string]: any } = {};\n return ((...args: any[]) => {\n const argsKey = args.join(',');\n if (!results[argsKey]) {\n results[argsKey] = func(...args);\n }\n return results[argsKey];\n }) as Func;\n};\n\nexport const measureText = memoize((text: string, fontSize?: number) => {\n if (!text) return 0;\n\n const span = document.createElement('span');\n if (fontSize) {\n span.style.fontSize = `${fontSize}px`;\n }\n for (const line of text.split('\\n')) {\n span.append(document.createTextNode(line));\n span.append(document.createElement('br'));\n }\n span.style.display = 'inline-block';\n document.body.append(span);\n const textWidth = span.offsetWidth;\n const textHeight = span.offsetHeight;\n span.remove();\n return Math.max(textWidth, textHeight);\n});\n\nlet idCounter = 0;\nexport const uniqueId = (prefix = 'id-') => `${prefix}${idCounter++}`;\n\nexport const interpolateValue = Symbol('intergalactic-d3-chart-line-interpolate');\n\nexport const getChartDefaultColorName = (index: number) => {\n index++;\n if (index < 1) index = 1;\n if (index > 24) index %= 24;\n\n return `chart-palette-order-${index}`;\n};\n\nexport const getBubbleChartValueScale = (data: any[], key: string) => {\n const z = scaleSqrt()\n .domain([0, Math.max(...data.map((el) => el[key]))])\n .range([5.5, 50.5]);\n\n return z;\n};\n\nexport const getScatterPlotRadius = (valueKey?: string): number => {\n return valueKey !== undefined ? 12 : 5.5;\n};\n\ntype BubbleChartDataItem = {\n value: number;\n x: number;\n y: number;\n};\n\nexport const calculateBubbleDomain = (\n data: Array<BubbleChartDataItem>,\n key: 'x' | 'y',\n range: [number, number],\n): [min: number, max: number] => {\n const miniestValue = data.reduce(\n (acc, item) => {\n if (item[key] - item.value < acc.min) {\n acc.min = item[key] - item.value;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, min: data[0][key] - data[0].value },\n ).value;\n const maxestValue = data.reduce(\n (acc, item) => {\n if (item.value + item[key] > acc.max) {\n acc.max = item.value + item.x;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, max: data[0].value + data[0][key] },\n ).value;\n\n let [min, max] = minMax(data, key);\n\n const pixelRatio = Math.abs(max - min) / Math.abs(range[0] - range[1]);\n const valueScale = getBubbleChartValueScale(data, 'value');\n const minValueShift = valueScale(miniestValue) * pixelRatio;\n const maxValueShift = valueScale(maxestValue) * pixelRatio;\n min -= minValueShift * 2;\n max += maxValueShift * 2;\n\n return [min, max];\n};\n\ntype CommonEvents = {\n setTooltipVisible: (visible: boolean) => void;\n setTooltipPosition: (x: number, y: number) => void;\n};\n\ntype Events = {\n [K in keyof CommonEvents as `${K}_${string}`]: CommonEvents[K];\n};\n\nexport const PlotEventEmitter = EventEmitter<Events>;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["_eventEmitter","_interopRequireDefault","require","_d3Array","_d3Scale","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","exports","invert","scale","value","range","domain","paddingOuter","step","scaleQuantize","slice","reverse","definedNullData","x","y","plot","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","extent","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","Array","isArray","bisect","bisector","center","index","findIndex","keys","Object","map","_key","item","interpolateValue","lastKeyIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","result","scaleToBand","band","scaleBand","memoize","func","results","args","argsKey","join","measureText","text","fontSize","span","document","createElement","style","line","split","append","createTextNode","display","body","textWidth","offsetWidth","textHeight","offsetHeight","remove","Math","max","idCounter","uniqueId","prefix","Symbol","getChartDefaultColorName","getBubbleChartValueScale","z","scaleSqrt","el","getScatterPlotRadius","valueKey","calculateBubbleDomain","miniestValue","min","maxestValue","pixelRatio","abs","valueScale","minValueShift","maxValueShift","floor","PlotEventEmitter","EventEmitter"],"sources":["../../src/utils.ts"],"sourcesContent":["import EventEmitter from '@semcore/core/lib/utils/eventEmitter';\nimport { extent, bisector, type Numeric } from 'd3-array';\nimport {\n scaleQuantize,\n type ScaleIdentity,\n type ScaleTime,\n type ScaleContinuousNumeric,\n type ScaleBand,\n type ScalePoint,\n type NumberValue,\n scaleBand,\n scaleSqrt,\n} from 'd3-scale';\nimport type React from 'react';\n\nexport const eventToPoint = (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => {\n const node = (event.currentTarget || event.target) as HTMLElement;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n};\n\ntype InvertableScale =\n | ScaleIdentity\n | ScaleBand<{}>\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>;\nexport const invert = <Scale extends InvertableScale = InvertableScale>(\n scale: Scale,\n value: number,\n) => {\n if ('invert' in scale && scale.invert) return scale.invert(value);\n\n const range = scale.range() as [number, number];\n const domain = scale.domain();\n if ('paddingOuter' in scale) {\n range[0] += scale.paddingOuter() * scale.step();\n range[1] -= scale.paddingOuter() * scale.step();\n }\n\n return scaleQuantize()\n .domain((range[0] <= range[1] ? range : range.slice().reverse()) as NumberValue[])\n .range((range[0] <= range[1] ? domain : domain.slice().reverse()) as number[])(value);\n};\n\nexport const definedNullData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[y] !== null;\n\nexport const definedData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;\n\nexport const scaleOfBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale, value: number) =>\n scale.bandwidth ? scale(value)! + scale.bandwidth() / 2 : scale(value);\n\nexport const minMax = <\n Key extends string = string,\n Data extends { [key: string]: Numeric | null | undefined }[] = {\n [key: string]: Numeric | null | undefined;\n }[],\n>(\n data: Data,\n key: Key,\n): [min: Data[0][Key], max: Data[0][Key]] => {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]) as any;\n }\n return extent(data, key) as any;\n};\n\nexport const getNullData = <\n Name extends string = string,\n Data extends { [name in Name]?: unknown | null } = {},\n>(\n data: Data[],\n defined: (data: Data) => boolean,\n name: Name,\n) =>\n data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n } as Data);\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, [] as Data[]);\n\ntype IndexFromDataScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>\n | ScaleBand<{}>\n | ScalePoint<{}>;\nexport const getIndexFromData = <\n Key extends string,\n Data extends {\n [key in Key]: number;\n } = { [key in Key]: number },\n Scale extends IndexFromDataScale = IndexFromDataScale,\n>(\n data: Data[],\n scale: Scale,\n key: Key,\n value: number,\n) => {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function' && Array.isArray(data)) {\n const bisect = bisector((d: { [key: string]: number }) => d[key]).center;\n return bisect(data, value);\n } else if ('step' in scale && typeof scale.step !== 'undefined' && Array.isArray(data)) { // detect bar chart\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else if ('invert' in scale && typeof scale.invert === 'function' && !Array.isArray(data)) { // detect cigarette chart\n const keys = Object.keys(data);\n const domain = keys.map((_key, index) => {\n return keys.slice(0, index).reduce((acc, item) => {\n if (data[item] !== interpolateValue) {\n acc = acc + data[item];\n }\n\n return acc;\n }, 0);\n });\n\n let key = null;\n\n const lastKeyIndex = keys.length - 1;\n\n if (value > domain[lastKeyIndex]) {\n key = keys[lastKeyIndex];\n } else {\n for (let i = 0; i < lastKeyIndex; i++) {\n if (i === 0 && value < domain[i]) {\n break;\n }\n\n if (value > domain[i] && value < domain[i + 1]) {\n key = keys[i];\n break;\n }\n }\n }\n\n return key;\n } else {\n // eslint-disable-next-line no-console\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n};\n\nexport const roundedPath = (\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n) => {\n let result = `M${x + r},${y}`;\n result += `h${w - 2 * r}`;\n if (tr) {\n result += `a${r},${r} 0 0 1 ${r},${r}`;\n } else {\n result += `h${r}`;\n result += `v${r}`;\n }\n result += `v${h - 2 * r}`;\n if (br) {\n result += `a${r},${r} 0 0 1 ${-r},${r}`;\n } else {\n result += `v${r}`;\n result += `h${-r}`;\n }\n result += `h${2 * r - w}`;\n if (bl) {\n result += `a${r},${r} 0 0 1 ${-r},${-r}`;\n } else {\n result += `h${-r}`;\n result += `v${-r}`;\n }\n result += `v${2 * r - h}`;\n if (tl) {\n result += `a${r},${r} 0 0 1 ${r},${-r}`;\n } else {\n result += `v${-r}`;\n result += `h${r}`;\n }\n result += 'z';\n return result;\n};\n\nexport const scaleToBand = (scale: ScaleBand<{}>) => {\n if ('bandwidth' in scale) {\n return scale;\n }\n\n const band = scaleBand()\n .range((scale as any).range())\n .domain((scale as any).domain());\n\n return band;\n};\n\nexport const memoize = <Func extends (...args: any[]) => any>(func: Func): Func => {\n const results: { [cacheKey: string]: any } = {};\n return ((...args: any[]) => {\n const argsKey = args.join(',');\n if (!results[argsKey]) {\n results[argsKey] = func(...args);\n }\n return results[argsKey];\n }) as Func;\n};\n\nexport const measureText = memoize((text: string, fontSize?: number) => {\n if (!text) return 0;\n\n const span = document.createElement('span');\n if (fontSize) {\n span.style.fontSize = `${fontSize}px`;\n }\n for (const line of text.split('\\n')) {\n span.append(document.createTextNode(line));\n span.append(document.createElement('br'));\n }\n span.style.display = 'inline-block';\n document.body.append(span);\n const textWidth = span.offsetWidth;\n const textHeight = span.offsetHeight;\n span.remove();\n return Math.max(textWidth, textHeight);\n});\n\nlet idCounter = 0;\nexport const uniqueId = (prefix = 'id-') => `${prefix}${idCounter++}`;\n\nexport const interpolateValue = Symbol('intergalactic-d3-chart-line-interpolate');\n\nexport const getChartDefaultColorName = (index: number) => {\n index++;\n if (index < 1) index = 1;\n if (index > 24) index %= 24;\n\n return `chart-palette-order-${index}`;\n};\n\nexport const getBubbleChartValueScale = (data: any[], key: string) => {\n const z = scaleSqrt()\n .domain([0, Math.max(...data.map((el) => el[key]))])\n .range([5.5, 50.5]); // min/max radius\n\n return z;\n};\n\nexport const getScatterPlotRadius = (valueKey?: string): number => {\n return valueKey !== undefined ? 12 : 5.5;\n};\n\ntype BubbleChartDataItem = {\n value: number;\n x: number;\n y: number;\n};\n\nexport const calculateBubbleDomain = (\n data: Array<BubbleChartDataItem>,\n key: 'x' | 'y',\n range: [number, number],\n): [min: number, max: number] => {\n const miniestValue = data.reduce(\n (acc, item) => {\n if (item[key] - item.value < acc.min) {\n acc.min = item[key] - item.value;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, min: data[0][key] - data[0].value },\n ).value;\n const maxestValue = data.reduce(\n (acc, item) => {\n if (item.value + item[key] > acc.max) {\n acc.max = item.value + item.x;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, max: data[0].value + data[0][key] },\n ).value;\n\n let [min, max] = minMax(data, key);\n\n const pixelRatio = Math.abs(max - min) / Math.abs(range[0] - range[1]);\n const valueScale = getBubbleChartValueScale(data, 'value');\n const minValueShift = valueScale(miniestValue) * pixelRatio;\n const maxValueShift = valueScale(maxestValue) * pixelRatio;\n min -= minValueShift * 2;\n max += maxValueShift * 2;\n\n return [Math.floor(min), Math.floor(max)];\n};\n\ntype CommonEvents = {\n setTooltipVisible: (visible: boolean) => void;\n setTooltipPosition: (x: number, y: number) => void;\n};\n\ntype Events = {\n [K in keyof CommonEvents as `${K}_${string}`]: CommonEvents[K];\n};\n\nexport const PlotEventEmitter = EventEmitter<Events>;\n"],"mappings":"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","ignoreList":[]}
package/lib/es6/utils.js CHANGED
@@ -179,7 +179,8 @@ export const getChartDefaultColorName = index => {
179
179
  return `chart-palette-order-${index}`;
180
180
  };
181
181
  export const getBubbleChartValueScale = (data, key) => {
182
- const z = scaleSqrt().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]);
182
+ const z = scaleSqrt().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]); // min/max radius
183
+
183
184
  return z;
184
185
  };
185
186
  export const getScatterPlotRadius = valueKey => {
@@ -213,7 +214,7 @@ export const calculateBubbleDomain = (data, key, range) => {
213
214
  const maxValueShift = valueScale(maxestValue) * pixelRatio;
214
215
  min -= minValueShift * 2;
215
216
  max += maxValueShift * 2;
216
- return [min, max];
217
+ return [Math.floor(min), Math.floor(max)];
217
218
  };
218
219
  export const PlotEventEmitter = EventEmitter;
219
220
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["EventEmitter","extent","bisector","scaleQuantize","scaleBand","scaleSqrt","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","invert","scale","value","range","domain","paddingOuter","step","slice","reverse","definedNullData","x","y","plot","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","Array","isArray","bisect","center","index","findIndex","keys","Object","map","_key","item","interpolateValue","lastKeyIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","result","scaleToBand","band","memoize","func","results","args","argsKey","join","measureText","text","fontSize","span","document","createElement","style","line","split","append","createTextNode","display","body","textWidth","offsetWidth","textHeight","offsetHeight","remove","Math","max","idCounter","uniqueId","prefix","Symbol","getChartDefaultColorName","getBubbleChartValueScale","z","el","getScatterPlotRadius","valueKey","calculateBubbleDomain","miniestValue","min","maxestValue","pixelRatio","abs","valueScale","minValueShift","maxValueShift","PlotEventEmitter"],"sources":["../../src/utils.ts"],"sourcesContent":["import EventEmitter from '@semcore/core/lib/utils/eventEmitter';\nimport { extent, bisector, type Numeric } from 'd3-array';\nimport {\n scaleQuantize,\n type ScaleIdentity,\n type ScaleTime,\n type ScaleContinuousNumeric,\n type ScaleBand,\n type ScalePoint,\n type NumberValue,\n scaleBand,\n scaleSqrt,\n} from 'd3-scale';\nimport type React from 'react';\n\nexport const eventToPoint = (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => {\n const node = (event.currentTarget || event.target) as HTMLElement;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n};\n\ntype InvertableScale =\n | ScaleIdentity\n | ScaleBand<{}>\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>;\nexport const invert = <Scale extends InvertableScale = InvertableScale>(\n scale: Scale,\n value: number,\n) => {\n if ('invert' in scale && scale.invert) return scale.invert(value);\n\n const range = scale.range() as [number, number];\n const domain = scale.domain();\n if ('paddingOuter' in scale) {\n range[0] += scale.paddingOuter() * scale.step();\n range[1] -= scale.paddingOuter() * scale.step();\n }\n\n return scaleQuantize()\n .domain((range[0] <= range[1] ? range : range.slice().reverse()) as NumberValue[])\n .range((range[0] <= range[1] ? domain : domain.slice().reverse()) as number[])(value);\n};\n\nexport const definedNullData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[y] !== null;\n\nexport const definedData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;\n\nexport const scaleOfBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale, value: number) =>\n scale.bandwidth ? scale(value)! + scale.bandwidth() / 2 : scale(value);\n\nexport const minMax = <\n Key extends string = string,\n Data extends { [key: string]: Numeric | null | undefined }[] = {\n [key: string]: Numeric | null | undefined;\n }[],\n>(\n data: Data,\n key: Key,\n): [min: Data[0][Key], max: Data[0][Key]] => {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]) as any;\n }\n return extent(data, key) as any;\n};\n\nexport const getNullData = <\n Name extends string = string,\n Data extends { [name in Name]?: unknown | null } = {},\n>(\n data: Data[],\n defined: (data: Data) => boolean,\n name: Name,\n) =>\n data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n } as Data);\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, [] as Data[]);\n\ntype IndexFromDataScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>\n | ScaleBand<{}>\n | ScalePoint<{}>;\nexport const getIndexFromData = <\n Key extends string,\n Data extends {\n [key in Key]: number;\n } = { [key in Key]: number },\n Scale extends IndexFromDataScale = IndexFromDataScale,\n>(\n data: Data[],\n scale: Scale,\n key: Key,\n value: number,\n) => {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function' && Array.isArray(data)) {\n const bisect = bisector((d: { [key: string]: number }) => d[key]).center;\n return bisect(data, value);\n } else if ('step' in scale && typeof scale.step !== 'undefined' && Array.isArray(data)) { // detect bar chart\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else if ('invert' in scale && typeof scale.invert === 'function' && !Array.isArray(data)) { // detect cigarette chart\n const keys = Object.keys(data);\n const domain = keys.map((_key, index) => {\n return keys.slice(0, index).reduce((acc, item) => {\n if (data[item] !== interpolateValue) {\n acc = acc + data[item];\n }\n\n return acc;\n }, 0);\n });\n\n let key = null;\n\n const lastKeyIndex = keys.length - 1;\n\n if (value > domain[lastKeyIndex]) {\n key = keys[lastKeyIndex];\n } else {\n for (let i = 0; i < lastKeyIndex; i++) {\n if (i === 0 && value < domain[i]) {\n break;\n }\n\n if (value > domain[i] && value < domain[i + 1]) {\n key = keys[i];\n break;\n }\n }\n }\n\n return key;\n } else {\n // eslint-disable-next-line no-console\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n};\n\nexport const roundedPath = (\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n) => {\n let result = `M${x + r},${y}`;\n result += `h${w - 2 * r}`;\n if (tr) {\n result += `a${r},${r} 0 0 1 ${r},${r}`;\n } else {\n result += `h${r}`;\n result += `v${r}`;\n }\n result += `v${h - 2 * r}`;\n if (br) {\n result += `a${r},${r} 0 0 1 ${-r},${r}`;\n } else {\n result += `v${r}`;\n result += `h${-r}`;\n }\n result += `h${2 * r - w}`;\n if (bl) {\n result += `a${r},${r} 0 0 1 ${-r},${-r}`;\n } else {\n result += `h${-r}`;\n result += `v${-r}`;\n }\n result += `v${2 * r - h}`;\n if (tl) {\n result += `a${r},${r} 0 0 1 ${r},${-r}`;\n } else {\n result += `v${-r}`;\n result += `h${r}`;\n }\n result += 'z';\n return result;\n};\n\nexport const scaleToBand = (scale: ScaleBand<{}>) => {\n if ('bandwidth' in scale) {\n return scale;\n }\n\n const band = scaleBand()\n .range((scale as any).range())\n .domain((scale as any).domain());\n\n return band;\n};\n\nexport const memoize = <Func extends (...args: any[]) => any>(func: Func): Func => {\n const results: { [cacheKey: string]: any } = {};\n return ((...args: any[]) => {\n const argsKey = args.join(',');\n if (!results[argsKey]) {\n results[argsKey] = func(...args);\n }\n return results[argsKey];\n }) as Func;\n};\n\nexport const measureText = memoize((text: string, fontSize?: number) => {\n if (!text) return 0;\n\n const span = document.createElement('span');\n if (fontSize) {\n span.style.fontSize = `${fontSize}px`;\n }\n for (const line of text.split('\\n')) {\n span.append(document.createTextNode(line));\n span.append(document.createElement('br'));\n }\n span.style.display = 'inline-block';\n document.body.append(span);\n const textWidth = span.offsetWidth;\n const textHeight = span.offsetHeight;\n span.remove();\n return Math.max(textWidth, textHeight);\n});\n\nlet idCounter = 0;\nexport const uniqueId = (prefix = 'id-') => `${prefix}${idCounter++}`;\n\nexport const interpolateValue = Symbol('intergalactic-d3-chart-line-interpolate');\n\nexport const getChartDefaultColorName = (index: number) => {\n index++;\n if (index < 1) index = 1;\n if (index > 24) index %= 24;\n\n return `chart-palette-order-${index}`;\n};\n\nexport const getBubbleChartValueScale = (data: any[], key: string) => {\n const z = scaleSqrt()\n .domain([0, Math.max(...data.map((el) => el[key]))])\n .range([5.5, 50.5]);\n\n return z;\n};\n\nexport const getScatterPlotRadius = (valueKey?: string): number => {\n return valueKey !== undefined ? 12 : 5.5;\n};\n\ntype BubbleChartDataItem = {\n value: number;\n x: number;\n y: number;\n};\n\nexport const calculateBubbleDomain = (\n data: Array<BubbleChartDataItem>,\n key: 'x' | 'y',\n range: [number, number],\n): [min: number, max: number] => {\n const miniestValue = data.reduce(\n (acc, item) => {\n if (item[key] - item.value < acc.min) {\n acc.min = item[key] - item.value;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, min: data[0][key] - data[0].value },\n ).value;\n const maxestValue = data.reduce(\n (acc, item) => {\n if (item.value + item[key] > acc.max) {\n acc.max = item.value + item.x;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, max: data[0].value + data[0][key] },\n ).value;\n\n let [min, max] = minMax(data, key);\n\n const pixelRatio = Math.abs(max - min) / Math.abs(range[0] - range[1]);\n const valueScale = getBubbleChartValueScale(data, 'value');\n const minValueShift = valueScale(miniestValue) * pixelRatio;\n const maxValueShift = valueScale(maxestValue) * pixelRatio;\n min -= minValueShift * 2;\n max += maxValueShift * 2;\n\n return [min, max];\n};\n\ntype CommonEvents = {\n setTooltipVisible: (visible: boolean) => void;\n setTooltipPosition: (x: number, y: number) => void;\n};\n\ntype Events = {\n [K in keyof CommonEvents as `${K}_${string}`]: CommonEvents[K];\n};\n\nexport const PlotEventEmitter = EventEmitter<Events>;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["EventEmitter","extent","bisector","scaleQuantize","scaleBand","scaleSqrt","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","invert","scale","value","range","domain","paddingOuter","step","slice","reverse","definedNullData","x","y","plot","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","Array","isArray","bisect","center","index","findIndex","keys","Object","map","_key","item","interpolateValue","lastKeyIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","result","scaleToBand","band","memoize","func","results","args","argsKey","join","measureText","text","fontSize","span","document","createElement","style","line","split","append","createTextNode","display","body","textWidth","offsetWidth","textHeight","offsetHeight","remove","Math","max","idCounter","uniqueId","prefix","Symbol","getChartDefaultColorName","getBubbleChartValueScale","z","el","getScatterPlotRadius","valueKey","calculateBubbleDomain","miniestValue","min","maxestValue","pixelRatio","abs","valueScale","minValueShift","maxValueShift","floor","PlotEventEmitter"],"sources":["../../src/utils.ts"],"sourcesContent":["import EventEmitter from '@semcore/core/lib/utils/eventEmitter';\nimport { extent, bisector, type Numeric } from 'd3-array';\nimport {\n scaleQuantize,\n type ScaleIdentity,\n type ScaleTime,\n type ScaleContinuousNumeric,\n type ScaleBand,\n type ScalePoint,\n type NumberValue,\n scaleBand,\n scaleSqrt,\n} from 'd3-scale';\nimport type React from 'react';\n\nexport const eventToPoint = (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => {\n const node = (event.currentTarget || event.target) as HTMLElement;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n};\n\ntype InvertableScale =\n | ScaleIdentity\n | ScaleBand<{}>\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>;\nexport const invert = <Scale extends InvertableScale = InvertableScale>(\n scale: Scale,\n value: number,\n) => {\n if ('invert' in scale && scale.invert) return scale.invert(value);\n\n const range = scale.range() as [number, number];\n const domain = scale.domain();\n if ('paddingOuter' in scale) {\n range[0] += scale.paddingOuter() * scale.step();\n range[1] -= scale.paddingOuter() * scale.step();\n }\n\n return scaleQuantize()\n .domain((range[0] <= range[1] ? range : range.slice().reverse()) as NumberValue[])\n .range((range[0] <= range[1] ? domain : domain.slice().reverse()) as number[])(value);\n};\n\nexport const definedNullData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[y] !== null;\n\nexport const definedData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;\n\nexport const scaleOfBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale, value: number) =>\n scale.bandwidth ? scale(value)! + scale.bandwidth() / 2 : scale(value);\n\nexport const minMax = <\n Key extends string = string,\n Data extends { [key: string]: Numeric | null | undefined }[] = {\n [key: string]: Numeric | null | undefined;\n }[],\n>(\n data: Data,\n key: Key,\n): [min: Data[0][Key], max: Data[0][Key]] => {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]) as any;\n }\n return extent(data, key) as any;\n};\n\nexport const getNullData = <\n Name extends string = string,\n Data extends { [name in Name]?: unknown | null } = {},\n>(\n data: Data[],\n defined: (data: Data) => boolean,\n name: Name,\n) =>\n data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n } as Data);\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, [] as Data[]);\n\ntype IndexFromDataScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>\n | ScaleBand<{}>\n | ScalePoint<{}>;\nexport const getIndexFromData = <\n Key extends string,\n Data extends {\n [key in Key]: number;\n } = { [key in Key]: number },\n Scale extends IndexFromDataScale = IndexFromDataScale,\n>(\n data: Data[],\n scale: Scale,\n key: Key,\n value: number,\n) => {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function' && Array.isArray(data)) {\n const bisect = bisector((d: { [key: string]: number }) => d[key]).center;\n return bisect(data, value);\n } else if ('step' in scale && typeof scale.step !== 'undefined' && Array.isArray(data)) { // detect bar chart\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else if ('invert' in scale && typeof scale.invert === 'function' && !Array.isArray(data)) { // detect cigarette chart\n const keys = Object.keys(data);\n const domain = keys.map((_key, index) => {\n return keys.slice(0, index).reduce((acc, item) => {\n if (data[item] !== interpolateValue) {\n acc = acc + data[item];\n }\n\n return acc;\n }, 0);\n });\n\n let key = null;\n\n const lastKeyIndex = keys.length - 1;\n\n if (value > domain[lastKeyIndex]) {\n key = keys[lastKeyIndex];\n } else {\n for (let i = 0; i < lastKeyIndex; i++) {\n if (i === 0 && value < domain[i]) {\n break;\n }\n\n if (value > domain[i] && value < domain[i + 1]) {\n key = keys[i];\n break;\n }\n }\n }\n\n return key;\n } else {\n // eslint-disable-next-line no-console\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n};\n\nexport const roundedPath = (\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n) => {\n let result = `M${x + r},${y}`;\n result += `h${w - 2 * r}`;\n if (tr) {\n result += `a${r},${r} 0 0 1 ${r},${r}`;\n } else {\n result += `h${r}`;\n result += `v${r}`;\n }\n result += `v${h - 2 * r}`;\n if (br) {\n result += `a${r},${r} 0 0 1 ${-r},${r}`;\n } else {\n result += `v${r}`;\n result += `h${-r}`;\n }\n result += `h${2 * r - w}`;\n if (bl) {\n result += `a${r},${r} 0 0 1 ${-r},${-r}`;\n } else {\n result += `h${-r}`;\n result += `v${-r}`;\n }\n result += `v${2 * r - h}`;\n if (tl) {\n result += `a${r},${r} 0 0 1 ${r},${-r}`;\n } else {\n result += `v${-r}`;\n result += `h${r}`;\n }\n result += 'z';\n return result;\n};\n\nexport const scaleToBand = (scale: ScaleBand<{}>) => {\n if ('bandwidth' in scale) {\n return scale;\n }\n\n const band = scaleBand()\n .range((scale as any).range())\n .domain((scale as any).domain());\n\n return band;\n};\n\nexport const memoize = <Func extends (...args: any[]) => any>(func: Func): Func => {\n const results: { [cacheKey: string]: any } = {};\n return ((...args: any[]) => {\n const argsKey = args.join(',');\n if (!results[argsKey]) {\n results[argsKey] = func(...args);\n }\n return results[argsKey];\n }) as Func;\n};\n\nexport const measureText = memoize((text: string, fontSize?: number) => {\n if (!text) return 0;\n\n const span = document.createElement('span');\n if (fontSize) {\n span.style.fontSize = `${fontSize}px`;\n }\n for (const line of text.split('\\n')) {\n span.append(document.createTextNode(line));\n span.append(document.createElement('br'));\n }\n span.style.display = 'inline-block';\n document.body.append(span);\n const textWidth = span.offsetWidth;\n const textHeight = span.offsetHeight;\n span.remove();\n return Math.max(textWidth, textHeight);\n});\n\nlet idCounter = 0;\nexport const uniqueId = (prefix = 'id-') => `${prefix}${idCounter++}`;\n\nexport const interpolateValue = Symbol('intergalactic-d3-chart-line-interpolate');\n\nexport const getChartDefaultColorName = (index: number) => {\n index++;\n if (index < 1) index = 1;\n if (index > 24) index %= 24;\n\n return `chart-palette-order-${index}`;\n};\n\nexport const getBubbleChartValueScale = (data: any[], key: string) => {\n const z = scaleSqrt()\n .domain([0, Math.max(...data.map((el) => el[key]))])\n .range([5.5, 50.5]); // min/max radius\n\n return z;\n};\n\nexport const getScatterPlotRadius = (valueKey?: string): number => {\n return valueKey !== undefined ? 12 : 5.5;\n};\n\ntype BubbleChartDataItem = {\n value: number;\n x: number;\n y: number;\n};\n\nexport const calculateBubbleDomain = (\n data: Array<BubbleChartDataItem>,\n key: 'x' | 'y',\n range: [number, number],\n): [min: number, max: number] => {\n const miniestValue = data.reduce(\n (acc, item) => {\n if (item[key] - item.value < acc.min) {\n acc.min = item[key] - item.value;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, min: data[0][key] - data[0].value },\n ).value;\n const maxestValue = data.reduce(\n (acc, item) => {\n if (item.value + item[key] > acc.max) {\n acc.max = item.value + item.x;\n acc.value = item.value;\n }\n return acc;\n },\n { value: data[0].value, max: data[0].value + data[0][key] },\n ).value;\n\n let [min, max] = minMax(data, key);\n\n const pixelRatio = Math.abs(max - min) / Math.abs(range[0] - range[1]);\n const valueScale = getBubbleChartValueScale(data, 'value');\n const minValueShift = valueScale(miniestValue) * pixelRatio;\n const maxValueShift = valueScale(maxestValue) * pixelRatio;\n min -= minValueShift * 2;\n max += maxValueShift * 2;\n\n return [Math.floor(min), Math.floor(max)];\n};\n\ntype CommonEvents = {\n setTooltipVisible: (visible: boolean) => void;\n setTooltipPosition: (x: number, y: number) => void;\n};\n\ntype Events = {\n [K in keyof CommonEvents as `${K}_${string}`]: CommonEvents[K];\n};\n\nexport const PlotEventEmitter = EventEmitter<Events>;\n"],"mappings":"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","ignoreList":[]}
package/lib/esm/utils.mjs CHANGED
@@ -205,7 +205,7 @@ const calculateBubbleDomain = (data, key, range) => {
205
205
  const maxValueShift = valueScale(maxestValue) * pixelRatio;
206
206
  min -= minValueShift * 2;
207
207
  max += maxValueShift * 2;
208
- return [min, max];
208
+ return [Math.floor(min), Math.floor(max)];
209
209
  };
210
210
  const PlotEventEmitter = EventEmitter;
211
211
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@semcore/d3-chart",
3
3
  "description": "Semrush D3 Chart Component",
4
- "version": "17.0.0-prerelease.31",
4
+ "version": "17.0.0-prerelease.34",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/esm/index.mjs",
7
7
  "typings": "lib/types/index.d.ts",
@@ -15,9 +15,9 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@formatjs/intl": "2.3.0",
18
- "@semcore/checkbox": "^17.0.0-prerelease.31",
19
- "@semcore/divider": "^17.0.0-prerelease.31",
20
- "@semcore/typography": "^17.0.0-prerelease.31",
18
+ "@semcore/checkbox": "^17.0.0-prerelease.34",
19
+ "@semcore/divider": "^17.0.0-prerelease.34",
20
+ "@semcore/typography": "^17.0.0-prerelease.34",
21
21
  "@types/d3-shape": "^3.1.7",
22
22
  "@upsetjs/venn.js": "1.4.2",
23
23
  "d3-array": "3.1.6",
@@ -44,16 +44,16 @@
44
44
  "@types/d3-array": "^3.2.1",
45
45
  "@types/d3-scale": "^4.0.9",
46
46
  "@types/d3-transition": "^3.0.9",
47
- "@semcore/core": "17.0.0-prerelease.31",
48
- "@semcore/checkbox": "17.0.0-prerelease.31",
49
- "@semcore/base-components": "17.0.0-prerelease.31",
50
- "@semcore/button": "17.0.0-prerelease.31",
51
- "@semcore/divider": "17.0.0-prerelease.31",
52
- "@semcore/ellipsis": "16.0.12-prerelease.31",
53
- "@semcore/icon": "16.7.2-prerelease.31",
54
- "@semcore/testing-utils": "1.0.0",
55
- "@semcore/typography": "17.0.0-prerelease.31",
56
- "@semcore/dropdown-menu": "17.0.0-prerelease.31"
47
+ "@semcore/core": "17.0.0-prerelease.34",
48
+ "@semcore/base-components": "17.0.0-prerelease.34",
49
+ "@semcore/divider": "17.0.0-prerelease.34",
50
+ "@semcore/checkbox": "17.0.0-prerelease.34",
51
+ "@semcore/button": "17.0.0-prerelease.34",
52
+ "@semcore/dropdown-menu": "17.0.0-prerelease.34",
53
+ "@semcore/ellipsis": "16.0.12-prerelease.34",
54
+ "@semcore/icon": "16.7.2-prerelease.34",
55
+ "@semcore/typography": "17.0.0-prerelease.34",
56
+ "@semcore/testing-utils": "1.0.0"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "pnpm semcore-builder --source=js,ts && pnpm vite build"