@unovis/ts 1.3.0-beta.3 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/area/config.d.ts +6 -10
- package/components/area/config.js +3 -12
- package/components/area/config.js.map +1 -1
- package/components/area/index.d.ts +5 -6
- package/components/area/index.js +10 -9
- package/components/area/index.js.map +1 -1
- package/components/axis/config.d.ts +3 -27
- package/components/axis/config.js +3 -30
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +4 -3
- package/components/axis/index.js +8 -5
- package/components/axis/index.js.map +1 -1
- package/components/brush/config.d.ts +2 -12
- package/components/brush/config.js +11 -20
- package/components/brush/config.js.map +1 -1
- package/components/brush/index.d.ts +4 -3
- package/components/brush/index.js +4 -3
- package/components/brush/index.js.map +1 -1
- package/components/bullet-legend/config.d.ts +1 -10
- package/components/bullet-legend/config.js +11 -14
- package/components/bullet-legend/config.js.map +1 -1
- package/components/bullet-legend/index.d.ts +4 -3
- package/components/bullet-legend/index.js +5 -2
- package/components/bullet-legend/index.js.map +1 -1
- package/components/chord-diagram/config.d.ts +7 -23
- package/components/chord-diagram/config.js +4 -23
- package/components/chord-diagram/config.js.map +1 -1
- package/components/chord-diagram/index.d.ts +4 -3
- package/components/chord-diagram/index.js +8 -7
- package/components/chord-diagram/index.js.map +1 -1
- package/components/chord-diagram/modules/label.d.ts +3 -3
- package/components/chord-diagram/modules/label.js +1 -1
- package/components/chord-diagram/modules/label.js.map +1 -1
- package/components/chord-diagram/modules/link.d.ts +2 -2
- package/components/chord-diagram/modules/link.js.map +1 -1
- package/components/chord-diagram/modules/node.d.ts +2 -2
- package/components/chord-diagram/modules/node.js.map +1 -1
- package/components/chord-diagram/types.d.ts +3 -2
- package/components/chord-diagram/types.js.map +1 -1
- package/components/crosshair/config.d.ts +4 -14
- package/components/crosshair/config.js +3 -16
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +4 -3
- package/components/crosshair/index.js +4 -3
- package/components/crosshair/index.js.map +1 -1
- package/components/donut/config.d.ts +3 -20
- package/components/donut/config.js +3 -24
- package/components/donut/config.js.map +1 -1
- package/components/donut/index.d.ts +4 -3
- package/components/donut/index.js +5 -4
- package/components/donut/index.js.map +1 -1
- package/components/donut/modules/arc.d.ts +3 -3
- package/components/donut/modules/arc.js.map +1 -1
- package/components/flow-legend/config.d.ts +1 -11
- package/components/flow-legend/config.js +11 -16
- package/components/flow-legend/config.js.map +1 -1
- package/components/flow-legend/index.d.ts +4 -3
- package/components/flow-legend/index.js +5 -2
- package/components/flow-legend/index.js.map +1 -1
- package/components/free-brush/config.d.ts +2 -12
- package/components/free-brush/config.js +11 -20
- package/components/free-brush/config.js.map +1 -1
- package/components/free-brush/index.d.ts +4 -3
- package/components/free-brush/index.js +13 -12
- package/components/free-brush/index.js.map +1 -1
- package/components/graph/config.d.ts +3 -75
- package/components/graph/config.js +13 -79
- package/components/graph/config.js.map +1 -1
- package/components/graph/index.d.ts +8 -7
- package/components/graph/index.js +7 -5
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/layout.d.ts +7 -7
- package/components/graph/modules/layout.js +7 -2
- package/components/graph/modules/layout.js.map +1 -1
- package/components/graph/modules/link/helper.d.ts +5 -5
- package/components/graph/modules/link/helper.js.map +1 -1
- package/components/graph/modules/link/index.d.ts +6 -6
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/node/helper.d.ts +1 -1
- package/components/graph/modules/node/helper.js.map +1 -1
- package/components/graph/modules/node/index.d.ts +9 -6
- package/components/graph/modules/node/index.js +7 -9
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/graph/modules/panel/helper.d.ts +4 -4
- package/components/graph/modules/panel/helper.js.map +1 -1
- package/components/graph/modules/panel/index.d.ts +3 -3
- package/components/graph/modules/panel/index.js.map +1 -1
- package/components/graph/modules/shape.js +2 -2
- package/components/graph/modules/shape.js.map +1 -1
- package/components/grouped-bar/config.d.ts +5 -13
- package/components/grouped-bar/config.js +3 -16
- package/components/grouped-bar/config.js.map +1 -1
- package/components/grouped-bar/index.d.ts +5 -9
- package/components/grouped-bar/index.js +5 -15
- package/components/grouped-bar/index.js.map +1 -1
- package/components/leaflet-flow-map/config.d.ts +2 -16
- package/components/leaflet-flow-map/config.js +3 -21
- package/components/leaflet-flow-map/config.js.map +1 -1
- package/components/leaflet-flow-map/index.d.ts +4 -3
- package/components/leaflet-flow-map/index.js +3 -2
- package/components/leaflet-flow-map/index.js.map +1 -1
- package/components/leaflet-map/config.d.ts +4 -59
- package/components/leaflet-map/config.js +24 -68
- package/components/leaflet-map/config.js.map +1 -1
- package/components/leaflet-map/index.d.ts +5 -4
- package/components/leaflet-map/index.js +4 -3
- package/components/leaflet-map/index.js.map +1 -1
- package/components/leaflet-map/modules/clusterBackground.d.ts +4 -2
- package/components/leaflet-map/modules/clusterBackground.js.map +1 -1
- package/components/leaflet-map/modules/map.d.ts +4 -4
- package/components/leaflet-map/modules/map.js +6 -6
- package/components/leaflet-map/modules/map.js.map +1 -1
- package/components/leaflet-map/modules/node.d.ts +3 -0
- package/components/leaflet-map/modules/node.js +8 -12
- package/components/leaflet-map/modules/node.js.map +1 -1
- package/components/leaflet-map/modules/utils.d.ts +4 -4
- package/components/leaflet-map/modules/utils.js +6 -2
- package/components/leaflet-map/modules/utils.js.map +1 -1
- package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +2 -2
- package/components/leaflet-map/renderer/mapboxgl-layer.js.map +1 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +5 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.js +3 -3
- package/components/leaflet-map/renderer/mapboxgl-utils.js.map +1 -1
- package/components/leaflet-map/style.js.map +1 -1
- package/components/leaflet-map/types.d.ts +5 -1
- package/components/leaflet-map/types.js.map +1 -1
- package/components/line/config.d.ts +6 -11
- package/components/line/config.js +3 -13
- package/components/line/config.js.map +1 -1
- package/components/line/index.d.ts +6 -5
- package/components/line/index.js +7 -6
- package/components/line/index.js.map +1 -1
- package/components/nested-donut/config.d.ts +2 -21
- package/components/nested-donut/config.js +3 -24
- package/components/nested-donut/config.js.map +1 -1
- package/components/nested-donut/index.d.ts +4 -3
- package/components/nested-donut/index.js +18 -8
- package/components/nested-donut/index.js.map +1 -1
- package/components/nested-donut/modules/arc.d.ts +3 -3
- package/components/nested-donut/modules/arc.js.map +1 -1
- package/components/nested-donut/modules/label.d.ts +2 -2
- package/components/nested-donut/modules/label.js.map +1 -1
- package/components/nested-donut/style.js.map +1 -1
- package/components/sankey/config.d.ts +3 -48
- package/components/sankey/config.js +11 -58
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +4 -3
- package/components/sankey/index.js +3 -2
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/modules/label.d.ts +7 -7
- package/components/sankey/modules/label.js.map +1 -1
- package/components/sankey/modules/link.d.ts +12 -2
- package/components/sankey/modules/link.js +4 -8
- package/components/sankey/modules/link.js.map +1 -1
- package/components/sankey/modules/node.d.ts +7 -7
- package/components/sankey/modules/node.js +1 -1
- package/components/sankey/modules/node.js.map +1 -1
- package/components/scatter/config.d.ts +5 -17
- package/components/scatter/config.js +3 -19
- package/components/scatter/config.js.map +1 -1
- package/components/scatter/index.d.ts +4 -3
- package/components/scatter/index.js +8 -8
- package/components/scatter/index.js.map +1 -1
- package/components/scatter/modules/point.d.ts +2 -2
- package/components/scatter/modules/point.js.map +1 -1
- package/components/scatter/modules/utils.d.ts +2 -2
- package/components/scatter/modules/utils.js.map +1 -1
- package/components/stacked-bar/config.d.ts +5 -13
- package/components/stacked-bar/config.js +3 -16
- package/components/stacked-bar/config.js.map +1 -1
- package/components/stacked-bar/index.d.ts +4 -3
- package/components/stacked-bar/index.js +4 -3
- package/components/stacked-bar/index.js.map +1 -1
- package/components/timeline/config.d.ts +5 -16
- package/components/timeline/config.js +3 -21
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.d.ts +4 -3
- package/components/timeline/index.js +4 -3
- package/components/timeline/index.js.map +1 -1
- package/components/tooltip/config.d.ts +1 -15
- package/components/tooltip/config.js +12 -16
- package/components/tooltip/config.js.map +1 -1
- package/components/tooltip/index.d.ts +6 -4
- package/components/tooltip/index.js +15 -6
- package/components/tooltip/index.js.map +1 -1
- package/components/tooltip/style.d.ts +6 -0
- package/components/tooltip/style.js +13 -14
- package/components/tooltip/style.js.map +1 -1
- package/components/topojson-map/config.d.ts +4 -36
- package/components/topojson-map/config.js +3 -38
- package/components/topojson-map/config.js.map +1 -1
- package/components/topojson-map/index.d.ts +4 -3
- package/components/topojson-map/index.js +4 -5
- package/components/topojson-map/index.js.map +1 -1
- package/components/vis-controls/config.d.ts +1 -5
- package/components/vis-controls/config.js +6 -9
- package/components/vis-controls/config.js.map +1 -1
- package/components/vis-controls/index.d.ts +3 -2
- package/components/vis-controls/index.js +5 -2
- package/components/vis-controls/index.js.map +1 -1
- package/components/xy-labels/config.d.ts +4 -16
- package/components/xy-labels/config.js +3 -20
- package/components/xy-labels/config.js.map +1 -1
- package/components/xy-labels/index.d.ts +4 -3
- package/components/xy-labels/index.js +3 -2
- package/components/xy-labels/index.js.map +1 -1
- package/components/xy-labels/modules/label.d.ts +3 -3
- package/components/xy-labels/modules/label.js +1 -1
- package/components/xy-labels/modules/label.js.map +1 -1
- package/containers/single-container/config.d.ts +2 -4
- package/containers/single-container/config.js +3 -8
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.d.ts +4 -3
- package/containers/single-container/index.js +2 -2
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +2 -22
- package/containers/xy-container/config.js +3 -26
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +5 -2
- package/containers/xy-container/index.js +7 -6
- package/containers/xy-container/index.js.map +1 -1
- package/core/component/config.d.ts +1 -6
- package/core/component/config.js +6 -12
- package/core/component/config.js.map +1 -1
- package/core/component/index.d.ts +7 -5
- package/core/component/index.js +14 -9
- package/core/component/index.js.map +1 -1
- package/core/container/config.d.ts +1 -21
- package/core/container/config.js +21 -25
- package/core/container/config.js.map +1 -1
- package/core/container/index.d.ts +5 -4
- package/core/container/index.js +4 -3
- package/core/container/index.js.map +1 -1
- package/core/xy-component/config.d.ts +2 -10
- package/core/xy-component/config.js +3 -16
- package/core/xy-component/config.js.map +1 -1
- package/core/xy-component/index.d.ts +5 -4
- package/core/xy-component/index.js +2 -0
- package/core/xy-component/index.js.map +1 -1
- package/data-models/map-graph.d.ts +1 -1
- package/data-models/map-graph.js +4 -7
- package/data-models/map-graph.js.map +1 -1
- package/package.json +3 -1
- package/styles/colors.d.ts +2 -2
- package/styles/index.d.ts +1 -1
- package/styles/patterns.js +2 -1
- package/styles/patterns.js.map +1 -1
- package/types/accessor.d.ts +5 -5
- package/types/component.js +2 -0
- package/types/component.js.map +1 -1
- package/utils/d3.d.ts +10 -1
- package/utils/d3.js.map +1 -1
- package/utils/data.d.ts +7 -7
- package/utils/data.js +2 -1
- package/utils/data.js.map +1 -1
- package/utils/text.js +2 -2
- package/utils/text.js.map +1 -1
- package/core/config/index.d.ts +0 -3
- package/core/config/index.js +0 -16
- package/core/config/index.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.
|
|
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/types/accessor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare type NumericAccessor<Datum> = ((d: Datum, i: number, ...any:
|
|
2
|
-
export declare type StringAccessor<Datum> = ((d: Datum, i: number, ...any:
|
|
3
|
-
export declare type ColorAccessor<Datum> = ((d: Datum, i: number, ...any:
|
|
4
|
-
export declare type BooleanAccessor<Datum> = ((d: Datum, i: number, ...any:
|
|
5
|
-
export declare type GenericAccessor<ReturnType, Datum> = ((d: Datum, i: number, ...any:
|
|
1
|
+
export declare type NumericAccessor<Datum> = ((d: Datum, i: number, ...any: unknown[]) => number | null | undefined) | number | null | undefined;
|
|
2
|
+
export declare type StringAccessor<Datum> = ((d: Datum, i: number, ...any: unknown[]) => string | null | undefined) | string | null;
|
|
3
|
+
export declare type ColorAccessor<Datum> = ((d: Datum, i: number, ...any: unknown[]) => string | null | undefined) | string | string[] | null | undefined;
|
|
4
|
+
export declare type BooleanAccessor<Datum> = ((d: Datum, i: number, ...any: unknown[]) => boolean | null | undefined) | boolean | null | undefined;
|
|
5
|
+
export declare type GenericAccessor<ReturnType, Datum> = ((d: Datum, i: number, ...any: unknown[]) => ReturnType | null | undefined) | ReturnType | null | undefined;
|
package/types/component.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
var ComponentType;
|
|
2
2
|
(function (ComponentType) {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
3
4
|
ComponentType[ComponentType["SVG"] = 0] = "SVG";
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
4
6
|
ComponentType[ComponentType["HTML"] = 1] = "HTML";
|
|
5
7
|
})(ComponentType || (ComponentType = {}));
|
|
6
8
|
var Sizing;
|
package/types/component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../src/types/component.ts"],"sourcesContent":["export enum ComponentType {\n SVG,\n HTML,\n}\n\nexport enum Sizing {\n Fit = 'fit',\n Extend = 'extend',\n FitWidth = 'fit_width',\n}\n\nexport interface ExtendedSizeComponent {\n getWidth?(): number;\n getHeight?(): number;\n}\n"],"names":[],"mappings":"IAAY,
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../src/types/component.ts"],"sourcesContent":["export enum ComponentType {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n SVG,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n HTML,\n}\n\nexport enum Sizing {\n Fit = 'fit',\n Extend = 'extend',\n FitWidth = 'fit_width',\n}\n\nexport interface ExtendedSizeComponent {\n getWidth?(): number;\n getHeight?(): number;\n}\n"],"names":[],"mappings":"IAAY,cAKX;AALD,CAAA,UAAY,aAAa,EAAA;;AAEvB,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG,CAAA;;AAEH,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACN,CAAC,EALW,aAAa,KAAb,aAAa,GAKxB,EAAA,CAAA,CAAA,CAAA;IAEW,OAIX;AAJD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,MAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACxB,CAAC,EAJW,MAAM,KAAN,MAAM,GAIjB,EAAA,CAAA,CAAA;;;;"}
|
package/utils/d3.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
import { Transition } from 'd3-transition';
|
|
2
2
|
import { BaseType, Selection } from 'd3-selection';
|
|
3
|
-
|
|
3
|
+
import { ValueFn } from 'd3';
|
|
4
|
+
export declare function smartTransition<Element extends BaseType, Datum, ParentElement extends BaseType, ParentDatum>(selection: Selection<Element, Datum, ParentElement, ParentDatum>, duration?: number, easing?: (normalizedTime: number) => number): Selection$Transition<Element, Datum, ParentElement, ParentDatum>;
|
|
5
|
+
export interface VisAttrStylePatch<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {
|
|
6
|
+
attr(name: string, value: null | string | number | boolean): this;
|
|
7
|
+
attr(name: string, value: ValueFn<GElement, Datum, string | number | boolean | null>): this;
|
|
8
|
+
style(name: string, value: null): this;
|
|
9
|
+
style(name: string, value: string | number | boolean, priority?: null | 'important'): this;
|
|
10
|
+
style(name: string, value: ValueFn<GElement, Datum, string | number | boolean | null>, priority?: null | 'important'): this;
|
|
11
|
+
}
|
|
12
|
+
export declare type Selection$Transition<Element extends BaseType, Datum, ParentElement extends BaseType, ParentDatum> = (Transition<Element, Datum, ParentElement, ParentDatum> | Selection<Element, Datum, ParentElement, ParentDatum>) & VisAttrStylePatch<Element, Datum, ParentElement, ParentDatum>;
|
package/utils/d3.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d3.js","sources":["../../src/utils/d3.ts"],"sourcesContent":["import { interrupt, Transition } from 'd3-transition'\nimport { BaseType, Selection } from 'd3-selection'\n\nexport function smartTransition<Element extends BaseType, Datum, ParentElement extends BaseType, ParentDatum> (\n selection: Selection<Element, Datum, ParentElement, ParentDatum>,\n duration?: number,\n easing?: (normalizedTime: number) => number\n): Selection
|
|
1
|
+
{"version":3,"file":"d3.js","sources":["../../src/utils/d3.ts"],"sourcesContent":["import { interrupt, Transition } from 'd3-transition'\nimport { BaseType, Selection } from 'd3-selection'\nimport { ValueFn } from 'd3'\n\nexport function smartTransition<Element extends BaseType, Datum, ParentElement extends BaseType, ParentDatum> (\n selection: Selection<Element, Datum, ParentElement, ParentDatum>,\n duration?: number,\n easing?: (normalizedTime: number) => number\n): Selection$Transition<Element, Datum, ParentElement, ParentDatum> {\n selection.nodes().forEach(node => interrupt(node)) // Interrupt active transitions if any\n if (duration) {\n const transition = selection.transition().duration(duration)\n if (easing) transition.ease(easing)\n return transition\n } else return selection\n}\n\nexport interface VisAttrStylePatch<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {\n attr(name: string, value: null | string | number | boolean): this;\n attr(name: string, value: ValueFn<GElement, Datum, string | number | boolean | null>): this;\n style(name: string, value: null): this;\n style(name: string, value: string | number | boolean, priority?: null | 'important'): this;\n style(name: string, value: ValueFn<GElement, Datum, string | number | boolean | null>, priority?: null | 'important'): this;\n}\n\nexport type Selection$Transition<Element extends BaseType, Datum, ParentElement extends BaseType, ParentDatum> =\n (Transition<Element, Datum, ParentElement, ParentDatum> | Selection<Element, Datum, ParentElement, ParentDatum>)\n & VisAttrStylePatch<Element, Datum, ParentElement, ParentDatum>\n"],"names":[],"mappings":";;SAIgB,eAAe,CAC7B,SAAgE,EAChE,QAAiB,EACjB,MAA2C,EAAA;AAE3C,IAAA,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,IAAA,IAAI,QAAQ,EAAE;QACZ,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5D,QAAA,IAAI,MAAM;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACnC,QAAA,OAAO,UAAU,CAAA;AAClB,KAAA;;AAAM,QAAA,OAAO,SAAS,CAAA;AACzB;;;;"}
|
package/utils/data.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { throttle as _throttle } from 'throttle-debounce';
|
|
2
2
|
import { NumericAccessor, StringAccessor, BooleanAccessor, ColorAccessor, GenericAccessor } from "../types/accessor";
|
|
3
3
|
import { StackValuesRecord } from "../types/data";
|
|
4
|
-
export declare const isNumber: <T>(a: T) =>
|
|
5
|
-
export declare const isFunction: <T>(a: T) =>
|
|
6
|
-
export declare const isUndefined: <T>(a: T) =>
|
|
7
|
-
export declare const isNil: <T>(a: T) =>
|
|
8
|
-
export declare const isString: <T>(a: T) =>
|
|
9
|
-
export declare const isArray: <T>(a: T) =>
|
|
4
|
+
export declare const isNumber: <T>(a: T) => a is T extends number ? T : never;
|
|
5
|
+
export declare const isFunction: <T>(a: T) => a is T extends Function ? T : never;
|
|
6
|
+
export declare const isUndefined: <T>(a: T) => a is T extends undefined ? T : never;
|
|
7
|
+
export declare const isNil: <T>(a: T) => a is null;
|
|
8
|
+
export declare const isString: <T>(a: T) => a is T extends string ? T : never;
|
|
9
|
+
export declare const isArray: <T>(a: T) => a is T extends any[] ? T : never;
|
|
10
10
|
export declare const isObject: <T>(a: T) => boolean;
|
|
11
11
|
export declare const isAClassInstance: <T>(a: T) => boolean;
|
|
12
12
|
export declare const isPlainObject: <T>(a: T) => boolean;
|
|
@@ -31,7 +31,7 @@ export declare function getBoolean<T>(d: T, accessor: BooleanAccessor<T>, i?: nu
|
|
|
31
31
|
export declare function clean<T>(data: T[]): T[];
|
|
32
32
|
export declare function clamp(d: number, min: number, max: number): number;
|
|
33
33
|
export declare function unique<T>(array: T[]): T[];
|
|
34
|
-
export declare function countUnique<T>(array: T[], accessor?: (d:
|
|
34
|
+
export declare function countUnique<T>(array: T[], accessor?: (d: unknown) => unknown): number;
|
|
35
35
|
export declare function arrayOfIndices(n: number): number[];
|
|
36
36
|
export declare function shallowDiff(o1?: Record<string, unknown>, o2?: Record<string, unknown>): Record<string, unknown>;
|
|
37
37
|
export declare function getStackedExtent<Datum>(data: Datum[], ...acs: NumericAccessor<Datum>[]): (number | undefined)[];
|
package/utils/data.js
CHANGED
|
@@ -2,6 +2,7 @@ import { mean, min, max, bisector } from 'd3-array';
|
|
|
2
2
|
import { throttle as throttle$1 } from 'throttle-debounce';
|
|
3
3
|
|
|
4
4
|
const isNumber = (a) => typeof a === 'number';
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
5
6
|
const isFunction = (a) => typeof a === 'function';
|
|
6
7
|
const isUndefined = (a) => a === undefined;
|
|
7
8
|
const isNil = (a) => a == null;
|
|
@@ -154,7 +155,7 @@ function clamp(d, min, max) {
|
|
|
154
155
|
function unique(array) {
|
|
155
156
|
return Array.from(new Set(array));
|
|
156
157
|
}
|
|
157
|
-
function countUnique(array, accessor = d => d) {
|
|
158
|
+
function countUnique(array, accessor = (d) => d) {
|
|
158
159
|
return new Set(array.map(d => accessor(d))).size;
|
|
159
160
|
}
|
|
160
161
|
function arrayOfIndices(n) {
|
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): boolean => typeof a === 'number'\nexport const isFunction = <T>(a: T): boolean => typeof a === 'function'\nexport const isUndefined = <T>(a: T): boolean => a === undefined\nexport const isNil = <T>(a: T): boolean => a == null\nexport const isString = <T>(a: T): boolean => typeof a === 'string'\nexport const isArray = <T>(a: T): boolean => 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 = (a?: unknown | null, b?: unknown | null, visited: Set<any> = new Set()): 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], 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 keys = Object.keys(a)\n if (keys.length !== Object.keys(b).length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (const key in a) {\n if (!isEqual(a[key], b[key], 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 => 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: StackValuesRecord[] = acs.map(() => [])\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 (!isNegativeStack[j]) {\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.negative = isNegativeStack[i]\n })\n\n stackedData.filter(s => s.negative)\n .forEach((s, i, arr) => {\n s.ending = i === arr.length - 1\n })\n\n stackedData.filter(s => !s.negative)\n .forEach((s, i, arr) => {\n s.ending = i === arr.length - 1\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"],"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 = (a?: unknown | null, b?: unknown | null, visited: Set<any> = new Set()): 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], 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 keys = Object.keys(a)\n if (keys.length !== Object.keys(b).length) return false\n\n if (visited.has(a)) return true\n else visited.add(a)\n\n for (const key in a) {\n if (!isEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key], 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: StackValuesRecord[] = acs.map(() => [])\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 (!isNegativeStack[j]) {\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.negative = isNegativeStack[i]\n })\n\n stackedData.filter(s => s.negative)\n .forEach((s, i, arr) => {\n s.ending = i === arr.length - 1\n })\n\n stackedData.filter(s => !s.negative)\n .forEach((s, i, arr) => {\n s.ending = i === arr.length - 1\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"],"names":["_throttle"],"mappings":"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"}
|
package/utils/text.js
CHANGED
|
@@ -87,10 +87,10 @@ function splitString(text, separators = [' ']) {
|
|
|
87
87
|
let result = [text];
|
|
88
88
|
for (let i = 0; i < separators.length; i++) {
|
|
89
89
|
const sep = separators[i];
|
|
90
|
-
result.forEach((d,
|
|
90
|
+
result.forEach((d, index) => {
|
|
91
91
|
const separated = d.split(sep);
|
|
92
92
|
const words = separated.map((word, j) => `${word}${j === separated.length - 1 ? '' : sep}`);
|
|
93
|
-
result[
|
|
93
|
+
result[index] = words;
|
|
94
94
|
});
|
|
95
95
|
result = flatten(result);
|
|
96
96
|
}
|
package/utils/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sources":["../../src/utils/text.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { sum } from 'd3-array'\nimport striptags from 'striptags'\n\n// Types\nimport { TextAlign, TrimMode, UnovisText, UnovisTextFrameOptions, UnovisTextOptions, UnovisWrappedText, VerticalAlign } from 'types/text'\n\n// Utils\nimport { flatten, isArray, merge } from 'utils/data'\nimport { getTextAnchorFromTextAlign } from 'types/svg'\n\n// Styles\nimport { getFontWidthToHeightRatio, UNOVIS_TEXT_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT } from 'styles/index'\n\n/**\n * Converts a kebab-case string to camelCase.\n *\n * @param {string} str - The kebab-case string to be converted.\n * @returns {string} The resulting camelCase string.\n */\nexport function kebabCaseToCamel (str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n}\n\n/**\n * Converts a given string to kebab-case.\n * @param {string} str - The input string to be converted to kebab-case.\n * @returns {string} - The kebab-cased string.\n */\nexport function kebabCase (str: string): string {\n return str.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g)\n ?.filter(Boolean)\n .map(x => x.toLowerCase())\n .join('-')\n}\n\nexport function escapeStringKeepHash (str: string): string {\n return str\n .replace(/['\"]/g, ''') // Escapes quotes with '\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '\\\\0') // Escapes null characters\n .replace(/\\n/g, '\\\\n') // Escapes new lines\n .replace(/\\r/g, '\\\\r') // Escapes carriage returns\n .replace(/\\v/g, '\\\\v') // Escapes vertical tabs\n .replace(/\\t/g, '\\\\t') // Escapes horizontal tabs\n .replace(/\\f/g, '\\\\f') // Escapes form feeds\n}\n\n/**\n * Trims the input string from the start, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringStart (str = '', maxLength = 15): string {\n return str.length > maxLength ? `…${str.substr(str.length - maxLength, maxLength)}` : str\n}\n\n/**\n * Trims the input string from the middle, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringMiddle (str = '', maxLength = 15): string {\n const dist = Math.floor((maxLength - 3) / 2)\n return str.length > maxLength ? `${str.substr(0, dist)}…${str.substr(-dist, dist)}` : str\n}\n\n/**\n * Trims the input string from the end, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringEnd (str = '', maxLength = 15): string {\n return str.length > maxLength ? `${str.substr(0, maxLength)}…` : str\n}\n\n/**\n * Trims the input string according to the specified trim mode.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [length=15] - The maximum allowed length of the trimmed string.\n * @param {TrimMode} [type=TrimMode.Middle] - The trim mode to be applied.\n * @returns {string} - The trimmed string.\n */\nexport function trimString (str = '', length = 15, type = TrimMode.Middle): string {\n let result = trimStringEnd(str, length)\n if (type === TrimMode.Start) result = trimStringStart(str, length)\n else if (type === TrimMode.Middle) result = trimStringMiddle(str, length)\n return result\n}\n\n/**\n * Splits the input string according to the specified separators.\n * @param {string} text - The input string to be split.\n * @param {string[]} [separators=[' ']] - The array of separators to be used for splitting.\n * @returns {string[]} - The array of split words.\n */\nexport function splitString (text: string, separators = [' ']): string[] {\n let result = [text] as any[]\n for (let i = 0; i < separators.length; i++) {\n const sep = separators[i]\n result.forEach((d, id) => {\n const separated = d.split(sep)\n const words = separated.map((word, j) => `${word}${j === separated.length - 1 ? '' : sep}`)\n result[id] = words\n })\n result = flatten(result)\n }\n\n return result\n}\n\n/**\n * Wraps an SVG text element to fit within the specified width.\n * @param {Selection<SVGTextElement, any, SVGElement, any>} textElement - The SVG text element to be wrapped.\n * @param {number} width - The maximum allowed width for the text element.\n * @param {(string | string[])} [separator=[' ', '-', '.', ',']] - The separator(s) to be used for wrapping.\n */\nexport function wrapSVGText (\n textElement: Selection<SVGTextElement, any, SVGElement, any>,\n width: number,\n separator: string | string[] = [' ', '-', '.', ',']\n): void {\n const text = textElement.text()\n if (!text) return\n\n // Wrap\n const separators = (isArray(separator) ? separator : [separator]) as string[]\n const words = splitString(text, separators)\n const x = parseFloat(textElement.attr('x')) || 0\n\n textElement.text('')\n let tspan = textElement.append('tspan').attr('x', x)\n let tspanContent = `${words[0]}`\n tspan.text(tspanContent)\n\n words.forEach((word, i) => {\n if (i === 0) return\n\n const tspanText = `${tspanContent}${word}`\n tspan.text(tspanText)\n const tspanWidth = tspan.node().getComputedTextLength()\n if (tspanWidth > width) {\n tspan.text(tspanContent.trim())\n\n tspan = textElement.append('tspan')\n .attr('x', x)\n .attr('dy', '1.2em')\n .text(word)\n\n tspanContent = word\n } else tspanContent += word\n })\n}\n\n/**\n * Trims an SVG text element based on the specified max width, trim type, and other options.\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.\n * @param {number} [maxWidth=50] - The maximum width of the text element.\n * @param {TrimMode} [trimType=TrimMode.Middle] - The type of trim (start, middle, or end).\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method for text length calculation.\n * @param {number} [fontSize=0] - The font size of the text.\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\n * @returns {boolean} True if the text was trimmed, false otherwise.\n */\nexport function trimSVGText (\n svgTextSelection: Selection<SVGTextElement, any, SVGElement, any>,\n maxWidth = 50,\n trimType = TrimMode.Middle,\n fastMode = true,\n fontSize = +window.getComputedStyle(svgTextSelection.node())?.fontSize || 0,\n fontWidthToHeightRatio = getFontWidthToHeightRatio()\n): boolean {\n const text = svgTextSelection.text()\n const textLength = text.length\n\n const textWidth = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength()\n const tolerance = 1.1\n const maxCharacters = Math.ceil(textLength * maxWidth / (tolerance * textWidth))\n if (maxCharacters < textLength) {\n svgTextSelection.text(trimString(text, maxCharacters, trimType))\n return true\n }\n\n return false\n}\n\n/**\n * Estimates the length of a string in pixels.\n * @param {string} str - The string to be measured.\n * @param {number} fontSize - The font size of the string.\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\n * @returns {number} The estimated length of the string in pixels.\n */\nexport function estimateStringPixelLength (\n str: string,\n fontSize: number,\n fontWidthToHeightRatio = getFontWidthToHeightRatio()\n): number {\n return str.length * fontSize * fontWidthToHeightRatio || 0\n}\n\n/**\n * Calculates the precise length of a string in pixels.\n * @param {string} str - The string to be measured.\n * @param {string} [fontFamily] - The font family of the string.\n * @param {(string | number)} [fontSize] - The font size of the string.\n * @returns {number} The precise length of the string in pixels.\n */\nexport function getPreciseStringLengthPx (str: string, fontFamily?: string, fontSize?: string | number): number {\n const svgNS = 'http://www.w3.org/2000/svg'\n const svg = document.createElementNS(svgNS, 'svg')\n const text = document.createElementNS(svgNS, 'text')\n\n text.textContent = str\n text.setAttribute('font-size', `${fontSize}`)\n text.setAttribute('font-family', fontFamily)\n\n svg.appendChild(text)\n document.body.appendChild(svg)\n const length = text.getComputedTextLength()\n document.body.removeChild(svg)\n\n return length\n}\n\n/**\n * Estimates the dimensions of an SVG text element.\n *\n * @export\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element.\n * @param {number} fontSize - The font size.\n * @param {number} [dy=0.32] - The line height scaling factor.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {number} [fontWidthToHeightRatio] - The font width-to-height ratio.\n * @returns {{width: number, height: number}} - The estimated dimensions of the text element.\n */\nexport function estimateTextSize (\n svgTextSelection: Selection<SVGTextElement, any, SVGElement, any>,\n fontSize: number,\n dy = 0.32,\n fastMode = true,\n fontWidthToHeightRatio?: number\n): { width: number; height: number } {\n fontWidthToHeightRatio = fontWidthToHeightRatio || getFontWidthToHeightRatio()\n const tspanSelection = svgTextSelection.selectAll('tspan')\n\n const lines = tspanSelection.size() || 1\n const height = svgTextSelection.text() ? 0.85 * fontSize * lines * (1 + dy) - dy : 0\n\n let width = 0\n if (tspanSelection.empty()) {\n const textLength = svgTextSelection.text().length\n width = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength()\n } else {\n for (const tspan of tspanSelection.nodes()) {\n const tspanTextLength = (tspan as SVGTSpanElement).textContent.length\n const w = fastMode ? fontSize * tspanTextLength * fontWidthToHeightRatio : (tspan as SVGTSpanElement).getComputedTextLength()\n if (w > width) width = w\n }\n }\n\n return { width, height }\n}\n\n/**\n * Breaks a text block into lines based on the specified width.\n *\n * @param {UnovisText} textBlock - The text block to break into lines.\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\n * @param {(number | undefined)} [height=undefined] - The height limit for the wrapped text in pixels.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {string | string[]} [separator] - The word separators.\n * @returns {string[]} - The text split into lines.\n */\nfunction breakTextIntoLines (\n textBlock: UnovisText,\n width: number | undefined = undefined,\n fastMode = true,\n separator: string | string[] = UNOVIS_TEXT_SEPARATOR_DEFAULT,\n wordBreak = false\n): string[] {\n const text = `${textBlock.text}`\n if (!text) return []\n const separators = Array.isArray(separator) ? separator : [separator]\n\n const splitByNewLine = text.split('\\n')\n return splitByNewLine.map((str) => {\n const lines: string[] = []\n if (!width) return [str]\n\n const words = splitString(str, separators)\n let line = ''\n for (let i = 0; i < words.length; i += 1) {\n const textLengthPx = fastMode\n ? estimateStringPixelLength(line + words[i], textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(line + words[i], textBlock.fontFamily, textBlock.fontSize)\n\n if (textLengthPx < width || i === 0) {\n line += words[i]\n } else {\n lines.push(line.trim())\n line = words[i]\n }\n\n // Word break functionality\n const minCharactersOnLine = 2\n if (wordBreak) {\n while (line.trim().length > minCharactersOnLine) {\n const subLineLengthPx = fastMode\n ? estimateStringPixelLength(line, textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(line, textBlock.fontFamily, textBlock.fontSize)\n\n if (subLineLengthPx > width) {\n let breakIndex = (line.trim()).length - minCharactersOnLine // Place at least `minCharactersOnLine` characters onto the next line\n while (breakIndex > 0) {\n const subLine = `${line.substring(0, breakIndex)}${UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT}` // Use hyphen when force breaking words\n const subLinePx = fastMode\n ? estimateStringPixelLength(subLine, textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(subLine, textBlock.fontFamily, textBlock.fontSize)\n\n // If the subline is less than the width, or just one character left, break the line\n if (subLinePx <= width || breakIndex === 1) {\n lines.push(subLine.trim())\n line = line.substring(breakIndex)\n break\n }\n breakIndex--\n }\n } else {\n break\n }\n }\n }\n }\n\n // Adding the final line after the loop\n if (line) lines.push(line.trim())\n\n return lines\n }).flat()\n}\n\n/**\n * Wraps a text or array of texts to fit within specified width and height, if provided.\n *\n * @export\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to wrap.\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {string | string[]} [separator] - The word separators.\n * @returns {UnovisWrappedText[]} - The wrapped texts.\n */\nexport function getWrappedText (\n text: UnovisText | UnovisText[],\n width: number | undefined = undefined,\n height: number | undefined = undefined,\n fastMode = true,\n separator: string | string[] = UNOVIS_TEXT_SEPARATOR_DEFAULT,\n wordBreak = false\n): UnovisWrappedText[] {\n // Merge input text with default values and convert it to an array if it's not already\n const textArrays = Array.isArray(text) ? text.map(t => merge(UNOVIS_TEXT_DEFAULT, t)) : [merge(UNOVIS_TEXT_DEFAULT, text)]\n\n // Break input text into lines based on width and separator\n const textWrapped: Array<string[]> = textArrays.map(block => breakTextIntoLines(block, width, fastMode, separator, wordBreak))\n\n const firstBlock = textArrays[0]\n let h = -firstBlock.fontSize * (firstBlock.lineHeight - 1)\n const blocks: UnovisWrappedText[] = []\n\n // Process each text block and its lines based on height limit\n textArrays.forEach((text, i) => {\n let lines = textWrapped[i]\n\n const prevBlock = i > 0 ? blocks[i - 1] : undefined\n const prevBlockMarginBottomPx = prevBlock ? prevBlock.marginBottom : 0\n const marginTopPx = text.marginTop\n const effectiveMarginPx = Math.max(prevBlockMarginBottomPx, marginTopPx)\n\n h += effectiveMarginPx\n const dh = text.fontSize * text.lineHeight\n // Iterate over lines and handle text overflow based on the height limit if provided\n for (let k = 0; k < lines.length; k += 1) {\n let line = lines[k]\n h += dh\n\n if (height && (h + dh) > height && (k !== lines.length - 1)) {\n // Remove hyphen character from the end of the line if it's there\n const lastCharacter = line.charAt(line.length - 1)\n if (lastCharacter === UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) {\n line = line.substr(0, lines[k].length - 1)\n }\n\n const lineWithEllipsis = `${line} …`\n const textLengthPx = fastMode\n ? estimateStringPixelLength(lineWithEllipsis, text.fontSize, text.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(lineWithEllipsis, text.fontFamily, text.fontSize)\n\n if (textLengthPx < width) {\n lines[k] = lineWithEllipsis\n } else {\n lines[k] = `${lines[k].substr(0, lines[k].length - 2)}…`\n }\n\n lines = lines.slice(0, k + 1)\n break\n }\n }\n\n // Create wrapped text block with its calculated properties\n blocks.push({ ...text, _lines: lines, _estimatedHeight: h - (prevBlock?._estimatedHeight || 0) })\n })\n\n return blocks\n}\n\n\n/**\n * Renders a text or array of texts to SVG tspan strings.\n *\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\n * @param {number} [x=0] - The x-coordinate for the tspan elements.\n * @param {number} [y] - The y-coordinate for the tspan elements.\n * @returns {string[]} - The SVG tspan strings.\n */\nfunction renderTextToTspanStrings (blocks: UnovisWrappedText[], x = 0, y?: number): string[] {\n return blocks.map((b, i) => {\n const prevBlock = i > 0 ? blocks[i - 1] : undefined\n const prevBlockMarginBottomEm = prevBlock ? prevBlock.marginBottom / prevBlock.fontSize : 0\n const marginTopEm = b.marginTop / b.fontSize\n const marginEm = Math.max(prevBlockMarginBottomEm, marginTopEm)\n const attributes = {\n fontSize: b.fontSize,\n fontFamily: b.fontFamily,\n fontWeight: b.fontWeight,\n fill: b.color,\n y: (i === 0) && y,\n }\n\n const attributesString = Object.entries(attributes)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${kebabCase(key)}=\"${escapeStringKeepHash(value.toString())}\"`)\n .join(' ')\n\n return `<tspan xmlns=\"http://www.w3.org/2000/svg\" ${attributesString}>${b._lines.map((line, k) => {\n let dy: number\n if (i === 0 && k === 0) dy = 0.8 + marginEm\n else if (k === 0) dy = marginEm + b.lineHeight\n else dy = b.lineHeight\n\n return `<tspan x=\"${x}\" dy=\"${dy}em\">${line.length ? line : ' '}</tspan>`\n }).join('')}</tspan>`\n })\n}\n\n/**\n * Estimates the height of wrapped text blocks.\n *\n * @export\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\n * @returns {number} - The estimated height of the wrapped text blocks.\n */\nexport function estimateWrappedTextHeight (blocks: UnovisWrappedText[]): number {\n return sum(blocks, b => b._estimatedHeight)\n}\n\nexport const allowedSvgTextTags = ['text', 'tspan', 'textPath', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyphRef', 'textRef', 'textArea']\n/**\n * Renders a text or array of texts to an SVG text element.\n * Calling this function will replace the contents of the specified SVG text element.\n *\n * @export\n * @param {SVGTextElement} textElement - The SVG text element to render the text into.\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\n * @param {UnovisTextOptions} options - The text options.\n */\nexport function renderTextToSvgTextElement (\n textElement: SVGTextElement,\n text: UnovisText | UnovisText[],\n options: UnovisTextOptions\n): void {\n const wrappedText = getWrappedText(text, options.width, undefined, options.fastMode, options.separator, options.wordBreak)\n const textElementX = options.x ?? +textElement.getAttribute('x')\n const textElementY = options.y ?? +textElement.getAttribute('y')\n const x = textElementX ?? 0\n let y = textElementY ?? 0\n if (options.textAlign) textElement.setAttribute('text-anchor', getTextAnchorFromTextAlign(options.textAlign))\n if (options.verticalAlign && options.verticalAlign !== VerticalAlign.Top) {\n const height = estimateWrappedTextHeight(wrappedText)\n const dy = options.verticalAlign === VerticalAlign.Middle ? -height / 2\n : options.verticalAlign === VerticalAlign.Bottom ? -height : 0\n\n y += dy\n }\n\n const parser = new DOMParser()\n textElement.textContent = ''\n wrappedText.forEach(block => {\n const svgCode = renderTextToTspanStrings([block], x, y).join('')\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags)\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild\n textElement.appendChild(parsedSvgCode)\n })\n}\n\n/**\n * Renders a text or array of texts into a frame.\n * Calling this function will replace the contents of the specified SVG group.\n *\n * @export\n * @param {SVGGElement} group - The SVG group element to render the text into.\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\n * @param {UnovisTextFrameOptions} frameOptions - The text frame options.\n */\nexport function renderTextIntoFrame (\n group: SVGGElement,\n text: UnovisText | UnovisText[],\n frameOptions: UnovisTextFrameOptions\n): void {\n const wrappedText = getWrappedText(text, frameOptions.width, frameOptions.height, frameOptions.fastMode, frameOptions.separator, frameOptions.wordBreak)\n\n const x = frameOptions.textAlign === TextAlign.Center ? frameOptions.width / 2\n : frameOptions.textAlign === TextAlign.Right ? frameOptions.width : 0\n\n let y = 0\n const height = estimateWrappedTextHeight(wrappedText)\n\n // If the frame has height, the text will be vertically aligned within the frame.\n // If not, the text will be aligned against the `y` position of the frame.\n const dh = frameOptions.height - height\n y = frameOptions.verticalAlign === VerticalAlign.Middle ? dh / 2\n : frameOptions.verticalAlign === VerticalAlign.Bottom ? dh : 0\n\n\n const translate = (frameOptions.x || frameOptions.y)\n ? `transform=\"translate(${frameOptions.x ?? 0},${frameOptions.y ?? 0})\"`\n : ''\n\n const svgCode =\n `<text\n xmlns=\"http://www.w3.org/2000/svg\"\n text-anchor=\"${getTextAnchorFromTextAlign(frameOptions.textAlign)}\"\n ${translate}\n >\n ${renderTextToTspanStrings(wrappedText, x, y).join('')}\n </text>`\n\n const parser = new DOMParser()\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags)\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild\n\n group.textContent = ''\n group.appendChild(parsedSvgCode)\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text.js","sources":["../../src/utils/text.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { sum } from 'd3-array'\nimport striptags from 'striptags'\n\n// Types\nimport { TextAlign, TrimMode, UnovisText, UnovisTextFrameOptions, UnovisTextOptions, UnovisWrappedText, VerticalAlign } from 'types/text'\n\n// Utils\nimport { flatten, isArray, merge } from 'utils/data'\nimport { getTextAnchorFromTextAlign } from 'types/svg'\n\n// Styles\nimport { getFontWidthToHeightRatio, UNOVIS_TEXT_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT } from 'styles/index'\n\n/**\n * Converts a kebab-case string to camelCase.\n *\n * @param {string} str - The kebab-case string to be converted.\n * @returns {string} The resulting camelCase string.\n */\nexport function kebabCaseToCamel (str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n}\n\n/**\n * Converts a given string to kebab-case.\n * @param {string} str - The input string to be converted to kebab-case.\n * @returns {string} - The kebab-cased string.\n */\nexport function kebabCase (str: string): string {\n return str.match(/[A-Z]{2,}(?=[A-Z][a-z0-9]*|\\b)|[A-Z]?[a-z0-9]*|[A-Z]|[0-9]+/g)\n ?.filter(Boolean)\n .map(x => x.toLowerCase())\n .join('-')\n}\n\nexport function escapeStringKeepHash (str: string): string {\n return str\n .replace(/['\"]/g, ''') // Escapes quotes with '\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '\\\\0') // Escapes null characters\n .replace(/\\n/g, '\\\\n') // Escapes new lines\n .replace(/\\r/g, '\\\\r') // Escapes carriage returns\n .replace(/\\v/g, '\\\\v') // Escapes vertical tabs\n .replace(/\\t/g, '\\\\t') // Escapes horizontal tabs\n .replace(/\\f/g, '\\\\f') // Escapes form feeds\n}\n\n/**\n * Trims the input string from the start, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringStart (str = '', maxLength = 15): string {\n return str.length > maxLength ? `…${str.substr(str.length - maxLength, maxLength)}` : str\n}\n\n/**\n * Trims the input string from the middle, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringMiddle (str = '', maxLength = 15): string {\n const dist = Math.floor((maxLength - 3) / 2)\n return str.length > maxLength ? `${str.substr(0, dist)}…${str.substr(-dist, dist)}` : str\n}\n\n/**\n * Trims the input string from the end, leaving only the specified maximum length.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [maxLength=15] - The maximum allowed length of the trimmed string.\n * @returns {string} - The trimmed string.\n */\nexport function trimStringEnd (str = '', maxLength = 15): string {\n return str.length > maxLength ? `${str.substr(0, maxLength)}…` : str\n}\n\n/**\n * Trims the input string according to the specified trim mode.\n * @param {string} [str=''] - The input string to be trimmed.\n * @param {number} [length=15] - The maximum allowed length of the trimmed string.\n * @param {TrimMode} [type=TrimMode.Middle] - The trim mode to be applied.\n * @returns {string} - The trimmed string.\n */\nexport function trimString (str = '', length = 15, type = TrimMode.Middle): string {\n let result = trimStringEnd(str, length)\n if (type === TrimMode.Start) result = trimStringStart(str, length)\n else if (type === TrimMode.Middle) result = trimStringMiddle(str, length)\n return result\n}\n\n/**\n * Splits the input string according to the specified separators.\n * @param {string} text - The input string to be split.\n * @param {string[]} [separators=[' ']] - The array of separators to be used for splitting.\n * @returns {string[]} - The array of split words.\n */\nexport function splitString (text: string, separators = [' ']): string[] {\n let result = [text] as Array<string | string[]>\n for (let i = 0; i < separators.length; i++) {\n const sep = separators[i]\n result.forEach((d, index) => {\n const separated = (d as string).split(sep)\n const words = separated.map((word, j) => `${word}${j === separated.length - 1 ? '' : sep}`)\n result[index] = words\n })\n result = flatten(result)\n }\n\n return result as string[]\n}\n\n/**\n * Wraps an SVG text element to fit within the specified width.\n * @param {Selection<SVGTextElement, any, SVGElement, any>} textElement - The SVG text element to be wrapped.\n * @param {number} width - The maximum allowed width for the text element.\n * @param {(string | string[])} [separator=[' ', '-', '.', ',']] - The separator(s) to be used for wrapping.\n */\nexport function wrapSVGText (\n textElement: Selection<SVGTextElement, any, SVGElement, any>,\n width: number,\n separator: string | string[] = [' ', '-', '.', ',']\n): void {\n const text = textElement.text()\n if (!text) return\n\n // Wrap\n const separators = (isArray(separator) ? separator : [separator]) as string[]\n const words = splitString(text, separators)\n const x = parseFloat(textElement.attr('x')) || 0\n\n textElement.text('')\n let tspan = textElement.append('tspan').attr('x', x)\n let tspanContent = `${words[0]}`\n tspan.text(tspanContent)\n\n words.forEach((word, i) => {\n if (i === 0) return\n\n const tspanText = `${tspanContent}${word}`\n tspan.text(tspanText)\n const tspanWidth = tspan.node().getComputedTextLength()\n if (tspanWidth > width) {\n tspan.text(tspanContent.trim())\n\n tspan = textElement.append('tspan')\n .attr('x', x)\n .attr('dy', '1.2em')\n .text(word)\n\n tspanContent = word\n } else tspanContent += word\n })\n}\n\n/**\n * Trims an SVG text element based on the specified max width, trim type, and other options.\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.\n * @param {number} [maxWidth=50] - The maximum width of the text element.\n * @param {TrimMode} [trimType=TrimMode.Middle] - The type of trim (start, middle, or end).\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method for text length calculation.\n * @param {number} [fontSize=0] - The font size of the text.\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\n * @returns {boolean} True if the text was trimmed, false otherwise.\n */\nexport function trimSVGText (\n svgTextSelection: Selection<SVGTextElement, any, SVGElement, any>,\n maxWidth = 50,\n trimType = TrimMode.Middle,\n fastMode = true,\n fontSize = +window.getComputedStyle(svgTextSelection.node())?.fontSize || 0,\n fontWidthToHeightRatio = getFontWidthToHeightRatio()\n): boolean {\n const text = svgTextSelection.text()\n const textLength = text.length\n\n const textWidth = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength()\n const tolerance = 1.1\n const maxCharacters = Math.ceil(textLength * maxWidth / (tolerance * textWidth))\n if (maxCharacters < textLength) {\n svgTextSelection.text(trimString(text, maxCharacters, trimType))\n return true\n }\n\n return false\n}\n\n/**\n * Estimates the length of a string in pixels.\n * @param {string} str - The string to be measured.\n * @param {number} fontSize - The font size of the string.\n * @param {number} [fontWidthToHeightRatio=getFontWidthToHeightRatio()] - The font width to height ratio.\n * @returns {number} The estimated length of the string in pixels.\n */\nexport function estimateStringPixelLength (\n str: string,\n fontSize: number,\n fontWidthToHeightRatio = getFontWidthToHeightRatio()\n): number {\n return str.length * fontSize * fontWidthToHeightRatio || 0\n}\n\n/**\n * Calculates the precise length of a string in pixels.\n * @param {string} str - The string to be measured.\n * @param {string} [fontFamily] - The font family of the string.\n * @param {(string | number)} [fontSize] - The font size of the string.\n * @returns {number} The precise length of the string in pixels.\n */\nexport function getPreciseStringLengthPx (str: string, fontFamily?: string, fontSize?: string | number): number {\n const svgNS = 'http://www.w3.org/2000/svg'\n const svg = document.createElementNS(svgNS, 'svg')\n const text = document.createElementNS(svgNS, 'text')\n\n text.textContent = str\n text.setAttribute('font-size', `${fontSize}`)\n text.setAttribute('font-family', fontFamily)\n\n svg.appendChild(text)\n document.body.appendChild(svg)\n const length = text.getComputedTextLength()\n document.body.removeChild(svg)\n\n return length\n}\n\n/**\n * Estimates the dimensions of an SVG text element.\n *\n * @export\n * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element.\n * @param {number} fontSize - The font size.\n * @param {number} [dy=0.32] - The line height scaling factor.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {number} [fontWidthToHeightRatio] - The font width-to-height ratio.\n * @returns {{width: number, height: number}} - The estimated dimensions of the text element.\n */\nexport function estimateTextSize (\n svgTextSelection: Selection<SVGTextElement, any, SVGElement, any>,\n fontSize: number,\n dy = 0.32,\n fastMode = true,\n fontWidthToHeightRatio?: number\n): { width: number; height: number } {\n fontWidthToHeightRatio = fontWidthToHeightRatio || getFontWidthToHeightRatio()\n const tspanSelection = svgTextSelection.selectAll('tspan')\n\n const lines = tspanSelection.size() || 1\n const height = svgTextSelection.text() ? 0.85 * fontSize * lines * (1 + dy) - dy : 0\n\n let width = 0\n if (tspanSelection.empty()) {\n const textLength = svgTextSelection.text().length\n width = fastMode ? fontSize * textLength * fontWidthToHeightRatio : svgTextSelection.node().getComputedTextLength()\n } else {\n for (const tspan of tspanSelection.nodes()) {\n const tspanTextLength = (tspan as SVGTSpanElement).textContent.length\n const w = fastMode ? fontSize * tspanTextLength * fontWidthToHeightRatio : (tspan as SVGTSpanElement).getComputedTextLength()\n if (w > width) width = w\n }\n }\n\n return { width, height }\n}\n\n/**\n * Breaks a text block into lines based on the specified width.\n *\n * @param {UnovisText} textBlock - The text block to break into lines.\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\n * @param {(number | undefined)} [height=undefined] - The height limit for the wrapped text in pixels.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {string | string[]} [separator] - The word separators.\n * @returns {string[]} - The text split into lines.\n */\nfunction breakTextIntoLines (\n textBlock: UnovisText,\n width: number | undefined = undefined,\n fastMode = true,\n separator: string | string[] = UNOVIS_TEXT_SEPARATOR_DEFAULT,\n wordBreak = false\n): string[] {\n const text = `${textBlock.text}`\n if (!text) return []\n const separators = Array.isArray(separator) ? separator : [separator]\n\n const splitByNewLine = text.split('\\n')\n return splitByNewLine.map((str) => {\n const lines: string[] = []\n if (!width) return [str]\n\n const words = splitString(str, separators)\n let line = ''\n for (let i = 0; i < words.length; i += 1) {\n const textLengthPx = fastMode\n ? estimateStringPixelLength(line + words[i], textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(line + words[i], textBlock.fontFamily, textBlock.fontSize)\n\n if (textLengthPx < width || i === 0) {\n line += words[i]\n } else {\n lines.push(line.trim())\n line = words[i]\n }\n\n // Word break functionality\n const minCharactersOnLine = 2\n if (wordBreak) {\n while (line.trim().length > minCharactersOnLine) {\n const subLineLengthPx = fastMode\n ? estimateStringPixelLength(line, textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(line, textBlock.fontFamily, textBlock.fontSize)\n\n if (subLineLengthPx > width) {\n let breakIndex = (line.trim()).length - minCharactersOnLine // Place at least `minCharactersOnLine` characters onto the next line\n while (breakIndex > 0) {\n const subLine = `${line.substring(0, breakIndex)}${UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT}` // Use hyphen when force breaking words\n const subLinePx = fastMode\n ? estimateStringPixelLength(subLine, textBlock.fontSize, textBlock.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(subLine, textBlock.fontFamily, textBlock.fontSize)\n\n // If the subline is less than the width, or just one character left, break the line\n if (subLinePx <= width || breakIndex === 1) {\n lines.push(subLine.trim())\n line = line.substring(breakIndex)\n break\n }\n breakIndex--\n }\n } else {\n break\n }\n }\n }\n }\n\n // Adding the final line after the loop\n if (line) lines.push(line.trim())\n\n return lines\n }).flat()\n}\n\n/**\n * Wraps a text or array of texts to fit within specified width and height, if provided.\n *\n * @export\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to wrap.\n * @param {number | undefined} [width=undefined] - The maximum width of a line in pixels.\n * @param {boolean} [fastMode=true] - Whether to use a fast estimation method or a more accurate one.\n * @param {string | string[]} [separator] - The word separators.\n * @returns {UnovisWrappedText[]} - The wrapped texts.\n */\nexport function getWrappedText (\n text: UnovisText | UnovisText[],\n width: number | undefined = undefined,\n height: number | undefined = undefined,\n fastMode = true,\n separator: string | string[] = UNOVIS_TEXT_SEPARATOR_DEFAULT,\n wordBreak = false\n): UnovisWrappedText[] {\n // Merge input text with default values and convert it to an array if it's not already\n const textArrays = Array.isArray(text) ? text.map(t => merge(UNOVIS_TEXT_DEFAULT, t)) : [merge(UNOVIS_TEXT_DEFAULT, text)]\n\n // Break input text into lines based on width and separator\n const textWrapped: Array<string[]> = textArrays.map(block => breakTextIntoLines(block, width, fastMode, separator, wordBreak))\n\n const firstBlock = textArrays[0]\n let h = -firstBlock.fontSize * (firstBlock.lineHeight - 1)\n const blocks: UnovisWrappedText[] = []\n\n // Process each text block and its lines based on height limit\n textArrays.forEach((text, i) => {\n let lines = textWrapped[i]\n\n const prevBlock = i > 0 ? blocks[i - 1] : undefined\n const prevBlockMarginBottomPx = prevBlock ? prevBlock.marginBottom : 0\n const marginTopPx = text.marginTop\n const effectiveMarginPx = Math.max(prevBlockMarginBottomPx, marginTopPx)\n\n h += effectiveMarginPx\n const dh = text.fontSize * text.lineHeight\n // Iterate over lines and handle text overflow based on the height limit if provided\n for (let k = 0; k < lines.length; k += 1) {\n let line = lines[k]\n h += dh\n\n if (height && (h + dh) > height && (k !== lines.length - 1)) {\n // Remove hyphen character from the end of the line if it's there\n const lastCharacter = line.charAt(line.length - 1)\n if (lastCharacter === UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT) {\n line = line.substr(0, lines[k].length - 1)\n }\n\n const lineWithEllipsis = `${line} …`\n const textLengthPx = fastMode\n ? estimateStringPixelLength(lineWithEllipsis, text.fontSize, text.fontWidthToHeightRatio)\n : getPreciseStringLengthPx(lineWithEllipsis, text.fontFamily, text.fontSize)\n\n if (textLengthPx < width) {\n lines[k] = lineWithEllipsis\n } else {\n lines[k] = `${lines[k].substr(0, lines[k].length - 2)}…`\n }\n\n lines = lines.slice(0, k + 1)\n break\n }\n }\n\n // Create wrapped text block with its calculated properties\n blocks.push({ ...text, _lines: lines, _estimatedHeight: h - (prevBlock?._estimatedHeight || 0) })\n })\n\n return blocks\n}\n\n\n/**\n * Renders a text or array of texts to SVG tspan strings.\n *\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\n * @param {number} [x=0] - The x-coordinate for the tspan elements.\n * @param {number} [y] - The y-coordinate for the tspan elements.\n * @returns {string[]} - The SVG tspan strings.\n */\nfunction renderTextToTspanStrings (blocks: UnovisWrappedText[], x = 0, y?: number): string[] {\n return blocks.map((b, i) => {\n const prevBlock = i > 0 ? blocks[i - 1] : undefined\n const prevBlockMarginBottomEm = prevBlock ? prevBlock.marginBottom / prevBlock.fontSize : 0\n const marginTopEm = b.marginTop / b.fontSize\n const marginEm = Math.max(prevBlockMarginBottomEm, marginTopEm)\n const attributes = {\n fontSize: b.fontSize,\n fontFamily: b.fontFamily,\n fontWeight: b.fontWeight,\n fill: b.color,\n y: (i === 0) && y,\n }\n\n const attributesString = Object.entries(attributes)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${kebabCase(key)}=\"${escapeStringKeepHash(value.toString())}\"`)\n .join(' ')\n\n return `<tspan xmlns=\"http://www.w3.org/2000/svg\" ${attributesString}>${b._lines.map((line, k) => {\n let dy: number\n if (i === 0 && k === 0) dy = 0.8 + marginEm\n else if (k === 0) dy = marginEm + b.lineHeight\n else dy = b.lineHeight\n\n return `<tspan x=\"${x}\" dy=\"${dy}em\">${line.length ? line : ' '}</tspan>`\n }).join('')}</tspan>`\n })\n}\n\n/**\n * Estimates the height of wrapped text blocks.\n *\n * @export\n * @param {UnovisWrappedText[]} blocks - The wrapped text blocks.\n * @returns {number} - The estimated height of the wrapped text blocks.\n */\nexport function estimateWrappedTextHeight (blocks: UnovisWrappedText[]): number {\n return sum(blocks, b => b._estimatedHeight)\n}\n\nexport const allowedSvgTextTags = ['text', 'tspan', 'textPath', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyphRef', 'textRef', 'textArea']\n/**\n * Renders a text or array of texts to an SVG text element.\n * Calling this function will replace the contents of the specified SVG text element.\n *\n * @export\n * @param {SVGTextElement} textElement - The SVG text element to render the text into.\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\n * @param {UnovisTextOptions} options - The text options.\n */\nexport function renderTextToSvgTextElement (\n textElement: SVGTextElement,\n text: UnovisText | UnovisText[],\n options: UnovisTextOptions\n): void {\n const wrappedText = getWrappedText(text, options.width, undefined, options.fastMode, options.separator, options.wordBreak)\n const textElementX = options.x ?? +textElement.getAttribute('x')\n const textElementY = options.y ?? +textElement.getAttribute('y')\n const x = textElementX ?? 0\n let y = textElementY ?? 0\n if (options.textAlign) textElement.setAttribute('text-anchor', getTextAnchorFromTextAlign(options.textAlign))\n if (options.verticalAlign && options.verticalAlign !== VerticalAlign.Top) {\n const height = estimateWrappedTextHeight(wrappedText)\n const dy = options.verticalAlign === VerticalAlign.Middle ? -height / 2\n : options.verticalAlign === VerticalAlign.Bottom ? -height : 0\n\n y += dy\n }\n\n const parser = new DOMParser()\n textElement.textContent = ''\n wrappedText.forEach(block => {\n const svgCode = renderTextToTspanStrings([block], x, y).join('')\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags)\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild\n textElement.appendChild(parsedSvgCode)\n })\n}\n\n/**\n * Renders a text or array of texts into a frame.\n * Calling this function will replace the contents of the specified SVG group.\n *\n * @export\n * @param {SVGGElement} group - The SVG group element to render the text into.\n * @param {UnovisText | UnovisText[]} text - The text or array of texts to render.\n * @param {UnovisTextFrameOptions} frameOptions - The text frame options.\n */\nexport function renderTextIntoFrame (\n group: SVGGElement,\n text: UnovisText | UnovisText[],\n frameOptions: UnovisTextFrameOptions\n): void {\n const wrappedText = getWrappedText(text, frameOptions.width, frameOptions.height, frameOptions.fastMode, frameOptions.separator, frameOptions.wordBreak)\n\n const x = frameOptions.textAlign === TextAlign.Center ? frameOptions.width / 2\n : frameOptions.textAlign === TextAlign.Right ? frameOptions.width : 0\n\n let y = 0\n const height = estimateWrappedTextHeight(wrappedText)\n\n // If the frame has height, the text will be vertically aligned within the frame.\n // If not, the text will be aligned against the `y` position of the frame.\n const dh = frameOptions.height - height\n y = frameOptions.verticalAlign === VerticalAlign.Middle ? dh / 2\n : frameOptions.verticalAlign === VerticalAlign.Bottom ? dh : 0\n\n\n const translate = (frameOptions.x || frameOptions.y)\n ? `transform=\"translate(${frameOptions.x ?? 0},${frameOptions.y ?? 0})\"`\n : ''\n\n const svgCode =\n `<text\n xmlns=\"http://www.w3.org/2000/svg\"\n text-anchor=\"${getTextAnchorFromTextAlign(frameOptions.textAlign)}\"\n ${translate}\n >\n ${renderTextToTspanStrings(wrappedText, x, y).join('')}\n </text>`\n\n const parser = new DOMParser()\n const svgCodeSanitized = striptags(svgCode, allowedSvgTextTags)\n const parsedSvgCode = parser.parseFromString(svgCodeSanitized, 'image/svg+xml').firstChild\n\n group.textContent = ''\n group.appendChild(parsedSvgCode)\n}\n"],"names":[],"mappings":"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"}
|
package/core/config/index.d.ts
DELETED
package/core/config/index.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { isPlainObject, merge } from '../../utils/data.js';
|
|
2
|
-
|
|
3
|
-
class Config {
|
|
4
|
-
init(config) {
|
|
5
|
-
Object.keys(config).forEach(key => {
|
|
6
|
-
if (isPlainObject(this[key]) && isPlainObject(config[key]))
|
|
7
|
-
this[key] = merge(this[key], config[key]);
|
|
8
|
-
else
|
|
9
|
-
this[key] = config[key];
|
|
10
|
-
});
|
|
11
|
-
return this;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export { Config };
|
|
16
|
-
//# sourceMappingURL=index.js.map
|
package/core/config/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/core/config/index.ts"],"sourcesContent":["import { isPlainObject, merge } from 'utils/data'\n\nexport class Config {\n init<T> (config: T): this {\n Object.keys(config).forEach(key => {\n if (isPlainObject(this[key]) && isPlainObject(config[key])) this[key] = merge(this[key], config[key])\n else this[key] = config[key]\n })\n\n return this\n }\n}\n"],"names":[],"mappings":";;MAEa,MAAM,CAAA;AACjB,IAAA,IAAI,CAAK,MAAS,EAAA;QAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAChC,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;;gBAChG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAA;KACZ;AACF;;;;"}
|