@unovis/ts 1.5.1-xplg.5 → 1.5.2
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/README.md +1 -1
- package/components/annotations/style.js.map +1 -1
- package/components/area/config.d.ts +0 -2
- package/components/area/config.js +1 -1
- package/components/area/config.js.map +1 -1
- package/components/area/index.js +3 -6
- package/components/area/index.js.map +1 -1
- package/components/area/style.js.map +1 -1
- package/components/axis/config.d.ts +1 -1
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +1 -0
- package/components/axis/index.js +10 -2
- package/components/axis/index.js.map +1 -1
- package/components/axis/style.js.map +1 -1
- package/components/brush/config.d.ts +1 -1
- package/components/brush/config.js.map +1 -1
- package/components/brush/style.js.map +1 -1
- package/components/bullet-legend/style.js.map +1 -1
- package/components/chord-diagram/index.js +3 -1
- package/components/chord-diagram/index.js.map +1 -1
- package/components/chord-diagram/style.js.map +1 -1
- package/components/crosshair/style.js.map +1 -1
- package/components/donut/style.js.map +1 -1
- package/components/flow-legend/style.js.map +1 -1
- package/components/free-brush/style.js.map +1 -1
- package/components/graph/index.js +3 -4
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/link/index.js +1 -2
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/link/style.js.map +1 -1
- package/components/graph/modules/node/style.js.map +1 -1
- package/components/graph/modules/panel/style.js.map +1 -1
- package/components/graph/style.js.map +1 -1
- package/components/grouped-bar/style.js.map +1 -1
- package/components/leaflet-flow-map/config.js +0 -1
- package/components/leaflet-flow-map/config.js.map +1 -1
- package/components/leaflet-flow-map/shaders.js.map +1 -1
- package/components/leaflet-map/config.js +0 -1
- package/components/leaflet-map/config.js.map +1 -1
- package/components/leaflet-map/modules/map.js +3 -3
- package/components/leaflet-map/modules/map.js.map +1 -1
- package/components/leaflet-map/renderer/leaflet-maplibre-gl.js.map +1 -1
- package/components/leaflet-map/style.js.map +1 -1
- package/components/line/config.d.ts +5 -0
- package/components/line/config.js +1 -1
- package/components/line/config.js.map +1 -1
- package/components/line/index.js +41 -2
- package/components/line/index.js.map +1 -1
- package/components/line/style.d.ts +1 -0
- package/components/line/style.js +12 -1
- package/components/line/style.js.map +1 -1
- package/components/line/types.d.ts +1 -0
- package/components/nested-donut/config.d.ts +1 -1
- package/components/nested-donut/config.js.map +1 -1
- package/components/nested-donut/style.js.map +1 -1
- package/components/sankey/modules/label.js.map +1 -1
- package/components/sankey/modules/link.js.map +1 -1
- package/components/sankey/style.js.map +1 -1
- package/components/scatter/index.d.ts +1 -0
- package/components/scatter/index.js +11 -1
- package/components/scatter/index.js.map +1 -1
- package/components/scatter/style.js.map +1 -1
- package/components/stacked-bar/style.js.map +1 -1
- package/components/timeline/config.d.ts +14 -65
- package/components/timeline/config.js +1 -15
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.d.ts +10 -21
- package/components/timeline/index.js +93 -379
- package/components/timeline/index.js.map +1 -1
- package/components/timeline/style.d.ts +0 -7
- package/components/timeline/style.js +1 -40
- package/components/timeline/style.js.map +1 -1
- package/components/tooltip/config.d.ts +6 -4
- package/components/tooltip/config.js +3 -1
- package/components/tooltip/config.js.map +1 -1
- package/components/tooltip/index.d.ts +7 -3
- package/components/tooltip/index.js +39 -9
- package/components/tooltip/index.js.map +1 -1
- package/components/tooltip/style.js.map +1 -1
- package/components/topojson-map/index.js.map +1 -1
- package/components/topojson-map/style.js.map +1 -1
- package/components/vis-controls/style.js.map +1 -1
- package/components/xy-labels/index.js +1 -1
- package/components/xy-labels/index.js.map +1 -1
- package/components/xy-labels/style.js.map +1 -1
- package/components.d.ts +0 -4
- package/components.js +0 -2
- package/components.js.map +1 -1
- package/containers/single-container/config.d.ts +0 -3
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.js +1 -2
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +0 -5
- package/containers/xy-container/config.js +1 -1
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +0 -1
- package/containers/xy-container/index.js +11 -15
- package/containers/xy-container/index.js.map +1 -1
- package/core/container/config.js +0 -1
- package/core/container/config.js.map +1 -1
- package/index.js +3 -5
- package/index.js.map +1 -1
- package/maps/ind-regions.json.js +1 -1
- package/maps/us-counties.json.js +8 -8
- package/package.json +9 -7
- package/styles/index.js.map +1 -1
- package/styles/patterns.js.map +1 -1
- package/styles/sizes.js.map +1 -1
- package/types/position.d.ts +1 -2
- package/types/position.js +0 -1
- package/types/position.js.map +1 -1
- package/types.d.ts +0 -2
- package/types.js +1 -4
- package/types.js.map +1 -1
- package/utils/color.d.ts +0 -14
- package/utils/color.js +2 -26
- package/utils/color.js.map +1 -1
- package/utils/data.d.ts +1 -1
- package/utils/data.js +2 -2
- package/utils/data.js.map +1 -1
- package/utils/index.js +3 -3
- package/utils/path.d.ts +0 -8
- package/utils/path.js +1 -109
- package/utils/path.js.map +1 -1
- package/utils/text.d.ts +1 -2
- package/utils/text.js +2 -10
- package/utils/text.js.map +1 -1
- package/components/rolling-pin-legend/config.d.ts +0 -19
- package/components/rolling-pin-legend/config.js +0 -9
- package/components/rolling-pin-legend/config.js.map +0 -1
- package/components/rolling-pin-legend/index.d.ts +0 -16
- package/components/rolling-pin-legend/index.js +0 -63
- package/components/rolling-pin-legend/index.js.map +0 -1
- package/components/rolling-pin-legend/style.d.ts +0 -5
- package/components/rolling-pin-legend/style.js +0 -40
- package/components/rolling-pin-legend/style.js.map +0 -1
- package/components/rolling-pin-legend/types.d.ts +0 -1
- package/components/timeline/constants.d.ts +0 -3
- package/components/timeline/constants.js +0 -6
- package/components/timeline/constants.js.map +0 -1
- package/components/timeline/types.d.ts +0 -62
- package/components/timeline/types.js +0 -2
- package/components/timeline/types.js.map +0 -1
- package/components/timeline/utils.d.ts +0 -2
- package/components/timeline/utils.js +0 -16
- package/components/timeline/utils.js.map +0 -1
- package/components/treemap/config.d.ts +0 -44
- package/components/treemap/config.js +0 -6
- package/components/treemap/config.js.map +0 -1
- package/components/treemap/index.d.ts +0 -16
- package/components/treemap/index.js +0 -263
- package/components/treemap/index.js.map +0 -1
- package/components/treemap/style.d.ts +0 -22
- package/components/treemap/style.js +0 -62
- package/components/treemap/style.js.map +0 -1
- package/components/treemap/types.d.ts +0 -11
- package/components/treemap/types.js +0 -2
- package/components/treemap/types.js.map +0 -1
package/styles/patterns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sources":["../../src/styles/patterns.ts"],"sourcesContent":["import { getCSSColorVariable } from './colors'\n\ntype Pattern = {\n id: string;\n width?: number;\n height?: number;\n}\n\ntype FillPattern = Pattern & {\n svg: string;\n}\n\ntype LinePattern = Pattern & {\n marker: string;\n dashArray: number[];\n}\n\nexport const PATTERN_SIZE_PX = 10\n\nexport const fills: FillPattern[] = [\n { id: 'stripes-diagonal', svg: '<path d=\"M-1,1 l2,-2 M0,10 l10,-10 M9,11 l2,-2\" stroke=\"#000\"/>' },\n { id: 'dots', svg: '<path d=\"m0-1.5a1 1 0 010 3m10-3a1 1 0 000 3M5 3.5a1 1 0 010 3 1 1 0 010-3M0 8.5 a1 1 0 010 3m10-3a1 1 0 000 3\" fill\"#000\"/>' },\n { id: 'stripes-vertical', svg: '<path d=\"M 5,-1 L5,11\" stroke=\"#000\"/>' },\n { id: 'crosshatch', svg: '<path d=\"M0 0L10 10ZM10 0L0 10Z\" stroke=\"#000\"/>' },\n { id: 'waves', svg: '<path d=\"M0 4Q2.5 1 5 4 7.5 7 10 4v2Q7.5 9 5 6 2.5 3 0 6Z\" fill=\"#000\"/>' },\n { id: 'circles', svg: '<circle cx=\"5\" cy=\"5\" r=\"3\" stroke=\"#000\" fill=\"#fff\"/>' },\n]\nexport const lines: LinePattern[] = [\n { id: 'circle', marker: '<circle cx=\"5\" cy=\"5\" r=\"5\"/>', dashArray: [] },\n { id: 'triangle', marker: '<path d=\"M5,0 L10,9 L0,9Z\">', dashArray: [9, 1] },\n { id: 'diamond', marker: '<path d=\"M 0 5 L5 0 L 10 5 L 5 10 L 0 5Z\">', dashArray: [2] },\n { id: 'arrow', marker: '<path d=\"M4 0 0 0 6 5 0 10 4 10 10 5Z\">', dashArray: [2, 3, 8, 3] },\n { id: 'square', marker: '<rect x=\"1\" y=\"1\" width=\"8\" height=\"8\"/>', dashArray: [6] },\n { id: 'star', marker: '<path d=\"m2 9 3-9 3 9L0 3h10Z\"/>', dashArray: [1, 6] },\n]\n\nexport function getPatternVariable (p: Pattern): string {\n return `vis-${`pattern-${(p as FillPattern).svg ? 'fill' : 'marker'}`}-${p.id}`\n}\n\nconst maskDef = (p: FillPattern): string =>\n `<mask id=\"${getPatternVariable(p)}\">\n <pattern id=\"${p.id}\" viewBox=\"0 0 10 10\" width=\"${PATTERN_SIZE_PX}\" height=\"${PATTERN_SIZE_PX}\" patternUnits=\"userSpaceOnUse\">\n <rect width=\"100%\" height=\"100%\" fill=\"#fff\"/>\n ${p.svg}\n </pattern>\n <rect x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" fill=\"url(#${p.id})\"/>\n </mask>`\n\nconst markerDef = (p: LinePattern, i: number): string =>\n `<marker id=\"${getPatternVariable(p)}\"\n fill=\"var(${getCSSColorVariable(i)})\"\n markerUnits=\"userSpaceOnUse\"\n refX=\"5\"\n refY=\"5\"\n markerWidth=\"${PATTERN_SIZE_PX}\"\n markerHeight=\"${PATTERN_SIZE_PX}\">\n ${p.marker}\n </marker>`\n\n// // Injecting SVG defs as a single SVG element on the page\nfunction injectSVGDefs (): void {\n const svgDefs = fills.map(maskDef).concat(lines.map(markerDef)).join('')\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('height', '100%')\n svg.setAttribute('width', '100%')\n svg.style.position = 'fixed'\n svg.style.zIndex = '-99999999'\n svg.innerHTML = `<defs>${svgDefs}</defs>`\n document.body.appendChild(svg)\n}\n\nif (typeof window !== 'undefined') injectSVGDefs()\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"patterns.js","sources":["../../src/styles/patterns.ts"],"sourcesContent":["import { getCSSColorVariable } from './colors'\n\ntype Pattern = {\n id: string;\n width?: number;\n height?: number;\n}\n\ntype FillPattern = Pattern & {\n svg: string;\n}\n\ntype LinePattern = Pattern & {\n marker: string;\n dashArray: number[];\n}\n\nexport const PATTERN_SIZE_PX = 10\n\nexport const fills: FillPattern[] = [\n { id: 'stripes-diagonal', svg: '<path d=\"M-1,1 l2,-2 M0,10 l10,-10 M9,11 l2,-2\" stroke=\"#000\"/>' },\n { id: 'dots', svg: '<path d=\"m0-1.5a1 1 0 010 3m10-3a1 1 0 000 3M5 3.5a1 1 0 010 3 1 1 0 010-3M0 8.5 a1 1 0 010 3m10-3a1 1 0 000 3\" fill\"#000\"/>' },\n { id: 'stripes-vertical', svg: '<path d=\"M 5,-1 L5,11\" stroke=\"#000\"/>' },\n { id: 'crosshatch', svg: '<path d=\"M0 0L10 10ZM10 0L0 10Z\" stroke=\"#000\"/>' },\n { id: 'waves', svg: '<path d=\"M0 4Q2.5 1 5 4 7.5 7 10 4v2Q7.5 9 5 6 2.5 3 0 6Z\" fill=\"#000\"/>' },\n { id: 'circles', svg: '<circle cx=\"5\" cy=\"5\" r=\"3\" stroke=\"#000\" fill=\"#fff\"/>' },\n]\nexport const lines: LinePattern[] = [\n { id: 'circle', marker: '<circle cx=\"5\" cy=\"5\" r=\"5\"/>', dashArray: [] },\n { id: 'triangle', marker: '<path d=\"M5,0 L10,9 L0,9Z\">', dashArray: [9, 1] },\n { id: 'diamond', marker: '<path d=\"M 0 5 L5 0 L 10 5 L 5 10 L 0 5Z\">', dashArray: [2] },\n { id: 'arrow', marker: '<path d=\"M4 0 0 0 6 5 0 10 4 10 10 5Z\">', dashArray: [2, 3, 8, 3] },\n { id: 'square', marker: '<rect x=\"1\" y=\"1\" width=\"8\" height=\"8\"/>', dashArray: [6] },\n { id: 'star', marker: '<path d=\"m2 9 3-9 3 9L0 3h10Z\"/>', dashArray: [1, 6] },\n]\n\nexport function getPatternVariable (p: Pattern): string {\n return `vis-${`pattern-${(p as FillPattern).svg ? 'fill' : 'marker'}`}-${p.id}`\n}\n\nconst maskDef = (p: FillPattern): string =>\n `<mask id=\"${getPatternVariable(p)}\">\n <pattern id=\"${p.id}\" viewBox=\"0 0 10 10\" width=\"${PATTERN_SIZE_PX}\" height=\"${PATTERN_SIZE_PX}\" patternUnits=\"userSpaceOnUse\">\n <rect width=\"100%\" height=\"100%\" fill=\"#fff\"/>\n ${p.svg}\n </pattern>\n <rect x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" fill=\"url(#${p.id})\"/>\n </mask>`\n\nconst markerDef = (p: LinePattern, i: number): string =>\n `<marker id=\"${getPatternVariable(p)}\"\n fill=\"var(${getCSSColorVariable(i)})\"\n markerUnits=\"userSpaceOnUse\"\n refX=\"5\"\n refY=\"5\"\n markerWidth=\"${PATTERN_SIZE_PX}\"\n markerHeight=\"${PATTERN_SIZE_PX}\">\n ${p.marker}\n </marker>`\n\n// // Injecting SVG defs as a single SVG element on the page\nfunction injectSVGDefs (): void {\n const svgDefs = fills.map(maskDef).concat(lines.map(markerDef)).join('')\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('height', '100%')\n svg.setAttribute('width', '100%')\n svg.style.position = 'fixed'\n svg.style.zIndex = '-99999999'\n svg.innerHTML = `<defs>${svgDefs}</defs>`\n document.body.appendChild(svg)\n}\n\nif (typeof window !== 'undefined') injectSVGDefs()\n"],"names":[],"mappings":"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"}
|
package/styles/sizes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sizes.js","sources":["../../src/styles/sizes.ts"],"sourcesContent":["import { css } from '@emotion/css'\n\nexport const styleLargeSize = css`\n label: large-size;\n\n /* Axis */\n --vis-axis-label-font-size: 18px;\n --vis-axis-tick-label-font-size: 16px;\n\n /* Donut */\n --vis-donut-central-label-font-size: 20px;\n --vis-donut-central-sub-label-font-size: 16px;\n\n /* Graph */\n --vis-graph-node-bottom-icon-font-size: 18pt;\n --vis-graph-node-label-font-size: 12pt;\n --vis-graph-node-sublabel-font-size: 10pt;\n --vis-graph-panel-label-font-size: 14pt;\n\n /* LeafletMap */\n --vis-map-point-bottom-label-font-size: 14px;\n\n /* Legend */\n --vis-legend-label-font-size: 16px;\n --vis-legend-bullet-label-spacing: 10px;\n --vis-legend-bullet-size: 12px;\n\n /* Sankey */\n --vis-sankey-node-label-font-size: 16px;\n --vis-sankey-node-sublabel-font-size: 14px;\n --vis-sankey-icon-size: 28px;\n\n /* Scatter */\n --vis-scatter-point-label-text-font-size: 16px;\n\n /* Timeline */\n --vis-timeline-label-font-size: 18px;\n\n /* TopoJSONMap */\n --vis-map-point-label-font-size: 16px;\n\n /* XYLabels */\n --vis-xy-label-font-size: 16px;\n --vis-xy-label-cluster-font-size: 18px;\n\n /* Override leaflet.css */\n .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\n font-size: 28px;\n }\n .leaflet-control-attribution a {\n font-size: 10pt;\n }\n .leaflet-container .leaflet-control-attribution,\n .leaflet-container .leaflet-control-scale,\n .leaflet-control-scale-line {\n font-size: 14px;\n }\n `\n\nexport const styleExtraLargeSize = css`\n label: extra-large-size;\n\n /* Axis */\n --vis-axis-label-font-size: 28px;\n --vis-axis-tick-label-font-size: 24px;\n\n /* Donut */\n --vis-donut-central-label-font-size: 32px;\n --vis-donut-central-sub-label-font-size: 24px;\n\n /* Graph */\n --vis-graph-node-bottom-icon-font-size: 28pt;\n --vis-graph-node-label-font-size: 18pt;\n --vis-graph-node-sublabel-font-size: 16pt;\n --vis-graph-panel-label-font-size: 20pt;\n\n /* LeafletMap */\n --vis-map-point-bottom-label-font-size: 20px;\n\n /* Legend */\n --vis-legend-label-font-size: 24px;\n --vis-legend-bullet-label-spacing: 16px;\n --vis-legend-bullet-size: 18px;\n\n /* Sankey */\n --vis-sankey-node-label-font-size: 24px;\n --vis-sankey-node-sublabel-font-size: 20px;\n --vis-sankey-icon-size: 44px;\n\n /* Scatter */\n --vis-scatter-point-label-text-font-size: 24px;\n\n /* Timeline */\n --vis-timeline-label-font-size: 28px;\n\n /* TopoJSONMap */\n --vis-map-point-label-font-size: 24px;\n\n /* XYLabels */\n --vis-xy-label-font-size: 24px;\n --vis-xy-label-cluster-font-size: 28px;\n\n /* Override leaflet.css */\n .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\n font-size: 44px;\n }\n .leaflet-control-attribution a {\n font-size: 14pt;\n }\n .leaflet-container .leaflet-control-attribution,\n .leaflet-container .leaflet-control-scale,\n .leaflet-control-scale-line {\n font-size: 22px;\n }\n`\n"],"names":[],"mappings":";;AAEO,MAAM,cAAc,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuD9B;AAEI,MAAM,mBAAmB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"sizes.js","sources":["../../src/styles/sizes.ts"],"sourcesContent":["import { css } from '@emotion/css'\n\nexport const styleLargeSize = css`\n label: large-size;\n\n /* Axis */\n --vis-axis-label-font-size: 18px;\n --vis-axis-tick-label-font-size: 16px;\n\n /* Donut */\n --vis-donut-central-label-font-size: 20px;\n --vis-donut-central-sub-label-font-size: 16px;\n\n /* Graph */\n --vis-graph-node-bottom-icon-font-size: 18pt;\n --vis-graph-node-label-font-size: 12pt;\n --vis-graph-node-sublabel-font-size: 10pt;\n --vis-graph-panel-label-font-size: 14pt;\n\n /* LeafletMap */\n --vis-map-point-bottom-label-font-size: 14px;\n\n /* Legend */\n --vis-legend-label-font-size: 16px;\n --vis-legend-bullet-label-spacing: 10px;\n --vis-legend-bullet-size: 12px;\n\n /* Sankey */\n --vis-sankey-node-label-font-size: 16px;\n --vis-sankey-node-sublabel-font-size: 14px;\n --vis-sankey-icon-size: 28px;\n\n /* Scatter */\n --vis-scatter-point-label-text-font-size: 16px;\n\n /* Timeline */\n --vis-timeline-label-font-size: 18px;\n\n /* TopoJSONMap */\n --vis-map-point-label-font-size: 16px;\n\n /* XYLabels */\n --vis-xy-label-font-size: 16px;\n --vis-xy-label-cluster-font-size: 18px;\n\n /* Override leaflet.css */\n .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\n font-size: 28px;\n }\n .leaflet-control-attribution a {\n font-size: 10pt;\n }\n .leaflet-container .leaflet-control-attribution,\n .leaflet-container .leaflet-control-scale,\n .leaflet-control-scale-line {\n font-size: 14px;\n }\n `\n\nexport const styleExtraLargeSize = css`\n label: extra-large-size;\n\n /* Axis */\n --vis-axis-label-font-size: 28px;\n --vis-axis-tick-label-font-size: 24px;\n\n /* Donut */\n --vis-donut-central-label-font-size: 32px;\n --vis-donut-central-sub-label-font-size: 24px;\n\n /* Graph */\n --vis-graph-node-bottom-icon-font-size: 28pt;\n --vis-graph-node-label-font-size: 18pt;\n --vis-graph-node-sublabel-font-size: 16pt;\n --vis-graph-panel-label-font-size: 20pt;\n\n /* LeafletMap */\n --vis-map-point-bottom-label-font-size: 20px;\n\n /* Legend */\n --vis-legend-label-font-size: 24px;\n --vis-legend-bullet-label-spacing: 16px;\n --vis-legend-bullet-size: 18px;\n\n /* Sankey */\n --vis-sankey-node-label-font-size: 24px;\n --vis-sankey-node-sublabel-font-size: 20px;\n --vis-sankey-icon-size: 44px;\n\n /* Scatter */\n --vis-scatter-point-label-text-font-size: 24px;\n\n /* Timeline */\n --vis-timeline-label-font-size: 28px;\n\n /* TopoJSONMap */\n --vis-map-point-label-font-size: 24px;\n\n /* XYLabels */\n --vis-xy-label-font-size: 24px;\n --vis-xy-label-cluster-font-size: 28px;\n\n /* Override leaflet.css */\n .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\n font-size: 44px;\n }\n .leaflet-control-attribution a {\n font-size: 14pt;\n }\n .leaflet-container .leaflet-control-attribution,\n .leaflet-container .leaflet-control-scale,\n .leaflet-control-scale-line {\n font-size: 22px;\n }\n`\n"],"names":[],"mappings":";;AAEO,MAAM,cAAc,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuD9B;AAEI,MAAM,mBAAmB,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/types/position.d.ts
CHANGED
package/types/position.js
CHANGED
package/types/position.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.js","sources":["../../src/types/position.ts"],"sourcesContent":["export enum Position {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n Center = 'center',\n Auto = 'auto',\n}\n\nexport enum PositionStrategy {\n Absolute = 'absolute',\n Fixed = 'fixed',\n}\n\nexport enum Arrangement {\n Inside = 'inside',\n Outside = 'outside',\n
|
|
1
|
+
{"version":3,"file":"position.js","sources":["../../src/types/position.ts"],"sourcesContent":["export enum Position {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n Center = 'center',\n Auto = 'auto',\n}\n\nexport enum PositionStrategy {\n Absolute = 'absolute',\n Fixed = 'fixed',\n}\n\nexport enum Arrangement {\n Inside = 'inside',\n Outside = 'outside',\n}\n\nexport enum Orientation {\n Horizontal = 'horizontal',\n Vertical = 'vertical',\n}\n"],"names":[],"mappings":"IAAY,SAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAOnB,EAAA,CAAA,CAAA,CAAA;IAEW,iBAGX;AAHD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA,CAAA;IAEW,YAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACrB,CAAC,EAHW,WAAW,KAAX,WAAW,GAGtB,EAAA,CAAA,CAAA,CAAA;IAEW,YAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACvB,CAAC,EAHW,WAAW,KAAX,WAAW,GAGtB,EAAA,CAAA,CAAA;;;;"}
|
package/types.d.ts
CHANGED
|
@@ -26,5 +26,3 @@ export * from "./components/bullet-legend/types";
|
|
|
26
26
|
export * from "./components/xy-labels/types";
|
|
27
27
|
export * from "./components/nested-donut/types";
|
|
28
28
|
export * from "./components/annotations/types";
|
|
29
|
-
export * from "./components/treemap/types";
|
|
30
|
-
export * from "./components/timeline/types";
|
package/types.js
CHANGED
|
@@ -26,9 +26,6 @@ export { BulletLegendOrientation, BulletShape } from './components/bullet-legend
|
|
|
26
26
|
export { XYLabelPositioning } from './components/xy-labels/types.js';
|
|
27
27
|
export { NestedDonutDirection, NestedDonutSegmentLabelAlignment } from './components/nested-donut/types.js';
|
|
28
28
|
import './components/annotations/types.js';
|
|
29
|
-
import './components/treemap/types.js';
|
|
30
|
-
import './components/timeline/types.js';
|
|
31
29
|
|
|
32
|
-
/* eslint-disable max-len */
|
|
33
|
-
// Global Types
|
|
30
|
+
/* eslint-disable max-len */
|
|
34
31
|
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["/* eslint-disable max-len */\n// Global Types\nexport * from 'types/accessor'\nexport * from 'types/curve'\nexport * from 'types/symbol'\nexport * from 'types/scale'\nexport * from 'types/position'\nexport * from 'types/shape'\nexport * from 'types/component'\nexport * from 'types/text'\nexport * from 'types/map'\nexport * from 'types/spacing'\nexport * from 'types/graph'\nexport * from 'types/data'\nexport * from 'types/direction'\n\n// Component Types\nexport * from 'core/component/types'\nexport * from 'components/crosshair/types'\nexport * from 'components/axis/types'\nexport * from 'components/chord-diagram/types'\nexport * from 'components/topojson-map/types'\nexport * from 'components/leaflet-map/types'\nexport * from 'components/leaflet-map/renderer/map-style'\nexport * from 'components/graph/types'\nexport * from 'components/sankey/types'\nexport * from 'components/vis-controls/types'\nexport * from 'components/free-brush/types'\nexport * from 'components/bullet-legend/types'\nexport * from 'components/xy-labels/types'\nexport * from 'components/nested-donut/types'\nexport * from 'components/annotations/types'\
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["/* eslint-disable max-len */\n// Global Types\nexport * from 'types/accessor'\nexport * from 'types/curve'\nexport * from 'types/symbol'\nexport * from 'types/scale'\nexport * from 'types/position'\nexport * from 'types/shape'\nexport * from 'types/component'\nexport * from 'types/text'\nexport * from 'types/map'\nexport * from 'types/spacing'\nexport * from 'types/graph'\nexport * from 'types/data'\nexport * from 'types/direction'\n\n// Component Types\nexport * from 'core/component/types'\nexport * from 'components/crosshair/types'\nexport * from 'components/axis/types'\nexport * from 'components/chord-diagram/types'\nexport * from 'components/topojson-map/types'\nexport * from 'components/leaflet-map/types'\nexport * from 'components/leaflet-map/renderer/map-style'\nexport * from 'components/graph/types'\nexport * from 'components/sankey/types'\nexport * from 'components/vis-controls/types'\nexport * from 'components/free-brush/types'\nexport * from 'components/bullet-legend/types'\nexport * from 'components/xy-labels/types'\nexport * from 'components/nested-donut/types'\nexport * from 'components/annotations/types'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
|
package/utils/color.d.ts
CHANGED
|
@@ -11,18 +11,4 @@ export declare function rgbToBrightness(rgb: RGBColor): number;
|
|
|
11
11
|
export declare function hexToBrightness(hex: string): number;
|
|
12
12
|
export declare function getHexValue(s: string, context: HTMLElement | SVGElement): string;
|
|
13
13
|
export declare function rgbaToRgb(rgba: string, backgroundColor?: string): RGBColor;
|
|
14
|
-
/**
|
|
15
|
-
* Determines if a background color is considered "dark" based on its brightness
|
|
16
|
-
* @param backgroundColor - The color to check (hex, rgb, or rgba)
|
|
17
|
-
* @param threshold - Optional brightness threshold (0-1, default 0.5)
|
|
18
|
-
* @returns true if the background is dark, false if it's light
|
|
19
|
-
*/
|
|
20
|
-
export declare function isDarkBackground(backgroundColor: string, threshold?: number): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Makes a color brighter by a certain amount
|
|
23
|
-
* @param inputColor - The color to brighten (hex, rgb, or rgba)
|
|
24
|
-
* @param amount - Amount to brighten by (0-1)
|
|
25
|
-
* @returns The brightened color in hex format
|
|
26
|
-
*/
|
|
27
|
-
export declare function brighter(inputColor: string, amount: number): string;
|
|
28
14
|
export {};
|
package/utils/color.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { color
|
|
1
|
+
import { color } from 'd3-color';
|
|
2
2
|
import { getCSSColorVariable } from '../styles/colors.js';
|
|
3
3
|
import { getString, isNumber } from './data.js';
|
|
4
4
|
import { isStringCSSVariable, getCSSVariableValue } from './misc.js';
|
|
@@ -42,31 +42,7 @@ function rgbaToRgb(rgba, backgroundColor) {
|
|
|
42
42
|
g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),
|
|
43
43
|
b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),
|
|
44
44
|
};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Determines if a background color is considered "dark" based on its brightness
|
|
48
|
-
* @param backgroundColor - The color to check (hex, rgb, or rgba)
|
|
49
|
-
* @param threshold - Optional brightness threshold (0-1, default 0.5)
|
|
50
|
-
* @returns true if the background is dark, false if it's light
|
|
51
|
-
*/
|
|
52
|
-
function isDarkBackground(backgroundColor, threshold = 0.55) {
|
|
53
|
-
const hex = getHexValue(backgroundColor, document.body);
|
|
54
|
-
if (!hex)
|
|
55
|
-
return false;
|
|
56
|
-
return hexToBrightness(hex) < threshold;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Makes a color brighter by a certain amount
|
|
60
|
-
* @param inputColor - The color to brighten (hex, rgb, or rgba)
|
|
61
|
-
* @param amount - Amount to brighten by (0-1)
|
|
62
|
-
* @returns The brightened color in hex format
|
|
63
|
-
*/
|
|
64
|
-
function brighter(inputColor, amount) {
|
|
65
|
-
const c = hcl(inputColor);
|
|
66
|
-
if (!c)
|
|
67
|
-
return inputColor;
|
|
68
|
-
return c.brighter(amount).formatHex();
|
|
69
45
|
}
|
|
70
46
|
|
|
71
|
-
export {
|
|
47
|
+
export { getColor, getHexValue, hexToBrightness, hexToRgb, rgbToBrightness, rgbaToRgb };
|
|
72
48
|
//# sourceMappingURL=color.js.map
|
package/utils/color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["import { color
|
|
1
|
+
{"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["import { color } from 'd3-color'\n\n// Core\nimport { getCSSColorVariable } from 'styles/colors'\n\n// Utils\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\nimport { getString, isNumber } from 'utils/data'\nimport { isStringCSSVariable, getCSSVariableValue } from 'utils/misc'\n\ntype RGBColor = { r: number; g: number; b: number }\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\nexport function getColor<T> (\n d: T,\n accessor: ColorAccessor<T>,\n index?: number,\n dontFallbackToCssVar?: boolean\n): string | null {\n if (Array.isArray(accessor) && isFinite(index)) return accessor[index % accessor.length]\n\n const value = getString(d, accessor as StringAccessor<T>, index)\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null))\n}\n\nexport function hexToRgb (hex: string): RGBColor {\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return parsed ? {\n r: parseInt(parsed[1], 16),\n g: parseInt(parsed[2], 16),\n b: parseInt(parsed[3], 16),\n } : { r: 0, g: 0, b: 0 }\n}\n\nexport function rgbToBrightness (rgb: RGBColor): number {\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255\n}\n\nexport function hexToBrightness (hex: string): number {\n const rgb = hexToRgb(hex)\n return rgbToBrightness(rgb)\n}\n\nexport function getHexValue (s: string, context: HTMLElement | SVGElement): string {\n const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s\n return color(hex)?.formatHex()\n}\n\nexport function rgbaToRgb (rgba: string, backgroundColor?: string): RGBColor {\n const rgb = color(rgba)?.rgb()\n if (!rgb || rgb.opacity === 1) return rgb\n const alpha = 1 - rgb.opacity\n const bg = color(backgroundColor ?? '#fff').rgb()\n return {\n r: Math.round((rgb.opacity * (rgb.r / 255) + (alpha * (bg.r / 255))) * 255),\n g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),\n b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),\n }\n}\n"],"names":[],"mappings":"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"}
|
package/utils/data.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare const flatten: <T>(arr: (T | T[])[]) => T[];
|
|
|
17
17
|
export declare const cloneDeep: <T>(obj: T, stack?: Map<any, any>) => T;
|
|
18
18
|
export declare const merge: <T, K>(obj1: T, obj2: K, visited?: Map<any, any>) => T & K;
|
|
19
19
|
export declare const omit: <T extends Record<string | number | symbol, unknown>>(obj: T, props: (keyof T)[]) => Partial<T>;
|
|
20
|
-
export declare const groupBy: <T extends Record<string | number, any>>(arr: T[], accessor: (a: T
|
|
20
|
+
export declare const groupBy: <T extends Record<string | number, any>>(arr: T[], accessor: (a: T) => string | number) => Record<string | number, T[]>;
|
|
21
21
|
export declare const sortBy: <T>(arr: T[], accessor: (a: T) => string | number) => T[];
|
|
22
22
|
export declare const throttle: <T extends (...args: any[]) => any>(f: T, delay: number, options?: {
|
|
23
23
|
noTrailing?: boolean;
|
package/utils/data.js
CHANGED
|
@@ -122,7 +122,7 @@ const omit = (obj, props) => {
|
|
|
122
122
|
return obj;
|
|
123
123
|
};
|
|
124
124
|
const groupBy = (arr, accessor) => {
|
|
125
|
-
return arr.reduce((grouped, v, i, a, k = accessor(v
|
|
125
|
+
return arr.reduce((grouped, v, i, a, k = accessor(v)) => (((grouped[k] || (grouped[k] = [])).push(v), grouped)), {});
|
|
126
126
|
};
|
|
127
127
|
const sortBy = (arr, accessor) => {
|
|
128
128
|
return arr.concat() // The native sort method modifies the array in place. We use `.concat()` to copy the array first
|
|
@@ -267,7 +267,7 @@ function filterDataByRange(data, range, accessor) {
|
|
|
267
267
|
return filteredData;
|
|
268
268
|
}
|
|
269
269
|
function isNumberWithinRange(value, range) {
|
|
270
|
-
return (value >= range[0]
|
|
270
|
+
return (value >= range[0] && value <= range[1]) || (value >= range[1] && value <= range[0]);
|
|
271
271
|
}
|
|
272
272
|
const ensureArray = (value) => {
|
|
273
273
|
if (value === null || value === undefined) {
|
package/utils/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sources":["../../src/utils/data.ts"],"sourcesContent":["import { max, min, mean, bisector } from 'd3-array'\nimport { throttle as _throttle } from 'throttle-debounce'\n\n// Types\nimport { NumericAccessor, StringAccessor, BooleanAccessor, ColorAccessor, GenericAccessor } from 'types/accessor'\nimport { StackValuesRecord } from 'types/data'\n\nexport const isNumber = <T>(a: T): a is T extends number ? T : never => typeof a === 'number'\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isFunction = <T>(a: T): a is T extends Function ? T : never => typeof a === 'function'\nexport const isUndefined = <T>(a: T): a is T extends undefined ? T : never => a === undefined\nexport const isNil = <T>(a: T): a is null | undefined => a == null\nexport const isString = <T>(a: T): a is T extends string ? T : never => typeof a === 'string'\nexport const isArray = <T>(a: T): a is T extends any[] ? T : never => Array.isArray(a)\nexport const isObject = <T>(a: T): boolean => (a instanceof Object)\nexport const isAClassInstance = <T>(a: T): boolean => a.constructor.name !== 'Function' && a.constructor.name !== 'Object'\nexport const isPlainObject = <T>(a: T): boolean => isObject(a) && !isArray(a) && !isFunction(a) && !isAClassInstance(a)\n\nexport const isEmpty = <T>(obj: T): boolean => {\n return [Object, Array].includes((obj || {}).constructor as ArrayConstructor | ObjectConstructor) &&\n !Object.entries((obj || {})).length\n}\n\n// Based on https://github.com/maplibre/maplibre-gl-js/blob/e78ad7944ef768e67416daa4af86b0464bd0f617/src/style-spec/util/deep_equal.ts, 3-Clause BSD license\nexport const isEqual = (\n a: unknown | null | undefined,\n b: unknown | null | undefined,\n skipKeys: string[] = [],\n visited: Set<any> = new Set()\n): boolean => {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i], skipKeys, visited)) return false\n }\n\n return true\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n }\n\n if (typeof a === 'object' && a !== null && b !== null) {\n if (!(typeof b === 'object')) return false\n if (a === b) return true\n\n const keysA = Object.keys(a).filter(key => !skipKeys.includes(key))\n const keysB = Object.keys(b).filter(key => !skipKeys.includes(key))\n\n if (keysA.length !== keysB.length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (const key of keysA) {\n if (!isEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key], skipKeys, visited)) return false\n }\n\n return true\n }\n\n return a === b\n}\n\nexport const without = <T>(arr: Array<T>, ...args: T[]): Array<T> => arr.filter(item => !args.includes(item))\nexport const flatten = <T>(arr: Array<T | T[]>): Array<T> => arr.flat() as T[]\nexport const cloneDeep = <T>(obj: T, stack: Map<any, any> = new Map()): T => {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T\n }\n\n if (obj instanceof Array) {\n const clone: unknown[] = []\n stack.set(obj, clone)\n for (const item of obj) {\n clone.push(stack.has(item) ? stack.get(item) : cloneDeep(item, stack))\n }\n return clone as unknown as T\n }\n\n // Class instances will be copied without cloning\n if (isAClassInstance(obj)) {\n const clone = obj\n return clone\n }\n\n if (obj instanceof Object) {\n const clone = {} as T\n stack.set(obj, clone)\n const objAsRecord = obj as Record<string | number, unknown>\n Object.keys(obj)\n .reduce((newObj: typeof objAsRecord, key: string | number): typeof objAsRecord => {\n newObj[key] = stack.has(objAsRecord[key]) ? stack.get(objAsRecord[key]) : cloneDeep(objAsRecord[key], stack)\n return newObj\n }, clone as typeof objAsRecord)\n\n return clone\n }\n\n return obj\n}\n\n\nexport const merge = <T, K>(obj1: T, obj2: K, visited: Map<any, any> = new Map()): T & K => {\n type Rec = Record<string | number, unknown>\n\n if (!obj1 || !obj2) return obj1 as T & K\n if ((obj1 as unknown) === (obj2 as unknown)) return obj1 as T & K\n\n const newObj = (isAClassInstance(obj1 as Rec) ? obj1 : cloneDeep(obj1)) as T & K\n\n // Taking care of recursive structures\n if (visited.has(obj2)) return visited.get(obj2)\n else visited.set(obj2, newObj)\n\n Object.keys(obj2 as Rec).forEach(key => {\n // Preventing prototype pollution\n if (key === '__proto__' || key === 'constructor') return\n\n if (isPlainObject((obj1 as Rec)[key]) && isPlainObject((obj2 as Rec)[key])) {\n (newObj as Rec)[key] = merge((obj1 as Rec)[key], (obj2 as Rec)[key], visited)\n } else if (isAClassInstance(obj2 as Rec)) {\n (newObj as Rec)[key] = obj2\n } else {\n (newObj as Rec)[key] = cloneDeep((obj2 as Rec)[key])\n }\n })\n\n return newObj\n}\n\nexport const omit = <T extends Record<string | number | symbol, unknown>>(obj: T, props: Array<keyof T>): Partial<T> => {\n obj = { ...obj }\n props.forEach(prop => delete obj[prop])\n return obj\n}\n\nexport const groupBy = <T extends Record<string | number, any>> (arr: T[], accessor: (a: T, index: number) => string | number): Record<string | number, T[]> => {\n return arr.reduce(\n (grouped, v, i, a, k = accessor(v, i)) => (((grouped[k] || (grouped[k] = [])).push(v), grouped)),\n {} as Record<string | number, T[]>\n )\n}\n\nexport const sortBy = <T>(arr: Array<T>, accessor: (a: T) => string | number): Array<T> => {\n return arr.concat() // The native sort method modifies the array in place. We use `.concat()` to copy the array first\n .sort((a, b): number => {\n return (accessor(a) > accessor(b)) ? 1 : ((accessor(b) > accessor(a)) ? -1 : 0)\n })\n}\n\nexport const throttle = <T extends (...args: any[]) => any>(\n f: T,\n delay: number,\n options?: {\n noTrailing?: boolean;\n noLeading?: boolean;\n debounceMode?: boolean;\n }\n): _throttle<T> => _throttle(delay, f, options)\n\nexport function getValue<T, ReturnType> (\n d: T,\n accessor: NumericAccessor<T> | StringAccessor<T> | BooleanAccessor<T> | ColorAccessor<T> | GenericAccessor<ReturnType, T>,\n index?: number\n): ReturnType {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (isFunction(accessor)) return (accessor as Function)(d, index) as (ReturnType | null | undefined)\n else return accessor as unknown as (ReturnType | null | undefined)\n}\n\nexport function getString<T> (d: T, accessor: StringAccessor<T>, i?: number): string | null | undefined {\n return getValue<T, string>(d, accessor, i)\n}\n\nexport function getNumber<T> (d: T, accessor: NumericAccessor<T>, i?: number): number | null | undefined {\n return getValue<T, number>(d, accessor, i)\n}\n\nexport function getBoolean<T> (d: T, accessor: BooleanAccessor<T>, i?: number): boolean | null | undefined {\n return getValue<T, boolean>(d, accessor, i)\n}\n\nexport function clean<T> (data: T[]): T[] {\n return data.filter(d => d && !isNumber(d))\n}\n\nexport function clamp (d: number, min: number, max: number): number {\n return Math.min(Math.max(d, min), max)\n}\n\nexport function unique<T> (array: T[]): T[] {\n return Array.from(new Set(array))\n}\n\nexport function countUnique<T> (array: T[], accessor = (d: unknown) => d): number {\n return new Set(array.map(d => accessor(d))).size\n}\n\nexport function arrayOfIndices (n: number): number[] {\n return [...Array(n).keys()]\n}\n\nexport function shallowDiff (o1: Record<string, unknown> = {}, o2: Record<string, unknown> = {}): Record<string, unknown> {\n return Object.keys(o2).reduce((diff, key) => {\n if (o1[key] === o2[key]) return diff\n return {\n ...diff,\n [key]: o2[key],\n }\n }, {})\n}\n\nexport function getStackedExtent<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n if (!data) return [undefined, undefined]\n if (isArray(acs)) {\n let minValue = 0\n let maxValue = 0\n data.forEach((d, i) => {\n let positiveStack = 0\n let negativeStack = 0\n for (const a of acs as NumericAccessor<Datum>[]) {\n const value = getNumber(d, a, i) || 0\n if (value >= 0) positiveStack += value\n else negativeStack += value\n }\n\n if (positiveStack > maxValue) maxValue = positiveStack\n if (negativeStack < minValue) minValue = negativeStack\n })\n return [minValue, maxValue]\n }\n}\n\nexport function getStackedValues<Datum> (d: Datum, index: number, ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n const values = []\n\n let positiveStack = 0\n let negativeStack = 0\n for (const a of acs as NumericAccessor<Datum>[]) {\n const value = getNumber(d, a, index) || 0\n if (value >= 0) {\n values.push(positiveStack += value)\n } else {\n values.push(negativeStack += value)\n }\n }\n\n return values\n}\n\nexport function getStackedData<Datum> (\n data: Datum[],\n baseline: NumericAccessor<Datum>,\n acs: NumericAccessor<Datum>[],\n prevNegative?: boolean[] // to help guessing the stack direction (positive/negative) when the values are 0 or null\n): StackValuesRecord[] {\n const baselineValues = data.map((d, i) => getNumber(d, baseline, i) || 0)\n const isNegativeStack = acs.map((a, j) => {\n const average = mean(data, (d, i) => getNumber(d, a, i) || 0)\n return (average === 0 && Array.isArray(prevNegative)) ? prevNegative[j] : average < 0\n })\n\n const stackedData = acs.map(() => [] as StackValuesRecord)\n data.forEach((d, i) => {\n let positiveStack = baselineValues[i]\n let negativeStack = baselineValues[i]\n acs.forEach((a, j) => {\n const value = getNumber(d, a, i) || 0\n if (value >= 0) {\n stackedData[j].push([positiveStack, positiveStack += value])\n } else {\n stackedData[j].push([negativeStack, negativeStack += value])\n }\n })\n })\n\n // Fill in additional stack information\n stackedData.forEach((stack, i) => {\n stack.isMostlyNegative = isNegativeStack[i]\n })\n\n return stackedData\n}\n\nexport function getMin<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): number | undefined {\n if (!data) return undefined\n const minValue = min(data, (d, i) => min(acs as NumericAccessor<Datum>[], a => getNumber(d, a, i)))\n return minValue\n}\n\nexport function getMax<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): number | undefined {\n if (!data) return undefined\n const maxValue = max(data, (d, i) => max(acs as NumericAccessor<Datum>[], a => getNumber(d, a, i)))\n return maxValue\n}\n\nexport function getExtent<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n return [getMin(data, ...acs), getMax(data, ...acs)]\n}\n\nexport function getNearest<Datum> (data: Datum[], value: number, accessor: NumericAccessor<Datum>): Datum {\n if (data.length <= 1) return data[0]\n\n const values = data.map((d, i) => getNumber(d, accessor, i))\n values.sort((a, b) => a - b)\n\n const xBisector = bisector(d => d).left\n const index = xBisector(values, value, 1, data.length - 1)\n return value - values[index - 1] > values[index] - value ? data[index] : data[index - 1]\n}\n\nexport function filterDataByRange<Datum> (data: Datum[], range: [number, number], accessor: NumericAccessor<Datum>): Datum[] {\n const filteredData = data.filter((d, i) => {\n const value = getNumber(d, accessor, i)\n return (value >= range[0]) && (value <= range[1])\n })\n\n return filteredData\n}\n\nexport function isNumberWithinRange (value: number, range: [number, number]): boolean {\n return (value >= range[0]) && (value <= range[1])\n}\n\nexport const ensureArray = <T>(value: T | T[] | null): T[] => {\n if (value === null || value === undefined) {\n return []\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return [value]\n}\n"],"names":["_throttle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.js","sources":["../../src/utils/data.ts"],"sourcesContent":["import { max, min, mean, bisector } from 'd3-array'\nimport { throttle as _throttle } from 'throttle-debounce'\n\n// Types\nimport { NumericAccessor, StringAccessor, BooleanAccessor, ColorAccessor, GenericAccessor } from 'types/accessor'\nimport { StackValuesRecord } from 'types/data'\n\nexport const isNumber = <T>(a: T): a is T extends number ? T : never => typeof a === 'number'\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isFunction = <T>(a: T): a is T extends Function ? T : never => typeof a === 'function'\nexport const isUndefined = <T>(a: T): a is T extends undefined ? T : never => a === undefined\nexport const isNil = <T>(a: T): a is null | undefined => a == null\nexport const isString = <T>(a: T): a is T extends string ? T : never => typeof a === 'string'\nexport const isArray = <T>(a: T): a is T extends any[] ? T : never => Array.isArray(a)\nexport const isObject = <T>(a: T): boolean => (a instanceof Object)\nexport const isAClassInstance = <T>(a: T): boolean => a.constructor.name !== 'Function' && a.constructor.name !== 'Object'\nexport const isPlainObject = <T>(a: T): boolean => isObject(a) && !isArray(a) && !isFunction(a) && !isAClassInstance(a)\n\nexport const isEmpty = <T>(obj: T): boolean => {\n return [Object, Array].includes((obj || {}).constructor as ArrayConstructor | ObjectConstructor) &&\n !Object.entries((obj || {})).length\n}\n\n// Based on https://github.com/maplibre/maplibre-gl-js/blob/e78ad7944ef768e67416daa4af86b0464bd0f617/src/style-spec/util/deep_equal.ts, 3-Clause BSD license\nexport const isEqual = (\n a: unknown | null | undefined,\n b: unknown | null | undefined,\n skipKeys: string[] = [],\n visited: Set<any> = new Set()\n): boolean => {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i], skipKeys, visited)) return false\n }\n\n return true\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n }\n\n if (typeof a === 'object' && a !== null && b !== null) {\n if (!(typeof b === 'object')) return false\n if (a === b) return true\n\n const keysA = Object.keys(a).filter(key => !skipKeys.includes(key))\n const keysB = Object.keys(b).filter(key => !skipKeys.includes(key))\n\n if (keysA.length !== keysB.length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (const key of keysA) {\n if (!isEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key], skipKeys, visited)) return false\n }\n\n return true\n }\n\n return a === b\n}\n\nexport const without = <T>(arr: Array<T>, ...args: T[]): Array<T> => arr.filter(item => !args.includes(item))\nexport const flatten = <T>(arr: Array<T | T[]>): Array<T> => arr.flat() as T[]\nexport const cloneDeep = <T>(obj: T, stack: Map<any, any> = new Map()): T => {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T\n }\n\n if (obj instanceof Array) {\n const clone: unknown[] = []\n stack.set(obj, clone)\n for (const item of obj) {\n clone.push(stack.has(item) ? stack.get(item) : cloneDeep(item, stack))\n }\n return clone as unknown as T\n }\n\n // Class instances will be copied without cloning\n if (isAClassInstance(obj)) {\n const clone = obj\n return clone\n }\n\n if (obj instanceof Object) {\n const clone = {} as T\n stack.set(obj, clone)\n const objAsRecord = obj as Record<string | number, unknown>\n Object.keys(obj)\n .reduce((newObj: typeof objAsRecord, key: string | number): typeof objAsRecord => {\n newObj[key] = stack.has(objAsRecord[key]) ? stack.get(objAsRecord[key]) : cloneDeep(objAsRecord[key], stack)\n return newObj\n }, clone as typeof objAsRecord)\n\n return clone\n }\n\n return obj\n}\n\n\nexport const merge = <T, K>(obj1: T, obj2: K, visited: Map<any, any> = new Map()): T & K => {\n type Rec = Record<string | number, unknown>\n\n if (!obj1 || !obj2) return obj1 as T & K\n if ((obj1 as unknown) === (obj2 as unknown)) return obj1 as T & K\n\n const newObj = (isAClassInstance(obj1 as Rec) ? obj1 : cloneDeep(obj1)) as T & K\n\n // Taking care of recursive structures\n if (visited.has(obj2)) return visited.get(obj2)\n else visited.set(obj2, newObj)\n\n Object.keys(obj2 as Rec).forEach(key => {\n // Preventing prototype pollution\n if (key === '__proto__' || key === 'constructor') return\n\n if (isPlainObject((obj1 as Rec)[key]) && isPlainObject((obj2 as Rec)[key])) {\n (newObj as Rec)[key] = merge((obj1 as Rec)[key], (obj2 as Rec)[key], visited)\n } else if (isAClassInstance(obj2 as Rec)) {\n (newObj as Rec)[key] = obj2\n } else {\n (newObj as Rec)[key] = cloneDeep((obj2 as Rec)[key])\n }\n })\n\n return newObj\n}\n\nexport const omit = <T extends Record<string | number | symbol, unknown>>(obj: T, props: Array<keyof T>): Partial<T> => {\n obj = { ...obj }\n props.forEach(prop => delete obj[prop])\n return obj\n}\n\nexport const groupBy = <T extends Record<string | number, any>> (arr: T[], accessor: (a: T) => string | number): Record<string | number, T[]> => {\n return arr.reduce(\n (grouped, v, i, a, k = accessor(v)) => (((grouped[k] || (grouped[k] = [])).push(v), grouped)),\n {} as Record<string | number, T[]>\n )\n}\n\nexport const sortBy = <T>(arr: Array<T>, accessor: (a: T) => string | number): Array<T> => {\n return arr.concat() // The native sort method modifies the array in place. We use `.concat()` to copy the array first\n .sort((a, b): number => {\n return (accessor(a) > accessor(b)) ? 1 : ((accessor(b) > accessor(a)) ? -1 : 0)\n })\n}\n\nexport const throttle = <T extends (...args: any[]) => any>(\n f: T,\n delay: number,\n options?: {\n noTrailing?: boolean;\n noLeading?: boolean;\n debounceMode?: boolean;\n }\n): _throttle<T> => _throttle(delay, f, options)\n\nexport function getValue<T, ReturnType> (\n d: T,\n accessor: NumericAccessor<T> | StringAccessor<T> | BooleanAccessor<T> | ColorAccessor<T> | GenericAccessor<ReturnType, T>,\n index?: number\n): ReturnType {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (isFunction(accessor)) return (accessor as Function)(d, index) as (ReturnType | null | undefined)\n else return accessor as unknown as (ReturnType | null | undefined)\n}\n\nexport function getString<T> (d: T, accessor: StringAccessor<T>, i?: number): string | null | undefined {\n return getValue<T, string>(d, accessor, i)\n}\n\nexport function getNumber<T> (d: T, accessor: NumericAccessor<T>, i?: number): number | null | undefined {\n return getValue<T, number>(d, accessor, i)\n}\n\nexport function getBoolean<T> (d: T, accessor: BooleanAccessor<T>, i?: number): boolean | null | undefined {\n return getValue<T, boolean>(d, accessor, i)\n}\n\nexport function clean<T> (data: T[]): T[] {\n return data.filter(d => d && !isNumber(d))\n}\n\nexport function clamp (d: number, min: number, max: number): number {\n return Math.min(Math.max(d, min), max)\n}\n\nexport function unique<T> (array: T[]): T[] {\n return Array.from(new Set(array))\n}\n\nexport function countUnique<T> (array: T[], accessor = (d: unknown) => d): number {\n return new Set(array.map(d => accessor(d))).size\n}\n\nexport function arrayOfIndices (n: number): number[] {\n return [...Array(n).keys()]\n}\n\nexport function shallowDiff (o1: Record<string, unknown> = {}, o2: Record<string, unknown> = {}): Record<string, unknown> {\n return Object.keys(o2).reduce((diff, key) => {\n if (o1[key] === o2[key]) return diff\n return {\n ...diff,\n [key]: o2[key],\n }\n }, {})\n}\n\nexport function getStackedExtent<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n if (!data) return [undefined, undefined]\n if (isArray(acs)) {\n let minValue = 0\n let maxValue = 0\n data.forEach((d, i) => {\n let positiveStack = 0\n let negativeStack = 0\n for (const a of acs as NumericAccessor<Datum>[]) {\n const value = getNumber(d, a, i) || 0\n if (value >= 0) positiveStack += value\n else negativeStack += value\n }\n\n if (positiveStack > maxValue) maxValue = positiveStack\n if (negativeStack < minValue) minValue = negativeStack\n })\n return [minValue, maxValue]\n }\n}\n\nexport function getStackedValues<Datum> (d: Datum, index: number, ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n const values = []\n\n let positiveStack = 0\n let negativeStack = 0\n for (const a of acs as NumericAccessor<Datum>[]) {\n const value = getNumber(d, a, index) || 0\n if (value >= 0) {\n values.push(positiveStack += value)\n } else {\n values.push(negativeStack += value)\n }\n }\n\n return values\n}\n\nexport function getStackedData<Datum> (\n data: Datum[],\n baseline: NumericAccessor<Datum>,\n acs: NumericAccessor<Datum>[],\n prevNegative?: boolean[] // to help guessing the stack direction (positive/negative) when the values are 0 or null\n): StackValuesRecord[] {\n const baselineValues = data.map((d, i) => getNumber(d, baseline, i) || 0)\n const isNegativeStack = acs.map((a, j) => {\n const average = mean(data, (d, i) => getNumber(d, a, i) || 0)\n return (average === 0 && Array.isArray(prevNegative)) ? prevNegative[j] : average < 0\n })\n\n const stackedData = acs.map(() => [] as StackValuesRecord)\n data.forEach((d, i) => {\n let positiveStack = baselineValues[i]\n let negativeStack = baselineValues[i]\n acs.forEach((a, j) => {\n const value = getNumber(d, a, i) || 0\n if (value >= 0) {\n stackedData[j].push([positiveStack, positiveStack += value])\n } else {\n stackedData[j].push([negativeStack, negativeStack += value])\n }\n })\n })\n\n // Fill in additional stack information\n stackedData.forEach((stack, i) => {\n stack.isMostlyNegative = isNegativeStack[i]\n })\n\n return stackedData\n}\n\nexport function getMin<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): number | undefined {\n if (!data) return undefined\n const minValue = min(data, (d, i) => min(acs as NumericAccessor<Datum>[], a => getNumber(d, a, i)))\n return minValue\n}\n\nexport function getMax<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): number | undefined {\n if (!data) return undefined\n const maxValue = max(data, (d, i) => max(acs as NumericAccessor<Datum>[], a => getNumber(d, a, i)))\n return maxValue\n}\n\nexport function getExtent<Datum> (data: Datum[], ...acs: NumericAccessor<Datum>[]): (number | undefined)[] {\n return [getMin(data, ...acs), getMax(data, ...acs)]\n}\n\nexport function getNearest<Datum> (data: Datum[], value: number, accessor: NumericAccessor<Datum>): Datum {\n if (data.length <= 1) return data[0]\n\n const values = data.map((d, i) => getNumber(d, accessor, i))\n values.sort((a, b) => a - b)\n\n const xBisector = bisector(d => d).left\n const index = xBisector(values, value, 1, data.length - 1)\n return value - values[index - 1] > values[index] - value ? data[index] : data[index - 1]\n}\n\nexport function filterDataByRange<Datum> (data: Datum[], range: [number, number], accessor: NumericAccessor<Datum>): Datum[] {\n const filteredData = data.filter((d, i) => {\n const value = getNumber(d, accessor, i)\n return (value >= range[0]) && (value <= range[1])\n })\n\n return filteredData\n}\n\nexport function isNumberWithinRange (value: number, range: [number, number]): boolean {\n return (value >= range[0] && value <= range[1]) || (value >= range[1] && value <= range[0])\n}\n\nexport const ensureArray = <T>(value: T | T[] | null): T[] => {\n if (value === null || value === undefined) {\n return []\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return [value]\n}\n"],"names":["_throttle"],"mappings":"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"}
|
package/utils/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { arrayOfIndices, clamp, clean, cloneDeep, countUnique, ensureArray, filterDataByRange, flatten, getBoolean, getExtent, getMax, getMin, getNearest, getNumber, getStackedData, getStackedExtent, getStackedValues, getString, getValue, groupBy, isAClassInstance, isArray, isEmpty, isEqual, isFunction, isNil, isNumber, isNumberWithinRange, isObject, isPlainObject, isString, isUndefined, merge, omit, shallowDiff, sortBy, throttle, unique, without } from './data.js';
|
|
2
|
-
export { allowedSvgTextTags, escapeStringKeepHash, estimateStringPixelLength, estimateTextSize, estimateWrappedTextHeight, getPreciseStringLengthPx, getWrappedText, kebabCase, kebabCaseToCamel, renderTextIntoFrame, renderTextToSvgTextElement, splitString,
|
|
2
|
+
export { allowedSvgTextTags, escapeStringKeepHash, estimateStringPixelLength, estimateTextSize, estimateWrappedTextHeight, getPreciseStringLengthPx, getWrappedText, kebabCase, kebabCaseToCamel, renderTextIntoFrame, renderTextToSvgTextElement, splitString, trimSVGText, trimString, trimStringEnd, trimStringMiddle, trimStringStart, wrapSVGText } from './text.js';
|
|
3
3
|
export { allowedSvgTags, getTransformValues, isStringSvg, sanitizeSvgString, transformValuesToString } from './svg.js';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
4
|
+
export { getColor, getHexValue, hexToBrightness, hexToRgb, rgbToBrightness, rgbaToRgb } from './color.js';
|
|
5
|
+
export { circlePath, convertLineToArc, polygon, roundedRectPath, scoreRectPath } from './path.js';
|
|
6
6
|
export { getCSSVariableValue, getCSSVariableValueInPixels, getHref, getPixelValue, guid, isStringCSSVariable, parseUnit, rectIntersect, stringToHtmlId } from './misc.js';
|
|
7
7
|
import './type.js';
|
|
8
8
|
export { DefaultRange } from './scale.js';
|
package/utils/path.d.ts
CHANGED
|
@@ -23,11 +23,3 @@ export declare type ScoreRectPathOptions = {
|
|
|
23
23
|
};
|
|
24
24
|
export declare function scoreRectPath({ x, y, w, h, r, score }: ScoreRectPathOptions): string;
|
|
25
25
|
export declare function convertLineToArc(path: Path | string, r: number): string;
|
|
26
|
-
/**
|
|
27
|
-
* Generate an SVG path string for an arrow that follows a polyline path.
|
|
28
|
-
* The arrow is composed of line segments between points and a triangular arrowhead at the end.
|
|
29
|
-
*
|
|
30
|
-
* @param opts - ArrowPolylinePathOptions object containing array of points and optional head dimensions.
|
|
31
|
-
* @returns SVG path string for the arrow.
|
|
32
|
-
*/
|
|
33
|
-
export declare function arrowPolylinePath(points: [number, number][], arrowHeadLength?: number, arrowHeadWidth?: number, smoothing?: number): string;
|
package/utils/path.js
CHANGED
|
@@ -147,115 +147,7 @@ function scoreRectPath({ x, y, w, h, r = 0, score = 1 }) {
|
|
|
147
147
|
*/
|
|
148
148
|
function convertLineToArc(path, r) {
|
|
149
149
|
return path.toString().replace(/L(?<x>-?\d*\.?\d*),(?<y>-?\d+\.?\d*)/gm, (_, x, y) => `A ${r} ${r} 0 0 0 ${x} ${y}`);
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Generate an SVG path string for an arrow that follows a polyline path.
|
|
153
|
-
* The arrow is composed of line segments between points and a triangular arrowhead at the end.
|
|
154
|
-
*
|
|
155
|
-
* @param opts - ArrowPolylinePathOptions object containing array of points and optional head dimensions.
|
|
156
|
-
* @returns SVG path string for the arrow.
|
|
157
|
-
*/
|
|
158
|
-
function arrowPolylinePath(points, arrowHeadLength = 8, arrowHeadWidth = 6, smoothing = 5) {
|
|
159
|
-
if (points.length < 2)
|
|
160
|
-
return '';
|
|
161
|
-
// Calculate total path length
|
|
162
|
-
let totalLength = 0;
|
|
163
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
164
|
-
const [x1, y1] = points[i];
|
|
165
|
-
const [x2, y2] = points[i + 1];
|
|
166
|
-
totalLength += Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
|
|
167
|
-
}
|
|
168
|
-
// If the total length is zero or nearly zero, don't draw anything
|
|
169
|
-
if (totalLength === 0)
|
|
170
|
-
return '';
|
|
171
|
-
// Let the default values be modifiable based on the line length
|
|
172
|
-
let headLength = arrowHeadLength;
|
|
173
|
-
let headWidth = arrowHeadWidth;
|
|
174
|
-
// If the line is very short, scale down the arrow head dimensions
|
|
175
|
-
const threshold = arrowHeadLength * 2;
|
|
176
|
-
if (totalLength < threshold) {
|
|
177
|
-
const scale = totalLength / threshold;
|
|
178
|
-
headLength *= scale;
|
|
179
|
-
headWidth *= scale;
|
|
180
|
-
}
|
|
181
|
-
// Ensure the arrow head length is never longer than the line itself
|
|
182
|
-
headLength = Math.min(headLength / 2, totalLength);
|
|
183
|
-
// Get the last two points for arrowhead calculation
|
|
184
|
-
const [lastX, lastY] = points[points.length - 1];
|
|
185
|
-
const [prevX, prevY] = points[points.length - 2];
|
|
186
|
-
// Calculate direction vector for the last segment
|
|
187
|
-
const dx = lastX - prevX;
|
|
188
|
-
const dy = lastY - prevY;
|
|
189
|
-
const segmentLength = Math.sqrt(dx * dx + dy * dy);
|
|
190
|
-
const ux = dx / segmentLength;
|
|
191
|
-
const uy = dy / segmentLength;
|
|
192
|
-
// Tail point of the arrow (where the arrowhead starts)
|
|
193
|
-
const tailX = lastX - headLength * ux;
|
|
194
|
-
const tailY = lastY - headLength * uy;
|
|
195
|
-
// Perpendicular vector for arrowhead width calculation
|
|
196
|
-
const perpX = -uy;
|
|
197
|
-
const perpY = ux;
|
|
198
|
-
// Calculate the two base points of the arrowhead triangle
|
|
199
|
-
const leftX = tailX + (headWidth / 2) * perpX;
|
|
200
|
-
const leftY = tailY + (headWidth / 2) * perpY;
|
|
201
|
-
const rightX = tailX - (headWidth / 2) * perpX;
|
|
202
|
-
const rightY = tailY - (headWidth / 2) * perpY;
|
|
203
|
-
// Build the path
|
|
204
|
-
const pathParts = [];
|
|
205
|
-
if (points.length === 2) {
|
|
206
|
-
// For a single segment, create a curved path
|
|
207
|
-
const [startX, startY] = points[0];
|
|
208
|
-
// Adjust smoothing based on segment length
|
|
209
|
-
const adjustedSmoothing = Math.min(smoothing, segmentLength / 3);
|
|
210
|
-
// Calculate control points for a cubic Bézier curve with adjusted smoothing
|
|
211
|
-
const cp1x = startX + ux * adjustedSmoothing;
|
|
212
|
-
const cp1y = startY + uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;
|
|
213
|
-
const cp2x = tailX - ux * adjustedSmoothing;
|
|
214
|
-
const cp2y = tailY - uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5;
|
|
215
|
-
// Start path and add cubic Bézier curve
|
|
216
|
-
pathParts.push(`M${startX},${startY}`);
|
|
217
|
-
pathParts.push(`C${cp1x},${cp1y} ${cp2x},${cp2y} ${lastX},${lastY}`);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
// For multiple segments, use smooth Bézier corners with absolute smoothing
|
|
221
|
-
pathParts.push(`M${points[0][0]},${points[0][1]}`);
|
|
222
|
-
for (let i = 0; i < points.length - 2; i++) {
|
|
223
|
-
const [x1, y1] = points[i];
|
|
224
|
-
const [x2, y2] = points[i + 1];
|
|
225
|
-
const [x3, y3] = points[i + 2];
|
|
226
|
-
// Calculate vectors for the current and next segment
|
|
227
|
-
const v1x = x2 - x1;
|
|
228
|
-
const v1y = y2 - y1;
|
|
229
|
-
const v2x = x3 - x2;
|
|
230
|
-
const v2y = y3 - y2;
|
|
231
|
-
// Calculate lengths of segments
|
|
232
|
-
const len1 = Math.sqrt(v1x * v1x + v1y * v1y);
|
|
233
|
-
const len2 = Math.sqrt(v2x * v2x + v2y * v2y);
|
|
234
|
-
// Calculate unit vectors
|
|
235
|
-
const u1x = v1x / len1;
|
|
236
|
-
const u1y = v1y / len1;
|
|
237
|
-
const u2x = v2x / len2;
|
|
238
|
-
const u2y = v2y / len2;
|
|
239
|
-
// Adjust smoothing based on the minimum segment length
|
|
240
|
-
const minSegmentLength = Math.min(len1, len2);
|
|
241
|
-
const adjustedSmoothing = Math.min(smoothing, minSegmentLength / 3);
|
|
242
|
-
// Calculate the corner points and control points with adjusted smoothing
|
|
243
|
-
const corner1x = x2 - u1x * adjustedSmoothing;
|
|
244
|
-
const corner1y = y2 - u1y * adjustedSmoothing;
|
|
245
|
-
const corner2x = x2 + u2x * adjustedSmoothing;
|
|
246
|
-
const corner2y = y2 + u2y * adjustedSmoothing;
|
|
247
|
-
// Add line to approach point
|
|
248
|
-
pathParts.push(`L${corner1x},${corner1y}`);
|
|
249
|
-
// Add cubic Bézier curve for the corner
|
|
250
|
-
pathParts.push(`C${x2},${y2} ${x2},${y2} ${corner2x},${corner2y}`);
|
|
251
|
-
}
|
|
252
|
-
// Add the final line segment to the tail point
|
|
253
|
-
pathParts.push(`L${lastX},${lastY}`);
|
|
254
|
-
}
|
|
255
|
-
// Add the arrowhead
|
|
256
|
-
pathParts.push(`M${leftX},${leftY} L${lastX},${lastY} L${rightX},${rightY}`);
|
|
257
|
-
return pathParts.join(' ');
|
|
258
150
|
}
|
|
259
151
|
|
|
260
|
-
export {
|
|
152
|
+
export { circlePath, convertLineToArc, polygon, roundedRectPath, scoreRectPath };
|
|
261
153
|
//# sourceMappingURL=path.js.map
|
package/utils/path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.js","sources":["../../src/utils/path.ts"],"sourcesContent":["import { range, min, max } from 'd3-array'\nimport { line, curveCardinal, curveCardinalClosed } from 'd3-shape'\nimport { Path } from 'd3-path'\n\n// Utils\nimport { clamp } from 'utils/data'\n\nexport type RoundedRectPathOptions = {\n x: number;\n y: number;\n w: number;\n h: number;\n r: number;\n tl: boolean;\n tr: boolean;\n bl: boolean;\n br: boolean;\n}\n\n/*\n * Generate SVG path for rectangle with rounded corners\n *\n * @param {Object} props - Configuration object\n * @param {Number} props.x - Rect top left X coordinate\n * @param {Number} props.y - Rect top left Y coordinate\n * @param {Number} props.w - Rect width\n * @param {Number} props.h - Rect height\n * @param {Bool} [props.tl=false] - Round top left corner\n * @param {Bool} [props.tr=false] - Round top right corner\n * @param {Bool} [props.bl=false] - Round bottom left corner\n * @param {Bool} [props.br=false] - Round bottom right corner\n * @param {Number} [props.r=0] - Corner Radius\n * @return {String} Path string for the `d` attribute\n */\nexport function roundedRectPath ({\n x,\n y,\n w,\n h,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n r = 0,\n}: RoundedRectPathOptions): string {\n let path\n path = `M${x + r},${y}h${w - 2 * r}`\n\n let roundedR = tr ? r : 0\n let angularR = tr ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${roundedR}`\n path += `h${angularR}v${angularR}`\n path += `v${h - 2 * r}`\n\n roundedR = br ? r : 0\n angularR = br ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${roundedR}`\n path += `v${angularR}h${-angularR}`\n path += `h${2 * r - w}`\n\n roundedR = bl ? r : 0\n angularR = bl ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${-roundedR}`\n path += `h${-angularR}v${-angularR}`\n path += `v${2 * r - h}`\n\n roundedR = tl ? r : 0\n angularR = tl ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${-roundedR}`\n path += `v${-angularR}h${angularR}`\n\n path += 'z'\n return path\n}\n\nexport function polygon (size: number, n = 6, endAngle = 2 * Math.PI, open = false): string {\n const r = n === 4 ? Math.sqrt(0.5) * size : size / 3.6 * 2\n const deltaAngle = n === 4 ? Math.PI / 4 : 0 // rotate to 45 grads if shape is a rectangle\n const shiftedEndAngle = endAngle - deltaAngle\n\n const completion = (shiftedEndAngle < 0 ? endAngle : shiftedEndAngle) / (2 * Math.PI)\n const nSegments = Math.ceil(n * completion)\n\n const centerAngle = 1 / n * Math.PI * 2 // /\\\n const baseAngle = (Math.PI - centerAngle) / 2 // /__\\\n\n const data = range(nSegments + (shiftedEndAngle >= 0 ? 1 : 0))\n .map((d, i) => {\n const isLastSegment = i === nSegments || (nSegments === 1 && shiftedEndAngle < 0)\n let mult = isLastSegment ? ((completion * n) % 1 || 1) : 1 // Handle partial shape\n if (shiftedEndAngle < 0) {\n mult += 0.5\n }\n const angle = centerAngle * (i - 1 + mult)\n\n let radius\n if (isLastSegment) {\n const thirdAngle = Math.PI - baseAngle - centerAngle * mult\n radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle) // Law of sines\n } else {\n radius = r\n }\n\n return {\n x: Math.sin(angle + deltaAngle) * radius,\n y: -Math.cos(angle + deltaAngle) * radius,\n }\n })\n\n if (n === 4) {\n const angle = centerAngle * (-1 + 0.5)\n const thirdAngle = Math.PI * 0.5\n const radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle) // Law of sines\n data.unshift({\n x: Math.sin(angle + deltaAngle) * radius,\n y: -Math.cos(angle + deltaAngle) * radius,\n })\n }\n\n const path = line<any>()\n /* eslint-disable-next-line dot-notation */\n .x(d => d['x'])\n /* eslint-disable-next-line dot-notation */\n .y(d => d['y'])\n .curve((open ? curveCardinal : curveCardinalClosed).tension(0.95))\n\n return path(data)\n}\n\nexport function circlePath (cx: number, cy: number, r: number): string {\n return `\n M ${cx} ${cy}\n m ${-r}, 0\n a ${r},${r} 0 1,1 ${r * 2},0\n a ${r},${r} 0 1,1 ${-r * 2},0`\n}\n\nexport type ScoreRectPathOptions = {\n x: number;\n y: number;\n w: number;\n h: number;\n r: number;\n score: number;\n}\n\nexport function scoreRectPath ({ x, y, w, h, r = 0, score = 1 }: ScoreRectPathOptions): string {\n let path\n const side = 1 / 4\n const halfSide = side / 2\n let part = score\n\n // 8 1\n // - -\n // 7 | | 2\n // 6 | | 3\n // - -\n // 5 4\n\n // 1\n const hLength = min([w * 0.5 * (part / halfSide) + r, w * 0.5 - r])\n path = `M${x + w * 0.5},${y}h${hLength}`\n\n // 2, 3\n part = score - 1 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${r},${r}`\n const vLength = clamp(h * (part / side) - r, 0, h - 2 * r)\n path += `v${vLength}`\n }\n\n // 4, 5\n part = score - 3 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${-r},${r}`\n const hLength = clamp(r - w * (part / side), 2 * r - w, 0)\n path += `h${hLength}`\n }\n\n // 6, 7\n part = score - 5 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${-r},${-r}`\n const vLength = clamp(r - h * (part / side), 2 * r - h, 0)\n path += `v${vLength}`\n }\n\n // 8\n part = score - 7 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${r},${-r}`\n const hLength = max([w * 0.5 * (part / halfSide) - r, 0])\n path += `h${hLength}`\n }\n\n return path\n}\n\n/*\n * Replace L path command with arc with specified radius\n * @param {String} path - the path string\n * @param {number} r - radius in pixels\n * @returns {String} new path string\n */\nexport function convertLineToArc (path: Path | string, r: number): string {\n return path.toString().replace(/L(?<x>-?\\d*\\.?\\d*),(?<y>-?\\d+\\.?\\d*)/gm, (_, x, y) => `A ${r} ${r} 0 0 0 ${x} ${y}`)\n}\n\n/**\n * Generate an SVG path string for an arrow that follows a polyline path.\n * The arrow is composed of line segments between points and a triangular arrowhead at the end.\n *\n * @param opts - ArrowPolylinePathOptions object containing array of points and optional head dimensions.\n * @returns SVG path string for the arrow.\n */\nexport function arrowPolylinePath (\n points: [number, number][],\n arrowHeadLength = 8,\n arrowHeadWidth = 6,\n smoothing = 5\n): string {\n if (points.length < 2) return ''\n\n // Calculate total path length\n let totalLength = 0\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i]\n const [x2, y2] = points[i + 1]\n totalLength += Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))\n }\n\n // If the total length is zero or nearly zero, don't draw anything\n if (totalLength === 0) return ''\n\n // Let the default values be modifiable based on the line length\n let headLength = arrowHeadLength\n let headWidth = arrowHeadWidth\n\n // If the line is very short, scale down the arrow head dimensions\n const threshold = arrowHeadLength * 2\n if (totalLength < threshold) {\n const scale = totalLength / threshold\n headLength *= scale\n headWidth *= scale\n }\n\n // Ensure the arrow head length is never longer than the line itself\n headLength = Math.min(headLength / 2, totalLength)\n\n // Get the last two points for arrowhead calculation\n const [lastX, lastY] = points[points.length - 1]\n const [prevX, prevY] = points[points.length - 2]\n\n // Calculate direction vector for the last segment\n const dx = lastX - prevX\n const dy = lastY - prevY\n const segmentLength = Math.sqrt(dx * dx + dy * dy)\n const ux = dx / segmentLength\n const uy = dy / segmentLength\n\n // Tail point of the arrow (where the arrowhead starts)\n const tailX = lastX - headLength * ux\n const tailY = lastY - headLength * uy\n\n // Perpendicular vector for arrowhead width calculation\n const perpX = -uy\n const perpY = ux\n\n // Calculate the two base points of the arrowhead triangle\n const leftX = tailX + (headWidth / 2) * perpX\n const leftY = tailY + (headWidth / 2) * perpY\n const rightX = tailX - (headWidth / 2) * perpX\n const rightY = tailY - (headWidth / 2) * perpY\n\n // Build the path\n const pathParts = []\n\n if (points.length === 2) {\n // For a single segment, create a curved path\n const [startX, startY] = points[0]\n\n // Adjust smoothing based on segment length\n const adjustedSmoothing = Math.min(smoothing, segmentLength / 3)\n\n // Calculate control points for a cubic Bézier curve with adjusted smoothing\n const cp1x = startX + ux * adjustedSmoothing\n const cp1y = startY + uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5\n\n const cp2x = tailX - ux * adjustedSmoothing\n const cp2y = tailY - uy * adjustedSmoothing + perpY * adjustedSmoothing * 0.5\n\n // Start path and add cubic Bézier curve\n pathParts.push(`M${startX},${startY}`)\n pathParts.push(`C${cp1x},${cp1y} ${cp2x},${cp2y} ${lastX},${lastY}`)\n } else {\n // For multiple segments, use smooth Bézier corners with absolute smoothing\n pathParts.push(`M${points[0][0]},${points[0][1]}`)\n\n for (let i = 0; i < points.length - 2; i++) {\n const [x1, y1] = points[i]\n const [x2, y2] = points[i + 1]\n const [x3, y3] = points[i + 2]\n\n // Calculate vectors for the current and next segment\n const v1x = x2 - x1\n const v1y = y2 - y1\n const v2x = x3 - x2\n const v2y = y3 - y2\n\n // Calculate lengths of segments\n const len1 = Math.sqrt(v1x * v1x + v1y * v1y)\n const len2 = Math.sqrt(v2x * v2x + v2y * v2y)\n\n // Calculate unit vectors\n const u1x = v1x / len1\n const u1y = v1y / len1\n const u2x = v2x / len2\n const u2y = v2y / len2\n\n // Adjust smoothing based on the minimum segment length\n const minSegmentLength = Math.min(len1, len2)\n const adjustedSmoothing = Math.min(smoothing, minSegmentLength / 3)\n\n // Calculate the corner points and control points with adjusted smoothing\n const corner1x = x2 - u1x * adjustedSmoothing\n const corner1y = y2 - u1y * adjustedSmoothing\n const corner2x = x2 + u2x * adjustedSmoothing\n const corner2y = y2 + u2y * adjustedSmoothing\n\n // Add line to approach point\n pathParts.push(`L${corner1x},${corner1y}`)\n\n // Add cubic Bézier curve for the corner\n pathParts.push(`C${x2},${y2} ${x2},${y2} ${corner2x},${corner2y}`)\n }\n\n // Add the final line segment to the tail point\n pathParts.push(`L${lastX},${lastY}`)\n }\n\n // Add the arrowhead\n pathParts.push(`M${leftX},${leftY} L${lastX},${lastY} L${rightX},${rightY}`)\n\n return pathParts.join(' ')\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"path.js","sources":["../../src/utils/path.ts"],"sourcesContent":["import { range, min, max } from 'd3-array'\nimport { line, curveCardinal, curveCardinalClosed } from 'd3-shape'\nimport { Path } from 'd3-path'\n\n// Utils\nimport { clamp } from 'utils/data'\n\nexport type RoundedRectPathOptions = {\n x: number;\n y: number;\n w: number;\n h: number;\n r: number;\n tl: boolean;\n tr: boolean;\n bl: boolean;\n br: boolean;\n}\n\n/*\n * Generate SVG path for rectangle with rounded corners\n *\n * @param {Object} props - Configuration object\n * @param {Number} props.x - Rect top left X coordinate\n * @param {Number} props.y - Rect top left Y coordinate\n * @param {Number} props.w - Rect width\n * @param {Number} props.h - Rect height\n * @param {Bool} [props.tl=false] - Round top left corner\n * @param {Bool} [props.tr=false] - Round top right corner\n * @param {Bool} [props.bl=false] - Round bottom left corner\n * @param {Bool} [props.br=false] - Round bottom right corner\n * @param {Number} [props.r=0] - Corner Radius\n * @return {String} Path string for the `d` attribute\n */\nexport function roundedRectPath ({\n x,\n y,\n w,\n h,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n r = 0,\n}: RoundedRectPathOptions): string {\n let path\n path = `M${x + r},${y}h${w - 2 * r}`\n\n let roundedR = tr ? r : 0\n let angularR = tr ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${roundedR}`\n path += `h${angularR}v${angularR}`\n path += `v${h - 2 * r}`\n\n roundedR = br ? r : 0\n angularR = br ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${roundedR}`\n path += `v${angularR}h${-angularR}`\n path += `h${2 * r - w}`\n\n roundedR = bl ? r : 0\n angularR = bl ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${-roundedR},${-roundedR}`\n path += `h${-angularR}v${-angularR}`\n path += `v${2 * r - h}`\n\n roundedR = tl ? r : 0\n angularR = tl ? 0 : r\n path += `a${roundedR},${roundedR} 0 0 1 ${roundedR},${-roundedR}`\n path += `v${-angularR}h${angularR}`\n\n path += 'z'\n return path\n}\n\nexport function polygon (size: number, n = 6, endAngle = 2 * Math.PI, open = false): string {\n const r = n === 4 ? Math.sqrt(0.5) * size : size / 3.6 * 2\n const deltaAngle = n === 4 ? Math.PI / 4 : 0 // rotate to 45 grads if shape is a rectangle\n const shiftedEndAngle = endAngle - deltaAngle\n\n const completion = (shiftedEndAngle < 0 ? endAngle : shiftedEndAngle) / (2 * Math.PI)\n const nSegments = Math.ceil(n * completion)\n\n const centerAngle = 1 / n * Math.PI * 2 // /\\\n const baseAngle = (Math.PI - centerAngle) / 2 // /__\\\n\n const data = range(nSegments + (shiftedEndAngle >= 0 ? 1 : 0))\n .map((d, i) => {\n const isLastSegment = i === nSegments || (nSegments === 1 && shiftedEndAngle < 0)\n let mult = isLastSegment ? ((completion * n) % 1 || 1) : 1 // Handle partial shape\n if (shiftedEndAngle < 0) {\n mult += 0.5\n }\n const angle = centerAngle * (i - 1 + mult)\n\n let radius\n if (isLastSegment) {\n const thirdAngle = Math.PI - baseAngle - centerAngle * mult\n radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle) // Law of sines\n } else {\n radius = r\n }\n\n return {\n x: Math.sin(angle + deltaAngle) * radius,\n y: -Math.cos(angle + deltaAngle) * radius,\n }\n })\n\n if (n === 4) {\n const angle = centerAngle * (-1 + 0.5)\n const thirdAngle = Math.PI * 0.5\n const radius = r * Math.sin(baseAngle) / Math.sin(thirdAngle) // Law of sines\n data.unshift({\n x: Math.sin(angle + deltaAngle) * radius,\n y: -Math.cos(angle + deltaAngle) * radius,\n })\n }\n\n const path = line<any>()\n /* eslint-disable-next-line dot-notation */\n .x(d => d['x'])\n /* eslint-disable-next-line dot-notation */\n .y(d => d['y'])\n .curve((open ? curveCardinal : curveCardinalClosed).tension(0.95))\n\n return path(data)\n}\n\nexport function circlePath (cx: number, cy: number, r: number): string {\n return `\n M ${cx} ${cy}\n m ${-r}, 0\n a ${r},${r} 0 1,1 ${r * 2},0\n a ${r},${r} 0 1,1 ${-r * 2},0`\n}\n\nexport type ScoreRectPathOptions = {\n x: number;\n y: number;\n w: number;\n h: number;\n r: number;\n score: number;\n}\n\nexport function scoreRectPath ({ x, y, w, h, r = 0, score = 1 }: ScoreRectPathOptions): string {\n let path\n const side = 1 / 4\n const halfSide = side / 2\n let part = score\n\n // 8 1\n // - -\n // 7 | | 2\n // 6 | | 3\n // - -\n // 5 4\n\n // 1\n const hLength = min([w * 0.5 * (part / halfSide) + r, w * 0.5 - r])\n path = `M${x + w * 0.5},${y}h${hLength}`\n\n // 2, 3\n part = score - 1 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${r},${r}`\n const vLength = clamp(h * (part / side) - r, 0, h - 2 * r)\n path += `v${vLength}`\n }\n\n // 4, 5\n part = score - 3 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${-r},${r}`\n const hLength = clamp(r - w * (part / side), 2 * r - w, 0)\n path += `h${hLength}`\n }\n\n // 6, 7\n part = score - 5 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${-r},${-r}`\n const vLength = clamp(r - h * (part / side), 2 * r - h, 0)\n path += `v${vLength}`\n }\n\n // 8\n part = score - 7 / 8\n if (part > 0) {\n path += `a${r},${r} 0 0 1 ${r},${-r}`\n const hLength = max([w * 0.5 * (part / halfSide) - r, 0])\n path += `h${hLength}`\n }\n\n return path\n}\n\n/*\n * Replace L path command with arc with specified radius\n * @param {String} path - the path string\n * @param {number} r - radius in pixels\n * @returns {String} new path string\n */\nexport function convertLineToArc (path: Path | string, r: number): string {\n return path.toString().replace(/L(?<x>-?\\d*\\.?\\d*),(?<y>-?\\d+\\.?\\d*)/gm, (_, x, y) => `A ${r} ${r} 0 0 0 ${x} ${y}`)\n}\n"],"names":[],"mappings":"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"}
|
package/utils/text.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Selection } from 'd3-selection';
|
|
2
|
-
import {
|
|
3
|
-
export declare const textAlignToAnchor: (textAlign: TextAlign) => string | null;
|
|
2
|
+
import { TrimMode, UnovisText, UnovisTextFrameOptions, UnovisTextOptions, UnovisWrappedText } from "../types/text";
|
|
4
3
|
/**
|
|
5
4
|
* Converts a kebab-case string to camelCase.
|
|
6
5
|
*
|