@orbcharts/plugins-basic 3.0.0-beta.9 → 3.0.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 (237) hide show
  1. package/dist/lib/plugins-basic-types.d.ts +1 -0
  2. package/dist/orbcharts-plugins-basic.es.js +12358 -10836
  3. package/dist/orbcharts-plugins-basic.umd.js +273 -110
  4. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBars.d.ts +3 -3
  5. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBarsTriangle.d.ts +3 -3
  6. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseDots.d.ts +3 -3
  7. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLineAreas.d.ts +3 -3
  8. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLines.d.ts +3 -3
  9. package/dist/src/base/BaseRacingBars.d.ts +23 -0
  10. package/dist/src/base/BaseRacingLabels.d.ts +20 -0
  11. package/dist/src/base/BaseRacingValueLabels.d.ts +20 -0
  12. package/dist/{orbcharts-plugins-basic/src/base/BaseStackedBar.d.ts → src/base/BaseStackedBars.d.ts} +7 -7
  13. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseValueAxis.d.ts +4 -7
  14. package/dist/src/base/BaseXAxis.d.ts +20 -0
  15. package/dist/src/base/BaseYAxis.d.ts +18 -0
  16. package/dist/{orbcharts-plugins-basic/src → src}/grid/defaults.d.ts +3 -3
  17. package/dist/{orbcharts-plugins-basic/src → src}/grid/gridObservables.d.ts +8 -1
  18. package/dist/{orbcharts-plugins-basic/src → src}/grid/index.d.ts +2 -2
  19. package/dist/src/grid/plugins/Bars.d.ts +1 -0
  20. package/dist/src/grid/plugins/BarsPN.d.ts +1 -0
  21. package/dist/src/grid/plugins/BarsTriangle.d.ts +1 -0
  22. package/dist/src/grid/plugins/Dots.d.ts +1 -0
  23. package/dist/src/grid/plugins/GridLegend.d.ts +1 -0
  24. package/dist/src/grid/plugins/GridTooltip.d.ts +1 -0
  25. package/dist/src/grid/plugins/GroupAux.d.ts +3 -0
  26. package/dist/src/grid/plugins/GroupAxis.d.ts +1 -0
  27. package/dist/src/grid/plugins/GroupZoom.d.ts +1 -0
  28. package/dist/src/grid/plugins/LineAreas.d.ts +1 -0
  29. package/dist/src/grid/plugins/Lines.d.ts +1 -0
  30. package/dist/src/grid/plugins/StackedBars.d.ts +1 -0
  31. package/dist/src/grid/plugins/StackedValueAxis.d.ts +1 -0
  32. package/dist/src/grid/plugins/ValueAxis.d.ts +1 -0
  33. package/dist/src/index.d.ts +7 -1
  34. package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/defaults.d.ts +2 -2
  35. package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/index.d.ts +1 -1
  36. package/dist/src/multiGrid/plugins/MultiBars.d.ts +1 -0
  37. package/dist/src/multiGrid/plugins/MultiBarsTriangle.d.ts +1 -0
  38. package/dist/src/multiGrid/plugins/MultiDots.d.ts +1 -0
  39. package/dist/src/multiGrid/plugins/MultiGridLegend.d.ts +1 -0
  40. package/dist/src/multiGrid/plugins/MultiGridTooltip.d.ts +1 -0
  41. package/dist/src/multiGrid/plugins/MultiGroupAxis.d.ts +1 -0
  42. package/dist/src/multiGrid/plugins/MultiLineAreas.d.ts +1 -0
  43. package/dist/src/multiGrid/plugins/MultiLines.d.ts +1 -0
  44. package/dist/src/multiGrid/plugins/MultiStackedBars.d.ts +1 -0
  45. package/dist/src/multiGrid/plugins/MultiStackedValueAxis.d.ts +1 -0
  46. package/dist/src/multiGrid/plugins/MultiValueAxis.d.ts +1 -0
  47. package/dist/src/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +1 -0
  48. package/dist/src/multiGrid/plugins/OverlappingValueAxes.d.ts +1 -0
  49. package/dist/src/multiValue/defaults.d.ts +13 -0
  50. package/dist/{orbcharts-plugins-basic/src → src}/multiValue/index.d.ts +5 -1
  51. package/dist/src/multiValue/multiValueObservables.d.ts +56 -0
  52. package/dist/src/multiValue/plugins/MultiValueLegend.d.ts +1 -0
  53. package/dist/src/multiValue/plugins/MultiValueTooltip.d.ts +1 -0
  54. package/dist/src/multiValue/plugins/RacingBars.d.ts +1 -0
  55. package/dist/src/multiValue/plugins/RacingCounterTexts.d.ts +3 -0
  56. package/dist/src/multiValue/plugins/RacingValueAxis.d.ts +1 -0
  57. package/dist/src/multiValue/plugins/Scatter.d.ts +3 -0
  58. package/dist/src/multiValue/plugins/ScatterBubbles.d.ts +3 -0
  59. package/dist/src/multiValue/plugins/XAxis.d.ts +1 -0
  60. package/dist/src/multiValue/plugins/XYAux.d.ts +3 -0
  61. package/dist/src/multiValue/plugins/XYAxes.d.ts +1 -0
  62. package/dist/src/multiValue/plugins/XYAxes_legacy.d.ts +3 -0
  63. package/dist/src/multiValue/plugins/XZoom.d.ts +1 -0
  64. package/dist/src/relationship/plugins/ForceDirected.d.ts +3 -0
  65. package/dist/src/relationship/plugins/ForceDirectedBubbles.d.ts +3 -0
  66. package/dist/src/relationship/plugins/RelationshipLegend.d.ts +1 -0
  67. package/dist/src/relationship/plugins/RelationshipTooltip.d.ts +1 -0
  68. package/dist/src/series/plugins/Bubbles.d.ts +3 -0
  69. package/dist/src/series/plugins/Pie.d.ts +3 -0
  70. package/dist/src/series/plugins/PieEventTexts.d.ts +3 -0
  71. package/dist/src/series/plugins/PieLabels.d.ts +3 -0
  72. package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Rose.d.ts +1 -1
  73. package/dist/src/series/plugins/RoseLabels.d.ts +3 -0
  74. package/dist/src/series/plugins/SeriesLegend.d.ts +1 -0
  75. package/dist/src/series/plugins/SeriesTooltip.d.ts +1 -0
  76. package/dist/src/tree/plugins/TreeLegend.d.ts +1 -0
  77. package/dist/src/tree/plugins/TreeMap.d.ts +3 -0
  78. package/dist/src/tree/plugins/TreeTooltip.d.ts +1 -0
  79. package/dist/{orbcharts-plugins-basic/src → src}/utils/commonUtils.d.ts +1 -0
  80. package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Graphics.d.ts +2 -1
  81. package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Utils.d.ts +1 -0
  82. package/lib/core.ts +1 -1
  83. package/lib/plugins-basic-types.ts +2 -2
  84. package/package.json +4 -4
  85. package/src/base/BaseBars.ts +15 -15
  86. package/src/base/BaseBarsTriangle.ts +15 -15
  87. package/src/base/BaseDots.ts +14 -14
  88. package/src/base/BaseGroupAxis.ts +18 -6
  89. package/src/base/BaseLineAreas.ts +12 -12
  90. package/src/base/BaseLines.ts +11 -11
  91. package/src/base/BaseRacingBars.ts +552 -0
  92. package/src/base/BaseRacingLabels.ts +396 -0
  93. package/src/base/BaseRacingValueLabels.ts +403 -0
  94. package/src/base/{BaseStackedBar.ts → BaseStackedBars.ts} +26 -26
  95. package/src/base/BaseTooltip.ts +2 -1
  96. package/src/base/BaseValueAxis.ts +70 -53
  97. package/src/base/BaseXAxis.ts +427 -0
  98. package/src/base/BaseYAxis.ts +389 -0
  99. package/src/grid/defaults.ts +44 -77
  100. package/src/grid/gridObservables.ts +58 -0
  101. package/src/grid/index.ts +2 -2
  102. package/src/grid/plugins/Bars.ts +2 -2
  103. package/src/grid/plugins/BarsPN.ts +2 -2
  104. package/src/grid/plugins/BarsTriangle.ts +2 -2
  105. package/src/grid/plugins/Dots.ts +2 -2
  106. package/src/grid/plugins/GridLegend.ts +7 -7
  107. package/src/grid/plugins/GroupAux.ts +41 -24
  108. package/src/grid/plugins/GroupAxis.ts +0 -24
  109. package/src/grid/plugins/{GridZoom.ts → GroupZoom.ts} +5 -5
  110. package/src/grid/plugins/LineAreas.ts +2 -2
  111. package/src/grid/plugins/Lines.ts +2 -2
  112. package/src/grid/plugins/{StackedBar.ts → StackedBars.ts} +9 -9
  113. package/src/multiGrid/defaults.ts +44 -24
  114. package/src/multiGrid/index.ts +1 -1
  115. package/src/multiGrid/multiGridObservables.ts +1 -0
  116. package/src/multiGrid/plugins/MultiBars.ts +3 -3
  117. package/src/multiGrid/plugins/MultiBarsTriangle.ts +3 -3
  118. package/src/multiGrid/plugins/MultiDots.ts +3 -3
  119. package/src/multiGrid/plugins/MultiGridLegend.ts +20 -10
  120. package/src/multiGrid/plugins/MultiLineAreas.ts +3 -3
  121. package/src/multiGrid/plugins/MultiLines.ts +3 -3
  122. package/src/multiGrid/plugins/{MultiStackedBar.ts → MultiStackedBars.ts} +10 -10
  123. package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +1 -0
  124. package/src/multiValue/defaults.ts +277 -12
  125. package/src/multiValue/index.ts +5 -1
  126. package/src/multiValue/multiValueObservables.ts +414 -44
  127. package/src/multiValue/plugins/OrdinalBubbles.ts +0 -0
  128. package/src/multiValue/plugins/OrdinalXAxis.ts +0 -0
  129. package/src/multiValue/plugins/RacingBars.ts +373 -0
  130. package/src/multiValue/plugins/RacingCounterAxis.ts +0 -0
  131. package/src/multiValue/plugins/RacingCounterTexts.ts +300 -0
  132. package/src/multiValue/plugins/RacingValueAxis.ts +115 -0
  133. package/src/multiValue/plugins/RankingAxis_legacy.ts +109 -0
  134. package/src/multiValue/plugins/Scatter.ts +13 -13
  135. package/src/multiValue/plugins/ScatterBubbles.ts +13 -13
  136. package/src/multiValue/plugins/XAxis.ts +108 -0
  137. package/src/multiValue/plugins/XYAux.ts +15 -14
  138. package/src/multiValue/plugins/XYAxes.ts +38 -528
  139. package/src/multiValue/plugins/XYAxes_legacy.ts +684 -0
  140. package/src/multiValue/plugins/{XYZoom.ts → XZoom.ts} +17 -17
  141. package/src/relationship/defaults.ts +42 -16
  142. package/src/relationship/plugins/ForceDirected.ts +26 -19
  143. package/src/relationship/plugins/ForceDirectedBubbles.ts +46 -25
  144. package/src/series/defaults.ts +51 -36
  145. package/src/series/plugins/Bubbles.ts +67 -37
  146. package/src/series/plugins/Pie.ts +5 -5
  147. package/src/series/plugins/PieEventTexts.ts +3 -3
  148. package/src/series/plugins/PieLabels.ts +5 -5
  149. package/src/series/plugins/Rose.ts +11 -11
  150. package/src/series/plugins/RoseLabels.ts +9 -9
  151. package/src/tree/defaults.ts +46 -22
  152. package/src/tree/plugins/TreeMap.ts +11 -3
  153. package/src/utils/commonUtils.ts +10 -1
  154. package/src/utils/d3Graphics.ts +4 -2
  155. package/src/utils/d3Utils.ts +18 -0
  156. package/src/utils/orbchartsUtils.ts +30 -16
  157. package/dist/orbcharts-plugins-basic/lib/plugins-basic-types.d.ts +0 -1
  158. package/dist/orbcharts-plugins-basic/src/grid/plugins/Bars.d.ts +0 -1
  159. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsPN.d.ts +0 -1
  160. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsTriangle.d.ts +0 -1
  161. package/dist/orbcharts-plugins-basic/src/grid/plugins/Dots.d.ts +0 -1
  162. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridLegend.d.ts +0 -1
  163. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridTooltip.d.ts +0 -1
  164. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridZoom.d.ts +0 -1
  165. package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAux.d.ts +0 -3
  166. package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAxis.d.ts +0 -1
  167. package/dist/orbcharts-plugins-basic/src/grid/plugins/LineAreas.d.ts +0 -1
  168. package/dist/orbcharts-plugins-basic/src/grid/plugins/Lines.d.ts +0 -1
  169. package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedBar.d.ts +0 -1
  170. package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedValueAxis.d.ts +0 -1
  171. package/dist/orbcharts-plugins-basic/src/grid/plugins/ValueAxis.d.ts +0 -1
  172. package/dist/orbcharts-plugins-basic/src/index.d.ts +0 -7
  173. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBars.d.ts +0 -1
  174. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -1
  175. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiDots.d.ts +0 -1
  176. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridLegend.d.ts +0 -1
  177. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridTooltip.d.ts +0 -1
  178. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGroupAxis.d.ts +0 -1
  179. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLineAreas.d.ts +0 -1
  180. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLines.d.ts +0 -1
  181. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedBar.d.ts +0 -1
  182. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedValueAxis.d.ts +0 -1
  183. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiValueAxis.d.ts +0 -1
  184. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +0 -1
  185. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -1
  186. package/dist/orbcharts-plugins-basic/src/multiValue/defaults.d.ts +0 -9
  187. package/dist/orbcharts-plugins-basic/src/multiValue/multiValueObservables.d.ts +0 -33
  188. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueLegend.d.ts +0 -1
  189. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueTooltip.d.ts +0 -1
  190. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/Scatter.d.ts +0 -3
  191. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/ScatterBubbles.d.ts +0 -3
  192. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAux.d.ts +0 -3
  193. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts +0 -3
  194. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +0 -1
  195. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirected.d.ts +0 -3
  196. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirectedBubbles.d.ts +0 -3
  197. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipLegend.d.ts +0 -1
  198. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipTooltip.d.ts +0 -1
  199. package/dist/orbcharts-plugins-basic/src/series/plugins/Bubbles.d.ts +0 -3
  200. package/dist/orbcharts-plugins-basic/src/series/plugins/Pie.d.ts +0 -3
  201. package/dist/orbcharts-plugins-basic/src/series/plugins/PieEventTexts.d.ts +0 -3
  202. package/dist/orbcharts-plugins-basic/src/series/plugins/PieLabels.d.ts +0 -3
  203. package/dist/orbcharts-plugins-basic/src/series/plugins/RoseLabels.d.ts +0 -3
  204. package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesLegend.d.ts +0 -1
  205. package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesTooltip.d.ts +0 -1
  206. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeLegend.d.ts +0 -1
  207. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeMap.d.ts +0 -3
  208. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeTooltip.d.ts +0 -1
  209. /package/dist/{orbcharts-plugins-basic/lib → lib}/core-types.d.ts +0 -0
  210. /package/dist/{orbcharts-plugins-basic/lib → lib}/core.d.ts +0 -0
  211. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseGroupAxis.d.ts +0 -0
  212. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLegend.d.ts +0 -0
  213. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseTooltip.d.ts +0 -0
  214. /package/dist/{orbcharts-plugins-basic/src → src}/base/types.d.ts +0 -0
  215. /package/dist/{orbcharts-plugins-basic/src → src}/const.d.ts +0 -0
  216. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/multiGridObservables.d.ts +0 -0
  217. /package/dist/{orbcharts-plugins-basic/src/multiValue/plugins/Ranking.d.ts → src/multiValue/plugins/OrdinalBubbles.d.ts} +0 -0
  218. /package/dist/{orbcharts-plugins-basic/src/multiValue/plugins/RankingAxis.d.ts → src/multiValue/plugins/OrdinalXAxis.d.ts} +0 -0
  219. /package/dist/{orbcharts-plugins-basic/src/noneData/plugins/Container.d.ts → src/multiValue/plugins/RacingCounterAxis.d.ts} +0 -0
  220. /package/dist/{orbcharts-plugins-basic/src/noneData/plugins/Tooltip.d.ts → src/multiValue/plugins/RankingAxis_legacy.d.ts} +0 -0
  221. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/defaults.d.ts +0 -0
  222. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/index.d.ts +0 -0
  223. /package/dist/{orbcharts-plugins-basic/src/series/plugins/Waffle.d.ts → src/noneData/plugins/Container.d.ts} +0 -0
  224. /package/{src/multiValue/plugins/Ranking.ts → dist/src/noneData/plugins/Tooltip.d.ts} +0 -0
  225. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/defaults.d.ts +0 -0
  226. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/index.d.ts +0 -0
  227. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/relationshipObservables.d.ts +0 -0
  228. /package/dist/{orbcharts-plugins-basic/src → src}/series/defaults.d.ts +0 -0
  229. /package/dist/{orbcharts-plugins-basic/src → src}/series/index.d.ts +0 -0
  230. /package/{src/multiValue/plugins/RankingAxis.ts → dist/src/series/plugins/Waffle.d.ts} +0 -0
  231. /package/dist/{orbcharts-plugins-basic/src → src}/series/seriesObservables.d.ts +0 -0
  232. /package/dist/{orbcharts-plugins-basic/src → src}/series/seriesUtils.d.ts +0 -0
  233. /package/dist/{orbcharts-plugins-basic/src → src}/tree/defaults.d.ts +0 -0
  234. /package/dist/{orbcharts-plugins-basic/src → src}/tree/index.d.ts +0 -0
  235. /package/dist/{orbcharts-plugins-basic/src → src}/utils/observables.d.ts +0 -0
  236. /package/dist/{orbcharts-plugins-basic/src → src}/utils/orbchartsUtils.d.ts +0 -0
  237. /package/dist/{orbcharts-plugins-basic/vite.config.d.ts → vite.config.d.ts} +0 -0
@@ -0,0 +1,396 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Observable,
4
+ Subject,
5
+ combineLatest,
6
+ takeUntil,
7
+ map,
8
+ distinctUntilChanged,
9
+ of,
10
+ iif,
11
+ switchMap,
12
+ shareReplay
13
+ } from 'rxjs'
14
+ import type {
15
+ ChartParams,
16
+ ComputedDatumMultiValue,
17
+ ComputedDataMultiValue,
18
+ ComputedXYDatumMultiValue,
19
+ ContainerSize,
20
+ ContainerPositionScaled,
21
+ DataFormatterMultiValue,
22
+ Layout
23
+ } from '../../lib/core-types'
24
+ import type { BaseRacingLabelsParams } from '../../lib/plugins-basic-types'
25
+ import type { BasePluginFn } from './types'
26
+ import { getColor, getDatumColor, getClassName, getUniID } from '../utils/orbchartsUtils'
27
+ import { multiValueContainerSelectionsObservable } from '../multiValue/multiValueObservables'
28
+
29
+ interface BaseRacingAxisContext {
30
+ selection: d3.Selection<any, unknown, any, unknown>
31
+ computedData$: Observable<ComputedDataMultiValue>
32
+ visibleComputedRankingData$: Observable<ComputedDatumMultiValue[][]>
33
+ rankingScaleList$: Observable<Array<d3.ScalePoint<string>>>
34
+ xScale$: Observable<(n: number) => number>
35
+ fullParams$: Observable<BaseRacingLabelsParams>
36
+ fullDataFormatter$: Observable<DataFormatterMultiValue>
37
+ fullChartParams$: Observable<ChartParams>
38
+ // layout$: Observable<Layout>
39
+ containerPosition$: Observable<ContainerPositionScaled[]>
40
+ containerSize$: Observable<ContainerSize>
41
+ isCategorySeprate$: Observable<boolean>
42
+ // xyValueIndex$: Observable<[number, number]>
43
+ }
44
+
45
+ type ClipPathDatum = {
46
+ id: string;
47
+ // x: number;
48
+ // y: number;
49
+ width: number;
50
+ height: number;
51
+ }
52
+
53
+ // const pluginName = 'RacingAxis'
54
+
55
+ const yTickTextAnchor = 'end'
56
+ const yTickDominantBaseline = 'middle'
57
+ const yAxisLabelAnchor = 'end'
58
+ const yAxisLabelDominantBaseline = 'auto'
59
+ // const textClassName = getClassName(pluginName, 'yLabel')
60
+
61
+ function renderRacingAxisLabel ({ selection, textClassName, fullParams, containerSize, fullDataFormatter, fullChartParams, textReverseTransform }: {
62
+ selection: d3.Selection<SVGGElement, any, any, any>,
63
+ textClassName: string
64
+ fullParams: BaseRacingLabelsParams
65
+ // axisLabelAlign: TextAlign
66
+ containerSize: ContainerSize
67
+ fullDataFormatter: DataFormatterMultiValue,
68
+ fullChartParams: ChartParams
69
+ textReverseTransform: string,
70
+ }) {
71
+ const offsetX = fullParams.barLabel.padding - fullParams.axisLabel.offset[0]
72
+ const offsetY = - fullParams.barLabel.padding - fullParams.axisLabel.offset[1]
73
+ let labelX = - offsetX
74
+ let labelY = - offsetY
75
+
76
+ selection
77
+ .attr('transform', d => `translate(0, ${containerSize.height})`)
78
+ .selectAll<SVGTextElement, BaseRacingLabelsParams>(`text`)
79
+ .data([fullParams])
80
+ .join(
81
+ enter => {
82
+ return enter
83
+ .append('text')
84
+ .style('font-weight', 'bold')
85
+ },
86
+ update => update,
87
+ exit => exit.remove()
88
+ )
89
+ .attr('text-anchor', yAxisLabelAnchor)
90
+ .attr('dominant-baseline', yAxisLabelDominantBaseline)
91
+ .attr('font-size', fullChartParams.styles.textSize)
92
+ .style('fill', getColor(fullParams.axisLabel.colorType, fullChartParams))
93
+ // .style('transform', textReverseTransform)
94
+ // 偏移使用 x, y 而非 transform 才不會受到外層 scale 變形影響
95
+ .attr('x', labelX)
96
+ .attr('y', labelY)
97
+ .text(d => fullDataFormatter.yAxis.label)
98
+ }
99
+
100
+ function renderRacingLabels ({ selection, fullParams, fullChartParams, rankingScale, valueScale, categoryData }: {
101
+ selection: d3.Selection<SVGGElement, any, any, any>,
102
+ fullParams: BaseRacingLabelsParams
103
+ fullChartParams: ChartParams
104
+ rankingScale: d3.ScalePoint<string>
105
+ valueScale: ((n: number) => number)
106
+ categoryData: ComputedDatumMultiValue[]
107
+ // textReverseTransformWithRotate: string,
108
+ // xyValueIndex: [number, number]
109
+ }) {
110
+ const labelData = fullParams.barLabel.position === 'none' ? [] : categoryData
111
+
112
+ const labelSelection = selection
113
+ .selectAll<SVGGElement, string>(`text`)
114
+ .data(labelData, (d: ComputedDatumMultiValue) => d.id)
115
+ // .join('g')
116
+ // .classed(boxClassName, true)
117
+ .join(
118
+ enter => {
119
+ return enter
120
+ .append('text')
121
+ .style('font-weight', 'bold')
122
+ .attr('x', d => valueScale(d.value[d.xValueIndex] ?? 0) - fullParams.barLabel.padding)
123
+ .attr('y', d => rankingScale(d.label)!)
124
+ },
125
+ update => {
126
+ return update
127
+ .transition()
128
+ .duration(fullChartParams.transitionDuration)
129
+ .ease(d3.easeLinear)
130
+ // 偏移使用 x, y 而非 transform 才不會受到外層 scale 變形影響
131
+ .attr('x', d => valueScale(d.value[d.xValueIndex] ?? 0) - fullParams.barLabel.padding)
132
+ .attr('y', d => rankingScale(d.label)!)
133
+ },
134
+ exit => exit.remove()
135
+ )
136
+ .attr('text-anchor', yTickTextAnchor)
137
+ .attr('dominant-baseline', yTickDominantBaseline)
138
+ .attr('font-size', fullChartParams.styles.textSize)
139
+ .style('fill', d => getDatumColor({
140
+ colorType: fullParams.barLabel.colorType,
141
+ fullChartParams: fullChartParams,
142
+ datum: d
143
+ }))
144
+ // .style('transform', textReverseTransformWithRotate)
145
+ .text(d => d.label)
146
+
147
+ return labelSelection
148
+ }
149
+
150
+
151
+ function renderClipPath ({ defsSelection, clipPathData }: {
152
+ defsSelection: d3.Selection<SVGDefsElement, any, any, any>
153
+ clipPathData: ClipPathDatum[]
154
+ // textReverseTransform: string
155
+ }) {
156
+ const clipPath = defsSelection
157
+ .selectAll<SVGClipPathElement, Layout>('clipPath')
158
+ .data(clipPathData)
159
+ .join(
160
+ enter => {
161
+ return enter
162
+ .append('clipPath')
163
+ },
164
+ update => update,
165
+ exit => exit.remove()
166
+ )
167
+ .attr('id', d => d.id)
168
+ // .attr('transform', textReverseTransform)
169
+ .each((d, i, g) => {
170
+ const rect = d3.select(g[i])
171
+ .selectAll<SVGRectElement, typeof d>('rect')
172
+ .data([d])
173
+ .join(
174
+ enter => {
175
+ return enter
176
+ .append('rect')
177
+ },
178
+ update => update,
179
+ exit => exit.remove()
180
+ )
181
+ .attr('x', _d => - _d.width)
182
+ .attr('y', 0)
183
+ .attr('width', _d => _d.width * 2)
184
+ .attr('height', _d => _d.height)
185
+ })
186
+ }
187
+
188
+ export const createBaseRacingLabels: BasePluginFn<BaseRacingAxisContext> = (pluginName: string, {
189
+ selection,
190
+ computedData$,
191
+ visibleComputedRankingData$,
192
+ rankingScaleList$,
193
+ xScale$,
194
+ fullParams$,
195
+ fullDataFormatter$,
196
+ fullChartParams$,
197
+ // layout$,
198
+ containerPosition$,
199
+ containerSize$,
200
+ isCategorySeprate$,
201
+ // xyValueIndex$
202
+ }) => {
203
+
204
+ const destroy$ = new Subject()
205
+
206
+ // const containerClassName = getClassName(pluginName, 'container')
207
+ const boxClassName = getClassName(pluginName, 'box')
208
+ const textClassName = getClassName(pluginName, 'text')
209
+ const clipPathID = getUniID(pluginName, 'clipPath-box')
210
+
211
+ const containerSelection$ = multiValueContainerSelectionsObservable({
212
+ selection,
213
+ pluginName,
214
+ clipPathID: null,
215
+ computedData$,
216
+ containerPosition$,
217
+ isCategorySeprate$,
218
+ }).pipe(
219
+ takeUntil(destroy$),
220
+ )
221
+
222
+ // const containerSelection$ = combineLatest({
223
+ // computedData: computedData$.pipe(
224
+ // distinctUntilChanged((a, b) => {
225
+ // // 只有當series的數量改變時,才重新計算
226
+ // return a.length === b.length
227
+ // }),
228
+ // ),
229
+ // isCategorySeprate: isCategorySeprate$
230
+ // }).pipe(
231
+ // takeUntil(destroy$),
232
+ // switchMap(async (d) => d),
233
+ // map(data => {
234
+ // return data.isCategorySeprate
235
+ // // category分開的時候顯示各別axis
236
+ // ? data.computedData
237
+ // // category合併的時候只顯示第一個axis
238
+ // : [data.computedData[0]]
239
+ // }),
240
+ // map((computedData, i) => {
241
+ // return selection
242
+ // .selectAll<SVGGElement, ComputedDatumMultiValue[]>(`g.${containerClassName}`)
243
+ // .data(computedData, d => d[0] ? d[0].categoryIndex : i)
244
+ // .join('g')
245
+ // .classed(containerClassName, true)
246
+ // })
247
+ // )
248
+
249
+ // combineLatest({
250
+ // containerSelection: containerSelection$,
251
+ // containerPosition: containerPosition$
252
+ // }).pipe(
253
+ // takeUntil(destroy$),
254
+ // switchMap(async d => d)
255
+ // ).subscribe(data => {
256
+ // data.containerSelection
257
+ // .attr('transform', (d, i) => {
258
+ // const containerPosition = data.containerPosition[i] ?? data.containerPosition[0]
259
+ // const translate = containerPosition.translate
260
+ // const scale = containerPosition.scale
261
+ // // return `translate(${translate[0]}, ${translate[1]}) scale(${scale[0]}, ${scale[1]})`
262
+ // return `translate(${translate[0]}, ${translate[1]})`
263
+ // })
264
+ // // .attr('opacity', 0)
265
+ // // .transition()
266
+ // // .attr('opacity', 1)
267
+ // })
268
+
269
+ const textReverseTransform$ = containerPosition$.pipe(
270
+ takeUntil(destroy$),
271
+ switchMap(async (d) => d),
272
+ map(containerPosition => {
273
+ // const axesRotateXYReverseValue = `rotateX(${data.gridAxesReverseTransform.rotateX}deg) rotateY(${data.gridAxesReverseTransform.rotateY}deg)`
274
+ // const axesRotateReverseValue = `rotate(${data.gridAxesReverseTransform.rotate}deg)`
275
+ const containerScaleReverseValue = `scale(${1 / containerPosition[0].scale[0]}, ${1 / containerPosition[0].scale[1]})`
276
+ // 抵消最外層scale
277
+ return `${containerScaleReverseValue}`
278
+ }),
279
+ distinctUntilChanged()
280
+ )
281
+
282
+ // const textReverseTransformWithRotate$ = combineLatest({
283
+ // textReverseTransform: textReverseTransform$,
284
+ // fullParams: fullParams$,
285
+ // }).pipe(
286
+ // takeUntil(destroy$),
287
+ // switchMap(async (d) => d),
288
+ // map(data => {
289
+ // // 必須按照順序(先抵消外層rotate,再抵消最外層scale,最後再做本身的rotate)
290
+ // return `${data.textReverseTransform} rotate(${data.fullParams.barLabel.rotate}deg)`
291
+ // })
292
+ // )
293
+
294
+ // const rankingLabelList$ = visibleComputedRankingData$.pipe(
295
+ // takeUntil(destroy$),
296
+ // map(data => {
297
+ // return data.map(categoryData => categoryData.map(d => d.label))
298
+ // })
299
+ // )
300
+
301
+ const valueScale$: Observable<((n: number) => number)> = fullParams$.pipe(
302
+ map(fullParams => fullParams.barLabel.position),
303
+ distinctUntilChanged(),
304
+ switchMap(position => {
305
+ return iif(
306
+ () => position === 'inside',
307
+ xScale$,
308
+ of(() => 0)
309
+ )
310
+ })
311
+ )
312
+
313
+ containerSize$.subscribe(data => {
314
+ const defsSelection = selection.selectAll<SVGDefsElement, any>('defs')
315
+ .data([clipPathID])
316
+ .join('defs')
317
+ const clipPathData = [{
318
+ id: clipPathID,
319
+ width: data.width,
320
+ height: data.height
321
+ }]
322
+ renderClipPath({
323
+ defsSelection: defsSelection,
324
+ clipPathData,
325
+ // textReverseTransform: data.textReverseTransform
326
+ })
327
+ })
328
+
329
+ combineLatest({
330
+ containerSelection: containerSelection$,
331
+ fullParams: fullParams$,
332
+ // layout: layout$,
333
+ containerSize: containerSize$,
334
+ fullDataFormatter: fullDataFormatter$,
335
+ fullChartParams: fullChartParams$,
336
+ visibleComputedRankingData: visibleComputedRankingData$,
337
+ // rankingLabelList: rankingLabelList$,
338
+ rankingScaleList: rankingScaleList$,
339
+ valueScale: valueScale$,
340
+ textReverseTransform: textReverseTransform$,
341
+ // textReverseTransformWithRotate: textReverseTransformWithRotate$,
342
+ // xyValueIndex: xyValueIndex$
343
+ }).pipe(
344
+ takeUntil(destroy$),
345
+ switchMap(async (d) => d),
346
+ ).subscribe(data => {
347
+
348
+ data.containerSelection.each((d, i, g) => {
349
+ const _containerSelection = d3.select(g[i])
350
+ // const rankingLabels = data.rankingLabelList[i]
351
+ const rankingScale = data.rankingScaleList[i]
352
+ if (!rankingScale) {
353
+ return
354
+ }
355
+
356
+ // const containerClipPathID = `${clipPathID}-${i}`
357
+ const axisSelection = _containerSelection
358
+ .selectAll<SVGGElement, any>(`g.${boxClassName}`)
359
+ .data([i])
360
+ .join('g')
361
+ .attr('class', boxClassName)
362
+ .attr('clip-path', `url(#${clipPathID})`)
363
+ const axisLabelSelection = _containerSelection
364
+ .selectAll<SVGGElement, BaseRacingLabelsParams>(`g.${textClassName}`)
365
+ .data([data.fullParams])
366
+ .join('g')
367
+ .classed(textClassName, true)
368
+
369
+ renderRacingLabels({
370
+ selection: axisSelection,
371
+ fullParams: data.fullParams,
372
+ fullChartParams: data.fullChartParams,
373
+ rankingScale: rankingScale,
374
+ categoryData: data.visibleComputedRankingData[i],
375
+ // textReverseTransformWithRotate: data.textReverseTransformWithRotate,
376
+ valueScale: data.valueScale,
377
+ // xyValueIndex: data.xyValueIndex,
378
+ })
379
+
380
+ renderRacingAxisLabel({
381
+ selection: axisLabelSelection,
382
+ textClassName,
383
+ fullParams: data.fullParams,
384
+ containerSize: data.containerSize,
385
+ fullDataFormatter: data.fullDataFormatter,
386
+ fullChartParams: data.fullChartParams,
387
+ textReverseTransform: data.textReverseTransform,
388
+ })
389
+ })
390
+
391
+ })
392
+
393
+ return () => {
394
+ destroy$.next(undefined)
395
+ }
396
+ }