@unovis/ts 1.1.1-beta.6 → 1.1.1-beta.7

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.
Files changed (710) hide show
  1. package/declaration.d.ts +1 -0
  2. package/index.ts +1 -0
  3. package/licences.txt +43 -0
  4. package/maps.ts +1 -0
  5. package/package.json +1 -1
  6. package/rollup.config.js +71 -0
  7. package/rules/ts-getter-setter.js +35 -0
  8. package/src/components/area/config.ts +29 -0
  9. package/src/components/area/index.ts +133 -0
  10. package/{components/area/style.js → src/components/area/style.ts} +9 -10
  11. package/src/components/area/types.ts +2 -0
  12. package/src/components/axis/config.ts +76 -0
  13. package/src/components/axis/index.ts +363 -0
  14. package/{components/axis/style.js → src/components/axis/style.ts} +27 -22
  15. package/src/components/axis/types.ts +4 -0
  16. package/src/components/brush/config.ts +51 -0
  17. package/src/components/brush/index.ts +233 -0
  18. package/{components/brush/style.js → src/components/brush/style.ts} +15 -14
  19. package/src/components/brush/types.ts +8 -0
  20. package/src/components/bullet-legend/config.ts +38 -0
  21. package/src/components/bullet-legend/index.ts +104 -0
  22. package/{components/bullet-legend/style.js → src/components/bullet-legend/style.ts} +18 -16
  23. package/src/components/bullet-legend/types.ts +7 -0
  24. package/src/components/chord-diagram/config.ts +53 -0
  25. package/src/components/chord-diagram/index.ts +401 -0
  26. package/src/components/chord-diagram/modules/label.ts +155 -0
  27. package/src/components/chord-diagram/modules/link.ts +91 -0
  28. package/src/components/chord-diagram/modules/node.ts +80 -0
  29. package/{components/chord-diagram/style.js → src/components/chord-diagram/style.ts} +39 -30
  30. package/src/components/chord-diagram/types.ts +68 -0
  31. package/src/components/crosshair/config.ts +48 -0
  32. package/src/components/crosshair/index.ts +220 -0
  33. package/{components/crosshair/style.js → src/components/crosshair/style.ts} +12 -12
  34. package/src/components/crosshair/types.ts +15 -0
  35. package/src/components/donut/config.ts +65 -0
  36. package/src/components/donut/index.ts +148 -0
  37. package/src/components/donut/modules/arc.ts +86 -0
  38. package/{components/donut/style.js → src/components/donut/style.ts} +20 -18
  39. package/src/components/donut/types.ts +17 -0
  40. package/src/components/flow-legend/config.ts +31 -0
  41. package/src/components/flow-legend/index.ts +103 -0
  42. package/{components/flow-legend/style.js → src/components/flow-legend/style.ts} +25 -21
  43. package/src/components/flow-legend/types.ts +10 -0
  44. package/src/components/free-brush/config.ts +54 -0
  45. package/src/components/free-brush/index.ts +207 -0
  46. package/{components/free-brush/style.js → src/components/free-brush/style.ts} +12 -12
  47. package/src/components/free-brush/types.ts +8 -0
  48. package/src/components/graph/config.ts +280 -0
  49. package/src/components/graph/index.ts +809 -0
  50. package/src/components/graph/modules/layout-helpers.ts +96 -0
  51. package/src/components/graph/modules/layout.ts +502 -0
  52. package/src/components/graph/modules/link/helper.ts +105 -0
  53. package/src/components/graph/modules/link/index.ts +302 -0
  54. package/{components/graph/modules/link/style.js → src/components/graph/modules/link/style.ts} +45 -34
  55. package/src/components/graph/modules/node/helper.ts +162 -0
  56. package/src/components/graph/modules/node/index.ts +343 -0
  57. package/{components/graph/modules/node/style.js → src/components/graph/modules/node/style.ts} +72 -52
  58. package/src/components/graph/modules/panel/helper.ts +160 -0
  59. package/src/components/graph/modules/panel/index.ts +137 -0
  60. package/{components/graph/modules/panel/style.js → src/components/graph/modules/panel/style.ts} +42 -32
  61. package/src/components/graph/modules/shape.ts +108 -0
  62. package/src/components/graph/modules/zoom-levels.ts +6 -0
  63. package/src/components/graph/style.ts +72 -0
  64. package/src/components/graph/types.ts +152 -0
  65. package/src/components/grouped-bar/config.ts +40 -0
  66. package/src/components/grouped-bar/index.ts +325 -0
  67. package/{components/grouped-bar/style.js → src/components/grouped-bar/style.ts} +15 -14
  68. package/src/components/leaflet-flow-map/config.ts +60 -0
  69. package/src/components/leaflet-flow-map/index.ts +279 -0
  70. package/src/components/leaflet-flow-map/renderer-utils.ts +14 -0
  71. package/src/components/leaflet-flow-map/renderer.ts +146 -0
  72. package/{components/leaflet-flow-map/shaders.js → src/components/leaflet-flow-map/shaders.ts} +4 -7
  73. package/src/components/leaflet-flow-map/types.ts +18 -0
  74. package/src/components/leaflet-map/config.ts +234 -0
  75. package/src/components/leaflet-map/index.ts +808 -0
  76. package/src/components/leaflet-map/leaflet.css +625 -0
  77. package/src/components/leaflet-map/modules/clusterBackground.ts +34 -0
  78. package/src/components/leaflet-map/modules/donut.ts +37 -0
  79. package/src/components/leaflet-map/modules/map.ts +178 -0
  80. package/src/components/leaflet-map/modules/node.ts +208 -0
  81. package/src/components/leaflet-map/modules/selectionRing.ts +63 -0
  82. package/src/components/leaflet-map/modules/utils.ts +290 -0
  83. package/{components → src/components}/leaflet-map/renderer/leaflet-maplibre-gl.js +76 -78
  84. package/src/components/leaflet-map/renderer/map-style.ts +24 -0
  85. package/src/components/leaflet-map/renderer/mapboxgl/mapboxgl-dark-theme.json +35 -0
  86. package/src/components/leaflet-map/renderer/mapboxgl/mapboxgl-light-theme.json +35 -0
  87. package/src/components/leaflet-map/renderer/mapboxgl/mapboxgl-settings.json +2185 -0
  88. package/src/components/leaflet-map/renderer/mapboxgl-layer.ts +43 -0
  89. package/src/components/leaflet-map/renderer/mapboxgl-utils.ts +40 -0
  90. package/{components → src/components}/leaflet-map/renderer/maplibre-gl.css.js +2 -4
  91. package/src/components/leaflet-map/style.ts +217 -0
  92. package/src/components/leaflet-map/types.ts +75 -0
  93. package/src/components/line/config.ts +34 -0
  94. package/src/components/line/index.ts +188 -0
  95. package/{components/line/style.js → src/components/line/style.ts} +18 -16
  96. package/src/components/line/types.ts +3 -0
  97. package/src/components/nested-donut/config.ts +75 -0
  98. package/src/components/nested-donut/index.ts +176 -0
  99. package/src/components/nested-donut/modules/arc.ts +78 -0
  100. package/src/components/nested-donut/modules/label.ts +63 -0
  101. package/src/components/nested-donut/style.ts +82 -0
  102. package/src/components/nested-donut/types.ts +29 -0
  103. package/src/components/sankey/config.ts +195 -0
  104. package/src/components/sankey/index.ts +387 -0
  105. package/src/components/sankey/modules/label.ts +228 -0
  106. package/src/components/sankey/modules/link.ts +141 -0
  107. package/src/components/sankey/modules/node.ts +221 -0
  108. package/{components/sankey/style.js → src/components/sankey/style.ts} +60 -44
  109. package/src/components/sankey/types.ts +95 -0
  110. package/src/components/scatter/config.ts +49 -0
  111. package/src/components/scatter/index.ts +220 -0
  112. package/src/components/scatter/modules/point.ts +123 -0
  113. package/src/components/scatter/modules/utils.ts +150 -0
  114. package/{components/scatter/style.js → src/components/scatter/style.ts} +15 -14
  115. package/src/components/scatter/types.ts +21 -0
  116. package/src/components/stacked-bar/config.ts +42 -0
  117. package/src/components/stacked-bar/index.ts +267 -0
  118. package/{components/stacked-bar/style.js → src/components/stacked-bar/style.ts} +15 -14
  119. package/src/components/stacked-bar/types.ts +5 -0
  120. package/src/components/timeline/config.ts +49 -0
  121. package/src/components/timeline/index.ts +302 -0
  122. package/{components/timeline/style.js → src/components/timeline/style.ts} +39 -30
  123. package/src/components/tooltip/config.ts +69 -0
  124. package/src/components/tooltip/index.ts +220 -0
  125. package/{components → src/components}/tooltip/style.js +11 -14
  126. package/src/components/topojson-map/config.ts +124 -0
  127. package/src/components/topojson-map/index.ts +436 -0
  128. package/{components/topojson-map/style.js → src/components/topojson-map/style.ts} +33 -26
  129. package/src/components/topojson-map/types.ts +123 -0
  130. package/src/components/topojson-map/utils.ts +29 -0
  131. package/src/components/vis-controls/config.ts +16 -0
  132. package/src/components/vis-controls/index.ts +68 -0
  133. package/{components/vis-controls/style.js → src/components/vis-controls/style.ts} +34 -27
  134. package/src/components/vis-controls/types.ts +14 -0
  135. package/src/components/xy-labels/config.ts +56 -0
  136. package/src/components/xy-labels/index.ts +109 -0
  137. package/src/components/xy-labels/modules/label.ts +140 -0
  138. package/{components/xy-labels/style.js → src/components/xy-labels/style.ts} +15 -14
  139. package/src/components/xy-labels/types.ts +26 -0
  140. package/src/components.ts +56 -0
  141. package/src/containers/single-container/config.ts +15 -0
  142. package/src/containers/single-container/index.ts +150 -0
  143. package/src/containers/xy-container/config.ts +112 -0
  144. package/src/containers/xy-container/index.ts +407 -0
  145. package/src/containers.ts +6 -0
  146. package/src/core/component/config.ts +61 -0
  147. package/src/core/component/index.ts +154 -0
  148. package/src/core/component/types.ts +9 -0
  149. package/src/core/config/index.ts +12 -0
  150. package/src/core/container/config.ts +56 -0
  151. package/src/core/container/index.ts +136 -0
  152. package/src/core/xy-component/config.ts +46 -0
  153. package/src/core/xy-component/index.ts +90 -0
  154. package/src/data-models/core.ts +15 -0
  155. package/src/data-models/graph.ts +138 -0
  156. package/src/data-models/map-graph.ts +72 -0
  157. package/src/data-models/map.ts +18 -0
  158. package/src/data-models/series.ts +16 -0
  159. package/src/index.ts +7 -0
  160. package/src/maps/china-provinces.json +1 -0
  161. package/src/maps/fr-regions.json +1 -0
  162. package/src/maps/germany-regions.json +1 -0
  163. package/src/maps/ind-regions.json +1 -0
  164. package/src/maps/uk-regions.json +1 -0
  165. package/src/maps/us-counties.json +1 -0
  166. package/src/maps/us-states.json +1 -0
  167. package/src/maps/world-110m-alpha.json +1 -0
  168. package/src/maps/world-simple.json +1 -0
  169. package/src/maps/world-simplest.json +1 -0
  170. package/src/maps.ts +34 -0
  171. package/src/styles/colors.ts +28 -0
  172. package/src/styles/index.ts +38 -0
  173. package/{styles/sizes.js → src/styles/sizes.ts} +6 -8
  174. package/src/types/accessor.ts +5 -0
  175. package/src/types/component.ts +15 -0
  176. package/src/types/curve.ts +62 -0
  177. package/src/types/data.ts +5 -0
  178. package/src/types/direction.ts +6 -0
  179. package/src/types/graph.ts +40 -0
  180. package/src/types/map.ts +5 -0
  181. package/src/types/misc.ts +10 -0
  182. package/src/types/position.ts +23 -0
  183. package/src/types/scale.ts +47 -0
  184. package/src/types/shape.ts +7 -0
  185. package/src/types/spacing.ts +6 -0
  186. package/src/types/svg.ts +32 -0
  187. package/src/types/symbol.ts +21 -0
  188. package/src/types/text.ts +71 -0
  189. package/src/types.ts +31 -0
  190. package/src/utils/color.ts +41 -0
  191. package/src/utils/d3.ts +15 -0
  192. package/src/utils/data.ts +328 -0
  193. package/src/utils/html.ts +13 -0
  194. package/src/utils/map.ts +29 -0
  195. package/src/utils/misc.ts +54 -0
  196. package/src/utils/path.ts +196 -0
  197. package/src/utils/scale.ts +1 -0
  198. package/src/utils/style.ts +37 -0
  199. package/src/utils/svg.ts +49 -0
  200. package/src/utils/text.ts +529 -0
  201. package/src/utils/type.ts +9 -0
  202. package/tsconfig.json +29 -0
  203. package/components/area/config.d.ts +0 -25
  204. package/components/area/config.js +0 -16
  205. package/components/area/config.js.map +0 -1
  206. package/components/area/index.d.ts +0 -19
  207. package/components/area/index.js +0 -102
  208. package/components/area/index.js.map +0 -1
  209. package/components/area/style.d.ts +0 -3
  210. package/components/area/style.js.map +0 -1
  211. package/components/area/types.d.ts +0 -6
  212. package/components/axis/config.d.ts +0 -71
  213. package/components/axis/config.js +0 -32
  214. package/components/axis/config.js.map +0 -1
  215. package/components/axis/index.d.ts +0 -44
  216. package/components/axis/index.js +0 -305
  217. package/components/axis/index.js.map +0 -1
  218. package/components/axis/style.d.ts +0 -9
  219. package/components/axis/style.js.map +0 -1
  220. package/components/axis/types.d.ts +0 -4
  221. package/components/axis/types.js +0 -8
  222. package/components/axis/types.js.map +0 -1
  223. package/components/brush/config.d.ts +0 -42
  224. package/components/brush/config.js +0 -24
  225. package/components/brush/config.js.map +0 -1
  226. package/components/brush/index.d.ts +0 -28
  227. package/components/brush/index.js +0 -199
  228. package/components/brush/index.js.map +0 -1
  229. package/components/brush/style.d.ts +0 -5
  230. package/components/brush/style.js.map +0 -1
  231. package/components/brush/types.d.ts +0 -7
  232. package/components/brush/types.js +0 -8
  233. package/components/brush/types.js.map +0 -1
  234. package/components/bullet-legend/config.d.ts +0 -34
  235. package/components/bullet-legend/config.js +0 -16
  236. package/components/bullet-legend/config.js.map +0 -1
  237. package/components/bullet-legend/index.d.ts +0 -19
  238. package/components/bullet-legend/index.js +0 -79
  239. package/components/bullet-legend/index.js.map +0 -1
  240. package/components/bullet-legend/style.d.ts +0 -6
  241. package/components/bullet-legend/style.js.map +0 -1
  242. package/components/bullet-legend/types.d.ts +0 -7
  243. package/components/bullet-legend/types.js +0 -2
  244. package/components/bullet-legend/types.js.map +0 -1
  245. package/components/chord-diagram/config.d.ts +0 -44
  246. package/components/chord-diagram/config.js +0 -25
  247. package/components/chord-diagram/config.js.map +0 -1
  248. package/components/chord-diagram/index.d.ts +0 -42
  249. package/components/chord-diagram/index.js +0 -305
  250. package/components/chord-diagram/index.js.map +0 -1
  251. package/components/chord-diagram/modules/label.d.ts +0 -8
  252. package/components/chord-diagram/modules/label.js +0 -115
  253. package/components/chord-diagram/modules/label.js.map +0 -1
  254. package/components/chord-diagram/modules/link.d.ts +0 -21
  255. package/components/chord-diagram/modules/link.js +0 -63
  256. package/components/chord-diagram/modules/link.js.map +0 -1
  257. package/components/chord-diagram/modules/node.d.ts +0 -17
  258. package/components/chord-diagram/modules/node.js +0 -52
  259. package/components/chord-diagram/modules/node.js.map +0 -1
  260. package/components/chord-diagram/style.d.ts +0 -13
  261. package/components/chord-diagram/style.js.map +0 -1
  262. package/components/chord-diagram/types.d.ts +0 -58
  263. package/components/chord-diagram/types.js +0 -8
  264. package/components/chord-diagram/types.js.map +0 -1
  265. package/components/crosshair/config.d.ts +0 -43
  266. package/components/crosshair/config.js +0 -19
  267. package/components/crosshair/config.js.map +0 -1
  268. package/components/crosshair/index.d.ts +0 -35
  269. package/components/crosshair/index.js +0 -183
  270. package/components/crosshair/index.js.map +0 -1
  271. package/components/crosshair/style.d.ts +0 -4
  272. package/components/crosshair/style.js.map +0 -1
  273. package/components/crosshair/types.d.ts +0 -13
  274. package/components/crosshair/types.js +0 -2
  275. package/components/crosshair/types.js.map +0 -1
  276. package/components/donut/config.d.ts +0 -59
  277. package/components/donut/config.js +0 -28
  278. package/components/donut/config.js.map +0 -1
  279. package/components/donut/index.d.ts +0 -21
  280. package/components/donut/index.js +0 -107
  281. package/components/donut/index.js.map +0 -1
  282. package/components/donut/modules/arc.d.ts +0 -10
  283. package/components/donut/modules/arc.js +0 -59
  284. package/components/donut/modules/arc.js.map +0 -1
  285. package/components/donut/style.d.ts +0 -7
  286. package/components/donut/style.js.map +0 -1
  287. package/components/donut/types.d.ts +0 -20
  288. package/components/flow-legend/config.d.ts +0 -29
  289. package/components/flow-legend/config.js +0 -18
  290. package/components/flow-legend/config.js.map +0 -1
  291. package/components/flow-legend/index.d.ts +0 -16
  292. package/components/flow-legend/index.js +0 -75
  293. package/components/flow-legend/index.js.map +0 -1
  294. package/components/flow-legend/style.d.ts +0 -8
  295. package/components/flow-legend/style.js.map +0 -1
  296. package/components/flow-legend/types.d.ts +0 -9
  297. package/components/flow-legend/types.js +0 -8
  298. package/components/flow-legend/types.js.map +0 -1
  299. package/components/free-brush/config.d.ts +0 -45
  300. package/components/free-brush/config.js +0 -24
  301. package/components/free-brush/config.js.map +0 -1
  302. package/components/free-brush/index.d.ts +0 -20
  303. package/components/free-brush/index.js +0 -192
  304. package/components/free-brush/index.js.map +0 -1
  305. package/components/free-brush/style.d.ts +0 -4
  306. package/components/free-brush/style.js.map +0 -1
  307. package/components/free-brush/types.d.ts +0 -7
  308. package/components/free-brush/types.js +0 -9
  309. package/components/free-brush/types.js.map +0 -1
  310. package/components/graph/config.d.ts +0 -238
  311. package/components/graph/config.js +0 -84
  312. package/components/graph/config.js.map +0 -1
  313. package/components/graph/index.d.ts +0 -126
  314. package/components/graph/index.js +0 -656
  315. package/components/graph/index.js.map +0 -1
  316. package/components/graph/modules/layout-helpers.d.ts +0 -21
  317. package/components/graph/modules/layout-helpers.js +0 -69
  318. package/components/graph/modules/layout-helpers.js.map +0 -1
  319. package/components/graph/modules/layout.d.ts +0 -10
  320. package/components/graph/modules/layout.js +0 -399
  321. package/components/graph/modules/layout.js.map +0 -1
  322. package/components/graph/modules/link/helper.d.ts +0 -25
  323. package/components/graph/modules/link/helper.js +0 -74
  324. package/components/graph/modules/link/helper.js.map +0 -1
  325. package/components/graph/modules/link/index.d.ts +0 -11
  326. package/components/graph/modules/link/index.js +0 -212
  327. package/components/graph/modules/link/index.js.map +0 -1
  328. package/components/graph/modules/link/style.d.ts +0 -15
  329. package/components/graph/modules/link/style.js.map +0 -1
  330. package/components/graph/modules/node/helper.d.ts +0 -21
  331. package/components/graph/modules/node/helper.js +0 -126
  332. package/components/graph/modules/node/helper.js.map +0 -1
  333. package/components/graph/modules/node/index.d.ts +0 -11
  334. package/components/graph/modules/node/index.js +0 -252
  335. package/components/graph/modules/node/index.js.map +0 -1
  336. package/components/graph/modules/node/style.d.ts +0 -24
  337. package/components/graph/modules/node/style.js.map +0 -1
  338. package/components/graph/modules/panel/helper.d.ts +0 -18
  339. package/components/graph/modules/panel/helper.js +0 -111
  340. package/components/graph/modules/panel/helper.js.map +0 -1
  341. package/components/graph/modules/panel/index.d.ts +0 -7
  342. package/components/graph/modules/panel/index.js +0 -98
  343. package/components/graph/modules/panel/index.js.map +0 -1
  344. package/components/graph/modules/panel/style.d.ts +0 -14
  345. package/components/graph/modules/panel/style.js.map +0 -1
  346. package/components/graph/modules/shape.d.ts +0 -6
  347. package/components/graph/modules/shape.js +0 -80
  348. package/components/graph/modules/shape.js.map +0 -1
  349. package/components/graph/modules/zoom-levels.d.ts +0 -6
  350. package/components/graph/modules/zoom-levels.js +0 -10
  351. package/components/graph/modules/zoom-levels.js.map +0 -1
  352. package/components/graph/style.d.ts +0 -6
  353. package/components/graph/style.js +0 -66
  354. package/components/graph/style.js.map +0 -1
  355. package/components/graph/types.d.ts +0 -125
  356. package/components/graph/types.js +0 -30
  357. package/components/graph/types.js.map +0 -1
  358. package/components/grouped-bar/config.d.ts +0 -36
  359. package/components/grouped-bar/config.js +0 -20
  360. package/components/grouped-bar/config.js.map +0 -1
  361. package/components/grouped-bar/index.d.ts +0 -32
  362. package/components/grouped-bar/index.js +0 -249
  363. package/components/grouped-bar/index.js.map +0 -1
  364. package/components/grouped-bar/style.d.ts +0 -5
  365. package/components/grouped-bar/style.js.map +0 -1
  366. package/components/leaflet-flow-map/config.d.ts +0 -46
  367. package/components/leaflet-flow-map/config.js +0 -25
  368. package/components/leaflet-flow-map/config.js.map +0 -1
  369. package/components/leaflet-flow-map/index.d.ts +0 -52
  370. package/components/leaflet-flow-map/index.js +0 -220
  371. package/components/leaflet-flow-map/index.js.map +0 -1
  372. package/components/leaflet-flow-map/renderer-utils.d.ts +0 -5
  373. package/components/leaflet-flow-map/renderer-utils.js +0 -15
  374. package/components/leaflet-flow-map/renderer-utils.js.map +0 -1
  375. package/components/leaflet-flow-map/renderer.d.ts +0 -26
  376. package/components/leaflet-flow-map/renderer.js +0 -117
  377. package/components/leaflet-flow-map/renderer.js.map +0 -1
  378. package/components/leaflet-flow-map/shaders.d.ts +0 -2
  379. package/components/leaflet-flow-map/shaders.js.map +0 -1
  380. package/components/leaflet-flow-map/types.d.ts +0 -23
  381. package/components/leaflet-map/config.d.ts +0 -193
  382. package/components/leaflet-map/config.js +0 -71
  383. package/components/leaflet-map/config.js.map +0 -1
  384. package/components/leaflet-map/index.d.ts +0 -130
  385. package/components/leaflet-map/index.js +0 -690
  386. package/components/leaflet-map/index.js.map +0 -1
  387. package/components/leaflet-map/leaflet.css.js +0 -5
  388. package/components/leaflet-map/leaflet.css.js.map +0 -1
  389. package/components/leaflet-map/modules/clusterBackground.d.ts +0 -5
  390. package/components/leaflet-map/modules/clusterBackground.js +0 -27
  391. package/components/leaflet-map/modules/clusterBackground.js.map +0 -1
  392. package/components/leaflet-map/modules/donut.d.ts +0 -3
  393. package/components/leaflet-map/modules/donut.js +0 -25
  394. package/components/leaflet-map/modules/donut.js.map +0 -1
  395. package/components/leaflet-map/modules/map.d.ts +0 -14
  396. package/components/leaflet-map/modules/map.js +0 -154
  397. package/components/leaflet-map/modules/map.js.map +0 -1
  398. package/components/leaflet-map/modules/node.d.ts +0 -9
  399. package/components/leaflet-map/modules/node.js +0 -162
  400. package/components/leaflet-map/modules/node.js.map +0 -1
  401. package/components/leaflet-map/modules/selectionRing.d.ts +0 -7
  402. package/components/leaflet-map/modules/selectionRing.js +0 -41
  403. package/components/leaflet-map/modules/selectionRing.js.map +0 -1
  404. package/components/leaflet-map/modules/utils.d.ts +0 -50
  405. package/components/leaflet-map/modules/utils.js +0 -210
  406. package/components/leaflet-map/modules/utils.js.map +0 -1
  407. package/components/leaflet-map/renderer/leaflet-maplibre-gl.js.map +0 -1
  408. package/components/leaflet-map/renderer/map-style.d.ts +0 -4
  409. package/components/leaflet-map/renderer/map-style.js +0 -15
  410. package/components/leaflet-map/renderer/map-style.js.map +0 -1
  411. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-dark-theme.json.js +0 -40
  412. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-dark-theme.json.js.map +0 -1
  413. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-light-theme.json.js +0 -40
  414. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-light-theme.json.js.map +0 -1
  415. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-settings.json.js +0 -4981
  416. package/components/leaflet-map/renderer/mapboxgl/mapboxgl-settings.json.js.map +0 -1
  417. package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +0 -8
  418. package/components/leaflet-map/renderer/mapboxgl-layer.js +0 -27
  419. package/components/leaflet-map/renderer/mapboxgl-layer.js.map +0 -1
  420. package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +0 -4
  421. package/components/leaflet-map/renderer/mapboxgl-utils.js +0 -39
  422. package/components/leaflet-map/renderer/mapboxgl-utils.js.map +0 -1
  423. package/components/leaflet-map/renderer/maplibre-gl.css.js.map +0 -1
  424. package/components/leaflet-map/style.d.ts +0 -52
  425. package/components/leaflet-map/style.js +0 -183
  426. package/components/leaflet-map/style.js.map +0 -1
  427. package/components/leaflet-map/types.d.ts +0 -75
  428. package/components/leaflet-map/types.js +0 -15
  429. package/components/leaflet-map/types.js.map +0 -1
  430. package/components/line/config.d.ts +0 -30
  431. package/components/line/config.js +0 -17
  432. package/components/line/config.js.map +0 -1
  433. package/components/line/index.d.ts +0 -27
  434. package/components/line/index.js +0 -152
  435. package/components/line/index.js.map +0 -1
  436. package/components/line/style.d.ts +0 -6
  437. package/components/line/style.js.map +0 -1
  438. package/components/line/types.d.ts +0 -12
  439. package/components/nested-donut/config.d.ts +0 -59
  440. package/components/nested-donut/config.js +0 -19
  441. package/components/nested-donut/config.js.map +0 -1
  442. package/components/nested-donut/index.d.ts +0 -38
  443. package/components/nested-donut/index.js +0 -133
  444. package/components/nested-donut/index.js.map +0 -1
  445. package/components/nested-donut/modules/arc.d.ts +0 -17
  446. package/components/nested-donut/modules/arc.js +0 -50
  447. package/components/nested-donut/modules/arc.js.map +0 -1
  448. package/components/nested-donut/modules/label.d.ts +0 -7
  449. package/components/nested-donut/modules/label.js +0 -34
  450. package/components/nested-donut/modules/label.js.map +0 -1
  451. package/components/nested-donut/style.d.ts +0 -26
  452. package/components/nested-donut/style.js +0 -70
  453. package/components/nested-donut/style.js.map +0 -1
  454. package/components/nested-donut/types.d.ts +0 -24
  455. package/components/nested-donut/types.js +0 -11
  456. package/components/nested-donut/types.js.map +0 -1
  457. package/components/sankey/config.d.ts +0 -162
  458. package/components/sankey/config.js +0 -65
  459. package/components/sankey/config.js.map +0 -1
  460. package/components/sankey/index.d.ts +0 -59
  461. package/components/sankey/index.js +0 -306
  462. package/components/sankey/index.js.map +0 -1
  463. package/components/sankey/modules/label.d.ts +0 -23
  464. package/components/sankey/modules/label.js +0 -168
  465. package/components/sankey/modules/label.js.map +0 -1
  466. package/components/sankey/modules/link.d.ts +0 -14
  467. package/components/sankey/modules/link.js +0 -108
  468. package/components/sankey/modules/link.js.map +0 -1
  469. package/components/sankey/modules/node.d.ts +0 -10
  470. package/components/sankey/modules/node.js +0 -156
  471. package/components/sankey/modules/node.js.map +0 -1
  472. package/components/sankey/style.d.ts +0 -20
  473. package/components/sankey/style.js.map +0 -1
  474. package/components/sankey/types.d.ts +0 -84
  475. package/components/sankey/types.js +0 -34
  476. package/components/sankey/types.js.map +0 -1
  477. package/components/scatter/config.d.ts +0 -44
  478. package/components/scatter/config.js +0 -23
  479. package/components/scatter/config.js.map +0 -1
  480. package/components/scatter/index.d.ts +0 -28
  481. package/components/scatter/index.js +0 -167
  482. package/components/scatter/index.js.map +0 -1
  483. package/components/scatter/modules/point.d.ts +0 -7
  484. package/components/scatter/modules/point.js +0 -86
  485. package/components/scatter/modules/point.js.map +0 -1
  486. package/components/scatter/modules/utils.d.ts +0 -11
  487. package/components/scatter/modules/utils.js +0 -112
  488. package/components/scatter/modules/utils.js.map +0 -1
  489. package/components/scatter/style.d.ts +0 -5
  490. package/components/scatter/style.js.map +0 -1
  491. package/components/scatter/types.d.ts +0 -19
  492. package/components/stacked-bar/config.d.ts +0 -38
  493. package/components/stacked-bar/config.js +0 -20
  494. package/components/stacked-bar/config.js.map +0 -1
  495. package/components/stacked-bar/index.d.ts +0 -28
  496. package/components/stacked-bar/index.js +0 -208
  497. package/components/stacked-bar/index.js.map +0 -1
  498. package/components/stacked-bar/style.d.ts +0 -5
  499. package/components/stacked-bar/style.js.map +0 -1
  500. package/components/stacked-bar/types.d.ts +0 -5
  501. package/components/timeline/config.d.ts +0 -43
  502. package/components/timeline/config.js +0 -24
  503. package/components/timeline/config.js.map +0 -1
  504. package/components/timeline/index.d.ts +0 -41
  505. package/components/timeline/index.js +0 -244
  506. package/components/timeline/index.js.map +0 -1
  507. package/components/timeline/style.d.ts +0 -13
  508. package/components/timeline/style.js.map +0 -1
  509. package/components/tooltip/config.d.ts +0 -68
  510. package/components/tooltip/config.js +0 -20
  511. package/components/tooltip/config.js.map +0 -1
  512. package/components/tooltip/index.d.ts +0 -36
  513. package/components/tooltip/index.js +0 -184
  514. package/components/tooltip/index.js.map +0 -1
  515. package/components/tooltip/style.js.map +0 -1
  516. package/components/topojson-map/config.d.ts +0 -99
  517. package/components/topojson-map/config.js +0 -42
  518. package/components/topojson-map/config.js.map +0 -1
  519. package/components/topojson-map/index.d.ts +0 -52
  520. package/components/topojson-map/index.js +0 -355
  521. package/components/topojson-map/index.js.map +0 -1
  522. package/components/topojson-map/style.d.ts +0 -11
  523. package/components/topojson-map/style.js.map +0 -1
  524. package/components/topojson-map/types.d.ts +0 -78
  525. package/components/topojson-map/types.js +0 -80
  526. package/components/topojson-map/types.js.map +0 -1
  527. package/components/topojson-map/utils.d.ts +0 -3
  528. package/components/topojson-map/utils.js +0 -30
  529. package/components/topojson-map/utils.js.map +0 -1
  530. package/components/vis-controls/config.d.ts +0 -12
  531. package/components/vis-controls/config.js +0 -13
  532. package/components/vis-controls/config.js.map +0 -1
  533. package/components/vis-controls/index.d.ts +0 -14
  534. package/components/vis-controls/index.js +0 -52
  535. package/components/vis-controls/index.js.map +0 -1
  536. package/components/vis-controls/style.d.ts +0 -11
  537. package/components/vis-controls/style.js.map +0 -1
  538. package/components/vis-controls/types.d.ts +0 -13
  539. package/components/vis-controls/types.js +0 -8
  540. package/components/vis-controls/types.js.map +0 -1
  541. package/components/xy-labels/config.d.ts +0 -48
  542. package/components/xy-labels/config.js +0 -25
  543. package/components/xy-labels/config.js.map +0 -1
  544. package/components/xy-labels/index.d.ts +0 -15
  545. package/components/xy-labels/index.js +0 -87
  546. package/components/xy-labels/index.js.map +0 -1
  547. package/components/xy-labels/modules/label.d.ts +0 -9
  548. package/components/xy-labels/modules/label.js +0 -107
  549. package/components/xy-labels/modules/label.js.map +0 -1
  550. package/components/xy-labels/style.d.ts +0 -5
  551. package/components/xy-labels/style.js.map +0 -1
  552. package/components/xy-labels/types.d.ts +0 -23
  553. package/components/xy-labels/types.js +0 -9
  554. package/components/xy-labels/types.js.map +0 -1
  555. package/components.d.ts +0 -51
  556. package/components.js +0 -29
  557. package/components.js.map +0 -1
  558. package/containers/single-container/config.d.ts +0 -12
  559. package/containers/single-container/config.js +0 -12
  560. package/containers/single-container/config.js.map +0 -1
  561. package/containers/single-container/index.d.ts +0 -19
  562. package/containers/single-container/index.js +0 -128
  563. package/containers/single-container/index.js.map +0 -1
  564. package/containers/xy-container/config.d.ts +0 -99
  565. package/containers/xy-container/config.js +0 -30
  566. package/containers/xy-container/config.js.map +0 -1
  567. package/containers/xy-container/index.d.ts +0 -34
  568. package/containers/xy-container/index.js +0 -330
  569. package/containers/xy-container/index.js.map +0 -1
  570. package/containers.d.ts +0 -6
  571. package/containers.js +0 -4
  572. package/containers.js.map +0 -1
  573. package/core/component/config.d.ts +0 -58
  574. package/core/component/config.js +0 -14
  575. package/core/component/config.js.map +0 -1
  576. package/core/component/index.d.ts +0 -43
  577. package/core/component/index.js +0 -118
  578. package/core/component/index.js.map +0 -1
  579. package/core/component/types.d.ts +0 -2
  580. package/core/component/types.js +0 -2
  581. package/core/component/types.js.map +0 -1
  582. package/core/config/index.d.ts +0 -3
  583. package/core/config/index.js +0 -16
  584. package/core/config/index.js.map +0 -1
  585. package/core/container/config.d.ts +0 -48
  586. package/core/container/config.js +0 -29
  587. package/core/container/config.js.map +0 -1
  588. package/core/container/index.d.ts +0 -26
  589. package/core/container/index.js +0 -105
  590. package/core/container/index.js.map +0 -1
  591. package/core/xy-component/config.d.ts +0 -38
  592. package/core/xy-component/config.js +0 -20
  593. package/core/xy-component/config.js.map +0 -1
  594. package/core/xy-component/index.d.ts +0 -27
  595. package/core/xy-component/index.js +0 -74
  596. package/core/xy-component/index.js.map +0 -1
  597. package/data-models/core.d.ts +0 -6
  598. package/data-models/core.js +0 -14
  599. package/data-models/core.js.map +0 -1
  600. package/data-models/graph.d.ts +0 -24
  601. package/data-models/graph.js +0 -107
  602. package/data-models/graph.js.map +0 -1
  603. package/data-models/map-graph.d.ts +0 -21
  604. package/data-models/map-graph.js +0 -62
  605. package/data-models/map-graph.js.map +0 -1
  606. package/data-models/map.d.ts +0 -5
  607. package/data-models/map.js +0 -12
  608. package/data-models/map.js.map +0 -1
  609. package/data-models/series.d.ts +0 -6
  610. package/data-models/series.js +0 -19
  611. package/data-models/series.js.map +0 -1
  612. package/index.d.ts +0 -7
  613. package/index.js +0 -55
  614. package/index.js.map +0 -1
  615. package/maps/china-provinces.json.js +0 -140373
  616. package/maps/fr-regions.json.js +0 -14162
  617. package/maps/germany-regions.json.js +0 -35760
  618. package/maps/ind-regions.json.js +0 -290584
  619. package/maps/uk-regions.json.js +0 -96233
  620. package/maps/us-counties.json.js +0 -206318
  621. package/maps/us-states.json.js +0 -16345
  622. package/maps/world-110m-alpha.json.js +0 -251366
  623. package/maps/world-simple.json.js +0 -89428
  624. package/maps/world-simplest.json.js +0 -28175
  625. package/maps.d.ts +0 -60
  626. package/maps.js +0 -23
  627. package/styles/colors.d.ts +0 -7
  628. package/styles/colors.js +0 -24
  629. package/styles/colors.js.map +0 -1
  630. package/styles/index.d.ts +0 -7
  631. package/styles/index.js +0 -38
  632. package/styles/index.js.map +0 -1
  633. package/styles/sizes.d.ts +0 -2
  634. package/styles/sizes.js.map +0 -1
  635. package/types/accessor.d.ts +0 -5
  636. package/types/accessor.js +0 -2
  637. package/types/accessor.js.map +0 -1
  638. package/types/component.d.ts +0 -13
  639. package/types/component.js +0 -14
  640. package/types/component.js.map +0 -1
  641. package/types/curve.d.ts +0 -40
  642. package/types/curve.js +0 -46
  643. package/types/curve.js.map +0 -1
  644. package/types/data.d.ts +0 -7
  645. package/types/data.js +0 -2
  646. package/types/data.js.map +0 -1
  647. package/types/direction.d.ts +0 -6
  648. package/types/direction.js +0 -10
  649. package/types/direction.js.map +0 -1
  650. package/types/graph.d.ts +0 -35
  651. package/types/graph.js +0 -2
  652. package/types/graph.js.map +0 -1
  653. package/types/map.d.ts +0 -4
  654. package/types/map.js +0 -2
  655. package/types/map.js.map +0 -1
  656. package/types/misc.d.ts +0 -8
  657. package/types/position.d.ts +0 -20
  658. package/types/position.js +0 -27
  659. package/types/position.js.map +0 -1
  660. package/types/scale.d.ts +0 -23
  661. package/types/scale.js +0 -27
  662. package/types/scale.js.map +0 -1
  663. package/types/shape.d.ts +0 -7
  664. package/types/shape.js +0 -11
  665. package/types/shape.js.map +0 -1
  666. package/types/spacing.d.ts +0 -6
  667. package/types/spacing.js +0 -2
  668. package/types/spacing.js.map +0 -1
  669. package/types/svg.d.ts +0 -18
  670. package/types/svg.js +0 -22
  671. package/types/svg.js.map +0 -1
  672. package/types/symbol.d.ts +0 -18
  673. package/types/symbol.js +0 -24
  674. package/types/symbol.js.map +0 -1
  675. package/types/text.d.ts +0 -47
  676. package/types/text.js +0 -26
  677. package/types/text.js.map +0 -1
  678. package/types.d.ts +0 -27
  679. package/types.js +0 -30
  680. package/types.js.map +0 -1
  681. package/utils/color.d.ts +0 -10
  682. package/utils/color.js +0 -32
  683. package/utils/color.js.map +0 -1
  684. package/utils/d3.d.ts +0 -3
  685. package/utils/d3.js +0 -16
  686. package/utils/d3.js.map +0 -1
  687. package/utils/data.d.ts +0 -45
  688. package/utils/data.js +0 -274
  689. package/utils/data.js.map +0 -1
  690. package/utils/html.d.ts +0 -1
  691. package/utils/html.js +0 -16
  692. package/utils/html.js.map +0 -1
  693. package/utils/map.d.ts +0 -2
  694. package/utils/map.js +0 -20
  695. package/utils/map.js.map +0 -1
  696. package/utils/misc.d.ts +0 -9
  697. package/utils/misc.js +0 -47
  698. package/utils/misc.js.map +0 -1
  699. package/utils/path.d.ts +0 -23
  700. package/utils/path.js +0 -144
  701. package/utils/path.js.map +0 -1
  702. package/utils/scale.d.ts +0 -1
  703. package/utils/style.d.ts +0 -6
  704. package/utils/style.js +0 -24
  705. package/utils/style.js.map +0 -1
  706. package/utils/svg.d.ts +0 -3
  707. package/utils/text.d.ts +0 -139
  708. package/utils/text.js +0 -443
  709. package/utils/text.js.map +0 -1
  710. package/utils/type.d.ts +0 -5
@@ -0,0 +1,267 @@
1
+ import { min, max } from 'd3-array'
2
+
3
+ // Core
4
+ import { XYComponentCore } from 'core/xy-component'
5
+
6
+ // Utils
7
+ import { isNumber, isArray, isEmpty, clamp, getStackedExtent, getString, getNumber, getStackedData, getExtent } from 'utils/data'
8
+ import { roundedRectPath } from 'utils/path'
9
+ import { smartTransition } from 'utils/d3'
10
+ import { getColor } from 'utils/color'
11
+
12
+ // Types
13
+ import { ContinuousScale } from 'types/scale'
14
+ import { NumericAccessor } from 'types/accessor'
15
+ import { Spacing } from 'types/spacing'
16
+ import { Orientation } from 'types/position'
17
+
18
+ // Local Types
19
+ import { StackedBarDataRecord } from './types'
20
+
21
+ // Config
22
+ import { StackedBarConfig, StackedBarConfigInterface } from './config'
23
+
24
+ // Styles
25
+ import * as s from './style'
26
+
27
+ export class StackedBar<Datum> extends XYComponentCore<Datum, StackedBarConfig<Datum>, StackedBarConfigInterface<Datum>> {
28
+ static selectors = s
29
+ config: StackedBarConfig<Datum> = new StackedBarConfig()
30
+ getAccessors = (): NumericAccessor<Datum>[] => (isArray(this.config.y) ? this.config.y : [this.config.y])
31
+ stacked = true
32
+ events = {}
33
+ private _prevNegative: boolean[] | undefined // To help guessing the bar direction when an accessor was set to null or 0
34
+ private _barData: Datum[] = []
35
+
36
+ constructor (config?: StackedBarConfigInterface<Datum>) {
37
+ super()
38
+ if (config) this.config.init(config)
39
+ }
40
+
41
+ get bleed (): Spacing {
42
+ this._barData = this._getVisibleData()
43
+ if (this._barData.length === 0) return { top: 0, bottom: 0, left: 0, right: 0 }
44
+
45
+ // By default, horizontal orientation is "flipped", i.e. the `yDirection` of `XYContainer` is set to `Direction.North`
46
+ const isHorizontalAndFlipped = !this.isVertical() && (this.dataScale.range()[0] > this.dataScale.range()[1])
47
+ const dataDomain = this.dataScale.domain()
48
+ const halfGroupWidth = this._getBarWidth() / 2
49
+
50
+ const dataScaleValues = this._barData.map((d, i) => getNumber(d, this.config.x, i))
51
+ const firstDataValue = min(dataScaleValues)
52
+ const lastDataValue = max(dataScaleValues)
53
+ const firstValuePx = this.dataScale(firstDataValue)
54
+ const lastValuePx = this.dataScale(lastDataValue)
55
+
56
+ const dataDomainRequiredStart = this.dataScale.invert(firstValuePx + (isHorizontalAndFlipped ? halfGroupWidth : -halfGroupWidth))
57
+ const dataDomainRequiredEnd = this.dataScale.invert(lastValuePx + (isHorizontalAndFlipped ? -halfGroupWidth : halfGroupWidth))
58
+ const bleedPxStart = dataDomainRequiredStart <= dataDomain[0] ? this.dataScale(dataDomain[0]) - this.dataScale(dataDomainRequiredStart) : 0
59
+ const bleedPxEnd = dataDomainRequiredEnd > dataDomain[1] ? this.dataScale(dataDomainRequiredEnd) - this.dataScale(dataDomain[1]) : 0
60
+
61
+ return {
62
+ top: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxEnd : bleedPxStart),
63
+ bottom: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxStart : bleedPxEnd),
64
+ left: this.isVertical() ? bleedPxStart : 0,
65
+ right: this.isVertical() ? bleedPxEnd : 0,
66
+ }
67
+ }
68
+
69
+ private get dataScale (): ContinuousScale {
70
+ return this.isVertical() ? this.xScale : this.yScale
71
+ }
72
+
73
+ private get valueScale (): ContinuousScale {
74
+ return this.isVertical() ? this.yScale : this.xScale
75
+ }
76
+
77
+ private isVertical (): boolean {
78
+ return this.config.orientation === Orientation.Vertical
79
+ }
80
+
81
+ _render (customDuration?: number): void {
82
+ const { config } = this
83
+ const duration = isNumber(customDuration) ? customDuration : config.duration
84
+
85
+ const yAccessors = this.getAccessors()
86
+ const stacked = getStackedData(this._barData, 0, yAccessors, this._prevNegative)
87
+ this._prevNegative = stacked.map(s => !!s.negative)
88
+
89
+ const barGroups = this.g
90
+ .selectAll<SVGGElement, Datum>(`.${s.barGroup}`)
91
+ .data(this._barData, (d, i) => `${getString(d, config.id, i) ?? i}`)
92
+
93
+ const getBarGroupsTransform = (d: Datum, i: number): string => {
94
+ const v = this.dataScale(getNumber(d, config.x, i))
95
+ const x = this.isVertical() ? v : 0
96
+ const y = this.isVertical() ? 0 : v
97
+ return `translate(${x},${y})`
98
+ }
99
+
100
+ const barGroupsEnter = barGroups.enter().append('g')
101
+ .attr('class', s.barGroup)
102
+ .attr('transform', getBarGroupsTransform)
103
+ .style('opacity', 1)
104
+
105
+ const barGroupsMerged = barGroupsEnter.merge(barGroups)
106
+ smartTransition(barGroupsMerged, duration)
107
+ .attr('transform', getBarGroupsTransform)
108
+ .style('opacity', 1)
109
+
110
+ const barGroupExit = barGroups.exit()
111
+ .attr('class', s.barGroupExit)
112
+
113
+ smartTransition(barGroupExit, duration)
114
+ .style('opacity', 0)
115
+ .remove()
116
+
117
+ // Animate bars from exiting groups going down
118
+ smartTransition(barGroupExit.selectAll(`.${s.bar}`), duration)
119
+ .attr('transform', this.isVertical()
120
+ ? `translate(0,${this._height / 3})`
121
+ : `translate(${this._width / 6},0)`
122
+ )
123
+
124
+ // Render Bars
125
+ const bars = barGroupsMerged
126
+ .selectAll<SVGPathElement, StackedBarDataRecord<Datum>>(`.${s.bar}`)
127
+ .data((d, j) => stacked.map((s) =>
128
+ ({ ...d, _stacked: s[j], _negative: s.negative, _ending: s.ending }))
129
+ )
130
+
131
+ const barsEnter = bars.enter().append('path')
132
+ .attr('class', s.bar)
133
+ .attr('d', (d, j) => this._getBarPath(d, j, true))
134
+ .style('fill', (d, j) => getColor(d, config.color, j))
135
+
136
+ const barsMerged = barsEnter.merge(bars)
137
+
138
+ smartTransition(barsMerged, duration)
139
+ .attr('d', (d, j) => this._getBarPath(d, j))
140
+ .style('fill', (d, j) => getColor(d, config.color, j))
141
+ .style('cursor', (d, j) => getString(d, config.cursor, j))
142
+
143
+ smartTransition(bars.exit(), duration)
144
+ .style('opacity', 0)
145
+ .remove()
146
+ }
147
+
148
+ _getBarWidth (): number {
149
+ const { config, datamodel: { data } } = this
150
+ if (isEmpty(data)) return 0
151
+ if (config.barWidth) return min([config.barWidth, config.barMaxWidth])
152
+
153
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
154
+ // @ts-ignore
155
+ const isOrdinal = this.dataScale.bandwidth
156
+ const domain = (this.dataScale.domain ? this.dataScale.domain() : []) as number[]
157
+ const domainLength = isOrdinal ? domain.length : domain[1] - domain[0]
158
+
159
+ // If the dataStep property is provided the amount of data elements is calculates as domainLength / dataStep
160
+ // otherwise we get the number of data elements within the domain range
161
+ // Or if the scale is ordinal we use data.length
162
+ let dataSize = (1 + domainLength / config.dataStep) ||
163
+ (!isOrdinal && data.filter((d, i) => {
164
+ const value = getNumber(d, config.x, i)
165
+ return (value >= domain[0]) && (value <= domain[1])
166
+ }).length) ||
167
+ data.length
168
+
169
+ // We increase the dataSize by 1 to take into account possible additional domain space
170
+ if (!isOrdinal && dataSize >= 2) dataSize += 1
171
+
172
+ const c = dataSize < 2 ? 1 : 1 - config.barPadding
173
+ const barWidth = c * (this.isVertical() ? this._width : this._height) / dataSize
174
+
175
+ return min([barWidth, config.barMaxWidth])
176
+ }
177
+
178
+ _getVisibleData (): Datum[] {
179
+ const { config, datamodel: { data } } = this
180
+
181
+ const groupWidth = this._getBarWidth()
182
+ const halfGroupWidthPx = data.length < 2 ? 0 : groupWidth / 2
183
+
184
+ const scale = this.dataScale
185
+ const halfGroupWidth = Math.abs((scale.invert(halfGroupWidthPx) as number) - (scale.invert(0) as number))
186
+ const filtered = data?.filter((d, i) => {
187
+ const v = getNumber(d, config.x, i)
188
+ const domain: number[] | Date[] = scale.domain()
189
+ const domainMin = +domain[0]
190
+ const domainMax = +domain[1]
191
+ return (v >= (domainMin - halfGroupWidth)) && (v <= (domainMax + halfGroupWidth))
192
+ })
193
+
194
+ return filtered
195
+ }
196
+
197
+ _getBarPath (d: StackedBarDataRecord<Datum>, accessorIndex: number, isEntering = false): string {
198
+ const { config } = this
199
+ const yAccessors = this.getAccessors()
200
+ const barWidth = this._getBarWidth()
201
+
202
+ const isNegative = d._negative
203
+ const isEnding = d._ending // The most top bar or, if the value is negative, the most bottom bar
204
+ // Todo: Find a way to pass the datum index to `getNumber` below
205
+ const value = getNumber(d, yAccessors[accessorIndex])
206
+
207
+ const height = isEntering ? 0 : Math.abs(this.valueScale(d._stacked[0]) - this.valueScale(d._stacked[1]))
208
+ const h = !isEntering && config.barMinHeight1Px && (height < 1) && isFinite(value) && (value !== config.barMinHeightZeroValue) ? 1 : height
209
+ const y = isEntering
210
+ ? this.valueScale(0)
211
+ : this.valueScale(isNegative ? d._stacked[0] : d._stacked[1]) - (height < 1 && config.barMinHeight1Px ? 1 : 0)
212
+
213
+ const x = -barWidth / 2
214
+ const width = barWidth
215
+
216
+ const cornerRadius = config.roundedCorners
217
+ ? isNumber(config.roundedCorners) ? +config.roundedCorners : width / 2
218
+ : 0
219
+ const cornerRadiusClamped = clamp(cornerRadius, 0, Math.min(height, width) / 2)
220
+ const isNorthDirected = this.yScale.range()[0] > this.yScale.range()[1]
221
+
222
+ return roundedRectPath({
223
+ x: this.isVertical() ? x : y - h,
224
+ y: this.isVertical() ? y + (isNorthDirected ? 0 : -h) : x,
225
+ w: this.isVertical() ? width : h,
226
+ h: this.isVertical() ? h : width,
227
+ tl: isEnding && (this.isVertical()
228
+ ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)
229
+ : isNegative
230
+ ),
231
+ tr: isEnding && (this.isVertical()
232
+ ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)
233
+ : !isNegative
234
+ ),
235
+ br: isEnding && (this.isVertical()
236
+ ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)
237
+ : !isNegative
238
+ ),
239
+ bl: isEnding && (this.isVertical()
240
+ ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)
241
+ : isNegative
242
+ ),
243
+ r: cornerRadiusClamped,
244
+ })
245
+ }
246
+
247
+ getValueScaleExtent (scaleByVisibleData: boolean): number[] {
248
+ const { datamodel } = this
249
+ const yAccessors = this.getAccessors()
250
+
251
+ const data = scaleByVisibleData ? this._getVisibleData() : datamodel.data
252
+ return getStackedExtent(data, ...yAccessors)
253
+ }
254
+
255
+ getDataScaleExtent (): number[] {
256
+ const { config, datamodel } = this
257
+ return getExtent(datamodel.data, config.x)
258
+ }
259
+
260
+ getYDataExtent (scaleByVisibleData: boolean): number[] {
261
+ return this.isVertical() ? this.getValueScaleExtent(scaleByVisibleData) : this.getDataScaleExtent()
262
+ }
263
+
264
+ getXDataExtent (): number[] {
265
+ return this.isVertical() ? this.getDataScaleExtent() : this.getValueScaleExtent(false)
266
+ }
267
+ }
@@ -1,9 +1,10 @@
1
- import { css, injectGlobal } from '@emotion/css';
1
+ import { css, injectGlobal } from '@emotion/css'
2
2
 
3
- const root = css `
3
+ export const root = css`
4
4
  label: stacked-bar-component;
5
- `;
6
- const globalStyles = injectGlobal `
5
+ `
6
+
7
+ export const globalStyles = injectGlobal`
7
8
  :root {
8
9
  --vis-stacked-bar-cursor: default;
9
10
  --vis-stacked-bar-fill-color: var(--vis-color-main);
@@ -19,8 +20,9 @@ const globalStyles = injectGlobal `
19
20
  body.theme-dark ${`.${root}`} {
20
21
  --vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
21
22
  }
22
- `;
23
- const bar = css `
23
+ `
24
+
25
+ export const bar = css`
24
26
  label: bar;
25
27
  fill: var(--vis-stacked-bar-fill-color);
26
28
  stroke: var(--vis-stacked-bar-stroke-color);
@@ -31,13 +33,12 @@ const bar = css `
31
33
  stroke-width: var(--vis-stacked-bar-hover-stroke-width);
32
34
  stroke: var(--vis-stacked-bar-hover-stroke-color);
33
35
  }
34
- `;
35
- const barGroup = css `
36
+ `
37
+
38
+ export const barGroup = css`
36
39
  label: barGroup;
37
- `;
38
- const barGroupExit = css `
39
- label: barGroupExit;
40
- `;
40
+ `
41
41
 
42
- export { bar, barGroup, barGroupExit, globalStyles, root };
43
- //# sourceMappingURL=style.js.map
42
+ export const barGroupExit = css`
43
+ label: barGroupExit;
44
+ `
@@ -0,0 +1,5 @@
1
+ export type StackedBarDataRecord<D> = D & {
2
+ _stacked: [number, number];
3
+ _negative: boolean;
4
+ _ending: boolean;
5
+ }
@@ -0,0 +1,49 @@
1
+ import { XYComponentConfigInterface, XYComponentConfig } from 'core/xy-component/config'
2
+
3
+ // Types
4
+ import { WithOptional } from 'types/misc'
5
+ import { NumericAccessor, StringAccessor } from 'types/accessor'
6
+
7
+ export interface TimelineConfigInterface<Datum> extends WithOptional<XYComponentConfigInterface<Datum>, 'y'> {
8
+ /** Width of the timeline items. Default: `8` */
9
+ lineWidth?: NumericAccessor<Datum>;
10
+ /** Display rounded ends for timeline items. Default: `true` */
11
+ lineCap?: boolean;
12
+ /** Timeline row height. Default: `22` */
13
+ rowHeight?: number;
14
+ /** Timeline item length accessor function. Default: `d => d.length` */
15
+ length?: NumericAccessor<Datum>;
16
+ /** Timeline item type accessor function. Records of one type will be plotted in one row. Default: `d => d.type` */
17
+ type?: StringAccessor<Datum>;
18
+ /** Configurable Timeline item cursor when hovering over. Default: `null` */
19
+ cursor?: StringAccessor<Datum>;
20
+ /** Show item type labels when set to `true`. Default: `false` */
21
+ showLabels?: boolean;
22
+ /** Fixed label width in pixels. Labels longer than the specified value will be trimmed. Default: `undefined` */
23
+ labelWidth?: number;
24
+ /** Maximum label width in pixels. Labels longer than the specified value will be trimmed. Default: `120` */
25
+ maxLabelWidth?: number;
26
+ /** Alternating row colors. Default: `true` */
27
+ alternatingRowColors?: boolean;
28
+ /** Scrolling callback function: `(scrollTop: number) => void`. Default: `undefined` */
29
+ onScroll?: (scrollTop: number) => void;
30
+ /** Sets the minimum line length to 1 pixel for better visibility of small values. Default: `false` */
31
+ showEmptySegments?: boolean;
32
+ }
33
+
34
+ export class TimelineConfig<Datum> extends XYComponentConfig<Datum> implements TimelineConfigInterface<Datum> {
35
+ lineWidth = 8
36
+ lineCap = false
37
+ rowHeight = 22
38
+ // eslint-disable-next-line dot-notation
39
+ length: NumericAccessor<Datum> = d => d['length']
40
+ // eslint-disable-next-line dot-notation
41
+ type: StringAccessor<Datum> = d => d['type']
42
+ cursor = null
43
+ labelWidth = undefined
44
+ showLabels = false
45
+ maxLabelWidth = 120
46
+ alternatingRowColors = true
47
+ onScroll = undefined
48
+ showEmptySegments = false
49
+ }
@@ -0,0 +1,302 @@
1
+ import { select, Selection } from 'd3-selection'
2
+ import { Transition } from 'd3-transition'
3
+ import { scaleOrdinal, ScaleOrdinal } from 'd3-scale'
4
+ import { drag, D3DragEvent } from 'd3-drag'
5
+ import { max } from 'd3-array'
6
+
7
+ // Core
8
+ import { XYComponentCore } from 'core/xy-component'
9
+
10
+ // Utils
11
+ import { isNumber, unique, arrayOfIndices, getMin, getMax, getString, getNumber } from 'utils/data'
12
+ import { smartTransition } from 'utils/d3'
13
+ import { getColor } from 'utils/color'
14
+ import { trimSVGText } from 'utils/text'
15
+
16
+ // Config
17
+ import { TimelineConfig, TimelineConfigInterface } from './config'
18
+
19
+ // Styles
20
+ import * as s from './style'
21
+
22
+ export class Timeline<Datum> extends XYComponentCore<Datum, TimelineConfig<Datum>, TimelineConfigInterface<Datum>> {
23
+ static selectors = s
24
+ config: TimelineConfig<Datum> = new TimelineConfig()
25
+ events = {
26
+ [Timeline.selectors.rows]: {
27
+ wheel: this._onMouseWheel.bind(this),
28
+ },
29
+ [Timeline.selectors.line]: {
30
+ wheel: this._onMouseWheel.bind(this),
31
+ },
32
+ }
33
+
34
+ private _background: Selection<SVGRectElement, unknown, SVGGElement, unknown>
35
+ private _rowsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>
36
+ private _linesGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>
37
+ private _labelsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>
38
+ private _scrollBarGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>
39
+ private _scrollBarBackground: Selection<SVGRectElement, unknown, SVGGElement, unknown>
40
+ private _scrollBarHandle: Selection<SVGRectElement, unknown, SVGGElement, unknown>
41
+ private _scrollBarWidth = 5
42
+ private _scrollDistance = 0
43
+ private _scrollBarMargin = 5
44
+ private _maxScroll = 0
45
+ private _scrollbarHeight = 0
46
+ private _labelMargin = 5
47
+
48
+ constructor (config?: TimelineConfigInterface<Datum>) {
49
+ super()
50
+ if (config) this.config.init(config)
51
+
52
+ // Invisible background rect to track events
53
+ this._background = this.g.append('rect').attr('class', s.background)
54
+
55
+ // Group for content
56
+ this._rowsGroup = this.g.append('g').attr('class', s.rows)
57
+ this._linesGroup = this.g.append('g').attr('class', s.lines)
58
+ this._labelsGroup = this.g.append('g').attr('class', s.labels)
59
+ this._scrollBarGroup = this.g.append('g').attr('class', s.scrollbar)
60
+
61
+ // Scroll bar
62
+ this._scrollBarBackground = this._scrollBarGroup.append('rect')
63
+ .attr('class', s.scrollbarBackground)
64
+
65
+ this._scrollBarHandle = this._scrollBarGroup.append('rect')
66
+ .attr('class', s.scrollbarHandle)
67
+
68
+ // Set up scrollbar drag event
69
+ const dragBehaviour = drag<SVGRectElement, unknown>()
70
+ .on('drag', this._onScrollbarDrag.bind(this))
71
+
72
+ this._scrollBarHandle.call(dragBehaviour)
73
+ }
74
+
75
+ get bleed (): { top: number; bottom: number; left: number; right: number } {
76
+ const { config, datamodel: { data } } = this
77
+
78
+ // We calculate the longest label width to set the bleed values accordingly
79
+ let labelsBleed = 0
80
+ if (config.showLabels) {
81
+ if (config.labelWidth) labelsBleed = config.labelWidth + this._labelMargin
82
+ else {
83
+ const recordLabels = this._getRecordLabels(data)
84
+ const longestLabel = recordLabels.reduce((acc, val) => acc.length > val.length ? acc : val, '')
85
+ const label = this._labelsGroup.append('text')
86
+ .attr('class', s.label)
87
+ .text(longestLabel)
88
+ .call(trimSVGText, config.maxLabelWidth)
89
+ const labelWidth = label.node().getBBox().width
90
+ this._labelsGroup.empty()
91
+
92
+ const tolerance = 1.15 // Some characters are wider than others so we add a little of extra space to take that into account
93
+ labelsBleed = labelWidth ? tolerance * labelWidth + this._labelMargin : 0
94
+ }
95
+ }
96
+
97
+ const maxLineWidth = this._getMaxLineWidth()
98
+ return {
99
+ top: 0,
100
+ bottom: 0,
101
+ left: maxLineWidth / 2 + labelsBleed,
102
+ right: maxLineWidth / 2 + this._scrollBarWidth + this._scrollBarMargin,
103
+ }
104
+ }
105
+
106
+ _render (customDuration?: number): void {
107
+ super._render(customDuration)
108
+ const { config, datamodel: { data } } = this
109
+ const duration = isNumber(customDuration) ? customDuration : config.duration
110
+ const xRange = this.xScale.range()
111
+ const yRange = this.yScale.range()
112
+ const yStart = Math.min(...yRange)
113
+ const yHeight = Math.abs(yRange[1] - yRange[0])
114
+ const maxLineWidth = this._getMaxLineWidth()
115
+ const recordLabels = this._getRecordLabels(data)
116
+ const recordLabelsUnique = unique(recordLabels)
117
+ const numUniqueRecords = recordLabelsUnique.length
118
+
119
+ // Ordinal scale to handle records on the same type
120
+ const ordinalScale: ScaleOrdinal<string, number> = scaleOrdinal()
121
+ ordinalScale.range(arrayOfIndices(numUniqueRecords))
122
+
123
+ // Invisible Background rect to track events
124
+ this._background
125
+ .attr('width', this._width)
126
+ .attr('height', this._height)
127
+ .attr('opacity', 0)
128
+
129
+ // Labels
130
+ const labels = this._labelsGroup.selectAll<SVGTextElement, string>(`.${s.label}`)
131
+ .data(config.showLabels ? recordLabelsUnique : [])
132
+
133
+ const labelsEnter = labels.enter().append('text')
134
+ .attr('class', s.label)
135
+
136
+ labelsEnter.merge(labels)
137
+ .attr('x', xRange[0] - maxLineWidth / 2 - this._labelMargin)
138
+ .attr('y', (label, i) => yStart + (ordinalScale(label) + 0.5) * config.rowHeight)
139
+ .text(label => label)
140
+ .each((label, i, els) => {
141
+ trimSVGText(select(els[i]), config.labelWidth || config.maxLabelWidth)
142
+ })
143
+
144
+ labels.exit().remove()
145
+
146
+ // Row background rects
147
+ const xStart = xRange[0]
148
+ const numRows = Math.max(Math.floor(yHeight / config.rowHeight), numUniqueRecords)
149
+ const recordTypes: (string | undefined)[] = Array(numRows).fill(null).map((_, i) => recordLabelsUnique[i])
150
+ const rects = this._rowsGroup.selectAll<SVGRectElement, number>(`.${s.row}`)
151
+ .data(recordTypes)
152
+
153
+ const rectsEnter = rects.enter().append('rect')
154
+ .attr('class', s.row)
155
+
156
+ rectsEnter.merge(rects)
157
+ .classed(s.rowOdd, config.alternatingRowColors ? (_, i) => !(i % 2) : null)
158
+ .attr('x', xStart - maxLineWidth / 2)
159
+ .attr('width', xRange[1] - xStart + maxLineWidth)
160
+ .attr('y', (_, i) => yStart + i * config.rowHeight)
161
+ .attr('height', config.rowHeight)
162
+
163
+ rects.exit().remove()
164
+
165
+ // Lines
166
+ const lines = this._linesGroup.selectAll<SVGRectElement, Datum>(`.${s.line}`)
167
+ .data(data, (d: Datum, i) => `${getString(d, config.id, i) ?? i}`)
168
+ const linesEnter = lines.enter().append('rect')
169
+ .attr('class', s.line)
170
+ .classed(s.rowOdd, config.alternatingRowColors
171
+ ? (d, i) => !(recordLabelsUnique.indexOf(this._getRecordType(d, i)) % 2)
172
+ : null)
173
+ .style('fill', (d, i) => getColor(d, config.color, i))
174
+ .attr('transform', 'translate(0, 10)')
175
+ .style('opacity', 0)
176
+ this._positionLines(linesEnter, ordinalScale)
177
+
178
+ const linesMerged = smartTransition(linesEnter.merge(lines), duration)
179
+ .style('fill', (d, i) => getColor(d, config.color, ordinalScale(this._getRecordType(d, i))))
180
+ .attr('transform', 'translate(0, 0)')
181
+ .style('cursor', (d, i) => getString(d, config.cursor, i))
182
+ .style('opacity', 1)
183
+
184
+ this._positionLines(linesMerged, ordinalScale)
185
+
186
+ smartTransition(lines.exit(), duration)
187
+ .style('opacity', 0)
188
+ .remove()
189
+
190
+ // Scroll Bar
191
+ const contentBBox = this._rowsGroup.node().getBBox() // We determine content size using the rects group because lines are animated
192
+ const absoluteContentHeight = contentBBox.height
193
+ this._scrollbarHeight = yHeight * yHeight / absoluteContentHeight || 0
194
+ this._maxScroll = Math.max(absoluteContentHeight - yHeight, 0)
195
+
196
+ this._scrollBarGroup
197
+ .attr('transform', `translate(${this._width - this._scrollBarWidth}, ${yStart})`)
198
+ .attr('opacity', this._maxScroll ? 1 : 0)
199
+
200
+ this._scrollBarBackground
201
+ .attr('width', this._scrollBarWidth)
202
+ .attr('height', this._height)
203
+ .attr('rx', this._scrollBarWidth / 2)
204
+ .attr('ry', this._scrollBarWidth / 2)
205
+
206
+ this._scrollBarHandle
207
+ .attr('width', this._scrollBarWidth)
208
+ .attr('height', this._scrollbarHeight)
209
+ .attr('rx', this._scrollBarWidth / 2)
210
+ .attr('ry', this._scrollBarWidth / 2)
211
+
212
+ this._updateScrollPosition(0)
213
+ }
214
+
215
+ private _positionLines (
216
+ selection: Selection<SVGRectElement, Datum, SVGGElement, unknown> | Transition<SVGRectElement, Datum, SVGGElement, unknown>,
217
+ ordinalScale: ScaleOrdinal<string, number>
218
+ ): void {
219
+ const { config, xScale, yScale } = this
220
+ const yRange = yScale.range()
221
+ const yStart = Math.min(...yRange)
222
+
223
+ selection.each((d, i, elements) => {
224
+ const x = getNumber(d, config.x, i)
225
+ const y = ordinalScale(this._getRecordType(d, i)) * config.rowHeight
226
+ const length = getNumber(d, config.length, i) ?? 0
227
+
228
+ // Rect dimensions
229
+ const height = getNumber(d, config.lineWidth, i)
230
+ const width = xScale(x + length) - xScale(x)
231
+
232
+ if (width < 0) {
233
+ console.warn('Unovis | Timeline: Line segments should not have negative lengths. Setting to 0.')
234
+ }
235
+
236
+ select(elements[i])
237
+ .attr('x', xScale(x))
238
+ .attr('y', yStart + y + (config.rowHeight - height) / 2)
239
+ .attr('width', config.showEmptySegments
240
+ ? Math.max(config.lineCap ? height : 1, width)
241
+ : Math.max(0, width))
242
+ .attr('height', height)
243
+ .attr('rx', config.lineCap ? height / 2 : null)
244
+ .style('opacity', 1)
245
+ })
246
+ }
247
+
248
+ private _onScrollbarDrag (event: D3DragEvent<any, any, any>): void {
249
+ const yRange = this.yScale.range()
250
+ const yHeight = Math.abs(yRange[1] - yRange[0])
251
+ this._updateScrollPosition(event.dy * this._maxScroll / (yHeight - this._scrollbarHeight))
252
+ }
253
+
254
+ private _onMouseWheel (d: unknown, event: WheelEvent): void {
255
+ const { config } = this
256
+
257
+ this._updateScrollPosition(event?.deltaY)
258
+ if (this._scrollDistance > 0 && this._scrollDistance < this._maxScroll) event?.preventDefault()
259
+
260
+ config.onScroll?.(this._scrollDistance)
261
+
262
+ // Programmatically trigger a mousemove event to update Tooltip or Crosshair if they were set up
263
+ const e = new Event('mousemove')
264
+ this.element.dispatchEvent(e)
265
+ }
266
+
267
+ private _updateScrollPosition (diff: number): void {
268
+ const yRange = this.yScale.range()
269
+ const yHeight = Math.abs(yRange[1] - yRange[0])
270
+
271
+ this._scrollDistance += diff
272
+ this._scrollDistance = Math.max(0, this._scrollDistance)
273
+ this._scrollDistance = Math.min(this._maxScroll, this._scrollDistance)
274
+
275
+ this._linesGroup.attr('transform', `translate(0,${-this._scrollDistance})`)
276
+ this._rowsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)
277
+ this._labelsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)
278
+ const scrollBarPosition = (this._scrollDistance / this._maxScroll * (yHeight - this._scrollbarHeight)) || 0
279
+ this._scrollBarHandle.attr('y', scrollBarPosition)
280
+ }
281
+
282
+ private _getMaxLineWidth (): number {
283
+ const { config, datamodel: { data } } = this
284
+ return max(data, (d, i) => getNumber(d, config.lineWidth, i)) ?? 0
285
+ }
286
+
287
+ private _getRecordType (d: Datum, i: number): string {
288
+ return getString(d, this.config.type) || `__${i}`
289
+ }
290
+
291
+ private _getRecordLabels (data: Datum[]): string[] {
292
+ return data.map((d, i) => getString(d, this.config.type) || `${i + 1}`)
293
+ }
294
+
295
+ // Override the default XYComponent getXDataExtent method to take into account line lengths
296
+ getXDataExtent (): number[] {
297
+ const { config, datamodel } = this
298
+ const min = getMin(datamodel.data, config.x)
299
+ const max = getMax(datamodel.data, (d, i) => getNumber(d, config.x, i) + (getNumber(d, config.length, i) ?? 0))
300
+ return [min, max]
301
+ }
302
+ }