@unovis/ts 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/.npm/_cacache/content-v2/sha512/61/45/6fe676782aa108257b260c25e8140c6d37bbc18450696066eeeb68af0ecc30da712b9d888ddf31844ec3334478f2b142f957298bebde9cba8de0ffc3c2d7 +0 -0
- package/.cache/.npm/_cacache/content-v2/sha512/c1/fd/5918e37e37c05cdfc4482fae30721b118c227a6b70b2830ff04cd62a82899a4ad1beaa562b4c673122c932c2eb017af2f4da3c8b7f9a0affbd1d926341a0 +0 -0
- package/.cache/.npm/_cacache/index-v5/1f/ac/9e290f9c0248c783167cd161d22fe850034423d1a425963bd64808710219 +3 -0
- 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 +49 -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 +32 -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 +121 -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 +220 -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 +139 -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 +207 -0
- package/components/leaflet-map/modules/utils.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 +28 -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/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 +56 -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/external/maplibre-gl/dist/maplibre-gl.css.js +4 -0
- package/external/maplibre-gl/dist/maplibre-gl.css.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 +61 -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,322 @@
|
|
|
1
|
+
import { css } from '@emotion/css';
|
|
2
|
+
import { extent, merge } from 'd3-array';
|
|
3
|
+
import { ContainerCore } from '../../core/container/index.js';
|
|
4
|
+
import { CoreDataModel } from '../../data-models/core.js';
|
|
5
|
+
import { AxisType } from '../../components/axis/types.js';
|
|
6
|
+
import { ScaleDimension } from '../../types/scale.js';
|
|
7
|
+
import { Direction } from '../../types/direction.js';
|
|
8
|
+
import { clamp, flatten, clean } from '../../utils/data.js';
|
|
9
|
+
import { guid } from '../../utils/misc.js';
|
|
10
|
+
import { XYContainerConfig } from './config.js';
|
|
11
|
+
|
|
12
|
+
class XYContainer extends ContainerCore {
|
|
13
|
+
constructor(element, config, data) {
|
|
14
|
+
var _a;
|
|
15
|
+
super(element);
|
|
16
|
+
this.config = new XYContainerConfig();
|
|
17
|
+
this.datamodel = new CoreDataModel();
|
|
18
|
+
this._clipPathId = guid();
|
|
19
|
+
this._axisMargin = { top: 0, bottom: 0, left: 0, right: 0 };
|
|
20
|
+
this._firstRender = true;
|
|
21
|
+
this._clipPath = this.svg.append('clipPath')
|
|
22
|
+
.attr('id', this._clipPathId);
|
|
23
|
+
this._clipPath.append('rect');
|
|
24
|
+
// When the base tag is specified on the HTML head,
|
|
25
|
+
// Safari fails to find the corresponding filter URL.
|
|
26
|
+
// We have to provide tull url in order to fix that
|
|
27
|
+
const highlightFilterId = 'saturate';
|
|
28
|
+
const baseUrl = window.location.href.replace(window.location.hash, '');
|
|
29
|
+
this.svg.attr('class', css `
|
|
30
|
+
--highlight-filter-id: url(${baseUrl}#${highlightFilterId}); // defining a css variable
|
|
31
|
+
`);
|
|
32
|
+
this._svgDefs = this.svg.append('defs');
|
|
33
|
+
this._svgDefs.append('filter')
|
|
34
|
+
.attr('id', highlightFilterId)
|
|
35
|
+
.attr('filterUnits', 'objectBoundingBox')
|
|
36
|
+
.html('<feColorMatrix type="saturate" in="SourceGraphic" values="1.35"/>');
|
|
37
|
+
if (config) {
|
|
38
|
+
this.updateContainer(config);
|
|
39
|
+
}
|
|
40
|
+
if (data) {
|
|
41
|
+
this.setData(data);
|
|
42
|
+
}
|
|
43
|
+
// Force re-render axes when fonts are loaded
|
|
44
|
+
(_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready.then(() => {
|
|
45
|
+
if (!this._firstRender)
|
|
46
|
+
this._renderAxes(0);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
get components() {
|
|
50
|
+
return this.config.components;
|
|
51
|
+
}
|
|
52
|
+
// Overriding ContainerCore default get width method to work with axis auto margin
|
|
53
|
+
get width() {
|
|
54
|
+
const margin = this._getMargin();
|
|
55
|
+
return clamp(this.containerWidth - margin.left - margin.right, 0, Number.POSITIVE_INFINITY);
|
|
56
|
+
}
|
|
57
|
+
// Overriding ContainerCore default get height method to work with axis auto margin
|
|
58
|
+
get height() {
|
|
59
|
+
const margin = this._getMargin();
|
|
60
|
+
return clamp(this.containerHeight - margin.top - margin.bottom, 0, Number.POSITIVE_INFINITY);
|
|
61
|
+
}
|
|
62
|
+
setData(data, preventRender) {
|
|
63
|
+
var _a, _b, _c, _d;
|
|
64
|
+
const { components, config } = this;
|
|
65
|
+
if (!data)
|
|
66
|
+
return;
|
|
67
|
+
this.datamodel.data = data;
|
|
68
|
+
components.forEach((c) => {
|
|
69
|
+
c.setData(data);
|
|
70
|
+
});
|
|
71
|
+
(_a = config.crosshair) === null || _a === void 0 ? void 0 : _a.setData(data);
|
|
72
|
+
(_b = config.xAxis) === null || _b === void 0 ? void 0 : _b.setData(data);
|
|
73
|
+
(_c = config.yAxis) === null || _c === void 0 ? void 0 : _c.setData(data);
|
|
74
|
+
(_d = config.tooltip) === null || _d === void 0 ? void 0 : _d.hide();
|
|
75
|
+
if (!preventRender)
|
|
76
|
+
this.render();
|
|
77
|
+
}
|
|
78
|
+
updateContainer(containerConfig, preventRender) {
|
|
79
|
+
super.updateContainer(containerConfig);
|
|
80
|
+
this.removeAllChildren();
|
|
81
|
+
// If there were any new components added we need to pass them data
|
|
82
|
+
this.setData(this.datamodel.data, true);
|
|
83
|
+
// Set up the axes
|
|
84
|
+
if (containerConfig.xAxis) {
|
|
85
|
+
this.config.xAxis.config.type = AxisType.X;
|
|
86
|
+
this.element.appendChild(containerConfig.xAxis.element);
|
|
87
|
+
}
|
|
88
|
+
if (containerConfig.yAxis) {
|
|
89
|
+
this.config.yAxis.config.type = AxisType.Y;
|
|
90
|
+
this.element.appendChild(containerConfig.yAxis.element);
|
|
91
|
+
}
|
|
92
|
+
// Re-insert elements to the DOM
|
|
93
|
+
for (const c of this.components) {
|
|
94
|
+
this.element.appendChild(c.element);
|
|
95
|
+
}
|
|
96
|
+
// Set up the tooltip
|
|
97
|
+
const tooltip = containerConfig.tooltip;
|
|
98
|
+
if (tooltip) {
|
|
99
|
+
if (!tooltip.hasContainer())
|
|
100
|
+
tooltip.setContainer(this._container);
|
|
101
|
+
tooltip.setComponents(this.components);
|
|
102
|
+
}
|
|
103
|
+
// Set up the crosshair
|
|
104
|
+
const crosshair = containerConfig.crosshair;
|
|
105
|
+
if (crosshair) {
|
|
106
|
+
crosshair.setContainer(this.svg);
|
|
107
|
+
crosshair.tooltip = tooltip;
|
|
108
|
+
this.element.appendChild(crosshair.element);
|
|
109
|
+
}
|
|
110
|
+
// Clipping path
|
|
111
|
+
this.element.appendChild(this._clipPath.node());
|
|
112
|
+
// Defs
|
|
113
|
+
this.element.appendChild(this._svgDefs.node());
|
|
114
|
+
// Rendering
|
|
115
|
+
if (!preventRender)
|
|
116
|
+
this.render();
|
|
117
|
+
}
|
|
118
|
+
updateComponents(componentConfigs, preventRender) {
|
|
119
|
+
const { config } = this;
|
|
120
|
+
this.components.forEach((c, i) => {
|
|
121
|
+
const componentConfig = componentConfigs[i];
|
|
122
|
+
if (componentConfig) {
|
|
123
|
+
c.prevConfig = c.config;
|
|
124
|
+
c.setConfig(componentConfigs[i]);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
this.updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair);
|
|
128
|
+
if (!preventRender)
|
|
129
|
+
this.render();
|
|
130
|
+
}
|
|
131
|
+
update(containerConfig, componentConfigs, data) {
|
|
132
|
+
if (data)
|
|
133
|
+
this.datamodel.data = data; // Just updating the data model because the `updateContainer` method has the `setData` step inside
|
|
134
|
+
if (containerConfig)
|
|
135
|
+
this.updateContainer(containerConfig, true);
|
|
136
|
+
if (componentConfigs)
|
|
137
|
+
this.updateComponents(componentConfigs, true);
|
|
138
|
+
this.render();
|
|
139
|
+
}
|
|
140
|
+
_render(customDuration) {
|
|
141
|
+
var _a, _b, _c;
|
|
142
|
+
const { config } = this;
|
|
143
|
+
super._render();
|
|
144
|
+
// Calculate extra margin required to fit the axes
|
|
145
|
+
if (config.autoMargin) {
|
|
146
|
+
this._setAutoMargin();
|
|
147
|
+
}
|
|
148
|
+
// Get chart total margin after auto margin calculations
|
|
149
|
+
const margin = this._getMargin();
|
|
150
|
+
// Update Scales of all the components at once to calculate required paddings and sync them
|
|
151
|
+
this.updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair);
|
|
152
|
+
// Render components
|
|
153
|
+
for (const c of this.components) {
|
|
154
|
+
c.g.attr('transform', `translate(${margin.left},${margin.top})`)
|
|
155
|
+
.style('clip-path', c.clippable ? `url(#${this._clipPathId})` : null)
|
|
156
|
+
.style('-webkit-clip-path', c.clippable ? `url(#${this._clipPathId})` : null);
|
|
157
|
+
c.render(customDuration);
|
|
158
|
+
}
|
|
159
|
+
this._renderAxes(this._firstRender ? 0 : customDuration);
|
|
160
|
+
// Clip Rect
|
|
161
|
+
this._clipPath.select('rect')
|
|
162
|
+
.attr('width', this.width)
|
|
163
|
+
.attr('height', this.height);
|
|
164
|
+
// Tooltip
|
|
165
|
+
(_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.update(); // Re-bind events
|
|
166
|
+
// Crosshair
|
|
167
|
+
const crosshair = config.crosshair;
|
|
168
|
+
if (crosshair) {
|
|
169
|
+
// Pass accessors
|
|
170
|
+
const yAccessors = this.components.filter(c => !c.stacked).map(c => c.config.y);
|
|
171
|
+
const yStackedAccessors = this.components.filter(c => c.stacked).map(c => c.config.y);
|
|
172
|
+
// eslint-disable-next-line dot-notation
|
|
173
|
+
const baselineAccessor = (_b = this.components.find(c => c.config['baseline'])) === null || _b === void 0 ? void 0 : _b.config['baseline'];
|
|
174
|
+
crosshair.accessors = {
|
|
175
|
+
x: (_c = this.components[0]) === null || _c === void 0 ? void 0 : _c.config.x,
|
|
176
|
+
y: flatten(yAccessors),
|
|
177
|
+
yStacked: flatten(yStackedAccessors),
|
|
178
|
+
baseline: baselineAccessor,
|
|
179
|
+
};
|
|
180
|
+
crosshair.g.attr('transform', `translate(${margin.left},${margin.top})`)
|
|
181
|
+
.style('clip-path', `url(#${this._clipPathId})`)
|
|
182
|
+
.style('-webkit-clip-path', `url(#${this._clipPathId})`);
|
|
183
|
+
crosshair.hide();
|
|
184
|
+
}
|
|
185
|
+
this._firstRender = false;
|
|
186
|
+
}
|
|
187
|
+
updateScales(...components) {
|
|
188
|
+
const c = clean(components || this.components);
|
|
189
|
+
this._setScales(...c);
|
|
190
|
+
this._updateScalesDomain(...c);
|
|
191
|
+
this._updateScalesRange(...c);
|
|
192
|
+
}
|
|
193
|
+
_setScales(...components) {
|
|
194
|
+
const { config } = this;
|
|
195
|
+
if (!components)
|
|
196
|
+
return;
|
|
197
|
+
// Set the X and Y scales
|
|
198
|
+
if (config.xScale)
|
|
199
|
+
components.forEach(c => c.setScale(ScaleDimension.X, config.xScale));
|
|
200
|
+
if (config.yScale)
|
|
201
|
+
components.forEach(c => c.setScale(ScaleDimension.Y, config.yScale));
|
|
202
|
+
}
|
|
203
|
+
_updateScalesDomain(...components) {
|
|
204
|
+
const { config } = this;
|
|
205
|
+
if (!components)
|
|
206
|
+
return;
|
|
207
|
+
// Loop over all the dimensions
|
|
208
|
+
Object.values(ScaleDimension).forEach((dimension) => {
|
|
209
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
210
|
+
const [min, max] = extent(merge(components
|
|
211
|
+
.filter(c => !c.config.excludeFromDomainCalculation)
|
|
212
|
+
.map(c => c.getDataExtent(dimension, config.scaleByDomain)))); // Components with undefined dimension accessors will return [undefined, undefined] but d3.extent will take care of that
|
|
213
|
+
const configuredDomain = dimension === ScaleDimension.Y ? config.yDomain : config.xDomain;
|
|
214
|
+
const configuredDomainMinConstraint = dimension === ScaleDimension.Y ? config.yDomainMinConstraint : config.xDomainMinConstraint;
|
|
215
|
+
const configuredDomainMaxConstraint = dimension === ScaleDimension.Y ? config.yDomainMaxConstraint : config.xDomainMaxConstraint;
|
|
216
|
+
const domainMin = (_b = (_a = configuredDomain === null || configuredDomain === void 0 ? void 0 : configuredDomain[0]) !== null && _a !== void 0 ? _a : min) !== null && _b !== void 0 ? _b : 0;
|
|
217
|
+
const domainMax = (_d = (_c = configuredDomain === null || configuredDomain === void 0 ? void 0 : configuredDomain[1]) !== null && _c !== void 0 ? _c : max) !== null && _d !== void 0 ? _d : 1;
|
|
218
|
+
const domain = [
|
|
219
|
+
clamp(domainMin, (_e = configuredDomainMinConstraint === null || configuredDomainMinConstraint === void 0 ? void 0 : configuredDomainMinConstraint[0]) !== null && _e !== void 0 ? _e : Number.NEGATIVE_INFINITY, (_f = configuredDomainMinConstraint === null || configuredDomainMinConstraint === void 0 ? void 0 : configuredDomainMinConstraint[1]) !== null && _f !== void 0 ? _f : Number.POSITIVE_INFINITY),
|
|
220
|
+
clamp(domainMax, (_g = configuredDomainMaxConstraint === null || configuredDomainMaxConstraint === void 0 ? void 0 : configuredDomainMaxConstraint[0]) !== null && _g !== void 0 ? _g : Number.NEGATIVE_INFINITY, (_h = configuredDomainMaxConstraint === null || configuredDomainMaxConstraint === void 0 ? void 0 : configuredDomainMaxConstraint[1]) !== null && _h !== void 0 ? _h : Number.POSITIVE_INFINITY),
|
|
221
|
+
];
|
|
222
|
+
if (config.preventEmptyDomain && (domain[0] === domain[1]) && isFinite(domain[0])) {
|
|
223
|
+
domain[1] = domain[0] + 1;
|
|
224
|
+
}
|
|
225
|
+
components.forEach(c => c.setScaleDomain(dimension, domain));
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
_updateScalesRange(...components) {
|
|
229
|
+
var _a, _b, _c, _d, _e, _f;
|
|
230
|
+
const { config } = this;
|
|
231
|
+
if (!components)
|
|
232
|
+
return;
|
|
233
|
+
// Set initial scale range
|
|
234
|
+
const isYDirectionSouth = config.yDirection === Direction.South;
|
|
235
|
+
const xRange = [(_a = config.padding.left) !== null && _a !== void 0 ? _a : 0, (_b = this.width - config.padding.right) !== null && _b !== void 0 ? _b : 0];
|
|
236
|
+
const yRange = [(_c = this.height - config.padding.bottom) !== null && _c !== void 0 ? _c : 0, (_d = config.padding.top) !== null && _d !== void 0 ? _d : 0];
|
|
237
|
+
if (isYDirectionSouth)
|
|
238
|
+
yRange.reverse();
|
|
239
|
+
for (const c of components) {
|
|
240
|
+
c.setSize(this.width, this.height);
|
|
241
|
+
c.setScaleRange(ScaleDimension.X, (_e = config.xRange) !== null && _e !== void 0 ? _e : xRange);
|
|
242
|
+
c.setScaleRange(ScaleDimension.Y, (_f = config.yRange) !== null && _f !== void 0 ? _f : yRange);
|
|
243
|
+
}
|
|
244
|
+
// Get and combine bleed
|
|
245
|
+
const bleed = components.map(c => c.bleed).reduce((bleed, b) => {
|
|
246
|
+
for (const key of Object.keys(bleed)) {
|
|
247
|
+
if (bleed[key] < b[key])
|
|
248
|
+
bleed[key] = b[key];
|
|
249
|
+
}
|
|
250
|
+
return bleed;
|
|
251
|
+
}, { top: 0, bottom: 0, left: 0, right: 0 });
|
|
252
|
+
// Update scale range
|
|
253
|
+
for (const c of components) {
|
|
254
|
+
c.setScaleRange(ScaleDimension.X, [xRange[0] + bleed.left, xRange[1] - bleed.right]);
|
|
255
|
+
c.setScaleRange(ScaleDimension.Y, isYDirectionSouth
|
|
256
|
+
? [yRange[0] + bleed.top, yRange[1] - bleed.bottom] // if Y axis is directed downwards
|
|
257
|
+
: [yRange[0] - bleed.bottom, yRange[1] + bleed.top] // if Y axis is directed upwards
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
_renderAxes(duration) {
|
|
262
|
+
const { config: { xAxis, yAxis } } = this;
|
|
263
|
+
const margin = this._getMargin();
|
|
264
|
+
const axes = clean([xAxis, yAxis]);
|
|
265
|
+
axes.forEach(axis => {
|
|
266
|
+
const offset = axis.getOffset(margin);
|
|
267
|
+
axis.g.attr('transform', `translate(${offset.left},${offset.top})`);
|
|
268
|
+
axis.render(duration);
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
_setAutoMargin() {
|
|
272
|
+
const { config: { xAxis, yAxis } } = this;
|
|
273
|
+
// At first we need to set the domain to the scales
|
|
274
|
+
const components = clean([...this.components, xAxis, yAxis]);
|
|
275
|
+
this._updateScalesDomain(...components);
|
|
276
|
+
// Calculate margin required by the axes
|
|
277
|
+
// We do two iterations on the first render, because the amount and size of ticks can change
|
|
278
|
+
// after new margin are calculated and applied (axes dimensions will change).
|
|
279
|
+
// That's needed for correct label placement.
|
|
280
|
+
const numIterations = this._firstRender ? 2 : 1;
|
|
281
|
+
for (let i = 0; i < numIterations; i += 1) {
|
|
282
|
+
const axisMargin = { top: 0, bottom: 0, left: 0, right: 0 };
|
|
283
|
+
this._updateScalesRange(...components);
|
|
284
|
+
const axes = clean([xAxis, yAxis]);
|
|
285
|
+
axes.forEach(axis => {
|
|
286
|
+
axis.preRender();
|
|
287
|
+
const m = axis.getRequiredMargin();
|
|
288
|
+
if (axisMargin.top < m.top)
|
|
289
|
+
axisMargin.top = m.top;
|
|
290
|
+
if (axisMargin.bottom < m.bottom)
|
|
291
|
+
axisMargin.bottom = m.bottom;
|
|
292
|
+
if (axisMargin.left < m.left)
|
|
293
|
+
axisMargin.left = m.left;
|
|
294
|
+
if (axisMargin.right < m.right)
|
|
295
|
+
axisMargin.right = m.right;
|
|
296
|
+
});
|
|
297
|
+
this._axisMargin = axisMargin;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
_getMargin() {
|
|
301
|
+
const { config: { margin } } = this;
|
|
302
|
+
return {
|
|
303
|
+
top: margin.top + this._axisMargin.top,
|
|
304
|
+
bottom: margin.bottom + this._axisMargin.bottom,
|
|
305
|
+
left: margin.left + this._axisMargin.left,
|
|
306
|
+
right: margin.right + this._axisMargin.right,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
destroy() {
|
|
310
|
+
const { components, config: { tooltip, crosshair, xAxis, yAxis } } = this;
|
|
311
|
+
super.destroy();
|
|
312
|
+
for (const c of components)
|
|
313
|
+
c === null || c === void 0 ? void 0 : c.destroy();
|
|
314
|
+
tooltip === null || tooltip === void 0 ? void 0 : tooltip.destroy();
|
|
315
|
+
crosshair === null || crosshair === void 0 ? void 0 : crosshair.destroy();
|
|
316
|
+
xAxis === null || xAxis === void 0 ? void 0 : xAxis.destroy();
|
|
317
|
+
yAxis === null || yAxis === void 0 ? void 0 : yAxis.destroy();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export { XYContainer };
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/containers/xy-container/index.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport { extent, merge as mergeArrays } from 'd3-array'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { XYComponentCore } from 'core/xy-component'\nimport { XYComponentConfigInterface } from 'core/xy-component/config'\n\n// Data Model\nimport { CoreDataModel } from 'data-models/core'\n\n// Types\nimport { Spacing } from 'types/spacing'\nimport { AxisType } from 'components/axis/types'\nimport { ScaleDimension } from 'types/scale'\nimport { Direction } from 'types/direction'\n\n// Utils\nimport { clamp, clean, flatten } from 'utils/data'\nimport { guid } from 'utils/misc'\n\n// Config\nimport { XYContainerConfig, XYContainerConfigInterface } from './config'\nimport {\n AreaConfigInterface,\n BrushConfigInterface,\n LineConfigInterface,\n ScatterConfigInterface,\n StackedBarConfigInterface,\n TimelineConfigInterface,\n} from '../../components'\n\nexport type XYConfigInterface<Datum> = XYComponentConfigInterface<Datum>\n| StackedBarConfigInterface<Datum>\n| LineConfigInterface<Datum>\n| ScatterConfigInterface<Datum>\n| BrushConfigInterface<Datum>\n| TimelineConfigInterface<Datum>\n| AreaConfigInterface<Datum>\n\nexport class XYContainer<Datum> extends ContainerCore {\n config: XYContainerConfig<Datum> = new XYContainerConfig()\n datamodel: CoreDataModel<Datum[]> = new CoreDataModel()\n private _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>\n private _clipPath: Selection<SVGClipPathElement, unknown, null, undefined>\n private _clipPathId = guid()\n private _axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n private _firstRender = true\n\n constructor (element: HTMLElement, config?: XYContainerConfigInterface<Datum>, data?: Datum[]) {\n super(element)\n\n this._clipPath = this.svg.append('clipPath')\n .attr('id', this._clipPathId)\n this._clipPath.append('rect')\n\n // When the base tag is specified on the HTML head,\n // Safari fails to find the corresponding filter URL.\n // We have to provide tull url in order to fix that\n const highlightFilterId = 'saturate'\n const baseUrl = window.location.href.replace(window.location.hash, '')\n this.svg.attr('class', css`\n --highlight-filter-id: url(${baseUrl}#${highlightFilterId}); // defining a css variable\n `)\n\n this._svgDefs = this.svg.append('defs')\n this._svgDefs.append('filter')\n .attr('id', highlightFilterId)\n .attr('filterUnits', 'objectBoundingBox')\n .html('<feColorMatrix type=\"saturate\" in=\"SourceGraphic\" values=\"1.35\"/>')\n\n if (config) {\n this.updateContainer(config)\n }\n\n if (data) {\n this.setData(data)\n }\n\n // Force re-render axes when fonts are loaded\n (document as any).fonts?.ready.then(() => {\n if (!this._firstRender) this._renderAxes(0)\n })\n }\n\n get components (): XYComponentCore<Datum>[] {\n return this.config.components\n }\n\n // Overriding ContainerCore default get width method to work with axis auto margin\n get width (): number {\n const margin = this._getMargin()\n return clamp(this.containerWidth - margin.left - margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n // Overriding ContainerCore default get height method to work with axis auto margin\n get height (): number {\n const margin = this._getMargin()\n\n return clamp(this.containerHeight - margin.top - margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n setData (data: Datum[], preventRender?: boolean): void {\n const { components, config } = this\n if (!data) return\n this.datamodel.data = data\n\n components.forEach((c) => {\n c.setData(data)\n })\n\n config.crosshair?.setData(data)\n config.xAxis?.setData(data)\n config.yAxis?.setData(data)\n config.tooltip?.hide()\n if (!preventRender) this.render()\n }\n\n updateContainer (containerConfig: XYContainerConfigInterface<Datum>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this.removeAllChildren()\n\n // If there were any new components added we need to pass them data\n this.setData(this.datamodel.data, true)\n\n // Set up the axes\n if (containerConfig.xAxis) {\n this.config.xAxis.config.type = AxisType.X\n this.element.appendChild(containerConfig.xAxis.element)\n }\n if (containerConfig.yAxis) {\n this.config.yAxis.config.type = AxisType.Y\n this.element.appendChild(containerConfig.yAxis.element)\n }\n\n // Re-insert elements to the DOM\n for (const c of this.components) {\n this.element.appendChild(c.element)\n }\n\n // Set up the tooltip\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents(this.components)\n }\n\n // Set up the crosshair\n const crosshair = containerConfig.crosshair\n if (crosshair) {\n crosshair.setContainer(this.svg)\n crosshair.tooltip = tooltip\n\n this.element.appendChild(crosshair.element)\n }\n\n // Clipping path\n this.element.appendChild(this._clipPath.node())\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n\n // Rendering\n if (!preventRender) this.render()\n }\n\n updateComponents (componentConfigs: XYConfigInterface<Datum>[], preventRender?: boolean): void {\n const { config } = this\n\n this.components.forEach((c, i) => {\n const componentConfig = componentConfigs[i]\n if (componentConfig) {\n c.prevConfig = c.config\n c.setConfig(componentConfigs[i])\n }\n })\n\n this.updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n if (!preventRender) this.render()\n }\n\n update (containerConfig: XYContainerConfigInterface<Datum>, componentConfigs?: XYComponentConfigInterface<Datum>[], data?: Datum[]): void {\n if (data) this.datamodel.data = data // Just updating the data model because the `updateContainer` method has the `setData` step inside\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfigs) this.updateComponents(componentConfigs, true)\n this.render()\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n super._render()\n\n // Calculate extra margin required to fit the axes\n if (config.autoMargin) {\n this._setAutoMargin()\n }\n\n // Get chart total margin after auto margin calculations\n const margin = this._getMargin()\n\n // Update Scales of all the components at once to calculate required paddings and sync them\n this.updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n\n // Render components\n for (const c of this.components) {\n c.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n .style('-webkit-clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n\n c.render(customDuration)\n }\n\n this._renderAxes(this._firstRender ? 0 : customDuration)\n\n // Clip Rect\n this._clipPath.select('rect')\n .attr('width', this.width)\n .attr('height', this.height)\n\n // Tooltip\n config.tooltip?.update() // Re-bind events\n\n // Crosshair\n const crosshair = config.crosshair\n if (crosshair) {\n // Pass accessors\n const yAccessors = this.components.filter(c => !c.stacked).map(c => c.config.y)\n const yStackedAccessors = this.components.filter(c => c.stacked).map(c => c.config.y)\n // eslint-disable-next-line dot-notation\n const baselineAccessor = this.components.find(c => c.config['baseline'])?.config['baseline']\n\n crosshair.accessors = {\n x: this.components[0]?.config.x,\n y: flatten(yAccessors),\n yStacked: flatten(yStackedAccessors),\n baseline: baselineAccessor,\n }\n\n crosshair.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', `url(#${this._clipPathId})`)\n .style('-webkit-clip-path', `url(#${this._clipPathId})`)\n crosshair.hide()\n }\n\n this._firstRender = false\n }\n\n updateScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const c = clean(components || this.components)\n this._setScales(...c)\n this._updateScalesDomain(...c)\n this._updateScalesRange(...c)\n }\n\n _setScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set the X and Y scales\n if (config.xScale) components.forEach(c => c.setScale(ScaleDimension.X, config.xScale))\n if (config.yScale) components.forEach(c => c.setScale(ScaleDimension.Y, config.yScale))\n }\n\n _updateScalesDomain<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Loop over all the dimensions\n Object.values(ScaleDimension).forEach((dimension: ScaleDimension) => {\n const [min, max] = extent(\n mergeArrays(\n components\n .filter(c => !c.config.excludeFromDomainCalculation)\n .map(c => c.getDataExtent(dimension, config.scaleByDomain))\n ) as number[]\n ) // Components with undefined dimension accessors will return [undefined, undefined] but d3.extent will take care of that\n\n const configuredDomain = dimension === ScaleDimension.Y ? config.yDomain : config.xDomain\n const configuredDomainMinConstraint = dimension === ScaleDimension.Y ? config.yDomainMinConstraint : config.xDomainMinConstraint\n const configuredDomainMaxConstraint = dimension === ScaleDimension.Y ? config.yDomainMaxConstraint : config.xDomainMaxConstraint\n const domainMin = configuredDomain?.[0] ?? min ?? 0\n const domainMax = configuredDomain?.[1] ?? max ?? 1\n const domain = [\n clamp(domainMin, configuredDomainMinConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMinConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n clamp(domainMax, configuredDomainMaxConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMaxConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n ]\n\n if (config.preventEmptyDomain && (domain[0] === domain[1]) && isFinite(domain[0])) {\n domain[1] = domain[0] + 1\n }\n\n components.forEach(c => c.setScaleDomain(dimension, domain))\n })\n }\n\n _updateScalesRange<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set initial scale range\n const isYDirectionSouth = config.yDirection === Direction.South\n const xRange: [number, number] = [config.padding.left ?? 0, this.width - config.padding.right ?? 0]\n const yRange: [number, number] = [this.height - config.padding.bottom ?? 0, config.padding.top ?? 0]\n if (isYDirectionSouth) yRange.reverse()\n\n for (const c of components) {\n c.setSize(this.width, this.height)\n c.setScaleRange(ScaleDimension.X, config.xRange ?? xRange)\n c.setScaleRange(ScaleDimension.Y, config.yRange ?? yRange)\n }\n\n // Get and combine bleed\n const bleed = components.map(c => c.bleed).reduce((bleed, b) => {\n for (const key of Object.keys(bleed)) {\n if (bleed[key] < b[key]) bleed[key] = b[key]\n }\n return bleed\n }, { top: 0, bottom: 0, left: 0, right: 0 })\n\n // Update scale range\n for (const c of components) {\n c.setScaleRange(ScaleDimension.X, [xRange[0] + bleed.left, xRange[1] - bleed.right])\n c.setScaleRange(\n ScaleDimension.Y,\n isYDirectionSouth\n ? [yRange[0] + bleed.top, yRange[1] - bleed.bottom] // if Y axis is directed downwards\n : [yRange[0] - bleed.bottom, yRange[1] + bleed.top] // if Y axis is directed upwards\n )\n }\n }\n\n _renderAxes (duration: number): void {\n const { config: { xAxis, yAxis } } = this\n const margin = this._getMargin()\n\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n const offset = axis.getOffset(margin)\n axis.g.attr('transform', `translate(${offset.left},${offset.top})`)\n axis.render(duration)\n })\n }\n\n _setAutoMargin (): void {\n const { config: { xAxis, yAxis } } = this\n\n // At first we need to set the domain to the scales\n const components = clean([...this.components, xAxis, yAxis])\n this._updateScalesDomain(...components)\n\n // Calculate margin required by the axes\n // We do two iterations on the first render, because the amount and size of ticks can change\n // after new margin are calculated and applied (axes dimensions will change).\n // That's needed for correct label placement.\n const numIterations = this._firstRender ? 2 : 1\n for (let i = 0; i < numIterations; i += 1) {\n const axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n this._updateScalesRange(...components)\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n axis.preRender()\n\n const m = axis.getRequiredMargin()\n if (axisMargin.top < m.top) axisMargin.top = m.top\n if (axisMargin.bottom < m.bottom) axisMargin.bottom = m.bottom\n if (axisMargin.left < m.left) axisMargin.left = m.left\n if (axisMargin.right < m.right) axisMargin.right = m.right\n })\n\n this._axisMargin = axisMargin\n }\n }\n\n private _getMargin (): Spacing {\n const { config: { margin } } = this\n\n return {\n top: margin.top + this._axisMargin.top,\n bottom: margin.bottom + this._axisMargin.bottom,\n left: margin.left + this._axisMargin.left,\n right: margin.right + this._axisMargin.right,\n }\n }\n\n public destroy (): void {\n const { components, config: { tooltip, crosshair, xAxis, yAxis } } = this\n super.destroy()\n\n for (const c of components) c?.destroy()\n tooltip?.destroy()\n crosshair?.destroy()\n xAxis?.destroy()\n yAxis?.destroy()\n }\n}\n"],"names":["mergeArrays"],"mappings":"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"}
|
package/containers.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ContainerCore } from './core/container';
|
|
2
|
+
export { ContainerConfigInterface } from './core/container/config';
|
|
3
|
+
export { SingleContainer } from './containers/single-container';
|
|
4
|
+
export { XYContainer } from './containers/xy-container';
|
|
5
|
+
export { XYContainerConfigInterface } from './containers/xy-container/config';
|
|
6
|
+
export { SingleContainerConfigInterface } from './containers/single-container/config';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Config } from "../config";
|
|
2
|
+
import { VisEventCallback, VisEventType } from "./types";
|
|
3
|
+
export interface ComponentConfigInterface {
|
|
4
|
+
/** Animation duration of the data update transitions in milliseconds. Default: `600` */
|
|
5
|
+
duration?: number;
|
|
6
|
+
/** Events configuration. An object containing properties in the following format:
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* {
|
|
10
|
+
* [selectorString]: {
|
|
11
|
+
* [eventType]: callbackFunction
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
* e.g.:
|
|
16
|
+
* ```
|
|
17
|
+
* {
|
|
18
|
+
* [Area.selectors.area]: {
|
|
19
|
+
* click: (d) => console.log("Clicked Area", d)
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
events?: {
|
|
25
|
+
[selector: string]: {
|
|
26
|
+
[eventType in VisEventType]?: VisEventCallback;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/** You can set every SVG and HTML visualization object to have a custom DOM attributes, which is useful
|
|
30
|
+
* when you want to do unit or end-to-end testing. Attributes configuration object has the following structure:
|
|
31
|
+
*
|
|
32
|
+
* ```
|
|
33
|
+
* {
|
|
34
|
+
* [selectorString]: {
|
|
35
|
+
* [attributeName]: attribute constant value or accessor function
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
* e.g.:
|
|
40
|
+
* ```
|
|
41
|
+
* {
|
|
42
|
+
* [Area.selectors.area]: {
|
|
43
|
+
* "test-value": d => d.value
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
attributes?: {
|
|
49
|
+
[selector: string]: {
|
|
50
|
+
[attr: string]: string | number | boolean | ((datum: any) => string | number | boolean);
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export declare class ComponentConfig extends Config implements ComponentConfigInterface {
|
|
55
|
+
duration: number;
|
|
56
|
+
events: {};
|
|
57
|
+
attributes: {};
|
|
58
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Config } from '../config/index.js';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable no-irregular-whitespace */
|
|
4
|
+
class ComponentConfig extends Config {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.duration = 600;
|
|
8
|
+
this.events = {};
|
|
9
|
+
this.attributes = {};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { ComponentConfig };
|
|
14
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/core/component/config.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\nimport { Config } from 'core/config'\nimport { VisEventCallback, VisEventType } from 'core/component/types'\n\nexport interface ComponentConfigInterface {\n /** Animation duration of the data update transitions in milliseconds. Default: `600` */\n duration?: number;\n /** Events configuration. An object containing properties in the following format:\n *\n * ```\n * {\n * [selectorString]: {\n * [eventType]: callbackFunction\n * }\n * }\n * ```\n * e.g.:\n * ```\n * {\n * [Area.selectors.area]: {\n * click: (d) => console.log(\"Clicked Area\", d)\n * }\n * }\n * ```\n */\n events?: {\n [selector: string]: {\n [eventType in VisEventType]?: VisEventCallback;\n };\n };\n /** You can set every SVG and HTML visualization object to have a custom DOM attributes, which is useful\n * when you want to do unit or end-to-end testing. Attributes configuration object has the following structure:\n *\n * ```\n * {\n * [selectorString]: {\n * [attributeName]: attribute constant value or accessor function\n * }\n * }\n * ```\n * e.g.:\n * ```\n * {\n * [Area.selectors.area]: {\n * \"test-value\": d => d.value\n * }\n * }\n * ```\n */\n attributes?: {\n [selector: string]: {\n [attr: string]: string | number | boolean | ((datum: any) => string | number | boolean);\n };\n };\n}\n\nexport class ComponentConfig extends Config implements ComponentConfigInterface {\n duration = 600\n events = {}\n attributes = {}\n}\n"],"names":[],"mappings":";;AAAA;AAwDM,MAAO,eAAgB,SAAQ,MAAM,CAAA;AAA3C,IAAA,WAAA,GAAA;;QACE,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAA;QACd,IAAM,CAAA,MAAA,GAAG,EAAE,CAAA;QACX,IAAU,CAAA,UAAA,GAAG,EAAE,CAAA;KAChB;AAAA;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
import { Selection } from 'd3-selection';
|
|
3
|
+
import { CoreDataModel } from "../../data-models/core";
|
|
4
|
+
import { ComponentType, Sizing } from "../../types/component";
|
|
5
|
+
import { Spacing } from "../../types/spacing";
|
|
6
|
+
import { VisEventCallback, VisEventType } from './types';
|
|
7
|
+
import { ComponentConfig, ComponentConfigInterface } from './config';
|
|
8
|
+
export declare class ComponentCore<CoreDatum, ConfigClass extends ComponentConfig = ComponentConfig, ConfigInterface extends ComponentConfigInterface = ComponentConfigInterface> {
|
|
9
|
+
element: SVGGElement | HTMLElement;
|
|
10
|
+
type: ComponentType;
|
|
11
|
+
g: Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>;
|
|
12
|
+
config: ConfigClass;
|
|
13
|
+
prevConfig: ConfigClass;
|
|
14
|
+
datamodel: CoreDataModel<CoreDatum>;
|
|
15
|
+
sizing: Sizing | string;
|
|
16
|
+
events: {
|
|
17
|
+
[selector: string]: {
|
|
18
|
+
[eventType in VisEventType]?: VisEventCallback;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/** Component width in pixels. This property is set automatically by the container. */
|
|
22
|
+
protected _width: number;
|
|
23
|
+
/** Component height in pixels. This property is set automatically by the container. */
|
|
24
|
+
protected _height: number;
|
|
25
|
+
_setUpComponentEventsThrottled: import("lodash").DebouncedFunc<() => void>;
|
|
26
|
+
_setCustomAttributesThrottled: import("lodash").DebouncedFunc<() => void>;
|
|
27
|
+
constructor(type?: ComponentType);
|
|
28
|
+
setConfig(config: ConfigInterface): void;
|
|
29
|
+
setData(data: CoreDatum): void;
|
|
30
|
+
setSize(width: number, height: number): void;
|
|
31
|
+
render(duration?: number): void;
|
|
32
|
+
get bleed(): Spacing;
|
|
33
|
+
_render(duration?: number): void;
|
|
34
|
+
private _setCustomAttributes;
|
|
35
|
+
private _setUpComponentEvents;
|
|
36
|
+
private _bindEvents;
|
|
37
|
+
destroy(): void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { select } from 'd3-selection';
|
|
2
|
+
import { CoreDataModel } from '../../data-models/core.js';
|
|
3
|
+
import { throttle } from '../../utils/data.js';
|
|
4
|
+
import { ComponentType, Sizing } from '../../types/component.js';
|
|
5
|
+
|
|
6
|
+
class ComponentCore {
|
|
7
|
+
constructor(type = ComponentType.SVG) {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
this.type = ComponentType.SVG;
|
|
10
|
+
this.datamodel = new CoreDataModel();
|
|
11
|
+
this.sizing = Sizing.Fit;
|
|
12
|
+
this.events = {};
|
|
13
|
+
/** Component width in pixels. This property is set automatically by the container. */
|
|
14
|
+
this._width = 400;
|
|
15
|
+
/** Component height in pixels. This property is set automatically by the container. */
|
|
16
|
+
this._height = 200;
|
|
17
|
+
this._setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500);
|
|
18
|
+
this._setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500);
|
|
19
|
+
if (type === ComponentType.SVG) {
|
|
20
|
+
this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.element = document.createElement('div');
|
|
24
|
+
}
|
|
25
|
+
this.g = select(this.element);
|
|
26
|
+
// Setting the root class if available
|
|
27
|
+
// eslint-disable-next-line dot-notation
|
|
28
|
+
const rootClass = (_b = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a['selectors']) === null || _b === void 0 ? void 0 : _b.root;
|
|
29
|
+
if (rootClass)
|
|
30
|
+
this.g.attr('class', rootClass);
|
|
31
|
+
}
|
|
32
|
+
setConfig(config) {
|
|
33
|
+
var _a, _b;
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
35
|
+
const ConfigModel = this.config.constructor;
|
|
36
|
+
this.prevConfig = this.config;
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
if ((_a = this.prevConfig) === null || _a === void 0 ? void 0 : _a.xScale)
|
|
40
|
+
config.xScale = this.prevConfig.xScale;
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
if ((_b = this.prevConfig) === null || _b === void 0 ? void 0 : _b.yScale)
|
|
44
|
+
config.yScale = this.prevConfig.yScale;
|
|
45
|
+
this.config = new ConfigModel().init(config);
|
|
46
|
+
}
|
|
47
|
+
setData(data) {
|
|
48
|
+
this.datamodel.data = data;
|
|
49
|
+
}
|
|
50
|
+
setSize(width, height) {
|
|
51
|
+
if (isFinite(width))
|
|
52
|
+
this._width = width;
|
|
53
|
+
if (isFinite(height))
|
|
54
|
+
this._height = height;
|
|
55
|
+
}
|
|
56
|
+
render(duration = this.config.duration) {
|
|
57
|
+
this._render(duration);
|
|
58
|
+
const ANIMATING_ATTR = 'animating';
|
|
59
|
+
if (duration) {
|
|
60
|
+
this.g.attr(ANIMATING_ATTR, '');
|
|
61
|
+
const transition = this.g
|
|
62
|
+
.transition(ANIMATING_ATTR)
|
|
63
|
+
.duration(duration);
|
|
64
|
+
transition.on('end interrupt', () => {
|
|
65
|
+
this.g.attr(ANIMATING_ATTR, null);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
this._setUpComponentEventsThrottled();
|
|
69
|
+
this._setCustomAttributesThrottled();
|
|
70
|
+
}
|
|
71
|
+
get bleed() {
|
|
72
|
+
return { top: 0, bottom: 0, left: 0, right: 0 };
|
|
73
|
+
}
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
75
|
+
_render(duration = this.config.duration) {
|
|
76
|
+
}
|
|
77
|
+
_setCustomAttributes() {
|
|
78
|
+
const attributeMap = this.config.attributes;
|
|
79
|
+
Object.keys(attributeMap).forEach(className => {
|
|
80
|
+
Object.keys(attributeMap[className]).forEach(attr => {
|
|
81
|
+
this.g
|
|
82
|
+
.selectAll(`.${className}`)
|
|
83
|
+
.attr(attr, attributeMap[className][attr]);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
_setUpComponentEvents() {
|
|
88
|
+
// Set up default events
|
|
89
|
+
this._bindEvents(this.events);
|
|
90
|
+
// Set up user-defined events
|
|
91
|
+
this._bindEvents(this.config.events, '.user');
|
|
92
|
+
}
|
|
93
|
+
_bindEvents(events = this.events, suffix = '') {
|
|
94
|
+
Object.keys(events).forEach(className => {
|
|
95
|
+
Object.keys(events[className]).forEach(eventType => {
|
|
96
|
+
const selection = this.g.selectAll(`.${className}`);
|
|
97
|
+
selection.on(eventType + suffix, (event, d) => {
|
|
98
|
+
const els = selection.nodes();
|
|
99
|
+
const i = els.indexOf(event.currentTarget);
|
|
100
|
+
return events[className][eventType](d, event, i, els);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
destroy() {
|
|
106
|
+
var _a;
|
|
107
|
+
(_a = this.g) === null || _a === void 0 ? void 0 : _a.remove();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { ComponentCore };
|
|
112
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/core/component/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\n\n// Core\nimport { CoreDataModel } from 'data-models/core'\n\n// Utils\nimport { throttle } from 'utils/data'\n\n// Types\nimport { ComponentType, Sizing } from 'types/component'\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { VisEventCallback, VisEventType } from './types'\n\n// Config\nimport { ComponentConfig, ComponentConfigInterface } from './config'\n\nexport class ComponentCore<\n CoreDatum,\n ConfigClass extends ComponentConfig = ComponentConfig,\n ConfigInterface extends ComponentConfigInterface = ComponentConfigInterface,\n> {\n element: SVGGElement | HTMLElement\n type: ComponentType = ComponentType.SVG\n g: Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n config: ConfigClass\n prevConfig: ConfigClass\n datamodel: CoreDataModel<CoreDatum> = new CoreDataModel()\n sizing: Sizing | string = Sizing.Fit\n\n events: {\n [selector: string]: {\n [eventType in VisEventType]?: VisEventCallback;\n };\n } = {}\n\n /** Component width in pixels. This property is set automatically by the container. */\n protected _width = 400\n /** Component height in pixels. This property is set automatically by the container. */\n protected _height = 200\n\n _setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500)\n _setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500)\n\n constructor (type = ComponentType.SVG) {\n if (type === ComponentType.SVG) {\n this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n } else {\n this.element = document.createElement('div')\n }\n this.g = select(this.element) as Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n\n // Setting the root class if available\n // eslint-disable-next-line dot-notation\n const rootClass = this.constructor?.['selectors']?.root as string\n if (rootClass) this.g.attr('class', rootClass)\n }\n\n setConfig (config: ConfigInterface): void {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ConfigModel = (this.config.constructor as typeof ComponentConfig)\n this.prevConfig = this.config\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (this.prevConfig?.xScale) config.xScale = this.prevConfig.xScale\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (this.prevConfig?.yScale) config.yScale = this.prevConfig.yScale\n this.config = new ConfigModel().init(config) as ConfigClass\n }\n\n setData (data: CoreDatum): void {\n this.datamodel.data = data\n }\n\n setSize (width: number, height: number): void {\n if (isFinite(width)) this._width = width\n if (isFinite(height)) this._height = height\n }\n\n render (duration = this.config.duration): void {\n this._render(duration)\n\n const ANIMATING_ATTR = 'animating'\n if (duration) {\n this.g.attr(ANIMATING_ATTR, '')\n const transition = this.g\n .transition(ANIMATING_ATTR)\n .duration(duration) as Transition<SVGGElement | HTMLElement, unknown, null, undefined>\n\n transition.on('end interrupt', () => {\n this.g.attr(ANIMATING_ATTR, null)\n })\n }\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n }\n\n get bleed (): Spacing {\n return { top: 0, bottom: 0, left: 0, right: 0 }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _render (duration = this.config.duration): void {\n }\n\n private _setCustomAttributes (): void {\n const attributeMap = this.config.attributes\n\n Object.keys(attributeMap).forEach(className => {\n Object.keys(attributeMap[className]).forEach(attr => {\n (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>)\n .selectAll(`.${className}`)\n .attr(attr, attributeMap[className][attr])\n })\n })\n }\n\n private _setUpComponentEvents (): void {\n // Set up default events\n this._bindEvents(this.events)\n\n // Set up user-defined events\n this._bindEvents(this.config.events, '.user')\n }\n\n private _bindEvents (events = this.events, suffix = ''): void {\n Object.keys(events).forEach(className => {\n Object.keys(events[className]).forEach(eventType => {\n const selection = (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>).selectAll(`.${className}`)\n selection.on(eventType + suffix, (event: Event, d) => {\n const els = selection.nodes()\n const i = els.indexOf(event.currentTarget as SVGGElement | HTMLElement)\n return events[className][eventType](d, event, i, els)\n })\n })\n })\n }\n\n public destroy (): void {\n this.g?.remove()\n }\n}\n"],"names":[],"mappings":"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"}
|