@unovis/ts 1.0.0-alpha.4
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/LICENSE +193 -0
- package/components/area/config.d.ts +25 -0
- package/components/area/config.js +16 -0
- package/components/area/config.js.map +1 -0
- package/components/area/index.d.ts +19 -0
- package/components/area/index.js +103 -0
- package/components/area/index.js.map +1 -0
- package/components/area/style.d.ts +3 -0
- package/components/area/style.js +32 -0
- package/components/area/style.js.map +1 -0
- package/components/area/types.d.ts +6 -0
- package/components/axis/config.d.ts +74 -0
- package/components/axis/config.js +33 -0
- package/components/axis/config.js.map +1 -0
- package/components/axis/index.d.ts +51 -0
- package/components/axis/index.js +291 -0
- package/components/axis/index.js.map +1 -0
- package/components/axis/modules/tick.d.ts +5 -0
- package/components/axis/modules/tick.js +48 -0
- package/components/axis/modules/tick.js.map +1 -0
- package/components/axis/style.d.ts +9 -0
- package/components/axis/style.js +95 -0
- package/components/axis/style.js.map +1 -0
- package/components/axis/types.d.ts +4 -0
- package/components/axis/types.js +8 -0
- package/components/axis/types.js.map +1 -0
- package/components/brush/config.d.ts +42 -0
- package/components/brush/config.js +24 -0
- package/components/brush/config.js.map +1 -0
- package/components/brush/index.d.ts +28 -0
- package/components/brush/index.js +199 -0
- package/components/brush/index.js.map +1 -0
- package/components/brush/style.d.ts +5 -0
- package/components/brush/style.js +63 -0
- package/components/brush/style.js.map +1 -0
- package/components/brush/types.d.ts +7 -0
- package/components/brush/types.js +8 -0
- package/components/brush/types.js.map +1 -0
- package/components/bullet-legend/config.d.ts +24 -0
- package/components/bullet-legend/config.js +16 -0
- package/components/bullet-legend/config.js.map +1 -0
- package/components/bullet-legend/index.d.ts +19 -0
- package/components/bullet-legend/index.js +79 -0
- package/components/bullet-legend/index.js.map +1 -0
- package/components/bullet-legend/style.d.ts +6 -0
- package/components/bullet-legend/style.js +66 -0
- package/components/bullet-legend/style.js.map +1 -0
- package/components/bullet-legend/types.d.ts +7 -0
- package/components/chord-diagram/config.d.ts +42 -0
- package/components/chord-diagram/config.js +25 -0
- package/components/chord-diagram/config.js.map +1 -0
- package/components/chord-diagram/index.d.ts +52 -0
- package/components/chord-diagram/index.js +280 -0
- package/components/chord-diagram/index.js.map +1 -0
- package/components/chord-diagram/modules/label.d.ts +8 -0
- package/components/chord-diagram/modules/label.js +128 -0
- package/components/chord-diagram/modules/label.js.map +1 -0
- package/components/chord-diagram/modules/link.d.ts +20 -0
- package/components/chord-diagram/modules/link.js +35 -0
- package/components/chord-diagram/modules/link.js.map +1 -0
- package/components/chord-diagram/modules/node.d.ts +17 -0
- package/components/chord-diagram/modules/node.js +52 -0
- package/components/chord-diagram/modules/node.js.map +1 -0
- package/components/chord-diagram/style.d.ts +13 -0
- package/components/chord-diagram/style.js +88 -0
- package/components/chord-diagram/style.js.map +1 -0
- package/components/chord-diagram/types.d.ts +40 -0
- package/components/chord-diagram/types.js +8 -0
- package/components/chord-diagram/types.js.map +1 -0
- package/components/crosshair/config.d.ts +43 -0
- package/components/crosshair/config.js +19 -0
- package/components/crosshair/config.js.map +1 -0
- package/components/crosshair/index.d.ts +35 -0
- package/components/crosshair/index.js +180 -0
- package/components/crosshair/index.js.map +1 -0
- package/components/crosshair/style.d.ts +4 -0
- package/components/crosshair/style.js +25 -0
- package/components/crosshair/style.js.map +1 -0
- package/components/crosshair/types.d.ts +13 -0
- package/components/donut/config.d.ts +45 -0
- package/components/donut/config.js +25 -0
- package/components/donut/config.js.map +1 -0
- package/components/donut/index.d.ts +20 -0
- package/components/donut/index.js +84 -0
- package/components/donut/index.js.map +1 -0
- package/components/donut/modules/arc.d.ts +10 -0
- package/components/donut/modules/arc.js +53 -0
- package/components/donut/modules/arc.js.map +1 -0
- package/components/donut/style.d.ts +6 -0
- package/components/donut/style.js +53 -0
- package/components/donut/style.js.map +1 -0
- package/components/donut/types.d.ts +12 -0
- package/components/flow-legend/config.d.ts +26 -0
- package/components/flow-legend/config.js +17 -0
- package/components/flow-legend/config.js.map +1 -0
- package/components/flow-legend/index.d.ts +16 -0
- package/components/flow-legend/index.js +73 -0
- package/components/flow-legend/index.js.map +1 -0
- package/components/flow-legend/style.d.ts +8 -0
- package/components/flow-legend/style.js +80 -0
- package/components/flow-legend/style.js.map +1 -0
- package/components/flow-legend/types.d.ts +9 -0
- package/components/flow-legend/types.js +8 -0
- package/components/flow-legend/types.js.map +1 -0
- package/components/free-brush/config.d.ts +45 -0
- package/components/free-brush/config.js +24 -0
- package/components/free-brush/config.js.map +1 -0
- package/components/free-brush/index.d.ts +20 -0
- package/components/free-brush/index.js +191 -0
- package/components/free-brush/index.js.map +1 -0
- package/components/free-brush/style.d.ts +4 -0
- package/components/free-brush/style.js +50 -0
- package/components/free-brush/style.js.map +1 -0
- package/components/free-brush/types.d.ts +7 -0
- package/components/free-brush/types.js +9 -0
- package/components/free-brush/types.js.map +1 -0
- package/components/graph/config.d.ts +207 -0
- package/components/graph/config.js +75 -0
- package/components/graph/config.js.map +1 -0
- package/components/graph/index.d.ts +125 -0
- package/components/graph/index.js +653 -0
- package/components/graph/index.js.map +1 -0
- package/components/graph/modules/layout-helpers.d.ts +2 -0
- package/components/graph/modules/layout-helpers.js +11 -0
- package/components/graph/modules/layout-helpers.js.map +1 -0
- package/components/graph/modules/layout.d.ts +9 -0
- package/components/graph/modules/layout.js +343 -0
- package/components/graph/modules/layout.js.map +1 -0
- package/components/graph/modules/link/helper.d.ts +25 -0
- package/components/graph/modules/link/helper.js +78 -0
- package/components/graph/modules/link/helper.js.map +1 -0
- package/components/graph/modules/link/index.d.ts +12 -0
- package/components/graph/modules/link/index.js +201 -0
- package/components/graph/modules/link/index.js.map +1 -0
- package/components/graph/modules/link/style.d.ts +15 -0
- package/components/graph/modules/link/style.js +112 -0
- package/components/graph/modules/link/style.js.map +1 -0
- package/components/graph/modules/node/helper.d.ts +21 -0
- package/components/graph/modules/node/helper.js +127 -0
- package/components/graph/modules/node/helper.js.map +1 -0
- package/components/graph/modules/node/index.d.ts +12 -0
- package/components/graph/modules/node/index.js +248 -0
- package/components/graph/modules/node/index.js.map +1 -0
- package/components/graph/modules/node/style.d.ts +24 -0
- package/components/graph/modules/node/style.js +273 -0
- package/components/graph/modules/node/style.js.map +1 -0
- package/components/graph/modules/panel/helper.d.ts +16 -0
- package/components/graph/modules/panel/helper.js +110 -0
- package/components/graph/modules/panel/helper.js.map +1 -0
- package/components/graph/modules/panel/index.d.ts +7 -0
- package/components/graph/modules/panel/index.js +103 -0
- package/components/graph/modules/panel/index.js.map +1 -0
- package/components/graph/modules/panel/style.d.ts +14 -0
- package/components/graph/modules/panel/style.js +123 -0
- package/components/graph/modules/panel/style.js.map +1 -0
- package/components/graph/modules/shape.d.ts +7 -0
- package/components/graph/modules/shape.js +80 -0
- package/components/graph/modules/shape.js.map +1 -0
- package/components/graph/modules/zoom-levels.d.ts +6 -0
- package/components/graph/modules/zoom-levels.js +10 -0
- package/components/graph/modules/zoom-levels.js.map +1 -0
- package/components/graph/style.d.ts +6 -0
- package/components/graph/style.js +66 -0
- package/components/graph/style.js.map +1 -0
- package/components/graph/types.d.ts +120 -0
- package/components/graph/types.js +29 -0
- package/components/graph/types.js.map +1 -0
- package/components/grouped-bar/config.d.ts +36 -0
- package/components/grouped-bar/config.js +20 -0
- package/components/grouped-bar/config.js.map +1 -0
- package/components/grouped-bar/index.d.ts +30 -0
- package/components/grouped-bar/index.js +231 -0
- package/components/grouped-bar/index.js.map +1 -0
- package/components/grouped-bar/style.d.ts +5 -0
- package/components/grouped-bar/style.js +36 -0
- package/components/grouped-bar/style.js.map +1 -0
- package/components/leaflet-flow-map/config.d.ts +46 -0
- package/components/leaflet-flow-map/config.js +25 -0
- package/components/leaflet-flow-map/config.js.map +1 -0
- package/components/leaflet-flow-map/index.d.ts +51 -0
- package/components/leaflet-flow-map/index.js +219 -0
- package/components/leaflet-flow-map/index.js.map +1 -0
- package/components/leaflet-flow-map/renderer-utils.d.ts +5 -0
- package/components/leaflet-flow-map/renderer-utils.js +15 -0
- package/components/leaflet-flow-map/renderer-utils.js.map +1 -0
- package/components/leaflet-flow-map/renderer.d.ts +26 -0
- package/components/leaflet-flow-map/renderer.js +117 -0
- package/components/leaflet-flow-map/renderer.js.map +1 -0
- package/components/leaflet-flow-map/shaders.d.ts +2 -0
- package/components/leaflet-flow-map/shaders.js +27 -0
- package/components/leaflet-flow-map/shaders.js.map +1 -0
- package/components/leaflet-flow-map/types.d.ts +23 -0
- package/components/leaflet-map/config.d.ts +175 -0
- package/components/leaflet-map/config.js +67 -0
- package/components/leaflet-map/config.js.map +1 -0
- package/components/leaflet-map/index.d.ts +95 -0
- package/components/leaflet-map/index.js +648 -0
- package/components/leaflet-map/index.js.map +1 -0
- package/components/leaflet-map/leaflet.css.js +4 -0
- package/components/leaflet-map/leaflet.css.js.map +1 -0
- package/components/leaflet-map/modules/clusterBackground.d.ts +4 -0
- package/components/leaflet-map/modules/clusterBackground.js +27 -0
- package/components/leaflet-map/modules/clusterBackground.js.map +1 -0
- package/components/leaflet-map/modules/donut.d.ts +3 -0
- package/components/leaflet-map/modules/donut.js +25 -0
- package/components/leaflet-map/modules/donut.js.map +1 -0
- package/components/leaflet-map/modules/map.d.ts +13 -0
- package/components/leaflet-map/modules/map.js +143 -0
- package/components/leaflet-map/modules/map.js.map +1 -0
- package/components/leaflet-map/modules/node.d.ts +8 -0
- package/components/leaflet-map/modules/node.js +148 -0
- package/components/leaflet-map/modules/node.js.map +1 -0
- package/components/leaflet-map/modules/selectionRing.d.ts +6 -0
- package/components/leaflet-map/modules/selectionRing.js +41 -0
- package/components/leaflet-map/modules/selectionRing.js.map +1 -0
- package/components/leaflet-map/modules/utils.d.ts +49 -0
- package/components/leaflet-map/modules/utils.js +206 -0
- package/components/leaflet-map/modules/utils.js.map +1 -0
- package/components/leaflet-map/renderer/leaflet-maplibre-gl.js +273 -0
- package/components/leaflet-map/renderer/leaflet-maplibre-gl.js.map +1 -0
- package/components/leaflet-map/renderer/map-style.d.ts +4 -0
- package/components/leaflet-map/renderer/map-style.js +15 -0
- package/components/leaflet-map/renderer/map-style.js.map +1 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-dark-theme.json.js +40 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-dark-theme.json.js.map +1 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-light-theme.json.js +40 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-light-theme.json.js.map +1 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-settings.json.js +4987 -0
- package/components/leaflet-map/renderer/mapboxgl/mapboxgl-settings.json.js.map +1 -0
- package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +7 -0
- package/components/leaflet-map/renderer/mapboxgl-layer.js +27 -0
- package/components/leaflet-map/renderer/mapboxgl-layer.js.map +1 -0
- package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +5 -0
- package/components/leaflet-map/renderer/mapboxgl-utils.js +39 -0
- package/components/leaflet-map/renderer/mapboxgl-utils.js.map +1 -0
- package/components/leaflet-map/renderer/maplibre-gl.css.js +4 -0
- package/components/leaflet-map/renderer/maplibre-gl.css.js.map +1 -0
- package/components/leaflet-map/style.d.ts +19 -0
- package/components/leaflet-map/style.js +192 -0
- package/components/leaflet-map/style.js.map +1 -0
- package/components/leaflet-map/types.d.ts +70 -0
- package/components/leaflet-map/types.js +10 -0
- package/components/leaflet-map/types.js.map +1 -0
- package/components/line/config.d.ts +30 -0
- package/components/line/config.js +17 -0
- package/components/line/config.js.map +1 -0
- package/components/line/index.d.ts +27 -0
- package/components/line/index.js +139 -0
- package/components/line/index.js.map +1 -0
- package/components/line/style.d.ts +6 -0
- package/components/line/style.js +35 -0
- package/components/line/style.js.map +1 -0
- package/components/line/types.d.ts +12 -0
- package/components/radial-dendrogram/config.d.ts +34 -0
- package/components/radial-dendrogram/config.js +20 -0
- package/components/radial-dendrogram/config.js.map +1 -0
- package/components/radial-dendrogram/index.d.ts +22 -0
- package/components/radial-dendrogram/index.js +98 -0
- package/components/radial-dendrogram/index.js.map +1 -0
- package/components/radial-dendrogram/modules/label.d.ts +8 -0
- package/components/radial-dendrogram/modules/label.js +70 -0
- package/components/radial-dendrogram/modules/label.js.map +1 -0
- package/components/radial-dendrogram/modules/link.d.ts +19 -0
- package/components/radial-dendrogram/modules/link.js +59 -0
- package/components/radial-dendrogram/modules/link.js.map +1 -0
- package/components/radial-dendrogram/modules/node.d.ts +16 -0
- package/components/radial-dendrogram/modules/node.js +51 -0
- package/components/radial-dendrogram/modules/node.js.map +1 -0
- package/components/radial-dendrogram/style.d.ts +6 -0
- package/components/radial-dendrogram/style.js +54 -0
- package/components/radial-dendrogram/style.js.map +1 -0
- package/components/radial-dendrogram/types.d.ts +34 -0
- package/components/sankey/config.d.ts +162 -0
- package/components/sankey/config.js +65 -0
- package/components/sankey/config.js.map +1 -0
- package/components/sankey/index.d.ts +59 -0
- package/components/sankey/index.js +299 -0
- package/components/sankey/index.js.map +1 -0
- package/components/sankey/modules/label.d.ts +23 -0
- package/components/sankey/modules/label.js +164 -0
- package/components/sankey/modules/label.js.map +1 -0
- package/components/sankey/modules/link.d.ts +13 -0
- package/components/sankey/modules/link.js +108 -0
- package/components/sankey/modules/link.js.map +1 -0
- package/components/sankey/modules/node.d.ts +10 -0
- package/components/sankey/modules/node.js +156 -0
- package/components/sankey/modules/node.js.map +1 -0
- package/components/sankey/style.d.ts +20 -0
- package/components/sankey/style.js +164 -0
- package/components/sankey/style.js.map +1 -0
- package/components/sankey/types.d.ts +84 -0
- package/components/sankey/types.js +34 -0
- package/components/sankey/types.js.map +1 -0
- package/components/scatter/config.d.ts +44 -0
- package/components/scatter/config.js +23 -0
- package/components/scatter/config.js.map +1 -0
- package/components/scatter/index.d.ts +19 -0
- package/components/scatter/index.js +123 -0
- package/components/scatter/index.js.map +1 -0
- package/components/scatter/modules/point.d.ts +7 -0
- package/components/scatter/modules/point.js +98 -0
- package/components/scatter/modules/point.js.map +1 -0
- package/components/scatter/style.d.ts +5 -0
- package/components/scatter/style.js +53 -0
- package/components/scatter/style.js.map +1 -0
- package/components/scatter/types.d.ts +13 -0
- package/components/stacked-bar/config.d.ts +38 -0
- package/components/stacked-bar/config.js +20 -0
- package/components/stacked-bar/config.js.map +1 -0
- package/components/stacked-bar/index.d.ts +27 -0
- package/components/stacked-bar/index.js +193 -0
- package/components/stacked-bar/index.js.map +1 -0
- package/components/stacked-bar/style.d.ts +5 -0
- package/components/stacked-bar/style.js +36 -0
- package/components/stacked-bar/style.js.map +1 -0
- package/components/stacked-bar/types.d.ts +5 -0
- package/components/timeline/config.d.ts +43 -0
- package/components/timeline/config.js +23 -0
- package/components/timeline/config.js.map +1 -0
- package/components/timeline/index.d.ts +43 -0
- package/components/timeline/index.js +235 -0
- package/components/timeline/index.js.map +1 -0
- package/components/timeline/style.d.ts +12 -0
- package/components/timeline/style.js +86 -0
- package/components/timeline/style.js.map +1 -0
- package/components/tooltip/config.d.ts +46 -0
- package/components/tooltip/config.js +19 -0
- package/components/tooltip/config.js.map +1 -0
- package/components/tooltip/index.d.ts +34 -0
- package/components/tooltip/index.js +147 -0
- package/components/tooltip/index.js.map +1 -0
- package/components/tooltip/style.js +72 -0
- package/components/tooltip/style.js.map +1 -0
- package/components/topojson-map/config.d.ts +99 -0
- package/components/topojson-map/config.js +42 -0
- package/components/topojson-map/config.js.map +1 -0
- package/components/topojson-map/index.d.ts +52 -0
- package/components/topojson-map/index.js +355 -0
- package/components/topojson-map/index.js.map +1 -0
- package/components/topojson-map/style.d.ts +11 -0
- package/components/topojson-map/style.js +97 -0
- package/components/topojson-map/style.js.map +1 -0
- package/components/topojson-map/types.d.ts +48 -0
- package/components/topojson-map/types.js +45 -0
- package/components/topojson-map/types.js.map +1 -0
- package/components/topojson-map/utils.d.ts +3 -0
- package/components/topojson-map/utils.js +30 -0
- package/components/topojson-map/utils.js.map +1 -0
- package/components/vis-controls/config.d.ts +12 -0
- package/components/vis-controls/config.js +13 -0
- package/components/vis-controls/config.js.map +1 -0
- package/components/vis-controls/index.d.ts +14 -0
- package/components/vis-controls/index.js +52 -0
- package/components/vis-controls/index.js.map +1 -0
- package/components/vis-controls/style.d.ts +11 -0
- package/components/vis-controls/style.js +75 -0
- package/components/vis-controls/style.js.map +1 -0
- package/components/vis-controls/types.d.ts +13 -0
- package/components/vis-controls/types.js +8 -0
- package/components/vis-controls/types.js.map +1 -0
- package/components/xy-labels/config.d.ts +48 -0
- package/components/xy-labels/config.js +25 -0
- package/components/xy-labels/config.js.map +1 -0
- package/components/xy-labels/index.d.ts +15 -0
- package/components/xy-labels/index.js +86 -0
- package/components/xy-labels/index.js.map +1 -0
- package/components/xy-labels/modules/label.d.ts +9 -0
- package/components/xy-labels/modules/label.js +105 -0
- package/components/xy-labels/modules/label.js.map +1 -0
- package/components/xy-labels/style.d.ts +5 -0
- package/components/xy-labels/style.js +53 -0
- package/components/xy-labels/style.js.map +1 -0
- package/components/xy-labels/types.d.ts +23 -0
- package/components/xy-labels/types.js +9 -0
- package/components/xy-labels/types.js.map +1 -0
- package/components.d.ts +52 -0
- package/containers/single-container/config.d.ts +12 -0
- package/containers/single-container/config.js +12 -0
- package/containers/single-container/config.js.map +1 -0
- package/containers/single-container/index.d.ts +17 -0
- package/containers/single-container/index.js +115 -0
- package/containers/single-container/index.js.map +1 -0
- package/containers/xy-container/config.d.ts +99 -0
- package/containers/xy-container/config.js +30 -0
- package/containers/xy-container/config.js.map +1 -0
- package/containers/xy-container/index.d.ts +33 -0
- package/containers/xy-container/index.js +322 -0
- package/containers/xy-container/index.js.map +1 -0
- package/containers.d.ts +6 -0
- package/core/component/config.d.ts +58 -0
- package/core/component/config.js +14 -0
- package/core/component/config.js.map +1 -0
- package/core/component/index.d.ts +38 -0
- package/core/component/index.js +112 -0
- package/core/component/index.js.map +1 -0
- package/core/component/types.d.ts +2 -0
- package/core/config/index.d.ts +3 -0
- package/core/config/index.js +16 -0
- package/core/config/index.js.map +1 -0
- package/core/container/config.d.ts +38 -0
- package/core/container/config.js +29 -0
- package/core/container/config.js.map +1 -0
- package/core/container/index.d.ts +25 -0
- package/core/container/index.js +92 -0
- package/core/container/index.js.map +1 -0
- package/core/xy-component/config.d.ts +38 -0
- package/core/xy-component/config.js +20 -0
- package/core/xy-component/config.js.map +1 -0
- package/core/xy-component/index.d.ts +25 -0
- package/core/xy-component/index.js +65 -0
- package/core/xy-component/index.js.map +1 -0
- package/data-models/core.d.ts +6 -0
- package/data-models/core.js +14 -0
- package/data-models/core.js.map +1 -0
- package/data-models/graph.d.ts +24 -0
- package/data-models/graph.js +101 -0
- package/data-models/graph.js.map +1 -0
- package/data-models/map-graph.d.ts +23 -0
- package/data-models/map-graph.js +59 -0
- package/data-models/map-graph.js.map +1 -0
- package/data-models/map.d.ts +5 -0
- package/data-models/map.js +12 -0
- package/data-models/map.js.map +1 -0
- package/data-models/series.d.ts +6 -0
- package/data-models/series.js +19 -0
- package/data-models/series.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.js +49 -0
- package/index.js.map +1 -0
- package/maps/china-provinces.json.js +140373 -0
- package/maps/fr-regions.json.js +14162 -0
- package/maps/germany-regions.json.js +35760 -0
- package/maps/ind-regions.json.js +290584 -0
- package/maps/uk-regions.json.js +96233 -0
- package/maps/us-counties.json.js +206318 -0
- package/maps/us-states.json.js +16345 -0
- package/maps/world-110m-alpha.json.js +251366 -0
- package/maps/world-simple.json.js +89428 -0
- package/maps/world-simplest.json.js +28175 -0
- package/maps.d.ts +60 -0
- package/maps.js +23 -0
- package/package.json +58 -0
- package/styles/colors.d.ts +4 -0
- package/styles/colors.js +11 -0
- package/styles/colors.js.map +1 -0
- package/styles/css-variables.d.ts +2 -0
- package/styles/css-variables.js +16 -0
- package/styles/css-variables.js.map +1 -0
- package/types/accessor.d.ts +5 -0
- package/types/component.d.ts +13 -0
- package/types/component.js +14 -0
- package/types/component.js.map +1 -0
- package/types/curve.d.ts +40 -0
- package/types/curve.js +46 -0
- package/types/curve.js.map +1 -0
- package/types/data.d.ts +7 -0
- package/types/direction.d.ts +6 -0
- package/types/direction.js +10 -0
- package/types/direction.js.map +1 -0
- package/types/graph.d.ts +35 -0
- package/types/map.d.ts +4 -0
- package/types/misc.d.ts +8 -0
- package/types/position.d.ts +20 -0
- package/types/position.js +27 -0
- package/types/position.js.map +1 -0
- package/types/scale.d.ts +23 -0
- package/types/scale.js +27 -0
- package/types/scale.js.map +1 -0
- package/types/shape.d.ts +7 -0
- package/types/shape.js +11 -0
- package/types/shape.js.map +1 -0
- package/types/spacing.d.ts +6 -0
- package/types/symbol.d.ts +18 -0
- package/types/symbol.js +24 -0
- package/types/symbol.js.map +1 -0
- package/types/text.d.ts +38 -0
- package/types/text.js +31 -0
- package/types/text.js.map +1 -0
- package/types.d.ts +28 -0
- package/utils/color.d.ts +9 -0
- package/utils/color.js +26 -0
- package/utils/color.js.map +1 -0
- package/utils/d3.d.ts +3 -0
- package/utils/d3.js +16 -0
- package/utils/d3.js.map +1 -0
- package/utils/data.d.ts +123 -0
- package/utils/data.js +193 -0
- package/utils/data.js.map +1 -0
- package/utils/html.d.ts +1 -0
- package/utils/html.js +15 -0
- package/utils/html.js.map +1 -0
- package/utils/map.d.ts +2 -0
- package/utils/map.js +20 -0
- package/utils/map.js.map +1 -0
- package/utils/misc.d.ts +16 -0
- package/utils/misc.js +42 -0
- package/utils/misc.js.map +1 -0
- package/utils/path.d.ts +21 -0
- package/utils/path.js +144 -0
- package/utils/path.js.map +1 -0
- package/utils/scale.d.ts +1 -0
- package/utils/text.d.ts +17 -0
- package/utils/text.js +196 -0
- package/utils/text.js.map +1 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
2
|
+
import { Area } from 'd3-shape';
|
|
3
|
+
import { ChordInputNode, ChordRibbon, ChordRibbonPoint } from '../types';
|
|
4
|
+
export interface ArcLink extends SVGElement {
|
|
5
|
+
_animState?: {
|
|
6
|
+
source: {
|
|
7
|
+
y0: number;
|
|
8
|
+
y1: number;
|
|
9
|
+
};
|
|
10
|
+
target: {
|
|
11
|
+
x0: number;
|
|
12
|
+
x1: number;
|
|
13
|
+
y1: number;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function emptyPath(): string;
|
|
18
|
+
export declare function createLink<N extends ChordInputNode>(selection: Selection<SVGPathElement, ChordRibbon<N>, SVGGElement, unknown>, areaGen: Area<ChordRibbonPoint>): void;
|
|
19
|
+
export declare function updateLink<N extends ChordInputNode>(selection: Selection<SVGElement, ChordRibbon<N>, SVGGElement, unknown>, areaGen: Area<ChordRibbonPoint>, duration: number): void;
|
|
20
|
+
export declare function removeLink<N extends ChordInputNode>(selection: Selection<SVGElement, ChordRibbon<N>, SVGGElement, unknown>, duration: number): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { select } from 'd3-selection';
|
|
2
|
+
import { interpolatePath } from 'd3-interpolate-path';
|
|
3
|
+
import { smartTransition } from '../../../utils/d3.js';
|
|
4
|
+
|
|
5
|
+
function emptyPath() {
|
|
6
|
+
return 'M0,0 L0,0';
|
|
7
|
+
}
|
|
8
|
+
function createLink(selection, areaGen) {
|
|
9
|
+
selection
|
|
10
|
+
.attr('d', d => areaGen(d.points) || emptyPath())
|
|
11
|
+
.style('opacity', 0);
|
|
12
|
+
}
|
|
13
|
+
function updateLink(selection, areaGen, duration) {
|
|
14
|
+
const selTransition = smartTransition(selection, duration)
|
|
15
|
+
.style('opacity', 0.7);
|
|
16
|
+
if (duration) {
|
|
17
|
+
const transition = selTransition;
|
|
18
|
+
transition.attrTween('d', (d, i, el) => {
|
|
19
|
+
const previous = select(el[i]).attr('d');
|
|
20
|
+
const next = areaGen(d.points) || emptyPath();
|
|
21
|
+
return interpolatePath(previous, next);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
selTransition.attr('d', d => areaGen(d.points));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function removeLink(selection, duration) {
|
|
29
|
+
smartTransition(selection, duration)
|
|
30
|
+
.style('opacity', 0)
|
|
31
|
+
.remove();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { createLink, emptyPath, removeLink, updateLink };
|
|
35
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../../../src/components/chord-diagram/modules/link.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\nimport { Area } from 'd3-shape'\nimport { Transition } from 'd3-transition'\nimport { interpolatePath } from 'd3-interpolate-path'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { ChordInputNode, ChordRibbon, ChordRibbonPoint } from '../types'\n\nexport interface ArcLink extends SVGElement {\n _animState?: {\n source: { y0: number; y1: number };\n target: { x0: number; x1: number; y1: number };\n };\n}\n\nexport function emptyPath (): string {\n return 'M0,0 L0,0'\n}\n\nexport function createLink<N extends ChordInputNode> (\n selection: Selection<SVGPathElement, ChordRibbon<N>, SVGGElement, unknown>,\n areaGen: Area<ChordRibbonPoint>\n): void {\n selection\n .attr('d', d => areaGen(d.points) || emptyPath())\n .style('opacity', 0)\n}\n\nexport function updateLink<N extends ChordInputNode> (\n selection: Selection<SVGElement, ChordRibbon<N>, SVGGElement, unknown>,\n areaGen: Area<ChordRibbonPoint>,\n duration: number\n): void {\n const selTransition = smartTransition(selection, duration)\n .style('opacity', 0.7)\n if (duration) {\n const transition = selTransition as Transition<SVGElement, ChordRibbon<N>, SVGGElement, unknown>\n transition.attrTween('d', (d, i, el) => {\n const previous = select(el[i]).attr('d')\n const next = areaGen(d.points) || emptyPath()\n return interpolatePath(previous, next)\n })\n } else {\n selTransition.attr('d', d => areaGen(d.points))\n }\n}\n\nexport function removeLink<N extends ChordInputNode> (\n selection: Selection<SVGElement, ChordRibbon<N>, SVGGElement, unknown>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .style('opacity', 0)\n .remove()\n}\n"],"names":[],"mappings":";;;;SAkBgB,SAAS,GAAA;AACvB,IAAA,OAAO,WAAW,CAAA;AACpB,CAAC;AAEe,SAAA,UAAU,CACxB,SAA0E,EAC1E,OAA+B,EAAA;IAE/B,SAAS;AACN,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;AAChD,SAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACxB,CAAC;SAEe,UAAU,CACxB,SAAsE,EACtE,OAA+B,EAC/B,QAAgB,EAAA;AAEhB,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC;AACvD,SAAA,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;AACxB,IAAA,IAAI,QAAQ,EAAE;QACZ,MAAM,UAAU,GAAG,aAA6E,CAAA;AAChG,QAAA,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAI;AACrC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,CAAA;AAC7C,YAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AACxC,SAAC,CAAC,CAAA;AACH,KAAA;AAAM,SAAA;AACL,QAAA,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,KAAA;AACH,CAAC;AAEe,SAAA,UAAU,CACxB,SAAsE,EACtE,QAAgB,EAAA;AAEhB,IAAA,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC;AACjC,SAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,SAAA,MAAM,EAAE,CAAA;AACb;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
2
|
+
import { Arc } from 'd3-shape';
|
|
3
|
+
import { ChordInputNode, ChordInputLink, ChordNode } from '../types';
|
|
4
|
+
import { ChordDiagramConfig } from '../config';
|
|
5
|
+
declare type AnimState = {
|
|
6
|
+
x0: number;
|
|
7
|
+
x1: number;
|
|
8
|
+
y0: number;
|
|
9
|
+
y1: number;
|
|
10
|
+
};
|
|
11
|
+
export interface ArcNode extends SVGElement {
|
|
12
|
+
_animState?: AnimState;
|
|
13
|
+
}
|
|
14
|
+
export declare function createNode<N extends ChordInputNode, L extends ChordInputLink>(selection: Selection<SVGPathElement, ChordNode<N>, SVGGElement, unknown>, config: ChordDiagramConfig<N, L>): void;
|
|
15
|
+
export declare function updateNode<N extends ChordInputNode, L extends ChordInputLink>(selection: Selection<SVGElement, ChordNode<N>, SVGGElement, ChordNode<N>[]>, config: ChordDiagramConfig<N, L>, arcGen: Arc<unknown, AnimState>, duration: number): void;
|
|
16
|
+
export declare function removeNode<N extends ChordInputNode, L extends ChordInputLink>(selection: Selection<SVGElement, ChordNode<N>, SVGGElement, unknown>, duration: number): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { interpolate } from 'd3-interpolate';
|
|
2
|
+
import { getColor } from '../../../utils/color.js';
|
|
3
|
+
import { smartTransition } from '../../../utils/d3.js';
|
|
4
|
+
|
|
5
|
+
function createNode(selection, config) {
|
|
6
|
+
selection
|
|
7
|
+
.style('fill', d => getColor(d, config.nodeColor, d.height))
|
|
8
|
+
.style('stroke', d => getColor(d, config.nodeColor, d.height))
|
|
9
|
+
.style('opacity', 0)
|
|
10
|
+
.each((d, i, els) => {
|
|
11
|
+
const arcNode = els[i];
|
|
12
|
+
const angleCenter = (d.x0 + d.x1) / 2;
|
|
13
|
+
const angleHalfWidth = (d.x1 - d.x0) / 2;
|
|
14
|
+
arcNode._animState = {
|
|
15
|
+
x0: angleCenter - angleHalfWidth * 0.8,
|
|
16
|
+
x1: angleCenter + angleHalfWidth * 0.8,
|
|
17
|
+
y0: d.y0,
|
|
18
|
+
y1: d.y1,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function updateNode(selection, config, arcGen, duration) {
|
|
23
|
+
selection
|
|
24
|
+
.attr('id', (d, i) => `chord-node-${i}`)
|
|
25
|
+
.style('transition', `fill ${duration}ms`) // Animate color with CSS because we're using CSS-variables
|
|
26
|
+
.style('fill', d => getColor(d, config.nodeColor, d.depth))
|
|
27
|
+
.style('stroke', d => getColor(d, config.nodeColor, d.depth));
|
|
28
|
+
if (duration) {
|
|
29
|
+
const transition = smartTransition(selection, duration)
|
|
30
|
+
.style('opacity', 1);
|
|
31
|
+
transition.attrTween('d', (d, i, els) => {
|
|
32
|
+
const arcNode = els[i];
|
|
33
|
+
const nextAnimState = { x0: d.x0, x1: d.x1, y0: d.y0, y1: d.y1 };
|
|
34
|
+
const datum = interpolate(arcNode._animState, nextAnimState);
|
|
35
|
+
return (t) => {
|
|
36
|
+
arcNode._animState = datum(t);
|
|
37
|
+
return arcGen(arcNode._animState);
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
selection.attr('d', d => arcGen(d));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function removeNode(selection, duration) {
|
|
46
|
+
smartTransition(selection, duration)
|
|
47
|
+
.style('opacity', 0)
|
|
48
|
+
.remove();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { createNode, removeNode, updateNode };
|
|
52
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sources":["../../../../src/components/chord-diagram/modules/node.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { interpolate } from 'd3-interpolate'\nimport { Arc } from 'd3-shape'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { ChordInputNode, ChordInputLink, ChordNode } from '../types'\n\n// Config\nimport { ChordDiagramConfig } from '../config'\n\ntype AnimState = { x0: number; x1: number; y0: number; y1: number }\nexport interface ArcNode extends SVGElement {\n _animState?: AnimState;\n}\n\nexport function createNode<N extends ChordInputNode, L extends ChordInputLink> (\n selection: Selection<SVGPathElement, ChordNode<N>, SVGGElement, unknown>,\n config: ChordDiagramConfig<N, L>\n): void {\n selection\n .style('fill', d => getColor(d, config.nodeColor, d.height))\n .style('stroke', d => getColor(d, config.nodeColor, d.height))\n .style('opacity', 0)\n .each((d, i, els) => {\n const arcNode: ArcNode = els[i]\n const angleCenter = (d.x0 + d.x1) / 2\n const angleHalfWidth = (d.x1 - d.x0) / 2\n arcNode._animState = {\n x0: angleCenter - angleHalfWidth * 0.8,\n x1: angleCenter + angleHalfWidth * 0.8,\n y0: d.y0,\n y1: d.y1,\n }\n })\n}\n\nexport function updateNode<N extends ChordInputNode, L extends ChordInputLink> (\n selection: Selection<SVGElement, ChordNode<N>, SVGGElement, ChordNode<N>[]>,\n config: ChordDiagramConfig<N, L>,\n arcGen: Arc<unknown, AnimState>,\n duration: number\n): void {\n selection\n .attr('id', (d, i) => `chord-node-${i}`)\n .style('transition', `fill ${duration}ms`) // Animate color with CSS because we're using CSS-variables\n .style('fill', d => getColor(d, config.nodeColor, d.depth))\n .style('stroke', d => getColor(d, config.nodeColor, d.depth))\n\n if (duration) {\n const transition = smartTransition(selection, duration)\n .style('opacity', 1) as Transition<SVGElement, ChordNode<N>, SVGGElement, ChordNode<N>[]>\n\n transition.attrTween('d', (d, i, els) => {\n const arcNode: ArcNode = els[i]\n const nextAnimState = { x0: d.x0, x1: d.x1, y0: d.y0, y1: d.y1 }\n const datum = interpolate(arcNode._animState, nextAnimState)\n\n return (t: number): string => {\n arcNode._animState = datum(t)\n return arcGen(arcNode._animState)\n }\n })\n } else {\n selection.attr('d', d => arcGen(d))\n }\n}\n\nexport function removeNode<N extends ChordInputNode, L extends ChordInputLink> (\n selection: Selection<SVGElement, ChordNode<N>, SVGGElement, unknown>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .style('opacity', 0)\n .remove()\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const root: string;
|
|
2
|
+
export declare const variables: void;
|
|
3
|
+
export declare const nodes: string;
|
|
4
|
+
export declare const links: string;
|
|
5
|
+
export declare const labels: string;
|
|
6
|
+
export declare const node: string;
|
|
7
|
+
export declare const hoveredNode: string;
|
|
8
|
+
export declare const gLabel: string;
|
|
9
|
+
export declare const label: string;
|
|
10
|
+
export declare const labelExit: string;
|
|
11
|
+
export declare const link: string;
|
|
12
|
+
export declare const hoveredLink: string;
|
|
13
|
+
export declare const transparent: string;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { css, injectGlobal } from '@emotion/css';
|
|
2
|
+
|
|
3
|
+
const root = css `
|
|
4
|
+
label: chord-diagram-component;
|
|
5
|
+
`;
|
|
6
|
+
const variables = injectGlobal `
|
|
7
|
+
:root {
|
|
8
|
+
--vis-chord-diagram-link-fill-color: #cad5f6;
|
|
9
|
+
--vis-chord-diagram-link-stroke-color: #777777;
|
|
10
|
+
--vis-chord-diagram-link-stroke-opacity: 0.15;
|
|
11
|
+
|
|
12
|
+
--vis-chord-diagram-label-text-fill-color-bright: #ffffff;
|
|
13
|
+
--vis-chord-diagram-label-text-fill-color-dark: #a5abb2;
|
|
14
|
+
|
|
15
|
+
--vis-dark-chord-diagram-link-fill-color: #575c65;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
body.theme-dark ${`.${root}`} {
|
|
19
|
+
--vis-chord-diagram-link-fill-color: var(--vis-dark-chord-diagram-link-fill-color);
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
const nodes = css `
|
|
23
|
+
label: nodes;
|
|
24
|
+
`;
|
|
25
|
+
const links = css `
|
|
26
|
+
label: links;
|
|
27
|
+
`;
|
|
28
|
+
const labels = css `
|
|
29
|
+
label: labels;
|
|
30
|
+
`;
|
|
31
|
+
const node = css `
|
|
32
|
+
label: node;
|
|
33
|
+
stroke-width: 0;
|
|
34
|
+
fill: var(--vis-color-main);
|
|
35
|
+
stroke: var(--vis-color-main);
|
|
36
|
+
|
|
37
|
+
&:hover {
|
|
38
|
+
stroke-width: 2;
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
const hoveredNode = css `
|
|
42
|
+
label: hovered;
|
|
43
|
+
fill-opacity: 1;
|
|
44
|
+
stroke-width: 1.5;
|
|
45
|
+
`;
|
|
46
|
+
const gLabel = css `
|
|
47
|
+
label: group-label;
|
|
48
|
+
`;
|
|
49
|
+
const label = css `
|
|
50
|
+
label: label;
|
|
51
|
+
|
|
52
|
+
dominant-baseline: middle;
|
|
53
|
+
user-select: none;
|
|
54
|
+
pointer-events: none;
|
|
55
|
+
|
|
56
|
+
> textPath {
|
|
57
|
+
dominant-baseline: middle;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
const labelExit = css `
|
|
61
|
+
label: label-exit;
|
|
62
|
+
`;
|
|
63
|
+
const link = css `
|
|
64
|
+
label: link;
|
|
65
|
+
|
|
66
|
+
fill: var(--vis-chord-diagram-link-fill-color);
|
|
67
|
+
stroke: var(--vis-chord-diagram-link-stroke-color);
|
|
68
|
+
stroke-opacity: var(--vis-chord-diagram-link-stroke-opacity);
|
|
69
|
+
transition: .1s fill-opacity;
|
|
70
|
+
|
|
71
|
+
&:hover {
|
|
72
|
+
fill-opacity: 1;
|
|
73
|
+
}
|
|
74
|
+
`;
|
|
75
|
+
const hoveredLink = css `
|
|
76
|
+
label: hovered;
|
|
77
|
+
fill-opacity: 0.9;
|
|
78
|
+
`;
|
|
79
|
+
const transparent = css `
|
|
80
|
+
fill-opacity: 0.25;
|
|
81
|
+
|
|
82
|
+
text {
|
|
83
|
+
fill-opacity: 1;
|
|
84
|
+
}
|
|
85
|
+
`;
|
|
86
|
+
|
|
87
|
+
export { gLabel, hoveredLink, hoveredNode, label, labelExit, labels, link, links, node, nodes, root, transparent, variables };
|
|
88
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/components/chord-diagram/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: chord-diagram-component;\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-chord-diagram-link-fill-color: #cad5f6;\n --vis-chord-diagram-link-stroke-color: #777777;\n --vis-chord-diagram-link-stroke-opacity: 0.15;\n\n --vis-chord-diagram-label-text-fill-color-bright: #ffffff;\n --vis-chord-diagram-label-text-fill-color-dark: #a5abb2;\n\n --vis-dark-chord-diagram-link-fill-color: #575c65;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-chord-diagram-link-fill-color: var(--vis-dark-chord-diagram-link-fill-color);\n }\n`\n\nexport const nodes = css`\n label: nodes;\n`\n\nexport const links = css`\n label: links;\n`\n\nexport const labels = css`\n label: labels;\n`\n\nexport const node = css`\n label: node;\n stroke-width: 0;\n fill: var(--vis-color-main);\n stroke: var(--vis-color-main);\n\n &:hover {\n stroke-width: 2;\n }\n`\n\nexport const hoveredNode = css`\n label: hovered;\n fill-opacity: 1;\n stroke-width: 1.5;\n`\n\nexport const gLabel = css`\n label: group-label;\n`\n\nexport const label = css`\n label: label;\n\n dominant-baseline: middle;\n user-select: none;\n pointer-events: none;\n\n > textPath {\n dominant-baseline: middle;\n }\n`\n\nexport const labelExit = css`\n label: label-exit;\n`\n\nexport const link = css`\n label: link;\n\n fill: var(--vis-chord-diagram-link-fill-color);\n stroke: var(--vis-chord-diagram-link-stroke-color);\n stroke-opacity: var(--vis-chord-diagram-link-stroke-opacity);\n transition: .1s fill-opacity;\n\n &:hover {\n fill-opacity: 1;\n }\n`\n\nexport const hoveredLink = css`\n label: hovered;\n fill-opacity: 0.9;\n`\n\nexport const transparent = css`\n fill-opacity: 0.25;\n\n text {\n fill-opacity: 1;\n }\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;AAYjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;EAG7B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAStB;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;EAI7B;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAUvB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;EAWtB;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;EAG7B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { HierarchyRectangularNode } from 'd3-hierarchy';
|
|
2
|
+
export interface ChordInputNode {
|
|
3
|
+
id?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ChordInputLink {
|
|
6
|
+
id?: string;
|
|
7
|
+
source: number | string | ChordInputNode;
|
|
8
|
+
target: number | string | ChordInputNode;
|
|
9
|
+
}
|
|
10
|
+
export interface ChordHierarchy<N> {
|
|
11
|
+
key: string;
|
|
12
|
+
values: (ChordHierarchy<N> | N)[];
|
|
13
|
+
}
|
|
14
|
+
export declare type ChordNodeState = {
|
|
15
|
+
_state: {
|
|
16
|
+
hovered?: boolean;
|
|
17
|
+
value?: number;
|
|
18
|
+
};
|
|
19
|
+
_prevX1?: number;
|
|
20
|
+
};
|
|
21
|
+
export declare type ChordNode<N extends ChordInputNode> = HierarchyRectangularNode<N | ChordHierarchy<N>> & ChordNodeState;
|
|
22
|
+
export declare type ChordLeafNode<N extends ChordInputNode> = HierarchyRectangularNode<N> & ChordNodeState;
|
|
23
|
+
export declare type ChordRibbonPoint = {
|
|
24
|
+
x0: number;
|
|
25
|
+
x1: number;
|
|
26
|
+
y0: number;
|
|
27
|
+
y1: number;
|
|
28
|
+
};
|
|
29
|
+
export interface ChordRibbon<N extends ChordInputNode> {
|
|
30
|
+
source: ChordLeafNode<N>;
|
|
31
|
+
target: ChordLeafNode<N>;
|
|
32
|
+
points: ChordRibbonPoint[];
|
|
33
|
+
_state: {
|
|
34
|
+
hovered?: boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare enum ChordLabelAlignment {
|
|
38
|
+
Along = "along",
|
|
39
|
+
Perpendicular = "perpendicular"
|
|
40
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var ChordLabelAlignment;
|
|
2
|
+
(function (ChordLabelAlignment) {
|
|
3
|
+
ChordLabelAlignment["Along"] = "along";
|
|
4
|
+
ChordLabelAlignment["Perpendicular"] = "perpendicular";
|
|
5
|
+
})(ChordLabelAlignment || (ChordLabelAlignment = {}));
|
|
6
|
+
|
|
7
|
+
export { ChordLabelAlignment };
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/chord-diagram/types.ts"],"sourcesContent":["import { HierarchyRectangularNode } from 'd3-hierarchy'\n\n// Node data flow in the component:\n// Input data (N extends ChordInputNode, L extends ChordInputLink)\n// => GraphNodeCore<N>[] (we reference it only in a few places when it's needed, to make the code easier to read)\n// => ChordHierarchy (nested object representing node hierarchy)\n// => ChordNode[] and ChordLeafNode[] (HierarchyRectangularNode[] from D3 partition)\n\nexport interface ChordInputNode {\n id?: string;\n}\n\nexport interface ChordInputLink {\n id?: string;\n source: number | string | ChordInputNode;\n target: number | string | ChordInputNode;\n}\n\nexport interface ChordHierarchy<N> {\n key: string;\n values: (ChordHierarchy<N> | N)[];\n}\n\nexport type ChordNodeState = {\n _state: {\n hovered?: boolean;\n value?: number;\n };\n _prevX1?: number;\n}\n\nexport type ChordNode<N extends ChordInputNode> = HierarchyRectangularNode<N | ChordHierarchy<N>> & ChordNodeState\nexport type ChordLeafNode<N extends ChordInputNode> = HierarchyRectangularNode<N> & ChordNodeState\n\nexport type ChordRibbonPoint = { x0: number; x1: number; y0: number; y1: number }\nexport interface ChordRibbon<N extends ChordInputNode> {\n source: ChordLeafNode<N>;\n target: ChordLeafNode<N>;\n points: ChordRibbonPoint[];\n _state: {\n hovered?: boolean;\n };\n}\n\nexport enum ChordLabelAlignment {\n Along = 'along',\n Perpendicular = 'perpendicular',\n}\n"],"names":[],"mappings":"IA4CY,oBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AACjC,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { XYComponentConfigInterface, XYComponentConfig } from "../../core/xy-component/config";
|
|
2
|
+
import { Tooltip } from "../tooltip";
|
|
3
|
+
import { NumericAccessor } from "../../types/accessor";
|
|
4
|
+
import { ContinuousScale } from "../../types/scale";
|
|
5
|
+
import { CrosshairCircle } from './types';
|
|
6
|
+
export interface CrosshairConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {
|
|
7
|
+
/** Separate array of accessors for stacked components (eg StackedBar, Area). Default: `undefined` */
|
|
8
|
+
yStacked?: NumericAccessor<Datum>[];
|
|
9
|
+
/** Baseline accessor function for stacked values, useful with stacked areas. Default: `null` */
|
|
10
|
+
baseline?: NumericAccessor<Datum>;
|
|
11
|
+
/** An instance of the Tooltip component to be used with Crosshair. Default: `undefined` */
|
|
12
|
+
tooltip?: Tooltip | undefined;
|
|
13
|
+
/** Tooltip template accessor. The function is supposed to return either a valid HTML string or an HTMLElement. Default: `d => ''` */
|
|
14
|
+
template?: (data: Datum, x: number | Date) => string | HTMLElement;
|
|
15
|
+
/** Hide Crosshair when the corresponding element is far from mouse pointer. Default: `true` */
|
|
16
|
+
hideWhenFarFromPointer?: boolean;
|
|
17
|
+
/** Distance in pixels to check in the hideWhenFarFromPointer condition. Default: `100` */
|
|
18
|
+
hideWhenFarFromPointerDistance?: number;
|
|
19
|
+
/** Snap to the nearest data point.
|
|
20
|
+
* If disabled, the tooltip template will receive only the horizontal position of the crosshair and you'll be responsible
|
|
21
|
+
* for getting the underlying data records and crosshair circles (see the `getCircles` configuration option).
|
|
22
|
+
* Default: `true`
|
|
23
|
+
*/
|
|
24
|
+
snapToData?: boolean;
|
|
25
|
+
/** Custom function for setting up the crosshair circles, usually needed when `snapToData` is set to `false`.
|
|
26
|
+
* The function receives the horizontal position of the crosshair (in the data space, not in pixels), the data array
|
|
27
|
+
* and the `yScale` instance to help you calculate the correct vertical position of the circles.
|
|
28
|
+
* It has to return an array of the CrosshairCircle objects: `{ y: number; color: string; opacity?: number }[]`.
|
|
29
|
+
* Default: `undefined`
|
|
30
|
+
*/
|
|
31
|
+
getCircles?: (x: number, data: Datum[], yScale: ContinuousScale) => CrosshairCircle[];
|
|
32
|
+
}
|
|
33
|
+
export declare class CrosshairConfig<Datum> extends XYComponentConfig<Datum> implements CrosshairConfigInterface<Datum> {
|
|
34
|
+
yStacked: any;
|
|
35
|
+
baseline: any;
|
|
36
|
+
duration: number;
|
|
37
|
+
tooltip: Tooltip;
|
|
38
|
+
template: ((data: Datum, x: number | Date) => string | HTMLElement);
|
|
39
|
+
hideWhenFarFromPointer: boolean;
|
|
40
|
+
hideWhenFarFromPointerDistance: number;
|
|
41
|
+
snapToData: boolean;
|
|
42
|
+
getCircles: any;
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { XYComponentConfig } from '../../core/xy-component/config.js';
|
|
2
|
+
|
|
3
|
+
class CrosshairConfig extends XYComponentConfig {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.yStacked = undefined;
|
|
7
|
+
this.baseline = null;
|
|
8
|
+
this.duration = 100;
|
|
9
|
+
this.tooltip = undefined;
|
|
10
|
+
this.template = (d) => '';
|
|
11
|
+
this.hideWhenFarFromPointer = true;
|
|
12
|
+
this.hideWhenFarFromPointerDistance = 100;
|
|
13
|
+
this.snapToData = true;
|
|
14
|
+
this.getCircles = undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { CrosshairConfig };
|
|
19
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/crosshair/config.ts"],"sourcesContent":["import { XYComponentConfigInterface, XYComponentConfig } from 'core/xy-component/config'\nimport { Tooltip } from 'components/tooltip'\n\n// Types\nimport { NumericAccessor } from 'types/accessor'\nimport { ContinuousScale } from 'types/scale'\nimport { CrosshairCircle } from './types'\n\n// We extend partial XY config interface because x and y properties are optional for Crosshair\nexport interface CrosshairConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {\n /** Separate array of accessors for stacked components (eg StackedBar, Area). Default: `undefined` */\n yStacked?: NumericAccessor<Datum>[];\n /** Baseline accessor function for stacked values, useful with stacked areas. Default: `null` */\n baseline?: NumericAccessor<Datum>;\n /** An instance of the Tooltip component to be used with Crosshair. Default: `undefined` */\n tooltip?: Tooltip | undefined;\n /** Tooltip template accessor. The function is supposed to return either a valid HTML string or an HTMLElement. Default: `d => ''` */\n template?: (data: Datum, x: number | Date) => string | HTMLElement;\n /** Hide Crosshair when the corresponding element is far from mouse pointer. Default: `true` */\n hideWhenFarFromPointer?: boolean;\n /** Distance in pixels to check in the hideWhenFarFromPointer condition. Default: `100` */\n hideWhenFarFromPointerDistance?: number;\n /** Snap to the nearest data point.\n * If disabled, the tooltip template will receive only the horizontal position of the crosshair and you'll be responsible\n * for getting the underlying data records and crosshair circles (see the `getCircles` configuration option).\n * Default: `true`\n */\n snapToData?: boolean;\n /** Custom function for setting up the crosshair circles, usually needed when `snapToData` is set to `false`.\n * The function receives the horizontal position of the crosshair (in the data space, not in pixels), the data array\n * and the `yScale` instance to help you calculate the correct vertical position of the circles.\n * It has to return an array of the CrosshairCircle objects: `{ y: number; color: string; opacity?: number }[]`.\n * Default: `undefined`\n */\n getCircles?: (x: number, data: Datum[], yScale: ContinuousScale) => CrosshairCircle[];\n}\n\nexport class CrosshairConfig<Datum> extends XYComponentConfig<Datum> implements CrosshairConfigInterface<Datum> {\n yStacked = undefined\n baseline = null\n duration = 100\n tooltip: Tooltip = undefined\n template: ((data: Datum, x: number | Date) => string | HTMLElement) = (d: Datum): string => ''\n hideWhenFarFromPointer = true\n hideWhenFarFromPointerDistance = 100\n snapToData = true\n getCircles = undefined\n}\n"],"names":[],"mappings":";;AAqCM,MAAO,eAAuB,SAAQ,iBAAwB,CAAA;AAApE,IAAA,WAAA,GAAA;;QACE,IAAQ,CAAA,QAAA,GAAG,SAAS,CAAA;QACpB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAA;QACf,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAA;QACd,IAAO,CAAA,OAAA,GAAY,SAAS,CAAA;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAA8D,CAAC,CAAQ,KAAa,EAAE,CAAA;QAC9F,IAAsB,CAAA,sBAAA,GAAG,IAAI,CAAA;QAC7B,IAA8B,CAAA,8BAAA,GAAG,GAAG,CAAA;QACpC,IAAU,CAAA,UAAA,GAAG,IAAI,CAAA;QACjB,IAAU,CAAA,UAAA,GAAG,SAAS,CAAA;KACvB;AAAA;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
2
|
+
import { XYComponentCore } from "../../core/xy-component";
|
|
3
|
+
import { Tooltip } from "../tooltip";
|
|
4
|
+
import { CrosshairAccessors } from './types';
|
|
5
|
+
import { CrosshairConfig, CrosshairConfigInterface } from './config';
|
|
6
|
+
import * as s from './style';
|
|
7
|
+
export declare class Crosshair<Datum> extends XYComponentCore<Datum> {
|
|
8
|
+
static selectors: typeof s;
|
|
9
|
+
clippable: boolean;
|
|
10
|
+
config: CrosshairConfig<Datum>;
|
|
11
|
+
container: Selection<SVGSVGElement, any, SVGSVGElement, any>;
|
|
12
|
+
line: Selection<SVGLineElement, any, SVGElement, any>;
|
|
13
|
+
x: number;
|
|
14
|
+
datum: Datum;
|
|
15
|
+
datumIndex: number;
|
|
16
|
+
show: boolean;
|
|
17
|
+
private _animFrameId;
|
|
18
|
+
/** Tooltip component to be used by Crosshair if not provided by the config.
|
|
19
|
+
* This property is supposed to be set externally by a container component like XYContainer. */
|
|
20
|
+
tooltip: Tooltip;
|
|
21
|
+
/** Accessors passed externally (e.g. from XYContainer) */
|
|
22
|
+
private _accessors;
|
|
23
|
+
set accessors(accessors: CrosshairAccessors<Datum>);
|
|
24
|
+
get accessors(): CrosshairAccessors<Datum>;
|
|
25
|
+
constructor(config?: CrosshairConfigInterface<Datum>);
|
|
26
|
+
setContainer(containerSvg: Selection<SVGSVGElement, unknown, SVGSVGElement, unknown>): void;
|
|
27
|
+
_render(customDuration?: number): void;
|
|
28
|
+
hide(): void;
|
|
29
|
+
_onMouseMove(event: MouseEvent): void;
|
|
30
|
+
_onMouseOut(): void;
|
|
31
|
+
_showTooltip(event: MouseEvent): void;
|
|
32
|
+
_hideTooltip(): void;
|
|
33
|
+
getYDataExtent(): number[];
|
|
34
|
+
private getCircleData;
|
|
35
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { pointer } from 'd3-selection';
|
|
2
|
+
import { easeLinear } from 'd3-ease';
|
|
3
|
+
import { XYComponentCore } from '../../core/xy-component/index.js';
|
|
4
|
+
import { isArray, isNumber, getNearest, clamp, getNumber, isFunction, getStackedValues } from '../../utils/data.js';
|
|
5
|
+
import { smartTransition } from '../../utils/d3.js';
|
|
6
|
+
import { getColor } from '../../utils/color.js';
|
|
7
|
+
import { CrosshairConfig } from './config.js';
|
|
8
|
+
import * as style from './style.js';
|
|
9
|
+
import { line, circle } from './style.js';
|
|
10
|
+
|
|
11
|
+
class Crosshair extends XYComponentCore {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
super();
|
|
14
|
+
this.clippable = true; // Don't apply clipping path to this component. See XYContainer
|
|
15
|
+
this.config = new CrosshairConfig();
|
|
16
|
+
this.x = 0;
|
|
17
|
+
this.show = false;
|
|
18
|
+
this._animFrameId = null;
|
|
19
|
+
/** Accessors passed externally (e.g. from XYContainer) */
|
|
20
|
+
this._accessors = {
|
|
21
|
+
x: undefined,
|
|
22
|
+
y: undefined,
|
|
23
|
+
yStacked: undefined,
|
|
24
|
+
baseline: undefined,
|
|
25
|
+
};
|
|
26
|
+
if (config)
|
|
27
|
+
this.config.init(config);
|
|
28
|
+
this.g.style('opacity', this.show ? 1 : 0);
|
|
29
|
+
this.line = this.g.append('line')
|
|
30
|
+
.attr('class', line);
|
|
31
|
+
}
|
|
32
|
+
set accessors(accessors) { this._accessors = accessors; }
|
|
33
|
+
get accessors() {
|
|
34
|
+
var _a;
|
|
35
|
+
const { config } = this;
|
|
36
|
+
const hasConfig = !!(config.x || config.y || config.yStacked);
|
|
37
|
+
const x = hasConfig ? config.x : this._accessors.x;
|
|
38
|
+
const yAcc = hasConfig ? config.y : this._accessors.y;
|
|
39
|
+
const y = yAcc ? (isArray(yAcc) ? yAcc : [yAcc]) : undefined;
|
|
40
|
+
const yStacked = hasConfig ? config.yStacked : this._accessors.yStacked;
|
|
41
|
+
const baseline = (_a = config.baseline) !== null && _a !== void 0 ? _a : this._accessors.baseline;
|
|
42
|
+
return { x, y, yStacked, baseline };
|
|
43
|
+
}
|
|
44
|
+
setContainer(containerSvg) {
|
|
45
|
+
// Set up mousemove event for Crosshair
|
|
46
|
+
this.container = containerSvg;
|
|
47
|
+
this.container.on('mousemove.crosshair', this._onMouseMove.bind(this));
|
|
48
|
+
this.container.on('mouseout.crosshair', this._onMouseOut.bind(this));
|
|
49
|
+
}
|
|
50
|
+
_render(customDuration) {
|
|
51
|
+
const { config } = this;
|
|
52
|
+
if (config.snapToData && !this.datum)
|
|
53
|
+
return;
|
|
54
|
+
const duration = isNumber(customDuration) ? customDuration : config.duration;
|
|
55
|
+
smartTransition(this.g, duration)
|
|
56
|
+
.style('opacity', this.show ? 1 : 0);
|
|
57
|
+
this.line
|
|
58
|
+
.attr('y1', 0)
|
|
59
|
+
.attr('y1', this._height);
|
|
60
|
+
smartTransition(this.line, duration, easeLinear)
|
|
61
|
+
.attr('x1', this.x)
|
|
62
|
+
.attr('x2', this.x);
|
|
63
|
+
const circleData = this.getCircleData();
|
|
64
|
+
const circles = this.g
|
|
65
|
+
.selectAll('circle')
|
|
66
|
+
.data(circleData, (d, i) => { var _a; return (_a = d.id) !== null && _a !== void 0 ? _a : i; });
|
|
67
|
+
const circlesEnter = circles.enter()
|
|
68
|
+
.append('circle')
|
|
69
|
+
.attr('class', circle)
|
|
70
|
+
.attr('r', 0)
|
|
71
|
+
.attr('cx', this.x)
|
|
72
|
+
.attr('cy', d => d.y)
|
|
73
|
+
.style('fill', d => d.color);
|
|
74
|
+
smartTransition(circlesEnter.merge(circles), duration, easeLinear)
|
|
75
|
+
.attr('cx', this.x)
|
|
76
|
+
.attr('cy', d => d.y)
|
|
77
|
+
.attr('r', 4)
|
|
78
|
+
.style('opacity', d => d.opacity)
|
|
79
|
+
.style('fill', d => d.color);
|
|
80
|
+
circles.exit().remove();
|
|
81
|
+
}
|
|
82
|
+
hide() {
|
|
83
|
+
this._onMouseOut();
|
|
84
|
+
}
|
|
85
|
+
_onMouseMove(event) {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
const { config, datamodel, element } = this;
|
|
88
|
+
if (!this.accessors.x && ((_a = datamodel.data) === null || _a === void 0 ? void 0 : _a.length))
|
|
89
|
+
console.warn('Crosshair: X accessor function has not been configured. Please check if it\'s present in the configuration object');
|
|
90
|
+
const [x] = pointer(event, element);
|
|
91
|
+
const xRange = this.xScale.range();
|
|
92
|
+
if (config.snapToData) {
|
|
93
|
+
if (!this.accessors.y && !this.accessors.yStacked && ((_b = datamodel.data) === null || _b === void 0 ? void 0 : _b.length))
|
|
94
|
+
console.warn('Crosshair: Y accessors have not been configured. Please check if they\'re present in the configuration object');
|
|
95
|
+
const scaleX = this.xScale;
|
|
96
|
+
const valueX = scaleX.invert(x);
|
|
97
|
+
this.datum = getNearest(datamodel.data, valueX, this.accessors.x);
|
|
98
|
+
this.datumIndex = datamodel.data.indexOf(this.datum);
|
|
99
|
+
if (!this.datum)
|
|
100
|
+
return;
|
|
101
|
+
this.x = clamp(Math.round(scaleX(getNumber(this.datum, this.accessors.x, this.datumIndex))), 0, this._width);
|
|
102
|
+
// Show the crosshair only if it's in the chart range and not far from mouse pointer (if configured)
|
|
103
|
+
this.show = (this.x >= 0) && (this.x <= this._width) && (!config.hideWhenFarFromPointer || (Math.abs(this.x - x) < config.hideWhenFarFromPointerDistance));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.x = clamp(x, xRange[0], xRange[1]);
|
|
107
|
+
this.show = (this.x > xRange[0]) && (this.x < xRange[1]);
|
|
108
|
+
}
|
|
109
|
+
window.cancelAnimationFrame(this._animFrameId);
|
|
110
|
+
this._animFrameId = window.requestAnimationFrame(() => {
|
|
111
|
+
this._render();
|
|
112
|
+
});
|
|
113
|
+
if (this.show)
|
|
114
|
+
this._showTooltip(event);
|
|
115
|
+
else
|
|
116
|
+
this._hideTooltip();
|
|
117
|
+
}
|
|
118
|
+
_onMouseOut() {
|
|
119
|
+
this.show = false;
|
|
120
|
+
window.cancelAnimationFrame(this._animFrameId);
|
|
121
|
+
this._animFrameId = window.requestAnimationFrame(() => {
|
|
122
|
+
this._render();
|
|
123
|
+
});
|
|
124
|
+
this._hideTooltip();
|
|
125
|
+
}
|
|
126
|
+
_showTooltip(event) {
|
|
127
|
+
var _a;
|
|
128
|
+
const { config } = this;
|
|
129
|
+
const tooltip = (_a = config.tooltip) !== null && _a !== void 0 ? _a : this.tooltip;
|
|
130
|
+
if (!tooltip)
|
|
131
|
+
return;
|
|
132
|
+
const container = tooltip.getContainer() || this.container.node();
|
|
133
|
+
const [x, y] = tooltip.isContainerBody() ? [event.clientX, event.clientY] : pointer(event, container);
|
|
134
|
+
const content = config.template(this.datum, this.xScale.invert(this.x));
|
|
135
|
+
if (content)
|
|
136
|
+
tooltip.show(content, { x, y });
|
|
137
|
+
}
|
|
138
|
+
_hideTooltip() {
|
|
139
|
+
var _a;
|
|
140
|
+
const { config } = this;
|
|
141
|
+
const tooltip = (_a = config.tooltip) !== null && _a !== void 0 ? _a : this.tooltip;
|
|
142
|
+
tooltip === null || tooltip === void 0 ? void 0 : tooltip.hide();
|
|
143
|
+
}
|
|
144
|
+
// We don't want Crosshair to be be taken in to account in domain calculations
|
|
145
|
+
getYDataExtent() {
|
|
146
|
+
return [undefined, undefined];
|
|
147
|
+
}
|
|
148
|
+
getCircleData() {
|
|
149
|
+
var _a, _b;
|
|
150
|
+
const { config, datamodel: { data } } = this;
|
|
151
|
+
if (isFunction(config.getCircles))
|
|
152
|
+
return config.getCircles(this.xScale.invert(this.x), data, this.yScale);
|
|
153
|
+
if (config.snapToData && this.datum) {
|
|
154
|
+
const yAccessors = (_a = this.accessors.y) !== null && _a !== void 0 ? _a : [];
|
|
155
|
+
const yStackedAccessors = (_b = this.accessors.yStacked) !== null && _b !== void 0 ? _b : [];
|
|
156
|
+
const baselineValue = getNumber(this.datum, this.accessors.baseline, this.datumIndex) || 0;
|
|
157
|
+
const stackedValues = getStackedValues(this.datum, this.datumIndex, ...yStackedAccessors)
|
|
158
|
+
.map((value, index, arr) => ({
|
|
159
|
+
y: this.yScale(value + baselineValue),
|
|
160
|
+
opacity: getNumber(this.datum, yStackedAccessors[index]) ? 1 : 0,
|
|
161
|
+
color: getColor(this.datum, config.color, index),
|
|
162
|
+
}));
|
|
163
|
+
const regularValues = yAccessors
|
|
164
|
+
.map((a, index) => {
|
|
165
|
+
const value = getNumber(this.datum, a);
|
|
166
|
+
return {
|
|
167
|
+
y: this.yScale(value),
|
|
168
|
+
opacity: value ? 1 : 0,
|
|
169
|
+
color: getColor(this.datum, config.color, stackedValues.length + index),
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
return stackedValues.concat(regularValues);
|
|
173
|
+
}
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
Crosshair.selectors = style;
|
|
178
|
+
|
|
179
|
+
export { Crosshair };
|
|
180
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/crosshair/index.ts"],"sourcesContent":["import { Selection, pointer } from 'd3-selection'\nimport { easeLinear } from 'd3-ease'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\nimport { Tooltip } from 'components/tooltip'\n\n// Utils\nimport { isNumber, isArray, getNumber, clamp, getStackedValues, getNearest, isFunction } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\n\n// Local Types\nimport { CrosshairAccessors, CrosshairCircle } from './types'\n\n// Config\nimport { CrosshairConfig, CrosshairConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Crosshair<Datum> extends XYComponentCore<Datum> {\n static selectors = s\n clippable = true // Don't apply clipping path to this component. See XYContainer\n config: CrosshairConfig<Datum> = new CrosshairConfig()\n container: Selection<SVGSVGElement, any, SVGSVGElement, any>\n line: Selection<SVGLineElement, any, SVGElement, any>\n x = 0\n datum: Datum\n datumIndex: number\n show = false\n private _animFrameId: number = null\n\n /** Tooltip component to be used by Crosshair if not provided by the config.\n * This property is supposed to be set externally by a container component like XYContainer. */\n public tooltip: Tooltip\n\n /** Accessors passed externally (e.g. from XYContainer) */\n private _accessors: CrosshairAccessors<Datum> = {\n x: undefined,\n y: undefined,\n yStacked: undefined,\n baseline: undefined,\n }\n\n public set accessors (accessors: CrosshairAccessors<Datum>) { this._accessors = accessors }\n public get accessors (): CrosshairAccessors<Datum> {\n const { config } = this\n\n const hasConfig = !!(config.x || config.y || config.yStacked)\n const x = hasConfig ? config.x : this._accessors.x\n const yAcc = hasConfig ? config.y : this._accessors.y\n const y = yAcc ? (isArray(yAcc) ? yAcc : [yAcc]) : undefined\n const yStacked = hasConfig ? config.yStacked : this._accessors.yStacked\n const baseline = config.baseline ?? this._accessors.baseline\n\n return { x, y, yStacked, baseline }\n }\n\n constructor (config?: CrosshairConfigInterface<Datum>) {\n super()\n if (config) this.config.init(config)\n\n this.g.style('opacity', this.show ? 1 : 0)\n this.line = this.g.append('line')\n .attr('class', s.line)\n }\n\n setContainer (containerSvg: Selection<SVGSVGElement, unknown, SVGSVGElement, unknown>): void {\n // Set up mousemove event for Crosshair\n this.container = containerSvg\n this.container.on('mousemove.crosshair', this._onMouseMove.bind(this))\n this.container.on('mouseout.crosshair', this._onMouseOut.bind(this))\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n if (config.snapToData && !this.datum) return\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n smartTransition(this.g, duration)\n .style('opacity', this.show ? 1 : 0)\n\n this.line\n .attr('y1', 0)\n .attr('y1', this._height)\n\n smartTransition(this.line, duration, easeLinear)\n .attr('x1', this.x)\n .attr('x2', this.x)\n\n const circleData = this.getCircleData()\n const circles = this.g\n .selectAll<SVGCircleElement, CrosshairCircle>('circle')\n .data(circleData, (d, i) => d.id ?? i)\n\n const circlesEnter = circles.enter()\n .append('circle')\n .attr('class', s.circle)\n .attr('r', 0)\n .attr('cx', this.x)\n .attr('cy', d => d.y)\n .style('fill', d => d.color)\n\n smartTransition(circlesEnter.merge(circles), duration, easeLinear)\n .attr('cx', this.x)\n .attr('cy', d => d.y)\n .attr('r', 4)\n .style('opacity', d => d.opacity)\n .style('fill', d => d.color)\n\n circles.exit().remove()\n }\n\n hide (): void {\n this._onMouseOut()\n }\n\n _onMouseMove (event: MouseEvent): void {\n const { config, datamodel, element } = this\n if (!this.accessors.x && datamodel.data?.length) console.warn('Crosshair: X accessor function has not been configured. Please check if it\\'s present in the configuration object')\n const [x] = pointer(event, element)\n const xRange = this.xScale.range()\n\n if (config.snapToData) {\n if (!this.accessors.y && !this.accessors.yStacked && datamodel.data?.length) console.warn('Crosshair: Y accessors have not been configured. Please check if they\\'re present in the configuration object')\n const scaleX = this.xScale\n const valueX = scaleX.invert(x) as number\n\n this.datum = getNearest(datamodel.data, valueX, this.accessors.x)\n this.datumIndex = datamodel.data.indexOf(this.datum)\n if (!this.datum) return\n\n this.x = clamp(Math.round(scaleX(getNumber(this.datum, this.accessors.x, this.datumIndex))), 0, this._width)\n\n // Show the crosshair only if it's in the chart range and not far from mouse pointer (if configured)\n this.show = (this.x >= 0) && (this.x <= this._width) && (!config.hideWhenFarFromPointer || (Math.abs(this.x - x) < config.hideWhenFarFromPointerDistance))\n } else {\n this.x = clamp(x, xRange[0], xRange[1])\n this.show = (this.x > xRange[0]) && (this.x < xRange[1])\n }\n\n window.cancelAnimationFrame(this._animFrameId)\n this._animFrameId = window.requestAnimationFrame(() => {\n this._render()\n })\n\n if (this.show) this._showTooltip(event)\n else this._hideTooltip()\n }\n\n _onMouseOut (): void {\n this.show = false\n\n window.cancelAnimationFrame(this._animFrameId)\n this._animFrameId = window.requestAnimationFrame(() => {\n this._render()\n })\n this._hideTooltip()\n }\n\n _showTooltip (event: MouseEvent): void {\n const { config } = this\n const tooltip = config.tooltip ?? this.tooltip\n if (!tooltip) return\n\n const container = tooltip.getContainer() || this.container.node()\n const [x, y] = tooltip.isContainerBody() ? [event.clientX, event.clientY] : pointer(event, container)\n const content = config.template(this.datum, this.xScale.invert(this.x))\n if (content) tooltip.show(content, { x, y })\n }\n\n _hideTooltip (): void {\n const { config } = this\n const tooltip = config.tooltip ?? this.tooltip\n tooltip?.hide()\n }\n\n // We don't want Crosshair to be be taken in to account in domain calculations\n getYDataExtent (): number[] {\n return [undefined, undefined]\n }\n\n private getCircleData (): CrosshairCircle[] {\n const { config, datamodel: { data } } = this\n\n if (isFunction(config.getCircles)) return config.getCircles(this.xScale.invert(this.x), data, this.yScale)\n\n if (config.snapToData && this.datum) {\n const yAccessors = this.accessors.y ?? []\n const yStackedAccessors = this.accessors.yStacked ?? []\n const baselineValue = getNumber(this.datum, this.accessors.baseline, this.datumIndex) || 0\n const stackedValues: CrosshairCircle[] = getStackedValues(this.datum, this.datumIndex, ...yStackedAccessors)\n .map((value, index, arr) => ({\n y: this.yScale(value + baselineValue),\n opacity: getNumber(this.datum, yStackedAccessors[index]) ? 1 : 0,\n color: getColor(this.datum, config.color, index),\n }))\n\n const regularValues: CrosshairCircle[] = yAccessors\n .map((a, index) => {\n const value = getNumber(this.datum, a)\n return {\n y: this.yScale(value),\n opacity: value ? 1 : 0,\n color: getColor(this.datum, config.color, stackedValues.length + index),\n }\n })\n\n return stackedValues.concat(regularValues)\n }\n\n return []\n }\n}\n"],"names":["s.line","s.circle","s"],"mappings":"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"}
|