@mathstack/viz 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +11 -11
  3. package/fesm2022/mathstack-viz.mjs +11024 -0
  4. package/fesm2022/mathstack-viz.mjs.map +1 -0
  5. package/package.json +18 -6
  6. package/types/mathstack-viz.d.ts +5830 -0
  7. package/CHANGELOG.md +0 -0
  8. package/cypress/fixtures/example.json +0 -5
  9. package/cypress/fixtures/usMap.json +0 -13511
  10. package/cypress/support/commands.ts +0 -104
  11. package/cypress/support/component-index.html +0 -12
  12. package/cypress/support/component.ts +0 -33
  13. package/cypress.config.ts +0 -9
  14. package/karma.conf.js +0 -62
  15. package/ng-package.json +0 -8
  16. package/project.json +0 -97
  17. package/src/.eslintrc.json +0 -35
  18. package/src/.prettierrc +0 -31
  19. package/src/lib/axes/base/config/xy-axis-builder.ts +0 -68
  20. package/src/lib/axes/base/config/xy-axis-config.ts +0 -35
  21. package/src/lib/axes/base/config/xy-axis-options.ts +0 -11
  22. package/src/lib/axes/base/xy-axis-base.spec.ts +0 -114
  23. package/src/lib/axes/base/xy-axis-base.ts +0 -305
  24. package/src/lib/axes/base/xy-axis-domain-lines.cy.ts +0 -511
  25. package/src/lib/axes/baseline/axis-baseline-builder.ts +0 -77
  26. package/src/lib/axes/baseline/axis-baseline-options.ts +0 -4
  27. package/src/lib/axes/baseline/axis-baseline.ts +0 -11
  28. package/src/lib/axes/grid/grid-builder.ts +0 -74
  29. package/src/lib/axes/grid/grid-config.ts +0 -13
  30. package/src/lib/axes/grid/grid-options.ts +0 -7
  31. package/src/lib/axes/index.ts +0 -40
  32. package/src/lib/axes/label/axis-label-builder.ts +0 -140
  33. package/src/lib/axes/label/axis-label-options.ts +0 -12
  34. package/src/lib/axes/label/axis-label.ts +0 -18
  35. package/src/lib/axes/label/axis-labels.cy.ts +0 -303
  36. package/src/lib/axes/ordinal/ordinal-axis-config.ts +0 -31
  37. package/src/lib/axes/ordinal/ordinal-axis.spec.ts +0 -30
  38. package/src/lib/axes/ordinal/ordinal-axis.ts +0 -26
  39. package/src/lib/axes/quantitative/quantitative-axis-config.ts +0 -39
  40. package/src/lib/axes/quantitative/quantitative-axis-ticks.cy.ts +0 -748
  41. package/src/lib/axes/quantitative/quantitative-axis.spec.ts +0 -537
  42. package/src/lib/axes/quantitative/quantitative-axis.ts +0 -191
  43. package/src/lib/axes/ticks/tick-wrap/tick-wrap-builder.ts +0 -141
  44. package/src/lib/axes/ticks/tick-wrap/tick-wrap-options.ts +0 -11
  45. package/src/lib/axes/ticks/tick-wrap/tick-wrap.cy.ts +0 -360
  46. package/src/lib/axes/ticks/tick-wrap/tick-wrap.ts +0 -21
  47. package/src/lib/axes/ticks/ticks-builder.ts +0 -370
  48. package/src/lib/axes/ticks/ticks-options.ts +0 -24
  49. package/src/lib/axes/ticks/ticks.ts +0 -33
  50. package/src/lib/axes/x/x-axis-config.ts +0 -48
  51. package/src/lib/axes/x/x-axis.spec.ts +0 -90
  52. package/src/lib/axes/x/x-axis.ts +0 -109
  53. package/src/lib/axes/x-ordinal/x-ordinal-axis-builder.ts +0 -75
  54. package/src/lib/axes/x-ordinal/x-ordinal-axis-config.ts +0 -27
  55. package/src/lib/axes/x-ordinal/x-ordinal-axis.component.ts +0 -33
  56. package/src/lib/axes/x-quantitative/x-quantitative-axis-builder.ts +0 -74
  57. package/src/lib/axes/x-quantitative/x-quantitative-axis-config.ts +0 -32
  58. package/src/lib/axes/x-quantitative/x-quantitative-axis.component.ts +0 -40
  59. package/src/lib/axes/xy-axis.module.ts +0 -20
  60. package/src/lib/axes/y/y-axis-config.ts +0 -47
  61. package/src/lib/axes/y/y-axis.spec.ts +0 -92
  62. package/src/lib/axes/y/y-axis.ts +0 -161
  63. package/src/lib/axes/y-ordinal/y-ordinal-axis-builder.ts +0 -76
  64. package/src/lib/axes/y-ordinal/y-ordinal-axis-config.ts +0 -29
  65. package/src/lib/axes/y-ordinal/y-ordinal-axis.component.ts +0 -33
  66. package/src/lib/axes/y-quantitative-axis/y-quantitative-axis-builder.ts +0 -74
  67. package/src/lib/axes/y-quantitative-axis/y-quantitative-axis-config.ts +0 -34
  68. package/src/lib/axes/y-quantitative-axis/y-quantitative-axis.component.ts +0 -40
  69. package/src/lib/bars/bars.component.scss +0 -0
  70. package/src/lib/bars/bars.component.spec.ts +0 -1470
  71. package/src/lib/bars/bars.component.ts +0 -717
  72. package/src/lib/bars/bars.cy.ts +0 -829
  73. package/src/lib/bars/bars.module.ts +0 -9
  74. package/src/lib/bars/config/backgrounds/bars-backgrounds-builder.ts +0 -51
  75. package/src/lib/bars/config/backgrounds/bars-backgrounds-options.ts +0 -4
  76. package/src/lib/bars/config/backgrounds/bars-backgrounds.ts +0 -11
  77. package/src/lib/bars/config/bars-builder.ts +0 -340
  78. package/src/lib/bars/config/bars-config.spec.ts +0 -132
  79. package/src/lib/bars/config/bars-config.ts +0 -70
  80. package/src/lib/bars/config/bars-dimensions.ts +0 -29
  81. package/src/lib/bars/config/bars-options.ts +0 -20
  82. package/src/lib/bars/config/labels/bars-labels-builder.ts +0 -89
  83. package/src/lib/bars/config/labels/bars-labels-options.ts +0 -6
  84. package/src/lib/bars/config/labels/bars-labels.cy.ts +0 -781
  85. package/src/lib/bars/config/labels/bars-labels.ts +0 -13
  86. package/src/lib/bars/events/actions/bars-click-actions.ts +0 -23
  87. package/src/lib/bars/events/actions/bars-hover-actions.ts +0 -43
  88. package/src/lib/bars/events/actions/bars-hover-move-actions.ts +0 -21
  89. package/src/lib/bars/events/bars-events.directive.spec.ts +0 -186
  90. package/src/lib/bars/events/bars-events.directive.ts +0 -235
  91. package/src/lib/bars/events/bars-interaction-output.ts +0 -17
  92. package/src/lib/bars/events/bars-tooltip-positioner.ts +0 -24
  93. package/src/lib/bars/index.ts +0 -18
  94. package/src/lib/charts/chart/chart-scaling.cy.ts +0 -323
  95. package/src/lib/charts/chart/chart.component.html +0 -45
  96. package/src/lib/charts/chart/chart.component.scss +0 -37
  97. package/src/lib/charts/chart/chart.component.ts +0 -243
  98. package/src/lib/charts/chart/chart.token.ts +0 -4
  99. package/src/lib/charts/chart/chart.ts +0 -5
  100. package/src/lib/charts/chart/config/chart-builder.ts +0 -194
  101. package/src/lib/charts/chart/config/chart-config.ts +0 -21
  102. package/src/lib/charts/chart/config/chart-options.ts +0 -11
  103. package/src/lib/charts/chart.module.ts +0 -10
  104. package/src/lib/charts/index.ts +0 -9
  105. package/src/lib/charts/map-chart/map-chart.component.scss +0 -0
  106. package/src/lib/charts/map-chart/map-chart.component.spec.ts +0 -35
  107. package/src/lib/charts/map-chart/map-chart.component.ts +0 -61
  108. package/src/lib/charts/xy-chart/xy-chart.component.spec.ts +0 -34
  109. package/src/lib/charts/xy-chart/xy-chart.component.ts +0 -65
  110. package/src/lib/core/common-behaviors/constructor.ts +0 -7
  111. package/src/lib/core/index.ts +0 -11
  112. package/src/lib/core/pipes/resize-chart-height.pipe.spec.ts +0 -23
  113. package/src/lib/core/pipes/resize-chart-height.pipe.ts +0 -20
  114. package/src/lib/core/styles/_spacing.scss +0 -4
  115. package/src/lib/core/types/layout.ts +0 -28
  116. package/src/lib/core/types/scale.ts +0 -6
  117. package/src/lib/core/types/utility.ts +0 -11
  118. package/src/lib/core/types/values.ts +0 -10
  119. package/src/lib/core/utilities/colors.spec.ts +0 -57
  120. package/src/lib/core/utilities/colors.ts +0 -42
  121. package/src/lib/core/utilities/fill-utilities.spec.ts +0 -25
  122. package/src/lib/core/utilities/fill-utilities.ts +0 -21
  123. package/src/lib/core/utilities/type-guards.spec.ts +0 -55
  124. package/src/lib/core/utilities/type-guards.ts +0 -33
  125. package/src/lib/core/utilities/value-format.ts +0 -21
  126. package/src/lib/core/utilities/values.spec.ts +0 -954
  127. package/src/lib/core/utilities/values.ts +0 -189
  128. package/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder.ts +0 -105
  129. package/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-options.ts +0 -24
  130. package/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position.spec.ts +0 -66
  131. package/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position.ts +0 -72
  132. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/concrete-domain-padding.ts +0 -10
  133. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/domain-padding.ts +0 -76
  134. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/domain-test-utility.ts +0 -130
  135. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/percent-over/percent-over-options.ts +0 -3
  136. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/percent-over/percent-over.ts +0 -37
  137. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/pixel/pixel-options.ts +0 -3
  138. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/pixel/pixel.ts +0 -73
  139. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/quantitative-domain-padding.cy.ts +0 -978
  140. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-interval/round-to-interval-options.ts +0 -3
  141. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-interval/round-to-interval.ts +0 -27
  142. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-sig-fig/round-to-sig-fig-options.ts +0 -3
  143. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-sig-fig/round-to-sig-fig.ts +0 -30
  144. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder.ts +0 -183
  145. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-options.ts +0 -8
  146. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position.spec.ts +0 -28
  147. package/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position.ts +0 -62
  148. package/src/lib/data-dimensions/continuous-quantitative/number-dimension/number-dimension-options.ts +0 -15
  149. package/src/lib/data-dimensions/continuous-quantitative/number-dimension/number-dimension.spec.ts +0 -155
  150. package/src/lib/data-dimensions/continuous-quantitative/number-dimension/number-dimension.ts +0 -57
  151. package/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-builder.ts +0 -166
  152. package/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-options.ts +0 -10
  153. package/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value.spec.ts +0 -34
  154. package/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value.ts +0 -57
  155. package/src/lib/data-dimensions/dimension-builder.ts +0 -45
  156. package/src/lib/data-dimensions/dimension-options.ts +0 -12
  157. package/src/lib/data-dimensions/dimension.ts +0 -30
  158. package/src/lib/data-dimensions/index.ts +0 -31
  159. package/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder.ts +0 -122
  160. package/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-options.ts +0 -12
  161. package/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position.spec.ts +0 -83
  162. package/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position.ts +0 -101
  163. package/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder.ts +0 -108
  164. package/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-options.ts +0 -12
  165. package/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value.cy.ts +0 -384
  166. package/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value.spec.ts +0 -63
  167. package/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value.ts +0 -79
  168. package/src/lib/data-export/data-export-config.ts +0 -98
  169. package/src/lib/data-export/data-export.spec.ts +0 -33
  170. package/src/lib/data-export/data-export.ts +0 -87
  171. package/src/lib/data-export/index.ts +0 -2
  172. package/src/lib/dots/config/dots-builder.ts +0 -442
  173. package/src/lib/dots/config/dots-config.spec.ts +0 -123
  174. package/src/lib/dots/config/dots-config.ts +0 -81
  175. package/src/lib/dots/config/dots-options.ts +0 -32
  176. package/src/lib/dots/dots.component.scss +0 -0
  177. package/src/lib/dots/dots.component.spec.ts +0 -143
  178. package/src/lib/dots/dots.component.ts +0 -291
  179. package/src/lib/dots/dots.cy.ts +0 -594
  180. package/src/lib/dots/dots.module.ts +0 -9
  181. package/src/lib/dots/events/actions/dots-hover-actions.ts +0 -19
  182. package/src/lib/dots/events/actions/dots-hover-move-actions.ts +0 -38
  183. package/src/lib/dots/events/dots-events.directive.ts +0 -214
  184. package/src/lib/dots/events/dots-interaction-output.ts +0 -15
  185. package/src/lib/dots/events/dots-tooltip-positioner.ts +0 -24
  186. package/src/lib/dots/index.ts +0 -10
  187. package/src/lib/events/events.directive.ts +0 -184
  188. package/src/lib/events/events.types.ts +0 -57
  189. package/src/lib/events/index.ts +0 -4
  190. package/src/lib/events/interaction-output.ts +0 -34
  191. package/src/lib/events/tooltip-positioner.ts +0 -15
  192. package/src/lib/fill-definitions/fill-definitions.ts +0 -4
  193. package/src/lib/fill-definitions/index.ts +0 -1
  194. package/src/lib/geographies/config/geographies-builder.ts +0 -224
  195. package/src/lib/geographies/config/geographies-config.spec.ts +0 -100
  196. package/src/lib/geographies/config/geographies-config.ts +0 -81
  197. package/src/lib/geographies/config/geographies-options.ts +0 -37
  198. package/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer-builder.ts +0 -212
  199. package/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer-options.ts +0 -26
  200. package/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer.spec.ts +0 -119
  201. package/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer.ts +0 -148
  202. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension-builder.ts +0 -65
  203. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension-options.ts +0 -15
  204. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension.ts +0 -32
  205. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums.ts +0 -10
  206. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types.ts +0 -15
  207. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins-builder.ts +0 -18
  208. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins-options.ts +0 -8
  209. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins.spec.ts +0 -60
  210. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins.ts +0 -34
  211. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins-builder.ts +0 -46
  212. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins-options.ts +0 -8
  213. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins.cy.ts +0 -437
  214. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins.spec.ts +0 -105
  215. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins.ts +0 -54
  216. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins-builder.ts +0 -65
  217. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins-options.ts +0 -9
  218. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins.spec.ts +0 -82
  219. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins.ts +0 -81
  220. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks.cy.ts +0 -378
  221. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins-builder.ts +0 -50
  222. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins-options.ts +0 -8
  223. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins.cy.ts +0 -362
  224. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins.spec.ts +0 -72
  225. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins.ts +0 -56
  226. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins-builder.ts +0 -60
  227. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins-options.ts +0 -9
  228. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins.cy.ts +0 -307
  229. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins.spec.ts +0 -104
  230. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins.ts +0 -89
  231. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins-builder.ts +0 -62
  232. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins-options.ts +0 -8
  233. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins.cy.ts +0 -265
  234. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins.spec.ts +0 -42
  235. package/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins.ts +0 -42
  236. package/src/lib/geographies/config/layers/geographies-layer/geographies-layer-builder.ts +0 -116
  237. package/src/lib/geographies/config/layers/geographies-layer/geographies-layer-options.ts +0 -20
  238. package/src/lib/geographies/config/layers/geographies-layer/geographies-layer.ts +0 -104
  239. package/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer-builder.ts +0 -111
  240. package/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer-options.ts +0 -19
  241. package/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer.spec.ts +0 -41
  242. package/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer.ts +0 -67
  243. package/src/lib/geographies/config/layers/labels/geographies-labels-builder.ts +0 -269
  244. package/src/lib/geographies/config/layers/labels/geographies-labels-options.ts +0 -45
  245. package/src/lib/geographies/config/layers/labels/geographies-labels.ts +0 -38
  246. package/src/lib/geographies/events/actions/geographies-click-actions.ts +0 -21
  247. package/src/lib/geographies/events/actions/geographies-hover-actions.ts +0 -17
  248. package/src/lib/geographies/events/actions/geographies-hover-move-actions.ts +0 -19
  249. package/src/lib/geographies/events/geographies-events.directive.spec.ts +0 -225
  250. package/src/lib/geographies/events/geographies-events.directive.ts +0 -235
  251. package/src/lib/geographies/events/geographies-interaction-output.ts +0 -17
  252. package/src/lib/geographies/events/geographies-tooltip-positioner.ts +0 -23
  253. package/src/lib/geographies/geographies-feature.ts +0 -16
  254. package/src/lib/geographies/geographies.component.html +0 -1
  255. package/src/lib/geographies/geographies.component.scss +0 -0
  256. package/src/lib/geographies/geographies.component.spec.ts +0 -148
  257. package/src/lib/geographies/geographies.component.ts +0 -318
  258. package/src/lib/geographies/geographies.cy.ts +0 -640
  259. package/src/lib/geographies/geographies.module.ts +0 -9
  260. package/src/lib/geographies/index.ts +0 -32
  261. package/src/lib/grouped-bars/config/grouped-bars-builder.ts +0 -66
  262. package/src/lib/grouped-bars/config/grouped-bars-config.ts +0 -41
  263. package/src/lib/grouped-bars/config/grouped-bars-options.ts +0 -9
  264. package/src/lib/grouped-bars/events/grouped-bars-events.directive.ts +0 -221
  265. package/src/lib/grouped-bars/grouped-bars.component.scss +0 -0
  266. package/src/lib/grouped-bars/grouped-bars.component.spec.ts +0 -25
  267. package/src/lib/grouped-bars/grouped-bars.component.ts +0 -94
  268. package/src/lib/grouped-bars/grouped-bars.module.ts +0 -9
  269. package/src/lib/grouped-bars/index.ts +0 -10
  270. package/src/lib/image-download/image-download-config.ts +0 -57
  271. package/src/lib/image-download/image-download-enums.ts +0 -7
  272. package/src/lib/image-download/image-download-options.ts +0 -14
  273. package/src/lib/image-download/image-download.service.ts +0 -70
  274. package/src/lib/image-download/index.ts +0 -4
  275. package/src/lib/lines/config/area-fills/area-fills-builder.ts +0 -87
  276. package/src/lib/lines/config/area-fills/area-fills-options.ts +0 -8
  277. package/src/lib/lines/config/area-fills/area-fills.ts +0 -14
  278. package/src/lib/lines/config/lines-builder.ts +0 -242
  279. package/src/lib/lines/config/lines-config.spec.ts +0 -52
  280. package/src/lib/lines/config/lines-config.ts +0 -96
  281. package/src/lib/lines/config/lines-options.ts +0 -19
  282. package/src/lib/lines/config/stroke/lines-stroke-builder.ts +0 -135
  283. package/src/lib/lines/config/stroke/lines-stroke-options.ts +0 -6
  284. package/src/lib/lines/config/stroke/lines-stroke.ts +0 -15
  285. package/src/lib/lines/events/actions/lines-click-actions.ts +0 -17
  286. package/src/lib/lines/events/actions/lines-hover-move-actions.ts +0 -113
  287. package/src/lib/lines/events/actions/lines-marker-click-actions.ts +0 -29
  288. package/src/lib/lines/events/lines-events.directive.spec.ts +0 -152
  289. package/src/lib/lines/events/lines-events.directive.ts +0 -310
  290. package/src/lib/lines/events/lines-interaction-output.ts +0 -17
  291. package/src/lib/lines/events/lines-tooltip-positioner.ts +0 -24
  292. package/src/lib/lines/index.ts +0 -17
  293. package/src/lib/lines/lines.component.scss +0 -0
  294. package/src/lib/lines/lines.component.spec.ts +0 -95
  295. package/src/lib/lines/lines.component.ts +0 -425
  296. package/src/lib/lines/lines.cy.ts +0 -738
  297. package/src/lib/lines/lines.module.ts +0 -9
  298. package/src/lib/map-legend/continuous-legend/continuous-legend.component.html +0 -28
  299. package/src/lib/map-legend/continuous-legend/continuous-legend.component.scss +0 -76
  300. package/src/lib/map-legend/continuous-legend/continuous-legend.component.spec.ts +0 -61
  301. package/src/lib/map-legend/continuous-legend/continuous-legend.component.ts +0 -82
  302. package/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.html +0 -40
  303. package/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.scss +0 -141
  304. package/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.spec.ts +0 -75
  305. package/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.ts +0 -57
  306. package/src/lib/map-legend/index.ts +0 -2
  307. package/src/lib/map-legend/map-legend-base.spec.ts +0 -190
  308. package/src/lib/map-legend/map-legend-base.ts +0 -99
  309. package/src/lib/map-legend/map-legend.component.html +0 -24
  310. package/src/lib/map-legend/map-legend.component.scss +0 -0
  311. package/src/lib/map-legend/map-legend.component.spec.ts +0 -125
  312. package/src/lib/map-legend/map-legend.component.ts +0 -80
  313. package/src/lib/map-legend/map-legend.module.ts +0 -8
  314. package/src/lib/marks/aux-marks/aux-marks.ts +0 -18
  315. package/src/lib/marks/aux-marks/config/aux-marks-builder.ts +0 -25
  316. package/src/lib/marks/aux-marks/config/aux-marks-config.ts +0 -6
  317. package/src/lib/marks/config/marks-config.ts +0 -14
  318. package/src/lib/marks/config/marks-options.ts +0 -9
  319. package/src/lib/marks/index.ts +0 -15
  320. package/src/lib/marks/map-marks/map-aux-marks/map-aux-marks.spec.ts +0 -74
  321. package/src/lib/marks/map-marks/map-aux-marks/map-aux-marks.ts +0 -40
  322. package/src/lib/marks/map-marks/map-primary-marks/map-primary-marks.spec.ts +0 -79
  323. package/src/lib/marks/map-marks/map-primary-marks/map-primary-marks.ts +0 -63
  324. package/src/lib/marks/marks.ts +0 -39
  325. package/src/lib/marks/primary-marks/config/primary-marks-builder.ts +0 -75
  326. package/src/lib/marks/primary-marks/config/primary-marks-config.ts +0 -9
  327. package/src/lib/marks/primary-marks/primary-marks-base.spec.ts +0 -58
  328. package/src/lib/marks/primary-marks/primary-marks.ts +0 -43
  329. package/src/lib/marks/xy-marks/xy-aux-marks/xy-aux-marks.ts +0 -40
  330. package/src/lib/marks/xy-marks/xy-marks-config.ts +0 -5
  331. package/src/lib/marks/xy-marks/xy-marks.ts +0 -10
  332. package/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks-config.ts +0 -7
  333. package/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks.spec.ts +0 -186
  334. package/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks.ts +0 -72
  335. package/src/lib/point-markers/index.ts +0 -3
  336. package/src/lib/point-markers/point-markers-builder.ts +0 -93
  337. package/src/lib/point-markers/point-markers-options.ts +0 -6
  338. package/src/lib/point-markers/point-markers.ts +0 -13
  339. package/src/lib/quantitative-rules/config/labels/quantitative-rules-labels-builder.ts +0 -162
  340. package/src/lib/quantitative-rules/config/labels/quantitative-rules-labels-options.ts +0 -17
  341. package/src/lib/quantitative-rules/config/labels/quantitative-rules-labels.ts +0 -26
  342. package/src/lib/quantitative-rules/config/quantitative-rules-builder.ts +0 -134
  343. package/src/lib/quantitative-rules/config/quantitative-rules-config.ts +0 -21
  344. package/src/lib/quantitative-rules/config/quantitative-rules-dimensions.ts +0 -20
  345. package/src/lib/quantitative-rules/config/quantitative-rules-options.ts +0 -13
  346. package/src/lib/quantitative-rules/index.ts +0 -6
  347. package/src/lib/quantitative-rules/quantitative-rules.component.scss +0 -3
  348. package/src/lib/quantitative-rules/quantitative-rules.component.spec.ts +0 -50
  349. package/src/lib/quantitative-rules/quantitative-rules.component.ts +0 -224
  350. package/src/lib/quantitative-rules/quantitative-rules.cy.ts +0 -549
  351. package/src/lib/quantitative-rules/quantitative-rules.module.ts +0 -8
  352. package/src/lib/stacked-area/config/stacked-area-builder.ts +0 -264
  353. package/src/lib/stacked-area/config/stacked-area-config.spec.ts +0 -107
  354. package/src/lib/stacked-area/config/stacked-area-config.ts +0 -109
  355. package/src/lib/stacked-area/config/stacked-area-options.ts +0 -28
  356. package/src/lib/stacked-area/events/actions/stacked-area-hover-move-actions.ts +0 -17
  357. package/src/lib/stacked-area/events/stacked-area-events.directive.spec.ts +0 -168
  358. package/src/lib/stacked-area/events/stacked-area-events.directive.ts +0 -272
  359. package/src/lib/stacked-area/events/stacked-area-interaction-output.ts +0 -33
  360. package/src/lib/stacked-area/events/stacked-area-tooltip-positioner.ts +0 -37
  361. package/src/lib/stacked-area/index.ts +0 -7
  362. package/src/lib/stacked-area/stacked-area.component.scss +0 -0
  363. package/src/lib/stacked-area/stacked-area.component.spec.ts +0 -41
  364. package/src/lib/stacked-area/stacked-area.component.ts +0 -241
  365. package/src/lib/stacked-area/stacked-area.module.ts +0 -9
  366. package/src/lib/stacked-bars/config/stacked-bars-builder.ts +0 -109
  367. package/src/lib/stacked-bars/config/stacked-bars-config.spec.ts +0 -122
  368. package/src/lib/stacked-bars/config/stacked-bars-config.ts +0 -79
  369. package/src/lib/stacked-bars/config/stacked-bars-options.ts +0 -16
  370. package/src/lib/stacked-bars/events/actions/stacked-bars-click-actions.ts +0 -23
  371. package/src/lib/stacked-bars/events/actions/stacked-bars-hover-actions.ts +0 -22
  372. package/src/lib/stacked-bars/events/actions/stacked-bars-hover-move-actions.ts +0 -21
  373. package/src/lib/stacked-bars/events/stacked-bars-events.directive.spec.ts +0 -266
  374. package/src/lib/stacked-bars/events/stacked-bars-events.directive.ts +0 -240
  375. package/src/lib/stacked-bars/index.ts +0 -10
  376. package/src/lib/stacked-bars/stacked-bars.component.scss +0 -0
  377. package/src/lib/stacked-bars/stacked-bars.component.spec.ts +0 -25
  378. package/src/lib/stacked-bars/stacked-bars.component.ts +0 -158
  379. package/src/lib/stacked-bars/stacked-bars.module.ts +0 -9
  380. package/src/lib/stroke/base/stroke-base-options.ts +0 -7
  381. package/src/lib/stroke/base/stroke-base.ts +0 -9
  382. package/src/lib/stroke/index.ts +0 -5
  383. package/src/lib/stroke/stroke-builder.ts +0 -103
  384. package/src/lib/stroke/stroke-options.ts +0 -5
  385. package/src/lib/stroke/stroke.ts +0 -12
  386. package/src/lib/svg-text-wrap/index.ts +0 -3
  387. package/src/lib/svg-text-wrap/svg-text-wrap-builder.ts +0 -105
  388. package/src/lib/svg-text-wrap/svg-text-wrap-options.ts +0 -8
  389. package/src/lib/svg-text-wrap/svg-text-wrap.ts +0 -137
  390. package/src/lib/testing/data/continent-population-year-data.ts +0 -126
  391. package/src/lib/testing/data/country-area-continent.ts +0 -59
  392. package/src/lib/testing/data/state-population-income-year-data.ts +0 -123
  393. package/src/lib/testing/stubs/bars.component.stub.ts +0 -12
  394. package/src/lib/testing/stubs/chart.component.stub.ts +0 -6
  395. package/src/lib/testing/stubs/click.directive.stub.ts +0 -15
  396. package/src/lib/testing/stubs/core/destroy-ref.stub.ts +0 -9
  397. package/src/lib/testing/stubs/core/overlay-ref.stub.ts +0 -13
  398. package/src/lib/testing/stubs/core/overlay.stub.ts +0 -8
  399. package/src/lib/testing/stubs/event.directive.stub.ts +0 -10
  400. package/src/lib/testing/stubs/hover-move.directive.stub.ts +0 -17
  401. package/src/lib/testing/stubs/hover.directive.stub.ts +0 -14
  402. package/src/lib/testing/stubs/input-event.directive.stub.ts +0 -9
  403. package/src/lib/testing/stubs/lines.component.stub.ts +0 -13
  404. package/src/lib/testing/stubs/map-aux-marks.stub.ts +0 -10
  405. package/src/lib/testing/stubs/map-chart.component.stub.ts +0 -3
  406. package/src/lib/testing/stubs/map-legend-content.stub.ts +0 -16
  407. package/src/lib/testing/stubs/map-legend.component.stub.ts +0 -10
  408. package/src/lib/testing/stubs/map-primary-marks.stub.ts +0 -16
  409. package/src/lib/testing/stubs/ordinal-axis.stub.ts +0 -18
  410. package/src/lib/testing/stubs/primary-marks.stub.ts +0 -18
  411. package/src/lib/testing/stubs/quantitative-axis.stub.ts +0 -18
  412. package/src/lib/testing/stubs/services/main.service.stub.ts +0 -5
  413. package/src/lib/testing/stubs/services/utilities.service.stub.ts +0 -7
  414. package/src/lib/testing/stubs/stacked-area.component.stub.ts +0 -13
  415. package/src/lib/testing/stubs/x-axis.stub.ts +0 -10
  416. package/src/lib/testing/stubs/xy-axis.class.stub.ts +0 -20
  417. package/src/lib/testing/stubs/xy-axis.stub.ts +0 -44
  418. package/src/lib/testing/stubs/xy-chart.component.stub.ts +0 -5
  419. package/src/lib/testing/stubs/xy-data-marks.stub.ts +0 -15
  420. package/src/lib/testing/stubs/y-axis.stub.ts +0 -15
  421. package/src/lib/tooltips/config/tooltip.ts +0 -11
  422. package/src/lib/tooltips/html-tooltip/config/html-tooltip-builder.ts +0 -134
  423. package/src/lib/tooltips/html-tooltip/config/html-tooltip-config.ts +0 -21
  424. package/src/lib/tooltips/html-tooltip/config/html-tooltip-options.ts +0 -12
  425. package/src/lib/tooltips/html-tooltip/config/position/tooltip-position-builder.ts +0 -191
  426. package/src/lib/tooltips/html-tooltip/config/position/tooltip-position.ts +0 -42
  427. package/src/lib/tooltips/html-tooltip/config/size/tooltip-size-builder.ts +0 -75
  428. package/src/lib/tooltips/html-tooltip/config/size/tooltip-size-options.ts +0 -8
  429. package/src/lib/tooltips/html-tooltip/config/size/tooltip-size.ts +0 -15
  430. package/src/lib/tooltips/html-tooltip/html-tooltip.directive.spec.ts +0 -537
  431. package/src/lib/tooltips/html-tooltip/html-tooltip.directive.ts +0 -210
  432. package/src/lib/tooltips/html-tooltip/html-tooltip.module.ts +0 -16
  433. package/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.html +0 -41
  434. package/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.scss +0 -63
  435. package/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.ts +0 -19
  436. package/src/lib/tooltips/index.ts +0 -11
  437. package/src/lib/tooltips/svg-tooltip/config/svg-tooltip.ts +0 -5
  438. package/src/lib/xy-background/index.ts +0 -2
  439. package/src/lib/xy-background/xy-background.component.html +0 -10
  440. package/src/lib/xy-background/xy-background.component.scss +0 -0
  441. package/src/lib/xy-background/xy-background.component.spec.ts +0 -24
  442. package/src/lib/xy-background/xy-background.component.ts +0 -19
  443. package/src/lib/xy-background/xy-background.module.ts +0 -8
  444. package/src/public-api.ts +0 -26
  445. package/src/test.ts +0 -15
  446. package/tsconfig.doc.json +0 -4
  447. package/tsconfig.json +0 -20
  448. package/tsconfig.lib.json +0 -23
  449. package/tsconfig.lib.prod.json +0 -10
  450. package/tsconfig.spec.json +0 -10
@@ -1,437 +0,0 @@
1
- /* eslint-disable @angular-eslint/prefer-standalone */
2
- import { Component, Input } from '@angular/core';
3
- import {
4
- ChartConfig,
5
- GeographiesConfig,
6
- VicChartConfigBuilder,
7
- VicChartModule,
8
- VicGeographiesConfigBuilder,
9
- VicGeographiesModule,
10
- } from '@mathstack/viz';
11
- import { geoMercator } from 'd3';
12
- import {
13
- FeatureCollection,
14
- GeoJsonProperties,
15
- MultiPolygon,
16
- Polygon,
17
- } from 'geojson';
18
- import { beforeEach, cy, describe, expect, it } from 'local-cypress';
19
- import { range } from 'rxjs';
20
- import * as topojson from 'topojson-client';
21
- import { GeometryCollection, Objects, Topology } from 'topojson-specification';
22
- import {
23
- StateIncomePopulationYearDatum,
24
- stateIncomePopulationYearData,
25
- } from '../../../../../../testing/data/state-population-income-year-data';
26
-
27
- const margin = { top: 36, right: 36, bottom: 36, left: 36 };
28
- const chartHeight = 400;
29
- const chartWidth = 600;
30
- const attributeData = stateIncomePopulationYearData
31
- .filter((x) => x.year === 2020)
32
- .filter((x) => x.state !== 'Puerto Rico');
33
-
34
- interface TestMapGeometryProperties extends GeoJsonProperties {
35
- name: string;
36
- id: string;
37
- }
38
-
39
- interface TestMapObjects extends Objects {
40
- country: GeometryCollection<TestMapGeometryProperties>;
41
- states: GeometryCollection<TestMapGeometryProperties>;
42
- }
43
-
44
- type TestUsMapTopology = Topology<TestMapObjects>;
45
-
46
- // ***********************************************************
47
- // Geographies component set up
48
- // ***********************************************************
49
- @Component({
50
- // eslint-disable-next-line @angular-eslint/component-selector
51
- selector: 'app-test-geographies',
52
- template: `
53
- <vic-map-chart [config]="chartConfig">
54
- <svg:g
55
- vic-primary-marks-geographies
56
- svg-elements
57
- [config]="geographiesConfig"
58
- [vicGeographiesHoverActions]="hoverActions"
59
- (vicGeographiesHoverOutput)="updateTooltipForNewOutput($event)"
60
- ></svg:g>
61
- </vic-map-chart>
62
- `,
63
- styles: [],
64
- imports: [VicChartModule, VicGeographiesModule],
65
- })
66
- class TestGeographiesComponent {
67
- @Input() geographiesConfig: GeographiesConfig<
68
- StateIncomePopulationYearDatum,
69
- TestMapGeometryProperties
70
- >;
71
- chartConfig: ChartConfig = new VicChartConfigBuilder()
72
- .margin(margin)
73
- .maxWidth(chartWidth)
74
- .maxHeight(chartHeight)
75
- .scalingStrategy('responsive-width')
76
- .getConfig();
77
- }
78
-
79
- const mountGeographiesComponent = (
80
- geographiesConfig: GeographiesConfig<
81
- StateIncomePopulationYearDatum,
82
- TestMapGeometryProperties
83
- >
84
- ): void => {
85
- cy.mount(TestGeographiesComponent, {
86
- componentProperties: {
87
- geographiesConfig: geographiesConfig,
88
- },
89
- });
90
- };
91
-
92
- // ***********************************************************
93
- // Test dimension
94
- // ***********************************************************
95
- describe('the Categorical Bins Attribute Data dimension', () => {
96
- let geographiesConfig: GeographiesConfig<
97
- StateIncomePopulationYearDatum,
98
- TestMapGeometryProperties
99
- >;
100
- beforeEach(() => {
101
- geographiesConfig = undefined;
102
- });
103
- it('User provides domain and range - colors states by domain and range in 1:1 relationship', () => {
104
- const binValues = [50000, 75000];
105
- const rangeValues = ['red', 'violet', 'blue'];
106
- cy.fixture('usMap.json').then((response) => {
107
- const usMap: TestUsMapTopology = response;
108
- const usBoundary = topojson.feature(
109
- usMap,
110
- usMap.objects.country
111
- ) as FeatureCollection<MultiPolygon, TestMapGeometryProperties>;
112
- const states = topojson.feature(
113
- usMap,
114
- usMap.objects.states
115
- ) as FeatureCollection<MultiPolygon | Polygon, TestMapGeometryProperties>;
116
- geographiesConfig = new VicGeographiesConfigBuilder<
117
- StateIncomePopulationYearDatum,
118
- TestMapGeometryProperties
119
- >()
120
- .boundary(usBoundary)
121
- .featureIndexAccessor((d) => d.properties.name)
122
- .attributeDataLayer((layer) =>
123
- layer
124
- .data(attributeData)
125
- .class((d) => d.name.split(' ').join('-'))
126
- .geographies(states.features)
127
- .geographyIndexAccessor((d) => d.state)
128
- .categoricalBins((dimension) =>
129
- dimension
130
- .valueAccessor((d) => {
131
- if (d.income < binValues[0]) {
132
- return 'Low';
133
- } else if (d.income < binValues[1]) {
134
- return 'Medium';
135
- } else {
136
- return 'High';
137
- }
138
- })
139
- .domain(['Low', 'Medium', 'High'])
140
- .range(rangeValues)
141
- )
142
- )
143
- .getConfig();
144
- mountGeographiesComponent(geographiesConfig);
145
- rangeValues.forEach((color, i) => {
146
- const statesInAttributeData = attributeData
147
- .filter((x) => {
148
- if (i === 0) {
149
- return x.income < binValues[i];
150
- } else if (i === rangeValues.length - 1) {
151
- return x.income >= binValues[i - 1];
152
- } else {
153
- return x.income < binValues[i + 1] && x.income >= binValues[i];
154
- }
155
- })
156
- .map((x) => x.state);
157
- statesInAttributeData.forEach((state) => {
158
- cy.get(
159
- `.vic-geographies-group.${state.split(' ').join('-')} path`
160
- ).then((path) => {
161
- expect(path.attr('fill')).to.eq(color);
162
- });
163
- });
164
- });
165
- });
166
- });
167
-
168
- it('User provides range but not domain - colors in order they appear in data', () => {
169
- const binValues = [50000, 75000];
170
- cy.fixture('usMap.json').then((response) => {
171
- const usMap: TestUsMapTopology = response;
172
- const usBoundary = topojson.feature(
173
- usMap,
174
- usMap.objects.country
175
- ) as FeatureCollection<MultiPolygon, TestMapGeometryProperties>;
176
- const states = topojson.feature(
177
- usMap,
178
- usMap.objects.states
179
- ) as FeatureCollection<MultiPolygon | Polygon, TestMapGeometryProperties>;
180
- geographiesConfig = new VicGeographiesConfigBuilder<
181
- StateIncomePopulationYearDatum,
182
- TestMapGeometryProperties
183
- >()
184
- .boundary(usBoundary)
185
- .featureIndexAccessor((d) => d.properties.name)
186
- .attributeDataLayer((layer) =>
187
- layer
188
- .data(attributeData)
189
- .class((d) => d.name.split(' ').join('-'))
190
- .geographies(states.features)
191
- .geographyIndexAccessor((d) => d.state)
192
- .categoricalBins((dimension) =>
193
- dimension
194
- .valueAccessor((d) => {
195
- if (d.income < binValues[0]) {
196
- return 'Low';
197
- } else if (d.income < binValues[1]) {
198
- return 'Medium';
199
- } else {
200
- return 'High';
201
- }
202
- })
203
- .range(['red', 'violet', 'blue'])
204
- )
205
- )
206
- .getConfig();
207
- mountGeographiesComponent(geographiesConfig);
208
- const lowStates = attributeData // first state in this group: Arkansas - uses third color
209
- .filter((d) => d.income < binValues[0])
210
- .map((d) => d.state.replace(/\s/g, '-'));
211
- const mediumStates = attributeData // first state in this group: Alabama - uses first color
212
- .filter((d) => d.income < binValues[1] && d.income >= binValues[0])
213
- .map((d) => d.state.replace(/\s/g, '-'));
214
- const highStates = attributeData // first state in this group: Alaska - uses second color
215
- .filter((d) => d.income >= binValues[1])
216
- .map((d) => d.state.replace(/\s/g, '-'));
217
- [
218
- { data: mediumStates, color: 'red' },
219
- { data: highStates, color: 'violet' },
220
- { data: lowStates, color: 'blue' },
221
- ].forEach((group) => {
222
- group.data.forEach((state) => {
223
- cy.get(
224
- `.vic-geographies-group.${state.split(' ').join('-')} path`
225
- ).then((path) => {
226
- expect(path.attr('fill')).to.eq(group.color);
227
- });
228
- });
229
- });
230
- });
231
- });
232
-
233
- it('User provides range that has fewer categories than in data -- additional categories get assigned to given range values -- EXPECTED VISUAL DEFECT', () => {
234
- const binValues = [50000, 65000, 80000];
235
- const rangeValues = ['red', 'violet'];
236
- // Note: use colors where only one rbg color channel varies so that it's possible to test data values.
237
- cy.fixture('usMap.json').then((response) => {
238
- const usMap: TestUsMapTopology = response;
239
- const usBoundary = topojson.feature(
240
- usMap,
241
- usMap.objects.country
242
- ) as FeatureCollection<MultiPolygon, TestMapGeometryProperties>;
243
- const states = topojson.feature(
244
- usMap,
245
- usMap.objects.states
246
- ) as FeatureCollection<MultiPolygon | Polygon, TestMapGeometryProperties>;
247
- geographiesConfig = new VicGeographiesConfigBuilder<
248
- StateIncomePopulationYearDatum,
249
- TestMapGeometryProperties
250
- >()
251
- .boundary(usBoundary)
252
- .featureIndexAccessor((d) => d.properties.name)
253
- .attributeDataLayer((layer) =>
254
- layer
255
- .data(attributeData)
256
- .class((d) => d.name.split(' ').join('-'))
257
- .geographies(states.features)
258
- .geographyIndexAccessor((d) => d.state)
259
- .categoricalBins((dimension) =>
260
- dimension
261
- .valueAccessor((d) => {
262
- if (d.income < binValues[0]) {
263
- return 'Low';
264
- } else if (d.income < binValues[1]) {
265
- return 'Medium';
266
- } else if (d.income < binValues[2]) {
267
- return 'High';
268
- } else {
269
- return 'Very High';
270
- }
271
- })
272
- .domain(['Low', 'Medium', 'High', 'Very High'])
273
- .range(rangeValues)
274
- )
275
- )
276
- .getConfig();
277
- mountGeographiesComponent(geographiesConfig);
278
- range(binValues.length + 1).forEach((i) => {
279
- const statesInAttributeData = attributeData
280
- .filter((x) => {
281
- if (i === 0) {
282
- return x.income < binValues[i];
283
- } else if (i === binValues.length) {
284
- return x.income >= binValues[i - 1];
285
- } else {
286
- return x.income < binValues[i] && x.income >= binValues[i - 1];
287
- }
288
- })
289
- .map((d) => d.state.replace(/\s/g, '-'));
290
- const color = rangeValues[i % rangeValues.length];
291
- statesInAttributeData.forEach((state) => {
292
- cy.get(
293
- `.vic-geographies-group.${state.split(' ').join('-')} path`
294
- ).then((path) => {
295
- expect(path.attr('fill')).to.eq(color);
296
- });
297
- });
298
- });
299
- });
300
- });
301
-
302
- it('it colors undefined, null, and non-quant values with null color', () => {
303
- const binValues = [50000, 75000];
304
- const rangeValues = ['red', 'violet', 'blue'];
305
- cy.fixture('usMap.json').then((response) => {
306
- const usMap: TestUsMapTopology = response;
307
- const usBoundary = topojson.feature(
308
- usMap,
309
- usMap.objects.country
310
- ) as FeatureCollection<MultiPolygon, TestMapGeometryProperties>;
311
- const states = topojson.feature(
312
- usMap,
313
- usMap.objects.states
314
- ) as FeatureCollection<MultiPolygon | Polygon, TestMapGeometryProperties>;
315
- const dataWithFalsyValues = attributeData.map((d) => {
316
- if (d.state === 'Texas') {
317
- return { ...d, income: null };
318
- } else if (d.state === 'California') {
319
- return { ...d, income: undefined };
320
- } else if (d.state === 'Florida') {
321
- return { ...d, income: 'Not a number' as unknown as number };
322
- } else {
323
- return d;
324
- }
325
- });
326
- const nullColor = 'chartreuse';
327
- geographiesConfig = new VicGeographiesConfigBuilder<
328
- StateIncomePopulationYearDatum,
329
- TestMapGeometryProperties
330
- >()
331
- .boundary(usBoundary)
332
- .featureIndexAccessor((d) => d.properties.name)
333
- .attributeDataLayer((layer) =>
334
- layer
335
- .data(dataWithFalsyValues)
336
- .class((d) => d.name.split(' ').join('-'))
337
- .geographies(states.features)
338
- .geographyIndexAccessor((d) => d.state)
339
- .categoricalBins((dimension) =>
340
- dimension
341
- .valueAccessor((d) => {
342
- if (
343
- d.income === undefined ||
344
- d.income === null ||
345
- isNaN(d.income)
346
- ) {
347
- return d.income as unknown as string;
348
- } else if (d.income < binValues[0]) {
349
- return 'Low';
350
- } else if (d.income < binValues[1]) {
351
- return 'Medium';
352
- } else {
353
- return 'High';
354
- }
355
- })
356
- .domain(['Low', 'Medium', 'High'])
357
- .range(rangeValues)
358
- .nullColor(nullColor)
359
- )
360
- )
361
- .getConfig();
362
- mountGeographiesComponent(geographiesConfig);
363
- cy.get(`.vic-geographies-group.Florida path`).then((path) => {
364
- expect(path.attr('fill')).to.eq(nullColor);
365
- });
366
- cy.get(`.vic-geographies-group.Texas path`).then((path) => {
367
- expect(path.attr('fill')).to.eq(nullColor);
368
- });
369
- cy.get(`.vic-geographies-group.California path`).then((path) => {
370
- expect(path.attr('fill')).to.eq(nullColor);
371
- });
372
- });
373
- });
374
-
375
- it('it colors geographies not in attribute data with the null color', () => {
376
- // island territories like American Samoa, Guam, etc. are not in the attribute data but are in the geojson
377
- // they wil be drawn with any projection but let's use geoMercator to make them a bit more visible-ish
378
- const binValues = [50000, 75000];
379
- const rangeValues = ['red', 'violet', 'blue'];
380
- cy.fixture('usMap.json').then((response) => {
381
- const usMap: TestUsMapTopology = response;
382
- const usBoundary = topojson.feature(
383
- usMap,
384
- usMap.objects.country
385
- ) as FeatureCollection<MultiPolygon, TestMapGeometryProperties>;
386
- const states = topojson.feature(
387
- usMap,
388
- usMap.objects.states
389
- ) as FeatureCollection<MultiPolygon | Polygon, TestMapGeometryProperties>;
390
- const nullColor = 'chartreuse';
391
- geographiesConfig = new VicGeographiesConfigBuilder<
392
- StateIncomePopulationYearDatum,
393
- TestMapGeometryProperties
394
- >()
395
- .boundary(usBoundary)
396
- .projection(geoMercator())
397
- .featureIndexAccessor((d) => d.properties.name)
398
- .attributeDataLayer((layer) =>
399
- layer
400
- .data(attributeData)
401
- .class((d) => d.name.split(' ').join('-'))
402
- .geographies(states.features)
403
- .geographyIndexAccessor((d) => d.state)
404
- .categoricalBins((dimension) =>
405
- dimension
406
- .valueAccessor((d) => {
407
- if (d.income < binValues[0]) {
408
- return 'Low';
409
- } else if (d.income < binValues[1]) {
410
- return 'Medium';
411
- } else {
412
- return 'High';
413
- }
414
- })
415
- .domain(['Low', 'Medium', 'High'])
416
- .range(rangeValues)
417
- .nullColor(nullColor)
418
- )
419
- )
420
- .getConfig();
421
- mountGeographiesComponent(geographiesConfig);
422
- const geographiesNotInAttributeData = states.features
423
- .filter(
424
- (x) =>
425
- attributeData.findIndex((d) => d.state === x.properties.name) === -1
426
- )
427
- .map((x) => x.properties.name.replace(/\s/g, '-'));
428
- geographiesNotInAttributeData.forEach((state) => {
429
- cy.get(
430
- `.vic-geographies-group.${state.split(' ').join('-')} path`
431
- ).then((path) => {
432
- expect(path.attr('fill')).to.eq(nullColor);
433
- });
434
- });
435
- });
436
- });
437
- });
@@ -1,105 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { CategoricalBinsAttributeDataDimension } from './categorical-bins';
3
- import { CategoricalBinsBuilder } from './categorical-bins-builder';
4
-
5
- describe('VicCategoricalAttributeDataDimension', () => {
6
- let dimension: CategoricalBinsAttributeDataDimension<string>;
7
- beforeEach(() => {
8
- dimension = new CategoricalBinsBuilder<string>()
9
- .valueAccessor((d) => d)
10
- ._build();
11
- });
12
- describe('setPropertiesFromData', () => {
13
- beforeEach(() => {
14
- spyOn(dimension as any, 'setDomain');
15
- spyOn(dimension as any, 'setRange');
16
- });
17
- it('calls setDomain once', () => {
18
- dimension.setPropertiesFromData(['a', 'b', 'c']);
19
- expect((dimension as any).setDomain).toHaveBeenCalledTimes(1);
20
- });
21
- it('calls setRange once', () => {
22
- dimension.setPropertiesFromData(['a', 'b', 'c']);
23
- expect((dimension as any).setRange).toHaveBeenCalledTimes(1);
24
- });
25
- });
26
-
27
- describe('setDomain', () => {
28
- it('sets the domain to uniqued values', () => {
29
- dimension.setPropertiesFromData(['a', 'b', 'c', 'b']);
30
- expect((dimension as any).calculatedDomain).toEqual(['a', 'b', 'c']);
31
- });
32
- it('sets the domain to uniqued user values if specified', () => {
33
- dimension = new CategoricalBinsBuilder<string>()
34
- .valueAccessor((d) => d)
35
- .domain(['c', 'd', 'b', 'a', 'd'])
36
- ._build();
37
- dimension.setPropertiesFromData(['a', 'b', 'c', 'a', 'b']);
38
- expect((dimension as any).calculatedDomain).toEqual(['c', 'd', 'b', 'a']);
39
- });
40
- });
41
-
42
- describe('setRange', () => {
43
- it('sets the range to the correct values/length', () => {
44
- dimension = new CategoricalBinsBuilder<string>()
45
- .valueAccessor((d) => d)
46
- .range(['red', 'blue', 'green', 'yellow', 'purple'])
47
- ._build();
48
- dimension.setPropertiesFromData(['a', 'b', 'c']);
49
- expect(dimension.range).toEqual(['red', 'blue', 'green']);
50
- });
51
- });
52
-
53
- describe('integration: the scale generates the expected color for a value with the default scale (D3 scaleOrdinal)', () => {
54
- type IceCream = { price: number; flavor: string; brand: string };
55
- let dimension: CategoricalBinsAttributeDataDimension<IceCream>;
56
- const data: IceCream[] = [
57
- { price: 7.99, flavor: 'chocolate', brand: 'local' },
58
- { price: 5, flavor: 'chocolate', brand: 'national' },
59
- { price: 3.98, flavor: 'chocolate', brand: 'national' },
60
- { price: 8, flavor: 'vanilla', brand: 'regional' },
61
- { price: 11, flavor: 'vanilla', brand: 'local' },
62
- { price: 4.99, flavor: 'strawberry', brand: 'local' },
63
- { price: 4.5, flavor: 'strawberry', brand: 'national' },
64
- { price: 7, flavor: 'strawberry', brand: 'regional' },
65
- ];
66
- it('using default properties', () => {
67
- dimension = new CategoricalBinsBuilder<IceCream>()
68
- .valueAccessor((d) => d.flavor)
69
- .nullColor('pink')
70
- ._build();
71
- dimension.setPropertiesFromData(data);
72
- const scale = dimension.getScale();
73
- expect(scale('chocolate')).toEqual('white');
74
- expect(scale('vanilla')).toEqual('lightslategray');
75
- expect(scale('strawberry')).toEqual('white');
76
- expect(scale('cookie dough')).toEqual('pink');
77
- });
78
- it('using user provided range', () => {
79
- dimension = new CategoricalBinsBuilder<IceCream>()
80
- .valueAccessor((d) => d.flavor)
81
- .range(['red', 'white', 'blue'])
82
- .nullColor('pink')
83
- ._build();
84
- dimension.setPropertiesFromData(data);
85
- const scale = dimension.getScale();
86
- expect(scale('chocolate')).toEqual('red');
87
- expect(scale('vanilla')).toEqual('white');
88
- expect(scale('strawberry')).toEqual('blue');
89
- expect(scale('cookie dough')).toEqual('pink');
90
- });
91
- it('using user provided domain', () => {
92
- dimension = new CategoricalBinsBuilder<IceCream>()
93
- .valueAccessor((d) => d.flavor)
94
- .domain(['cookie dough', 'rocky road', 'butter pecan'])
95
- .nullColor('pink')
96
- ._build();
97
- dimension.setPropertiesFromData(data);
98
- const scale = dimension.getScale();
99
- expect(scale('chocolate')).toEqual('pink');
100
- expect(scale('vanilla')).toEqual('pink');
101
- expect(scale('strawberry')).toEqual('pink');
102
- expect(scale('cookie dough')).toEqual('white');
103
- });
104
- });
105
- });
@@ -1,54 +0,0 @@
1
- import { safeAssign } from '@mathstack/app-kit';
2
- import { BinStrategy } from '../attribute-data-bin-enums';
3
- import { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';
4
- import { CategoricalBinsOptions } from './categorical-bins-options';
5
-
6
- /**
7
- * Configuration object for attribute data that is categorical.
8
- *
9
- * The generic parameter is the type of the attribute data.
10
- */
11
- export class CategoricalBinsAttributeDataDimension<
12
- Datum,
13
- RangeValue extends string | number = string,
14
- >
15
- extends AttributeDataDimension<Datum, string>
16
- implements CategoricalBinsOptions<Datum, string>
17
- {
18
- override readonly binType: BinStrategy.categorical;
19
- calculatedDomain: string[];
20
- readonly domain: string[];
21
- override interpolator: never;
22
-
23
- constructor(options: CategoricalBinsOptions<Datum, RangeValue>) {
24
- super('ordinal');
25
- this.binType = BinStrategy.categorical;
26
- safeAssign(this, options);
27
- }
28
-
29
- getDomain(): string[] {
30
- return this.calculatedDomain;
31
- }
32
-
33
- setPropertiesFromData(data: Datum[]): void {
34
- const values = data.map(this.valueAccessor);
35
- this.setDomain(values);
36
- this.setRange();
37
- }
38
-
39
- protected setDomain(values: string[]): void {
40
- const domainValues = this.domain ?? values;
41
- this.calculatedDomain = [...new Set(domainValues)];
42
- }
43
-
44
- protected setRange(): void {
45
- this.range = this.range.slice(0, this.calculatedDomain.length);
46
- }
47
-
48
- getScale() {
49
- return this.scale()
50
- .domain(this.calculatedDomain)
51
- .range(this.range)
52
- .unknown(this.nullColor);
53
- }
54
- }
@@ -1,65 +0,0 @@
1
- import { safeAssign } from '@mathstack/app-kit';
2
- import { interpolateLab, scaleThreshold } from 'd3';
3
- import { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';
4
- import { CustomBreaksBinsAttributeDataDimension } from './custom-breaks-bins';
5
-
6
- const DEFAULT = {
7
- _interpolator: interpolateLab,
8
- _nullColor: 'whitesmoke',
9
- _scale: scaleThreshold,
10
- };
11
-
12
- export class CustomBreaksBinsAttributeDataDimensionBuilder<
13
- Datum,
14
- RangeValue extends string | number = string,
15
- > extends AttributeDataDimensionBuilder<Datum, number, RangeValue> {
16
- private _breakValues: number[];
17
- private _formatSpecifier: string;
18
-
19
- constructor() {
20
- super();
21
- safeAssign(this, DEFAULT);
22
- }
23
-
24
- /**
25
- * REQUIRED. An array of values to specify bin ranges. This array should include both the lowest and highest values and must have at least two values.
26
- *
27
- * An array of [0, 2, 5, 10, 50] will create bins [0, 2], [2, 5], [5, 10], [10, 50].
28
- *
29
- * Values should be in ascending order.
30
- *
31
- * Values below the first value will be colored with the color for the first bin. Values above the last value will be colored with the color for the last bin.
32
- *
33
- * In this sense, the first and last values are primarily used for
34
- in a legend, should one be displayed.
35
- *
36
- *In order for the legend to be accurate, users should ensure that the first and last values are the minimum and maximum values in the data.
37
- */
38
- breakValues(breakValues: number[]): this {
39
- this._breakValues = breakValues;
40
- return this;
41
- }
42
-
43
- /**
44
- * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.
45
- *
46
- * For example, this will format data values shown in a tooltip
47
- */
48
- formatSpecifier(formatSpecifier: string): this {
49
- this._formatSpecifier = formatSpecifier;
50
- return this;
51
- }
52
-
53
- _build(): CustomBreaksBinsAttributeDataDimension<Datum, RangeValue> {
54
- return new CustomBreaksBinsAttributeDataDimension({
55
- breakValues: this._breakValues,
56
- formatFunction: this._formatFunction,
57
- formatSpecifier: this._formatSpecifier,
58
- interpolator: this._interpolator,
59
- nullColor: this._nullColor,
60
- range: this._range,
61
- scale: this._scale,
62
- valueAccessor: this._valueAccessor,
63
- });
64
- }
65
- }
@@ -1,9 +0,0 @@
1
- import { CalculatedBinsAttributeDataDimensionOptions } from '../calculated-bins/calculated-bins-options';
2
-
3
- export interface CustomBreaksBinsAttributeDataDimensionOptions<
4
- Datum,
5
- RangeValue extends string | number = string,
6
- > extends CalculatedBinsAttributeDataDimensionOptions<Datum, RangeValue> {
7
- breakValues: number[];
8
- formatSpecifier: string;
9
- }