@luzmo/dashboard-contents-types 1.0.40 → 1.0.42

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 (428) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/area-chart/area-chart-options.config.cjs +1 -1
  3. package/area-chart/area-chart-options.config.cjs.map +1 -1
  4. package/area-chart/area-chart-options.config.js +34 -67
  5. package/area-chart/area-chart-options.config.js.map +1 -1
  6. package/area-chart/i18n/area-chart-options.de.cjs +1 -1
  7. package/area-chart/i18n/area-chart-options.de.cjs.map +1 -1
  8. package/area-chart/i18n/area-chart-options.de.js +2 -0
  9. package/area-chart/i18n/area-chart-options.de.js.map +1 -1
  10. package/area-chart/i18n/area-chart-options.en.cjs +1 -1
  11. package/area-chart/i18n/area-chart-options.en.cjs.map +1 -1
  12. package/area-chart/i18n/area-chart-options.en.js +2 -0
  13. package/area-chart/i18n/area-chart-options.en.js.map +1 -1
  14. package/area-chart/i18n/area-chart-options.es.cjs +1 -1
  15. package/area-chart/i18n/area-chart-options.es.cjs.map +1 -1
  16. package/area-chart/i18n/area-chart-options.es.js +2 -0
  17. package/area-chart/i18n/area-chart-options.es.js.map +1 -1
  18. package/area-chart/i18n/area-chart-options.fr.cjs +1 -1
  19. package/area-chart/i18n/area-chart-options.fr.cjs.map +1 -1
  20. package/area-chart/i18n/area-chart-options.fr.js +2 -0
  21. package/area-chart/i18n/area-chart-options.fr.js.map +1 -1
  22. package/area-chart/i18n/area-chart-options.nl.cjs +1 -1
  23. package/area-chart/i18n/area-chart-options.nl.cjs.map +1 -1
  24. package/area-chart/i18n/area-chart-options.nl.js +2 -0
  25. package/area-chart/i18n/area-chart-options.nl.js.map +1 -1
  26. package/bar-chart/bar-chart-options.config.cjs +1 -1
  27. package/bar-chart/bar-chart-options.config.cjs.map +1 -1
  28. package/bar-chart/bar-chart-options.config.js +34 -75
  29. package/bar-chart/bar-chart-options.config.js.map +1 -1
  30. package/bar-chart/i18n/bar-chart-options.de.cjs +1 -1
  31. package/bar-chart/i18n/bar-chart-options.de.cjs.map +1 -1
  32. package/bar-chart/i18n/bar-chart-options.de.js +6 -6
  33. package/bar-chart/i18n/bar-chart-options.de.js.map +1 -1
  34. package/bar-chart/i18n/bar-chart-options.en.cjs +1 -1
  35. package/bar-chart/i18n/bar-chart-options.en.cjs.map +1 -1
  36. package/bar-chart/i18n/bar-chart-options.en.js +6 -6
  37. package/bar-chart/i18n/bar-chart-options.en.js.map +1 -1
  38. package/bar-chart/i18n/bar-chart-options.es.cjs +1 -1
  39. package/bar-chart/i18n/bar-chart-options.es.cjs.map +1 -1
  40. package/bar-chart/i18n/bar-chart-options.es.js +6 -6
  41. package/bar-chart/i18n/bar-chart-options.es.js.map +1 -1
  42. package/bar-chart/i18n/bar-chart-options.fr.cjs +1 -1
  43. package/bar-chart/i18n/bar-chart-options.fr.cjs.map +1 -1
  44. package/bar-chart/i18n/bar-chart-options.fr.js +6 -6
  45. package/bar-chart/i18n/bar-chart-options.fr.js.map +1 -1
  46. package/bar-chart/i18n/bar-chart-options.nl.cjs +1 -1
  47. package/bar-chart/i18n/bar-chart-options.nl.cjs.map +1 -1
  48. package/bar-chart/i18n/bar-chart-options.nl.js +6 -6
  49. package/bar-chart/i18n/bar-chart-options.nl.js.map +1 -1
  50. package/box-plot/box-plot-options.config.cjs +1 -1
  51. package/box-plot/box-plot-options.config.cjs.map +1 -1
  52. package/box-plot/box-plot-options.config.js +51 -78
  53. package/box-plot/box-plot-options.config.js.map +1 -1
  54. package/bubble-chart/bubble-chart-options.config.cjs +1 -1
  55. package/bubble-chart/bubble-chart-options.config.cjs.map +1 -1
  56. package/bubble-chart/bubble-chart-options.config.js +112 -107
  57. package/bubble-chart/bubble-chart-options.config.js.map +1 -1
  58. package/bullet-chart/bullet-chart-options.config.cjs +1 -1
  59. package/bullet-chart/bullet-chart-options.config.cjs.map +1 -1
  60. package/bullet-chart/bullet-chart-options.config.js +4 -3
  61. package/bullet-chart/bullet-chart-options.config.js.map +1 -1
  62. package/choropleth-map/choropleth-map-options.config.cjs +1 -1
  63. package/choropleth-map/choropleth-map-options.config.cjs.map +1 -1
  64. package/choropleth-map/choropleth-map-options.config.js +39 -37
  65. package/choropleth-map/choropleth-map-options.config.js.map +1 -1
  66. package/circle-pack-chart/circle-pack-chart-options.config.cjs +1 -1
  67. package/circle-pack-chart/circle-pack-chart-options.config.cjs.map +1 -1
  68. package/circle-pack-chart/circle-pack-chart-options.config.js +4 -3
  69. package/circle-pack-chart/circle-pack-chart-options.config.js.map +1 -1
  70. package/circular-gauge/circular-gauge-options.config.cjs +1 -1
  71. package/circular-gauge/circular-gauge-options.config.cjs.map +1 -1
  72. package/circular-gauge/circular-gauge-options.config.js +148 -143
  73. package/circular-gauge/circular-gauge-options.config.js.map +1 -1
  74. package/column-chart/column-chart-options.config.cjs +1 -1
  75. package/column-chart/column-chart-options.config.cjs.map +1 -1
  76. package/column-chart/column-chart-options.config.js +34 -75
  77. package/column-chart/column-chart-options.config.js.map +1 -1
  78. package/column-chart/i18n/column-chart-options.de.cjs +1 -1
  79. package/column-chart/i18n/column-chart-options.de.cjs.map +1 -1
  80. package/column-chart/i18n/column-chart-options.de.js +6 -6
  81. package/column-chart/i18n/column-chart-options.de.js.map +1 -1
  82. package/column-chart/i18n/column-chart-options.en.cjs +1 -1
  83. package/column-chart/i18n/column-chart-options.en.cjs.map +1 -1
  84. package/column-chart/i18n/column-chart-options.en.js +6 -6
  85. package/column-chart/i18n/column-chart-options.en.js.map +1 -1
  86. package/column-chart/i18n/column-chart-options.es.cjs +1 -1
  87. package/column-chart/i18n/column-chart-options.es.cjs.map +1 -1
  88. package/column-chart/i18n/column-chart-options.es.js +6 -6
  89. package/column-chart/i18n/column-chart-options.es.js.map +1 -1
  90. package/column-chart/i18n/column-chart-options.fr.cjs +1 -1
  91. package/column-chart/i18n/column-chart-options.fr.cjs.map +1 -1
  92. package/column-chart/i18n/column-chart-options.fr.js +6 -6
  93. package/column-chart/i18n/column-chart-options.fr.js.map +1 -1
  94. package/column-chart/i18n/column-chart-options.nl.cjs +1 -1
  95. package/column-chart/i18n/column-chart-options.nl.cjs.map +1 -1
  96. package/column-chart/i18n/column-chart-options.nl.js +6 -6
  97. package/column-chart/i18n/column-chart-options.nl.js.map +1 -1
  98. package/combination-chart/combination-chart-options.config.cjs +1 -1
  99. package/combination-chart/combination-chart-options.config.cjs.map +1 -1
  100. package/combination-chart/combination-chart-options.config.js +46 -62
  101. package/combination-chart/combination-chart-options.config.js.map +1 -1
  102. package/combination-chart/i18n/combination-chart-options.de.cjs +1 -1
  103. package/combination-chart/i18n/combination-chart-options.de.cjs.map +1 -1
  104. package/combination-chart/i18n/combination-chart-options.de.js +2 -0
  105. package/combination-chart/i18n/combination-chart-options.de.js.map +1 -1
  106. package/combination-chart/i18n/combination-chart-options.en.cjs +1 -1
  107. package/combination-chart/i18n/combination-chart-options.en.cjs.map +1 -1
  108. package/combination-chart/i18n/combination-chart-options.en.js +2 -0
  109. package/combination-chart/i18n/combination-chart-options.en.js.map +1 -1
  110. package/combination-chart/i18n/combination-chart-options.es.cjs +1 -1
  111. package/combination-chart/i18n/combination-chart-options.es.cjs.map +1 -1
  112. package/combination-chart/i18n/combination-chart-options.es.js +2 -0
  113. package/combination-chart/i18n/combination-chart-options.es.js.map +1 -1
  114. package/combination-chart/i18n/combination-chart-options.fr.cjs +1 -1
  115. package/combination-chart/i18n/combination-chart-options.fr.cjs.map +1 -1
  116. package/combination-chart/i18n/combination-chart-options.fr.js +2 -0
  117. package/combination-chart/i18n/combination-chart-options.fr.js.map +1 -1
  118. package/combination-chart/i18n/combination-chart-options.nl.cjs +1 -1
  119. package/combination-chart/i18n/combination-chart-options.nl.cjs.map +1 -1
  120. package/combination-chart/i18n/combination-chart-options.nl.js +2 -0
  121. package/combination-chart/i18n/combination-chart-options.nl.js.map +1 -1
  122. package/conditional-number/conditional-number-options.config.cjs +1 -1
  123. package/conditional-number/conditional-number-options.config.cjs.map +1 -1
  124. package/conditional-number/conditional-number-options.config.js +156 -151
  125. package/conditional-number/conditional-number-options.config.js.map +1 -1
  126. package/donut-chart/donut-chart-options.config.cjs +1 -1
  127. package/donut-chart/donut-chart-options.config.cjs.map +1 -1
  128. package/donut-chart/donut-chart-options.config.js +184 -179
  129. package/donut-chart/donut-chart-options.config.js.map +1 -1
  130. package/evolution-number/evolution-number-options.config.cjs +1 -1
  131. package/evolution-number/evolution-number-options.config.cjs.map +1 -1
  132. package/evolution-number/evolution-number-options.config.js +5 -3
  133. package/evolution-number/evolution-number-options.config.js.map +1 -1
  134. package/funnel-chart/funnel-chart-options.config.cjs +1 -1
  135. package/funnel-chart/funnel-chart-options.config.cjs.map +1 -1
  136. package/funnel-chart/funnel-chart-options.config.js +5 -3
  137. package/funnel-chart/funnel-chart-options.config.js.map +1 -1
  138. package/heat-map/heat-map-options.config.cjs +1 -1
  139. package/heat-map/heat-map-options.config.cjs.map +1 -1
  140. package/heat-map/heat-map-options.config.js +32 -30
  141. package/heat-map/heat-map-options.config.js.map +1 -1
  142. package/heat-table/heat-table-options.config.cjs +1 -1
  143. package/heat-table/heat-table-options.config.cjs.map +1 -1
  144. package/heat-table/heat-table-options.config.js +50 -155
  145. package/heat-table/heat-table-options.config.js.map +1 -1
  146. package/hexbin-map/hexbin-map-options.config.cjs +1 -1
  147. package/hexbin-map/hexbin-map-options.config.cjs.map +1 -1
  148. package/hexbin-map/hexbin-map-options.config.js +20 -18
  149. package/hexbin-map/hexbin-map-options.config.js.map +1 -1
  150. package/index.cjs +1 -1
  151. package/index.js +194 -191
  152. package/line-chart/i18n/line-chart-options.de.cjs +1 -1
  153. package/line-chart/i18n/line-chart-options.de.cjs.map +1 -1
  154. package/line-chart/i18n/line-chart-options.de.js +2 -0
  155. package/line-chart/i18n/line-chart-options.de.js.map +1 -1
  156. package/line-chart/i18n/line-chart-options.en.cjs +1 -1
  157. package/line-chart/i18n/line-chart-options.en.cjs.map +1 -1
  158. package/line-chart/i18n/line-chart-options.en.js +2 -0
  159. package/line-chart/i18n/line-chart-options.en.js.map +1 -1
  160. package/line-chart/i18n/line-chart-options.es.cjs +1 -1
  161. package/line-chart/i18n/line-chart-options.es.cjs.map +1 -1
  162. package/line-chart/i18n/line-chart-options.es.js +2 -0
  163. package/line-chart/i18n/line-chart-options.es.js.map +1 -1
  164. package/line-chart/i18n/line-chart-options.fr.cjs +1 -1
  165. package/line-chart/i18n/line-chart-options.fr.cjs.map +1 -1
  166. package/line-chart/i18n/line-chart-options.fr.js +2 -0
  167. package/line-chart/i18n/line-chart-options.fr.js.map +1 -1
  168. package/line-chart/i18n/line-chart-options.nl.cjs +1 -1
  169. package/line-chart/i18n/line-chart-options.nl.cjs.map +1 -1
  170. package/line-chart/i18n/line-chart-options.nl.js +2 -0
  171. package/line-chart/i18n/line-chart-options.nl.js.map +1 -1
  172. package/line-chart/line-chart-options.config.cjs +1 -1
  173. package/line-chart/line-chart-options.config.cjs.map +1 -1
  174. package/line-chart/line-chart-options.config.js +49 -65
  175. package/line-chart/line-chart-options.config.js.map +1 -1
  176. package/marker-map/marker-map-options.config.cjs +1 -1
  177. package/marker-map/marker-map-options.config.cjs.map +1 -1
  178. package/marker-map/marker-map-options.config.js +97 -92
  179. package/marker-map/marker-map-options.config.js.map +1 -1
  180. package/ohlc-chart/i18n/ohlc-chart-options.de.cjs +1 -1
  181. package/ohlc-chart/i18n/ohlc-chart-options.de.cjs.map +1 -1
  182. package/ohlc-chart/i18n/ohlc-chart-options.de.js +2 -0
  183. package/ohlc-chart/i18n/ohlc-chart-options.de.js.map +1 -1
  184. package/ohlc-chart/i18n/ohlc-chart-options.en.cjs +1 -1
  185. package/ohlc-chart/i18n/ohlc-chart-options.en.cjs.map +1 -1
  186. package/ohlc-chart/i18n/ohlc-chart-options.en.js +2 -0
  187. package/ohlc-chart/i18n/ohlc-chart-options.en.js.map +1 -1
  188. package/ohlc-chart/i18n/ohlc-chart-options.es.cjs +1 -1
  189. package/ohlc-chart/i18n/ohlc-chart-options.es.cjs.map +1 -1
  190. package/ohlc-chart/i18n/ohlc-chart-options.es.js +2 -0
  191. package/ohlc-chart/i18n/ohlc-chart-options.es.js.map +1 -1
  192. package/ohlc-chart/i18n/ohlc-chart-options.fr.cjs +1 -1
  193. package/ohlc-chart/i18n/ohlc-chart-options.fr.cjs.map +1 -1
  194. package/ohlc-chart/i18n/ohlc-chart-options.fr.js +2 -0
  195. package/ohlc-chart/i18n/ohlc-chart-options.fr.js.map +1 -1
  196. package/ohlc-chart/i18n/ohlc-chart-options.nl.cjs +1 -1
  197. package/ohlc-chart/i18n/ohlc-chart-options.nl.cjs.map +1 -1
  198. package/ohlc-chart/i18n/ohlc-chart-options.nl.js +2 -0
  199. package/ohlc-chart/i18n/ohlc-chart-options.nl.js.map +1 -1
  200. package/ohlc-chart/ohlc-chart-options.config.cjs +1 -1
  201. package/ohlc-chart/ohlc-chart-options.config.cjs.map +1 -1
  202. package/ohlc-chart/ohlc-chart-options.config.js +63 -98
  203. package/ohlc-chart/ohlc-chart-options.config.js.map +1 -1
  204. package/package.json +1 -1
  205. package/parallel-coordinates-plot/parallel-coordinates-plot-options.config.cjs +1 -1
  206. package/parallel-coordinates-plot/parallel-coordinates-plot-options.config.cjs.map +1 -1
  207. package/parallel-coordinates-plot/parallel-coordinates-plot-options.config.js +4 -3
  208. package/parallel-coordinates-plot/parallel-coordinates-plot-options.config.js.map +1 -1
  209. package/pivot-table/pivot-table-options.config.cjs +1 -1
  210. package/pivot-table/pivot-table-options.config.cjs.map +1 -1
  211. package/pivot-table/pivot-table-options.config.js +5 -3
  212. package/pivot-table/pivot-table-options.config.js.map +1 -1
  213. package/pyramid-chart/pyramid-chart-options.config.cjs +1 -1
  214. package/pyramid-chart/pyramid-chart-options.config.cjs.map +1 -1
  215. package/pyramid-chart/pyramid-chart-options.config.js +19 -61
  216. package/pyramid-chart/pyramid-chart-options.config.js.map +1 -1
  217. package/radar-chart/radar-chart-options.config.cjs +1 -1
  218. package/radar-chart/radar-chart-options.config.cjs.map +1 -1
  219. package/radar-chart/radar-chart-options.config.js +7 -5
  220. package/radar-chart/radar-chart-options.config.js.map +1 -1
  221. package/regular-table/regular-table-options.config.cjs +1 -1
  222. package/regular-table/regular-table-options.config.cjs.map +1 -1
  223. package/regular-table/regular-table-options.config.js +126 -121
  224. package/regular-table/regular-table-options.config.js.map +1 -1
  225. package/route-map/route-map-options.config.cjs +1 -1
  226. package/route-map/route-map-options.config.cjs.map +1 -1
  227. package/route-map/route-map-options.config.js +38 -36
  228. package/route-map/route-map-options.config.js.map +1 -1
  229. package/sankey-diagram/sankey-diagram-options.config.cjs +1 -1
  230. package/sankey-diagram/sankey-diagram-options.config.cjs.map +1 -1
  231. package/sankey-diagram/sankey-diagram-options.config.js +5 -3
  232. package/sankey-diagram/sankey-diagram-options.config.js.map +1 -1
  233. package/scatter-plot/i18n/scatter-plot-options.de.cjs +1 -1
  234. package/scatter-plot/i18n/scatter-plot-options.de.cjs.map +1 -1
  235. package/scatter-plot/i18n/scatter-plot-options.de.js +3 -0
  236. package/scatter-plot/i18n/scatter-plot-options.de.js.map +1 -1
  237. package/scatter-plot/i18n/scatter-plot-options.en.cjs +1 -1
  238. package/scatter-plot/i18n/scatter-plot-options.en.cjs.map +1 -1
  239. package/scatter-plot/i18n/scatter-plot-options.en.js +3 -0
  240. package/scatter-plot/i18n/scatter-plot-options.en.js.map +1 -1
  241. package/scatter-plot/i18n/scatter-plot-options.es.cjs +1 -1
  242. package/scatter-plot/i18n/scatter-plot-options.es.cjs.map +1 -1
  243. package/scatter-plot/i18n/scatter-plot-options.es.js +3 -0
  244. package/scatter-plot/i18n/scatter-plot-options.es.js.map +1 -1
  245. package/scatter-plot/i18n/scatter-plot-options.fr.cjs +1 -1
  246. package/scatter-plot/i18n/scatter-plot-options.fr.cjs.map +1 -1
  247. package/scatter-plot/i18n/scatter-plot-options.fr.js +3 -0
  248. package/scatter-plot/i18n/scatter-plot-options.fr.js.map +1 -1
  249. package/scatter-plot/i18n/scatter-plot-options.nl.cjs +1 -1
  250. package/scatter-plot/i18n/scatter-plot-options.nl.cjs.map +1 -1
  251. package/scatter-plot/i18n/scatter-plot-options.nl.js +3 -0
  252. package/scatter-plot/i18n/scatter-plot-options.nl.js.map +1 -1
  253. package/scatter-plot/scatter-plot-options.config.cjs +1 -1
  254. package/scatter-plot/scatter-plot-options.config.cjs.map +1 -1
  255. package/scatter-plot/scatter-plot-options.config.js +32 -226
  256. package/scatter-plot/scatter-plot-options.config.js.map +1 -1
  257. package/shared/utils/axis-options.config.cjs +2 -0
  258. package/shared/utils/axis-options.config.cjs.map +1 -0
  259. package/shared/utils/axis-options.config.js +253 -0
  260. package/shared/utils/axis-options.config.js.map +1 -0
  261. package/shared/utils/axis-options.i18n.cjs +2 -0
  262. package/shared/utils/axis-options.i18n.cjs.map +1 -0
  263. package/shared/utils/axis-options.i18n.js +469 -0
  264. package/shared/utils/axis-options.i18n.js.map +1 -0
  265. package/shared/utils/guidelines-options.config.cjs +2 -0
  266. package/shared/utils/guidelines-options.config.cjs.map +1 -0
  267. package/shared/utils/guidelines-options.config.js +31 -0
  268. package/shared/utils/guidelines-options.config.js.map +1 -0
  269. package/shared/utils/info-tooltip-options.config.cjs +2 -0
  270. package/shared/utils/info-tooltip-options.config.cjs.map +1 -0
  271. package/shared/utils/info-tooltip-options.config.js +42 -0
  272. package/shared/utils/info-tooltip-options.config.js.map +1 -0
  273. package/shared/utils/info-tooltip-options.i18n.cjs +2 -0
  274. package/shared/utils/info-tooltip-options.i18n.cjs.map +1 -0
  275. package/shared/utils/info-tooltip-options.i18n.js +57 -0
  276. package/shared/utils/info-tooltip-options.i18n.js.map +1 -0
  277. package/shared/utils/options-loader.cjs +1 -1
  278. package/shared/utils/options-loader.cjs.map +1 -1
  279. package/shared/utils/options-loader.js +17 -1
  280. package/shared/utils/options-loader.js.map +1 -1
  281. package/speedometer-chart/speedometer-chart-options.config.cjs +1 -1
  282. package/speedometer-chart/speedometer-chart-options.config.cjs.map +1 -1
  283. package/speedometer-chart/speedometer-chart-options.config.js +201 -196
  284. package/speedometer-chart/speedometer-chart-options.config.js.map +1 -1
  285. package/spike-map/spike-map-options.config.cjs +1 -1
  286. package/spike-map/spike-map-options.config.cjs.map +1 -1
  287. package/spike-map/spike-map-options.config.js +41 -39
  288. package/spike-map/spike-map-options.config.js.map +1 -1
  289. package/src/lib/area-chart/area-chart-options.config.d.ts.map +1 -1
  290. package/src/lib/area-chart/i18n/area-chart-options.de.d.ts +6 -0
  291. package/src/lib/area-chart/i18n/area-chart-options.de.d.ts.map +1 -1
  292. package/src/lib/area-chart/i18n/area-chart-options.en.d.ts +6 -0
  293. package/src/lib/area-chart/i18n/area-chart-options.en.d.ts.map +1 -1
  294. package/src/lib/area-chart/i18n/area-chart-options.es.d.ts +6 -0
  295. package/src/lib/area-chart/i18n/area-chart-options.es.d.ts.map +1 -1
  296. package/src/lib/area-chart/i18n/area-chart-options.fr.d.ts +6 -0
  297. package/src/lib/area-chart/i18n/area-chart-options.fr.d.ts.map +1 -1
  298. package/src/lib/area-chart/i18n/area-chart-options.nl.d.ts +6 -0
  299. package/src/lib/area-chart/i18n/area-chart-options.nl.d.ts.map +1 -1
  300. package/src/lib/bar-chart/bar-chart-options.config.d.ts.map +1 -1
  301. package/src/lib/bar-chart/i18n/bar-chart-options.de.d.ts +3 -1
  302. package/src/lib/bar-chart/i18n/bar-chart-options.de.d.ts.map +1 -1
  303. package/src/lib/bar-chart/i18n/bar-chart-options.en.d.ts +3 -1
  304. package/src/lib/bar-chart/i18n/bar-chart-options.en.d.ts.map +1 -1
  305. package/src/lib/bar-chart/i18n/bar-chart-options.es.d.ts +3 -1
  306. package/src/lib/bar-chart/i18n/bar-chart-options.es.d.ts.map +1 -1
  307. package/src/lib/bar-chart/i18n/bar-chart-options.fr.d.ts +3 -1
  308. package/src/lib/bar-chart/i18n/bar-chart-options.fr.d.ts.map +1 -1
  309. package/src/lib/bar-chart/i18n/bar-chart-options.nl.d.ts +3 -1
  310. package/src/lib/bar-chart/i18n/bar-chart-options.nl.d.ts.map +1 -1
  311. package/src/lib/box-plot/box-plot-options.config.d.ts.map +1 -1
  312. package/src/lib/bubble-chart/bubble-chart-options.config.d.ts.map +1 -1
  313. package/src/lib/bullet-chart/bullet-chart-options.config.d.ts.map +1 -1
  314. package/src/lib/choropleth-map/choropleth-map-options.config.d.ts.map +1 -1
  315. package/src/lib/circle-pack-chart/circle-pack-chart-options.config.d.ts.map +1 -1
  316. package/src/lib/circular-gauge/circular-gauge-options.config.d.ts.map +1 -1
  317. package/src/lib/column-chart/column-chart-options.config.d.ts.map +1 -1
  318. package/src/lib/column-chart/i18n/column-chart-options.de.d.ts +3 -1
  319. package/src/lib/column-chart/i18n/column-chart-options.de.d.ts.map +1 -1
  320. package/src/lib/column-chart/i18n/column-chart-options.en.d.ts +3 -1
  321. package/src/lib/column-chart/i18n/column-chart-options.en.d.ts.map +1 -1
  322. package/src/lib/column-chart/i18n/column-chart-options.es.d.ts +3 -1
  323. package/src/lib/column-chart/i18n/column-chart-options.es.d.ts.map +1 -1
  324. package/src/lib/column-chart/i18n/column-chart-options.fr.d.ts +3 -1
  325. package/src/lib/column-chart/i18n/column-chart-options.fr.d.ts.map +1 -1
  326. package/src/lib/column-chart/i18n/column-chart-options.nl.d.ts +3 -1
  327. package/src/lib/column-chart/i18n/column-chart-options.nl.d.ts.map +1 -1
  328. package/src/lib/combination-chart/combination-chart-options.config.d.ts.map +1 -1
  329. package/src/lib/combination-chart/i18n/combination-chart-options.de.d.ts +6 -0
  330. package/src/lib/combination-chart/i18n/combination-chart-options.de.d.ts.map +1 -1
  331. package/src/lib/combination-chart/i18n/combination-chart-options.en.d.ts +6 -0
  332. package/src/lib/combination-chart/i18n/combination-chart-options.en.d.ts.map +1 -1
  333. package/src/lib/combination-chart/i18n/combination-chart-options.es.d.ts +6 -0
  334. package/src/lib/combination-chart/i18n/combination-chart-options.es.d.ts.map +1 -1
  335. package/src/lib/combination-chart/i18n/combination-chart-options.fr.d.ts +6 -0
  336. package/src/lib/combination-chart/i18n/combination-chart-options.fr.d.ts.map +1 -1
  337. package/src/lib/combination-chart/i18n/combination-chart-options.nl.d.ts +6 -0
  338. package/src/lib/combination-chart/i18n/combination-chart-options.nl.d.ts.map +1 -1
  339. package/src/lib/conditional-number/conditional-number-options.config.d.ts.map +1 -1
  340. package/src/lib/donut-chart/donut-chart-options.config.d.ts.map +1 -1
  341. package/src/lib/evolution-number/evolution-number-options.config.d.ts.map +1 -1
  342. package/src/lib/funnel-chart/funnel-chart-options.config.d.ts.map +1 -1
  343. package/src/lib/heat-map/heat-map-options.config.d.ts.map +1 -1
  344. package/src/lib/heat-table/heat-table-options.config.d.ts.map +1 -1
  345. package/src/lib/hexbin-map/hexbin-map-options.config.d.ts.map +1 -1
  346. package/src/lib/line-chart/i18n/line-chart-options.de.d.ts +6 -0
  347. package/src/lib/line-chart/i18n/line-chart-options.de.d.ts.map +1 -1
  348. package/src/lib/line-chart/i18n/line-chart-options.en.d.ts +6 -0
  349. package/src/lib/line-chart/i18n/line-chart-options.en.d.ts.map +1 -1
  350. package/src/lib/line-chart/i18n/line-chart-options.es.d.ts +6 -0
  351. package/src/lib/line-chart/i18n/line-chart-options.es.d.ts.map +1 -1
  352. package/src/lib/line-chart/i18n/line-chart-options.fr.d.ts +6 -0
  353. package/src/lib/line-chart/i18n/line-chart-options.fr.d.ts.map +1 -1
  354. package/src/lib/line-chart/i18n/line-chart-options.nl.d.ts +6 -0
  355. package/src/lib/line-chart/i18n/line-chart-options.nl.d.ts.map +1 -1
  356. package/src/lib/line-chart/line-chart-options.config.d.ts.map +1 -1
  357. package/src/lib/marker-map/marker-map-options.config.d.ts.map +1 -1
  358. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.de.d.ts +6 -0
  359. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.de.d.ts.map +1 -1
  360. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.en.d.ts +6 -0
  361. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.en.d.ts.map +1 -1
  362. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.es.d.ts +6 -0
  363. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.es.d.ts.map +1 -1
  364. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.fr.d.ts +6 -0
  365. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.fr.d.ts.map +1 -1
  366. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.nl.d.ts +6 -0
  367. package/src/lib/ohlc-chart/i18n/ohlc-chart-options.nl.d.ts.map +1 -1
  368. package/src/lib/ohlc-chart/ohlc-chart-options.config.d.ts.map +1 -1
  369. package/src/lib/parallel-coordinates-plot/parallel-coordinates-plot-options.config.d.ts.map +1 -1
  370. package/src/lib/pivot-table/pivot-table-options.config.d.ts.map +1 -1
  371. package/src/lib/pyramid-chart/pyramid-chart-options.config.d.ts.map +1 -1
  372. package/src/lib/radar-chart/radar-chart-options.config.d.ts.map +1 -1
  373. package/src/lib/regular-table/regular-table-options.config.d.ts.map +1 -1
  374. package/src/lib/route-map/route-map-options.config.d.ts.map +1 -1
  375. package/src/lib/sankey-diagram/sankey-diagram-options.config.d.ts.map +1 -1
  376. package/src/lib/scatter-plot/i18n/scatter-plot-options.de.d.ts +9 -0
  377. package/src/lib/scatter-plot/i18n/scatter-plot-options.de.d.ts.map +1 -1
  378. package/src/lib/scatter-plot/i18n/scatter-plot-options.en.d.ts +9 -0
  379. package/src/lib/scatter-plot/i18n/scatter-plot-options.en.d.ts.map +1 -1
  380. package/src/lib/scatter-plot/i18n/scatter-plot-options.es.d.ts +9 -0
  381. package/src/lib/scatter-plot/i18n/scatter-plot-options.es.d.ts.map +1 -1
  382. package/src/lib/scatter-plot/i18n/scatter-plot-options.fr.d.ts +9 -0
  383. package/src/lib/scatter-plot/i18n/scatter-plot-options.fr.d.ts.map +1 -1
  384. package/src/lib/scatter-plot/i18n/scatter-plot-options.nl.d.ts +9 -0
  385. package/src/lib/scatter-plot/i18n/scatter-plot-options.nl.d.ts.map +1 -1
  386. package/src/lib/scatter-plot/scatter-plot-options.config.d.ts.map +1 -1
  387. package/src/lib/shared/schemas/dashboard-state.schema.d.ts +2 -2
  388. package/src/lib/shared/schemas/screen-mode.schema.d.ts +1 -1
  389. package/src/lib/shared/utils/axis-options.config.d.ts +51 -0
  390. package/src/lib/shared/utils/axis-options.config.d.ts.map +1 -0
  391. package/src/lib/shared/utils/axis-options.i18n.d.ts +4 -0
  392. package/src/lib/shared/utils/axis-options.i18n.d.ts.map +1 -0
  393. package/src/lib/shared/utils/guidelines-options.config.d.ts +10 -0
  394. package/src/lib/shared/utils/guidelines-options.config.d.ts.map +1 -0
  395. package/src/lib/shared/utils/index.d.ts +3 -0
  396. package/src/lib/shared/utils/index.d.ts.map +1 -1
  397. package/src/lib/shared/utils/info-tooltip-options.config.d.ts +6 -0
  398. package/src/lib/shared/utils/info-tooltip-options.config.d.ts.map +1 -0
  399. package/src/lib/shared/utils/info-tooltip-options.i18n.d.ts +3 -0
  400. package/src/lib/shared/utils/info-tooltip-options.i18n.d.ts.map +1 -0
  401. package/src/lib/shared/utils/options-loader.d.ts.map +1 -1
  402. package/src/lib/speedometer-chart/speedometer-chart-options.config.d.ts.map +1 -1
  403. package/src/lib/spike-map/spike-map-options.config.d.ts.map +1 -1
  404. package/src/lib/strip-plot/strip-plot-options.config.d.ts.map +1 -1
  405. package/src/lib/sunburst-chart/sunburst-chart-options.config.d.ts.map +1 -1
  406. package/src/lib/symbol-map/symbol-map-options.config.d.ts.map +1 -1
  407. package/src/lib/treemap-chart/treemap-chart-options.config.d.ts.map +1 -1
  408. package/src/lib/wordcloud-chart/wordcloud-chart-options.config.d.ts.map +1 -1
  409. package/strip-plot/strip-plot-options.config.cjs +1 -1
  410. package/strip-plot/strip-plot-options.config.cjs.map +1 -1
  411. package/strip-plot/strip-plot-options.config.js +4 -3
  412. package/strip-plot/strip-plot-options.config.js.map +1 -1
  413. package/sunburst-chart/sunburst-chart-options.config.cjs +1 -1
  414. package/sunburst-chart/sunburst-chart-options.config.cjs.map +1 -1
  415. package/sunburst-chart/sunburst-chart-options.config.js +5 -3
  416. package/sunburst-chart/sunburst-chart-options.config.js.map +1 -1
  417. package/symbol-map/symbol-map-options.config.cjs +1 -1
  418. package/symbol-map/symbol-map-options.config.cjs.map +1 -1
  419. package/symbol-map/symbol-map-options.config.js +7 -5
  420. package/symbol-map/symbol-map-options.config.js.map +1 -1
  421. package/treemap-chart/treemap-chart-options.config.cjs +1 -1
  422. package/treemap-chart/treemap-chart-options.config.cjs.map +1 -1
  423. package/treemap-chart/treemap-chart-options.config.js +180 -175
  424. package/treemap-chart/treemap-chart-options.config.js.map +1 -1
  425. package/wordcloud-chart/wordcloud-chart-options.config.cjs +1 -1
  426. package/wordcloud-chart/wordcloud-chart-options.config.cjs.map +1 -1
  427. package/wordcloud-chart/wordcloud-chart-options.config.js +67 -62
  428. package/wordcloud-chart/wordcloud-chart-options.config.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scatter-plot-options.config.js","names":[],"sources":["../../../../libs/dashboard-contents-types/src/lib/scatter-plot/scatter-plot-options.config.ts"],"sourcesContent":["import {\n getThemeAxisColor,\n getThemeAxisColorExtraLabelClickAction,\n getThemeAxisColorExtraLabelHasClickAction,\n getThemeAxisColorResetLabel,\n getThemeMainColor,\n getThemeMainColorExtraLabelClickAction,\n getThemeMainColorExtraLabelHasClickAction,\n getThemeMainColorResetLabel\n} from '../helpers';\nimport type { OptionsConfig, OptionsConfigContext } from '../shared/utils/options-config.types';\nimport type { ScatterPlotViewOptions } from './scatter-plot-options';\nimport type { ScatterPlotSlots } from './scatter-plot-slots';\n\ntype ScatterPlotConfigContext = OptionsConfigContext<ScatterPlotViewOptions, ScatterPlotSlots>;\ntype ScatterPlotConfigValue<T> = ScatterPlotConfigContext & { value: T };\n\nconst hasColor = ({ slots }: Pick<ScatterPlotConfigContext, 'slots'>) => {\n if (Array.isArray(slots) && slots?.length > 0) {\n return (slots?.find((slot) => slot?.name === 'color')?.content?.length ?? 0) > 0;\n }\n\n return false;\n};\n\nconst hasNoColor = ({ slots }: ScatterPlotConfigContext) => {\n if (Array.isArray(slots) && slots?.length > 0) {\n return slots?.find((slot) => slot?.name === 'color')?.content?.length === 0;\n }\n\n return true;\n};\n\nconst scatterPlotOptionsConfig: OptionsConfig<ScatterPlotConfigContext> = [\n {\n key: 'general',\n type: 'group',\n open: true,\n children: [\n {\n key: 'display.title',\n control: {\n type: 'switch',\n label: 'Title',\n default: true\n }\n },\n {\n key: 'display.legend',\n control: {\n type: 'switch',\n label: 'Legend',\n default: true\n },\n visibleIf: hasColor\n },\n {\n key: 'color',\n control: {\n type: 'color-picker',\n label: 'Color',\n default: ({ theme }: ScatterPlotConfigContext) => getThemeMainColor(theme),\n extraLabel: ({ options, theme }: ScatterPlotConfigContext) => getThemeMainColorResetLabel(options, theme, 'color'),\n extraLabelHasClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeMainColorExtraLabelHasClickAction(options, theme, 'color'),\n extraLabelClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeMainColorExtraLabelClickAction(options, theme, 'color')\n },\n visibleIf: hasNoColor\n }\n ]\n },\n {\n key: 'axes',\n type: 'group',\n open: false,\n children: [\n /* {\n key: 'manualAxesRange.x',\n control: {\n type: 'switch',\n label: 'Manual x-axis range',\n default: false\n }\n }, */\n {\n key: 'axis.x.color',\n control: {\n type: 'color-picker',\n label: 'X-axis color',\n default: ({ theme }: ScatterPlotConfigContext) => getThemeAxisColor(theme),\n extraLabel: ({ options, theme }: ScatterPlotConfigContext) => getThemeAxisColorResetLabel(options, theme, 'axis.x.color'),\n extraLabelHasClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeAxisColorExtraLabelHasClickAction(options, theme, 'axis.x.color'),\n extraLabelClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeAxisColorExtraLabelClickAction(options, theme, 'axis.x.color')\n }\n },\n {\n key: 'xAxisLabels',\n type: 'group',\n label: 'X-axis label',\n collapsible: true,\n open: true,\n children: [\n // TODO check doesn't work\n {\n key: 'axislabels.x.enabled',\n control: {\n type: 'switch',\n label: 'Enabled',\n default: false\n }\n },\n {\n key: 'axislabels.x.position',\n control: {\n type: 'picker',\n label: 'Position',\n default: 'center',\n enum: ['left', 'center', 'right']\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) => options?.axislabels?.x?.enabled === true\n }\n ]\n },\n {\n key: 'xAxisTicks',\n type: 'group',\n label: 'X-axis ticks',\n collapsible: true,\n open: true,\n children: [\n {\n key: 'axis.x.ticksMode',\n control: {\n type: 'picker',\n label: 'Display mode',\n default: 'ticks',\n enum: ['ticks', 'hide', 'gridlines'],\n toOptions: ({ options, value }: ScatterPlotConfigValue<'ticks' | 'hide' | 'gridlines'>) => ({\n ...options,\n axis: {\n ...options?.axis,\n x: {\n ...options?.axis?.x,\n ticksMode: value\n }\n },\n grid: {\n ...options?.grid,\n x: {\n ...options?.grid?.x,\n enabled: value === 'gridlines'\n }\n }\n })\n }\n },\n {\n key: 'grid.x.style',\n control: {\n type: 'picker',\n label: 'Gridline style',\n default: 'solid',\n enum: ['solid', 'dotted', 'dashed']\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) =>\n options?.axis?.x?.ticksMode === 'gridlines' && options?.grid?.x?.enabled === true\n },\n {\n key: 'grid.x.opacity',\n control: {\n type: 'slider',\n label: 'Gridline opacity',\n default: 0.3,\n min: 0.1,\n max: 1,\n step: 0.1\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) =>\n options?.axis?.x?.ticksMode === 'gridlines' && options?.grid?.x?.enabled === true\n }\n ]\n },\n {\n type: 'divider'\n },\n /* {\n key: 'manualAxesRange.y',\n control: {\n type: 'switch',\n label: 'Manual y-axis range',\n default: false\n }\n }, */\n {\n key: 'axis.y.color',\n control: {\n type: 'color-picker',\n label: 'Y-axis color',\n default: ({ theme }: ScatterPlotConfigContext) => getThemeAxisColor(theme),\n extraLabel: ({ options, theme }: ScatterPlotConfigContext) => getThemeAxisColorResetLabel(options, theme, 'axis.y.color'),\n extraLabelHasClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeAxisColorExtraLabelHasClickAction(options, theme, 'axis.y.color'),\n extraLabelClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeAxisColorExtraLabelClickAction(options, theme, 'axis.y.color')\n }\n },\n {\n key: 'yAxisLabels',\n type: 'group',\n label: 'Y-axis label',\n collapsible: true,\n open: true,\n children: [\n // TODO check doesn't work\n {\n key: 'axislabels.y.enabled',\n control: {\n type: 'switch',\n label: 'Enabled',\n default: false\n }\n },\n {\n key: 'axislabels.y.position',\n control: {\n type: 'picker',\n label: 'Position',\n default: 'middle',\n enum: ['top', 'middle', 'bottom']\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) => options?.axislabels?.y?.enabled === true\n }\n ]\n },\n {\n key: 'yAxisTicks',\n type: 'group',\n label: 'Y-axis ticks',\n collapsible: true,\n open: true,\n children: [\n {\n key: 'axis.y.ticksMode',\n control: {\n type: 'picker',\n label: 'Display mode',\n default: 'ticks',\n enum: ['ticks', 'hide', 'gridlines'],\n toOptions: ({ options, value }: ScatterPlotConfigValue<'ticks' | 'hide' | 'gridlines'>) => ({\n ...options,\n axis: {\n ...options?.axis,\n y: {\n ...options?.axis?.y,\n ticksMode: value\n }\n },\n grid: {\n ...options?.grid,\n y: {\n ...options?.grid?.y,\n enabled: value === 'gridlines'\n }\n }\n })\n }\n },\n {\n key: 'grid.y.style',\n control: {\n type: 'picker',\n label: 'Gridline style',\n default: 'solid',\n enum: ['solid', 'dotted', 'dashed']\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) =>\n options?.axis?.y?.ticksMode === 'gridlines' && options?.grid?.y?.enabled === true\n },\n {\n key: 'grid.y.opacity',\n control: {\n type: 'slider',\n label: 'Gridline opacity',\n default: 0.3,\n min: 0.1,\n max: 1,\n step: 0.1\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) =>\n options?.axis?.y?.ticksMode === 'gridlines' && options?.grid?.y?.enabled === true\n }\n ]\n }\n ]\n },\n {\n key: 'legend',\n type: 'group',\n open: false,\n children: [\n {\n key: 'legend.position',\n control: {\n label: 'Position',\n type: 'position-picker',\n default: 'topRight',\n enum: ['topLeft', 'top', 'topRight', 'right', 'bottomRight', 'bottom', 'bottomLeft', 'left']\n }\n },\n {\n key: 'legend.customOrder',\n control: {\n label: 'Custom order',\n description: 'Drag items in the chart legend to set the order.',\n type: 'switch',\n default: false\n }\n },\n {\n key: 'interactivity.legendReorder',\n control: {\n label: 'Allow viewers to reorder',\n type: 'switch',\n default: false\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) => options?.legend?.customOrder === true\n }\n ],\n visibleIf: hasColor\n }\n];\n\nexport default scatterPlotOptionsConfig;\n"],"mappings":"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"}
1
+ {"version":3,"file":"scatter-plot-options.config.js","names":[],"sources":["../../../../libs/dashboard-contents-types/src/lib/scatter-plot/scatter-plot-options.config.ts"],"sourcesContent":["import {\n getThemeMainColor,\n getThemeMainColorExtraLabelClickAction,\n getThemeMainColorExtraLabelHasClickAction,\n getThemeMainColorResetLabel\n} from '../helpers';\nimport { createAxesOptionsGroup } from '../shared/utils/axis-options.config';\nimport { createScatterGuidelinesOptionsGroup } from '../shared/utils/guidelines-options.config';\nimport { createInfoTooltipOptionsGroup } from '../shared/utils/info-tooltip-options.config';\nimport type { OptionsConfig, OptionsConfigContext } from '../shared/utils/options-config.types';\nimport type { ScatterPlotViewOptions } from './scatter-plot-options';\nimport type { ScatterPlotSlots } from './scatter-plot-slots';\n\ntype ScatterPlotConfigContext = OptionsConfigContext<ScatterPlotViewOptions, ScatterPlotSlots>;\n\nconst hasColor = ({ slots }: Pick<ScatterPlotConfigContext, 'slots'>) => {\n if (Array.isArray(slots) && slots?.length > 0) {\n return (slots?.find((slot) => slot?.name === 'color')?.content?.length ?? 0) > 0;\n }\n\n return false;\n};\n\nconst hasNoColor = ({ slots }: ScatterPlotConfigContext) => {\n if (Array.isArray(slots) && slots?.length > 0) {\n return slots?.find((slot) => slot?.name === 'color')?.content?.length === 0;\n }\n\n return true;\n};\n\nconst scatterPlotOptionsConfig: OptionsConfig<ScatterPlotConfigContext> = [\n {\n key: 'general',\n type: 'group',\n open: true,\n children: [\n {\n key: 'display.title',\n control: {\n type: 'switch',\n label: 'Title',\n default: true\n }\n },\n {\n key: 'display.legend',\n control: {\n type: 'switch',\n label: 'Legend',\n default: true\n },\n visibleIf: hasColor\n },\n {\n key: 'color',\n control: {\n type: 'color-picker',\n label: 'Color',\n default: ({ theme }: ScatterPlotConfigContext) => getThemeMainColor(theme),\n extraLabel: ({ options, theme }: ScatterPlotConfigContext) => getThemeMainColorResetLabel(options, theme, 'color'),\n extraLabelHasClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeMainColorExtraLabelHasClickAction(options, theme, 'color'),\n extraLabelClickAction: ({ options, theme }: ScatterPlotConfigContext) =>\n getThemeMainColorExtraLabelClickAction(options, theme, 'color')\n },\n visibleIf: hasNoColor\n }\n ]\n },\n createAxesOptionsGroup<ScatterPlotConfigContext>([\n { axis: 'x', role: 'numeric', manualRange: { key: 'manualAxesRange.x' }, color: true, label: true, tickMode: true, gridlines: true },\n { axis: 'y', role: 'numeric', manualRange: { key: 'manualAxesRange.y' }, color: true, label: true, tickMode: true, gridlines: true }\n ]),\n {\n key: 'legend',\n type: 'group',\n open: false,\n children: [\n {\n key: 'legend.position',\n control: {\n label: 'Position',\n type: 'position-picker',\n default: 'topRight',\n enum: ['topLeft', 'top', 'topRight', 'right', 'bottomRight', 'bottom', 'bottomLeft', 'left']\n }\n },\n {\n key: 'legend.customOrder',\n control: {\n label: 'Custom order',\n description: 'Drag items in the chart legend to set the order.',\n type: 'switch',\n default: false\n }\n },\n {\n key: 'interactivity.legendReorder',\n control: {\n label: 'Allow viewers to reorder',\n type: 'switch',\n default: false\n },\n visibleIf: ({ options }: ScatterPlotConfigContext) => options?.legend?.customOrder === true\n }\n ],\n visibleIf: hasColor\n },\n createScatterGuidelinesOptionsGroup(),\n createInfoTooltipOptionsGroup<ScatterPlotConfigContext>()\n];\n\nexport default scatterPlotOptionsConfig;\n"],"mappings":";;;;;AAeA,IAAM,KAAY,EAAE,eACd,MAAM,QAAQ,CAAK,KAAK,GAAO,SAAS,KAClC,GAAO,MAAM,MAAS,GAAM,SAAS,OAAO,CAAC,EAAE,SAAS,UAAU,KAAK,IAG1E,IAWH,IAAoE;CACxE;EACE,KAAK;EACL,MAAM;EACN,MAAM;EACN,UAAU;GACR;IACE,KAAK;IACL,SAAS;KACP,MAAM;KACN,OAAO;KACP,SAAS;IACX;GACF;GACA;IACE,KAAK;IACL,SAAS;KACP,MAAM;KACN,OAAO;KACP,SAAS;IACX;IACA,WAAW;GACb;GACA;IACE,KAAK;IACL,SAAS;KACP,MAAM;KACN,OAAO;KACP,UAAU,EAAE,eAAsC,EAAkB,CAAK;KACzE,aAAa,EAAE,YAAS,eAAsC,EAA4B,GAAS,GAAO,OAAO;KACjH,2BAA2B,EAAE,YAAS,eACpC,EAA0C,GAAS,GAAO,OAAO;KACnE,wBAAwB,EAAE,YAAS,eACjC,EAAuC,GAAS,GAAO,OAAO;IAClE;IACA,YA3CY,EAAE,eAChB,MAAM,QAAQ,CAAK,KAAK,GAAO,SAAS,IACnC,GAAO,MAAM,MAAS,GAAM,SAAS,OAAO,CAAC,EAAE,SAAS,WAAW,IAGrE;GAuCH;EACF;CACF;CACA,EAAiD,CAC/C;EAAE,MAAM;EAAK,MAAM;EAAW,aAAa,EAAE,KAAK,oBAAoB;EAAG,OAAO;EAAM,OAAO;EAAM,UAAU;EAAM,WAAW;CAAK,GACnI;EAAE,MAAM;EAAK,MAAM;EAAW,aAAa,EAAE,KAAK,oBAAoB;EAAG,OAAO;EAAM,OAAO;EAAM,UAAU;EAAM,WAAW;CAAK,CACrI,CAAC;CACD;EACE,KAAK;EACL,MAAM;EACN,MAAM;EACN,UAAU;GACR;IACE,KAAK;IACL,SAAS;KACP,OAAO;KACP,MAAM;KACN,SAAS;KACT,MAAM;MAAC;MAAW;MAAO;MAAY;MAAS;MAAe;MAAU;MAAc;KAAM;IAC7F;GACF;GACA;IACE,KAAK;IACL,SAAS;KACP,OAAO;KACP,aAAa;KACb,MAAM;KACN,SAAS;IACX;GACF;GACA;IACE,KAAK;IACL,SAAS;KACP,OAAO;KACP,MAAM;KACN,SAAS;IACX;IACA,YAAY,EAAE,iBAAwC,GAAS,QAAQ,gBAAgB;GACzF;EACF;EACA,WAAW;CACb;CACA,EAAoC;CACpC,EAAwD;AAC1D"}
@@ -0,0 +1,2 @@
1
+ const e=require("../../helpers.cjs");var t=(e,t)=>{let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||Array.isArray(n))return;n=n[e]}return n},n=e=>typeof e==`object`&&!!e&&!Array.isArray(e),r=e=>n(e)?e:{},i=(e,t,n)=>{let[a,...o]=t.split(`.`);return o.length===0?{...e,[a]:n}:{...e,[a]:i(r(e[a]),o.join(`.`),n)}},a=(e,t)=>{let[r,...i]=t.split(`.`);if(!(r in e))return e;if(i.length>0){if(!n(e[r]))return e;let t=a(e[r],i.join(`.`));if(Object.keys(t).length>0)return{...e,[r]:t}}let o={...e};return delete o[r],o},o=(e,t)=>`${e===`axis`?`Axis`:`${e.charAt(0).toUpperCase()}${e.slice(1)} axis`} ${t}`,s=[`minimum`,`maximum`],c=`:`,l=[0,100],u=[`2`,`10`],d=(e,t)=>`${e}${c}${t}`,f=e=>`${e}${c}bounds`,p=[`manualAxesRange`,`manualAxesRange.x`,`manualAxesRange.y`,`axis.y.manualAxesRange`,`axis.y2.manualAxesRange`,`manualAxisRange`],m=e=>{let t=typeof e==`string`?Number.parseFloat(e):e;return typeof t==`number`&&Number.isFinite(t)?t:void 0},h=(e,n)=>{let r=t(e,n);if(!Array.isArray(r)||r.length!==2)return;let i=m(r[0]),a=m(r[1]);return i===void 0||a===void 0?void 0:[i,a]},g=(e,t,n,o)=>{let s=m(o);if(s===void 0)return a(r(e),t);let[c,u]=h(e,t)??l,d=n===`minimum`?s:c,f=n===`maximum`?s:u;return i(r(e),t,d>f?[f,d]:[d,f])},_=({rangeKey:e,labels:n,discriminator:o})=>{let c=[];return o&&c.push({key:o.key,control:{type:`picker`,label:n.range??`Manual axis range`,default:o.default??`default`,enum:[`default`,`manual`,`variable`],toOptions:({options:t,value:n})=>{let s=i(r(t),o.key,n);return n===`manual`?h(t,e)?s:i(s,e,[...l]):a(s,e)}}}),c.push({key:f(e),type:`group`,label:n.range??`Manual axis range`,collapsible:!0,open:!0,children:s.map(t=>({key:d(e,t),control:{type:`number-field`,label:n[t],editorOnly:!0,calculateValue:({options:n})=>h(n,e)?.[t===`minimum`?0:1],toOptions:({options:n,value:r})=>g(n,e,t,r)}})),...o?{visibleIf:({options:e})=>t(e,o.key)===`manual`}:{}}),c},v=(t,n)=>{let r=`axis.${t}.color`;return{key:r,control:{type:`color-picker`,label:o(n,`color`),default:({theme:t})=>e.getThemeAxisColor(t),extraLabel:({options:t,theme:n})=>e.getThemeAxisColorResetLabel(t,n,r),extraLabelHasClickAction:({options:t,theme:n})=>e.getThemeAxisColorExtraLabelHasClickAction(t,n,r),extraLabelClickAction:({options:t,theme:n})=>e.getThemeAxisColorExtraLabelClickAction(t,n,r)}}},y=(e,n)=>({key:`${e}AxisLabels`,type:`group`,label:o(n,`label`),collapsible:!0,open:!0,children:[{key:`axislabels.${e}.enabled`,control:{type:`switch`,label:`Enabled`,default:!1}},{key:`axislabels.${e}.position`,control:{type:`picker`,label:`Position`,default:e===`x`?`center`:`middle`,enum:e===`x`?[`left`,`center`,`right`]:[`top`,`middle`,`bottom`]},visibleIf:({options:n})=>t(n,`axislabels.${e}.enabled`)===!0}]}),b=e=>{let{axis:n,role:a}=e,s=`axis.${n}.ticksMode`,c=[];if(e.tickDensity&&c.push({key:`axis.${n}.ticksDensity`,control:{type:`picker`,label:`Density`,default:`normal`,enum:[`compact`,`normal`,`sparse`]}}),e.tickMode&&c.push({key:s,control:{type:`picker`,label:`Display mode`,default:`ticks`,enum:e.gridlines?[`ticks`,`hide`,`gridlines`]:[`ticks`,`hide`],...e.gridlines?{toOptions:({options:e,value:t})=>i(i(r(e),s,t),`grid.${n}.enabled`,t===`gridlines`)}:{}}}),e.gridlines){let e=({options:e})=>t(e,s)===`gridlines`;c.push({key:`grid.${n}.style`,control:{type:`picker`,label:`Gridline style`,default:`dotted`,enum:[`solid`,`dotted`,`dashed`]},visibleIf:e},{key:`grid.${n}.opacity`,control:{type:`slider`,label:`Gridline opacity`,default:.3,min:.1,max:1,step:.05},visibleIf:e})}return e.datetimeTickStyle&&c.push({key:`axis.${n}.ticksStyle`,control:{type:`picker`,label:`Date format`,default:`auto`,enum:[`auto`,`userDefined`]}}),{key:`${n}AxisTicks`,type:`group`,label:o(a,`ticks`),collapsible:!0,open:!0,children:c}},x=e=>{let{axis:n,role:a}=e,s=[];if(e.scale){let e=`axis.${n}.scale`,c=`axis.${n}.scaleLogBase`;s.push({key:e,control:{type:`picker`,label:o(a,`type`),default:`linear`,enum:[`linear`,`logarithmic`]}},{key:c,control:{type:`picker`,label:`Logarithmic base`,default:`10`,enum:[...u],calculateValue:({options:e})=>{let n=String(t(e,c));return u.includes(n)?n:void 0},toOptions:({options:e,value:t})=>i(r(e),c,Number(t))},visibleIf:({options:n})=>t(n,e)===`logarithmic`})}if(e.manualRange){let{key:t,discriminatorKey:n}=e.manualRange;s.push(..._({rangeKey:t,labels:{range:o(a,`range`),minimum:o(a,`minimum`),maximum:o(a,`maximum`)},...n?{discriminator:{key:n}}:{}}))}return e.color&&s.push(v(n,a)),e.label&&s.push(y(n,a)),(e.tickMode||e.tickDensity||e.datetimeTickStyle)&&s.push(b(e)),s},S=(e,t=[])=>({key:`axes`,type:`group`,open:!1,children:[...t,...e.flatMap(e=>x(e))]});exports.createAxesOptionsGroup=S,exports.createAxisOptions=x,exports.createManualRangeControls=_,exports.manualRangeBoundKey=d,exports.manualRangeBounds=s,exports.manualRangeGroupKey=f,exports.manualRangeKeys=p;
2
+ //# sourceMappingURL=axis-options.config.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis-options.config.cjs","names":[],"sources":["../../../../../libs/dashboard-contents-types/src/lib/shared/utils/axis-options.config.ts"],"sourcesContent":["import {\n getThemeAxisColor,\n getThemeAxisColorExtraLabelClickAction,\n getThemeAxisColorExtraLabelHasClickAction,\n getThemeAxisColorResetLabel\n} from '../../helpers';\nimport type { Axis, AxisGridlinesStyle, AxisScaleType, AxisTicksDensity, AxisTicksMode, MeasureAxisType } from '../types/axes';\nimport type { OptionConfig, OptionsConfigContext } from './options-config.types';\n\nexport type AxisRole = 'measure' | 'category' | 'numeric' | 'axis';\n\ntype ContextWithValue<TContext, TValue> = TContext & { value: TValue };\n\nexport interface AxisOptionsCapabilities {\n axis: Axis;\n role: AxisRole;\n color?: boolean;\n label?: boolean;\n scale?: boolean;\n tickDensity?: boolean;\n tickMode?: boolean;\n gridlines?: boolean;\n datetimeTickStyle?: boolean;\n manualRange?: {\n key: string;\n discriminatorKey?: string;\n };\n}\n\nconst getNestedValue = (value: unknown, path: string): unknown => {\n let current = value;\n\n for (const part of path.split('.')) {\n if (typeof current !== 'object' || current === null || Array.isArray(current)) {\n return undefined;\n }\n\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst asRecord = (value: unknown): Record<string, unknown> => (isRecord(value) ? value : {});\n\nconst setNestedValue = (options: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> => {\n const [head, ...rest] = path.split('.');\n\n if (rest.length === 0) {\n return { ...options, [head]: value };\n }\n\n return { ...options, [head]: setNestedValue(asRecord(options[head]), rest.join('.'), value) };\n};\n\nconst deleteNestedValue = (options: Record<string, unknown>, path: string): Record<string, unknown> => {\n const [head, ...rest] = path.split('.');\n\n if (!(head in options)) {\n return options;\n }\n\n if (rest.length > 0) {\n if (!isRecord(options[head])) {\n return options;\n }\n\n const child = deleteNestedValue(options[head], rest.join('.'));\n\n if (Object.keys(child).length > 0) {\n return { ...options, [head]: child };\n }\n }\n\n const remaining = { ...options };\n\n delete remaining[head];\n\n return remaining;\n};\n\nconst roleLabel = (role: AxisRole, suffix: string) =>\n `${role === 'axis' ? 'Axis' : `${role.charAt(0).toUpperCase()}${role.slice(1)} axis`} ${suffix}`;\n\nexport const manualRangeBounds = ['minimum', 'maximum'] as const;\n\nexport type ManualRangeBound = (typeof manualRangeBounds)[number];\n\nconst manualRangeBoundSeparator = ':';\n\nconst defaultManualRange: [number, number] = [0, 100];\n\nconst logarithmicBases = ['2', '10'] as const;\n\ntype LogarithmicBase = (typeof logarithmicBases)[number];\n\n/**\n * A manual range is persisted as one `[minimum, maximum]` tuple but edited with one number\n * field per bound, so each field needs its own option key. The separator keeps these keys\n * distinguishable from real (dot-separated) option paths: they identify controls only, and\n * the tuple is read and written through `calculateValue` / `toOptions`.\n */\nexport const manualRangeBoundKey = (rangeKey: string, bound: ManualRangeBound): string =>\n `${rangeKey}${manualRangeBoundSeparator}${bound}`;\n\n/** Key of the group holding both bounds of the manual range persisted at `rangeKey`. */\nexport const manualRangeGroupKey = (rangeKey: string): string => `${rangeKey}${manualRangeBoundSeparator}bounds`;\n\n/** Manual range keys used across the chart option configs, in the order the charts declare them. */\nexport const manualRangeKeys = [\n 'manualAxesRange',\n 'manualAxesRange.x',\n 'manualAxesRange.y',\n 'axis.y.manualAxesRange',\n 'axis.y2.manualAxesRange',\n 'manualAxisRange'\n] as const;\n\nconst toFiniteNumber = (value: unknown): number | undefined => {\n const parsed = typeof value === 'string' ? Number.parseFloat(value) : value;\n\n return typeof parsed === 'number' && Number.isFinite(parsed) ? parsed : undefined;\n};\n\nconst readManualRange = (options: unknown, rangeKey: string): [number, number] | undefined => {\n const value = getNestedValue(options, rangeKey);\n\n if (!Array.isArray(value) || value.length !== 2) {\n return undefined;\n }\n\n const minimum = toFiniteNumber(value[0]);\n const maximum = toFiniteNumber(value[1]);\n\n return minimum === undefined || maximum === undefined ? undefined : [minimum, maximum];\n};\n\nconst writeManualRangeBound = (\n options: unknown,\n rangeKey: string,\n bound: ManualRangeBound,\n value: unknown\n): Record<string, unknown> => {\n const nextBound = toFiniteNumber(value);\n\n // Clearing a bound returns the axis to its automatic range, like toggling the range off.\n if (nextBound === undefined) {\n return deleteNestedValue(asRecord(options), rangeKey);\n }\n\n const [currentMinimum, currentMaximum] = readManualRange(options, rangeKey) ?? defaultManualRange;\n const minimum = bound === 'minimum' ? nextBound : currentMinimum;\n const maximum = bound === 'maximum' ? nextBound : currentMaximum;\n\n return setNestedValue(asRecord(options), rangeKey, minimum > maximum ? [maximum, minimum] : [minimum, maximum]);\n};\n\nexport interface ManualRangeControlsConfig {\n rangeKey: string;\n labels: {\n minimum: string;\n maximum: string;\n range?: string;\n };\n discriminator?: {\n key: string;\n default?: MeasureAxisType;\n };\n}\n\n/**\n * Builds the controls that edit a manual axis range: an optional range mode picker plus one\n * number field per bound.\n */\nexport const createManualRangeControls = <TContext extends OptionsConfigContext>({\n rangeKey,\n labels,\n discriminator\n}: ManualRangeControlsConfig): OptionConfig<TContext>[] => {\n const controls: OptionConfig<TContext>[] = [];\n\n if (discriminator) {\n controls.push({\n key: discriminator.key,\n control: {\n type: 'picker',\n label: labels.range ?? 'Manual axis range',\n default: discriminator.default ?? 'default',\n enum: ['default', 'manual', 'variable'] satisfies MeasureAxisType[],\n toOptions: ({ options, value }: ContextWithValue<TContext, MeasureAxisType>) => {\n const next = setNestedValue(asRecord(options), discriminator.key, value);\n\n if (value !== 'manual') {\n return deleteNestedValue(next, rangeKey);\n }\n\n // Seed a complete tuple, because a single bound cannot be persisted on its own.\n return readManualRange(options, rangeKey) ? next : setNestedValue(next, rangeKey, [...defaultManualRange]);\n }\n }\n });\n }\n\n // Both bounds share one group so their labels stay unambiguous when a chart has several ranges.\n controls.push({\n key: manualRangeGroupKey(rangeKey),\n type: 'group',\n label: labels.range ?? 'Manual axis range',\n collapsible: true,\n open: true,\n children: manualRangeBounds.map((bound) => ({\n key: manualRangeBoundKey(rangeKey, bound),\n control: {\n type: 'number-field',\n label: labels[bound],\n // The tuple is the persisted option; these bound keys never leave the editor.\n editorOnly: true,\n calculateValue: ({ options }: TContext) => readManualRange(options, rangeKey)?.[bound === 'minimum' ? 0 : 1],\n toOptions: ({ options, value }: ContextWithValue<TContext, unknown>) =>\n writeManualRangeBound(options, rangeKey, bound, value)\n }\n })),\n ...(discriminator\n ? { visibleIf: ({ options }: TContext) => getNestedValue(options, discriminator.key) === 'manual' }\n : {})\n });\n\n return controls;\n};\n\nconst createColorControl = <TContext extends OptionsConfigContext>(axis: Axis, role: AxisRole): OptionConfig<TContext> => {\n const key = `axis.${axis}.color`;\n\n return {\n key,\n control: {\n type: 'color-picker',\n label: roleLabel(role, 'color'),\n default: ({ theme }: TContext) => getThemeAxisColor(theme),\n extraLabel: ({ options, theme }: TContext) => getThemeAxisColorResetLabel(options, theme, key),\n extraLabelHasClickAction: ({ options, theme }: TContext) =>\n getThemeAxisColorExtraLabelHasClickAction(options, theme, key),\n extraLabelClickAction: ({ options, theme }: TContext) =>\n getThemeAxisColorExtraLabelClickAction(options, theme, key)\n }\n };\n};\n\nconst createLabelGroup = <TContext extends OptionsConfigContext>(axis: Axis, role: AxisRole): OptionConfig<TContext> => ({\n key: `${axis}AxisLabels`,\n type: 'group',\n label: roleLabel(role, 'label'),\n collapsible: true,\n open: true,\n children: [\n {\n key: `axislabels.${axis}.enabled`,\n control: {\n type: 'switch',\n label: 'Enabled',\n default: false\n }\n },\n {\n key: `axislabels.${axis}.position`,\n control: {\n type: 'picker',\n label: 'Position',\n default: axis === 'x' ? 'center' : 'middle',\n enum: axis === 'x' ? ['left', 'center', 'right'] : ['top', 'middle', 'bottom']\n },\n visibleIf: ({ options }: TContext) => getNestedValue(options, `axislabels.${axis}.enabled`) === true\n }\n ]\n});\n\nconst createTicksGroup = <TContext extends OptionsConfigContext>(\n capabilities: AxisOptionsCapabilities\n): OptionConfig<TContext> => {\n const { axis, role } = capabilities;\n const ticksModeKey = `axis.${axis}.ticksMode`;\n const children: OptionConfig<TContext>[] = [];\n\n if (capabilities.tickDensity) {\n children.push({\n key: `axis.${axis}.ticksDensity`,\n control: {\n type: 'picker',\n label: 'Density',\n default: 'normal' satisfies AxisTicksDensity,\n enum: ['compact', 'normal', 'sparse'] satisfies AxisTicksDensity[]\n }\n });\n }\n\n if (capabilities.tickMode) {\n children.push({\n key: ticksModeKey,\n control: {\n type: 'picker',\n label: 'Display mode',\n default: 'ticks' satisfies AxisTicksMode,\n enum: capabilities.gridlines\n ? (['ticks', 'hide', 'gridlines'] satisfies AxisTicksMode[])\n : (['ticks', 'hide'] satisfies AxisTicksMode[]),\n // Gridline mode drives the grid itself, so keep both in sync from a single control.\n ...(capabilities.gridlines\n ? {\n toOptions: ({ options, value }: ContextWithValue<TContext, AxisTicksMode>) =>\n setNestedValue(\n setNestedValue(asRecord(options), ticksModeKey, value),\n `grid.${axis}.enabled`,\n value === 'gridlines'\n )\n }\n : {})\n }\n });\n }\n\n if (capabilities.gridlines) {\n const gridlinesVisible = ({ options }: TContext) => getNestedValue(options, ticksModeKey) === 'gridlines';\n\n children.push(\n {\n key: `grid.${axis}.style`,\n control: {\n type: 'picker',\n label: 'Gridline style',\n default: 'dotted' satisfies AxisGridlinesStyle,\n enum: ['solid', 'dotted', 'dashed'] satisfies AxisGridlinesStyle[]\n },\n visibleIf: gridlinesVisible\n },\n {\n key: `grid.${axis}.opacity`,\n control: {\n type: 'slider',\n label: 'Gridline opacity',\n default: 0.3,\n min: 0.1,\n max: 1,\n step: 0.05\n },\n visibleIf: gridlinesVisible\n }\n );\n }\n\n if (capabilities.datetimeTickStyle) {\n children.push({\n key: `axis.${axis}.ticksStyle`,\n control: {\n type: 'picker',\n label: 'Date format',\n default: 'auto',\n enum: ['auto', 'userDefined']\n }\n });\n }\n\n return {\n key: `${axis}AxisTicks`,\n type: 'group',\n label: roleLabel(role, 'ticks'),\n collapsible: true,\n open: true,\n children\n };\n};\n\nexport const createAxisOptions = <TContext extends OptionsConfigContext>(\n capabilities: AxisOptionsCapabilities\n): OptionConfig<TContext>[] => {\n const { axis, role } = capabilities;\n const controls: OptionConfig<TContext>[] = [];\n\n if (capabilities.scale) {\n const scaleKey = `axis.${axis}.scale`;\n const logarithmicBaseKey = `axis.${axis}.scaleLogBase`;\n\n controls.push(\n {\n key: scaleKey,\n control: {\n type: 'picker',\n label: roleLabel(role, 'type'),\n default: 'linear' satisfies AxisScaleType,\n enum: ['linear', 'logarithmic'] satisfies AxisScaleType[]\n }\n },\n {\n key: logarithmicBaseKey,\n control: {\n type: 'picker',\n label: 'Logarithmic base',\n default: '10' satisfies LogarithmicBase,\n enum: [...logarithmicBases],\n calculateValue: ({ options }: TContext) => {\n const value = String(getNestedValue(options, logarithmicBaseKey));\n\n return logarithmicBases.includes(value as LogarithmicBase) ? value : undefined;\n },\n toOptions: ({ options, value }: ContextWithValue<TContext, LogarithmicBase>) =>\n setNestedValue(asRecord(options), logarithmicBaseKey, Number(value))\n },\n visibleIf: ({ options }: TContext) => getNestedValue(options, scaleKey) === 'logarithmic'\n }\n );\n }\n\n if (capabilities.manualRange) {\n const { key, discriminatorKey } = capabilities.manualRange;\n\n controls.push(...createManualRangeControls<TContext>({\n rangeKey: key,\n labels: {\n range: roleLabel(role, 'range'),\n minimum: roleLabel(role, 'minimum'),\n maximum: roleLabel(role, 'maximum')\n },\n ...(discriminatorKey ? { discriminator: { key: discriminatorKey } } : {})\n }));\n }\n\n if (capabilities.color) {\n controls.push(createColorControl<TContext>(axis, role));\n }\n\n if (capabilities.label) {\n controls.push(createLabelGroup<TContext>(axis, role));\n }\n\n if (capabilities.tickMode || capabilities.tickDensity || capabilities.datetimeTickStyle) {\n controls.push(createTicksGroup<TContext>(capabilities));\n }\n\n return controls;\n};\n\nexport const createAxesOptionsGroup = <TContext extends OptionsConfigContext>(\n axes: AxisOptionsCapabilities[],\n additionalControls: OptionConfig<TContext>[] = []\n): OptionConfig<TContext> => ({\n key: 'axes',\n type: 'group',\n open: false,\n children: [...additionalControls, ...axes.flatMap((axis) => createAxisOptions<TContext>(axis))]\n});\n"],"mappings":"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"}
@@ -0,0 +1,253 @@
1
+ import { getThemeAxisColor as e, getThemeAxisColorExtraLabelClickAction as t, getThemeAxisColorExtraLabelHasClickAction as n, getThemeAxisColorResetLabel as r } from "../../helpers.js";
2
+ //#region src/lib/shared/utils/axis-options.config.ts
3
+ var i = (e, t) => {
4
+ let n = e;
5
+ for (let e of t.split(".")) {
6
+ if (typeof n != "object" || !n || Array.isArray(n)) return;
7
+ n = n[e];
8
+ }
9
+ return n;
10
+ }, a = (e) => typeof e == "object" && !!e && !Array.isArray(e), o = (e) => a(e) ? e : {}, s = (e, t, n) => {
11
+ let [r, ...i] = t.split(".");
12
+ return i.length === 0 ? {
13
+ ...e,
14
+ [r]: n
15
+ } : {
16
+ ...e,
17
+ [r]: s(o(e[r]), i.join("."), n)
18
+ };
19
+ }, c = (e, t) => {
20
+ let [n, ...r] = t.split(".");
21
+ if (!(n in e)) return e;
22
+ if (r.length > 0) {
23
+ if (!a(e[n])) return e;
24
+ let t = c(e[n], r.join("."));
25
+ if (Object.keys(t).length > 0) return {
26
+ ...e,
27
+ [n]: t
28
+ };
29
+ }
30
+ let i = { ...e };
31
+ return delete i[n], i;
32
+ }, l = (e, t) => `${e === "axis" ? "Axis" : `${e.charAt(0).toUpperCase()}${e.slice(1)} axis`} ${t}`, u = ["minimum", "maximum"], d = ":", f = [0, 100], p = ["2", "10"], m = (e, t) => `${e}${d}${t}`, h = (e) => `${e}${d}bounds`, g = [
33
+ "manualAxesRange",
34
+ "manualAxesRange.x",
35
+ "manualAxesRange.y",
36
+ "axis.y.manualAxesRange",
37
+ "axis.y2.manualAxesRange",
38
+ "manualAxisRange"
39
+ ], _ = (e) => {
40
+ let t = typeof e == "string" ? Number.parseFloat(e) : e;
41
+ return typeof t == "number" && Number.isFinite(t) ? t : void 0;
42
+ }, v = (e, t) => {
43
+ let n = i(e, t);
44
+ if (!Array.isArray(n) || n.length !== 2) return;
45
+ let r = _(n[0]), a = _(n[1]);
46
+ return r === void 0 || a === void 0 ? void 0 : [r, a];
47
+ }, y = (e, t, n, r) => {
48
+ let i = _(r);
49
+ if (i === void 0) return c(o(e), t);
50
+ let [a, l] = v(e, t) ?? f, u = n === "minimum" ? i : a, d = n === "maximum" ? i : l;
51
+ return s(o(e), t, u > d ? [d, u] : [u, d]);
52
+ }, b = ({ rangeKey: e, labels: t, discriminator: n }) => {
53
+ let r = [];
54
+ return n && r.push({
55
+ key: n.key,
56
+ control: {
57
+ type: "picker",
58
+ label: t.range ?? "Manual axis range",
59
+ default: n.default ?? "default",
60
+ enum: [
61
+ "default",
62
+ "manual",
63
+ "variable"
64
+ ],
65
+ toOptions: ({ options: t, value: r }) => {
66
+ let i = s(o(t), n.key, r);
67
+ return r === "manual" ? v(t, e) ? i : s(i, e, [...f]) : c(i, e);
68
+ }
69
+ }
70
+ }), r.push({
71
+ key: h(e),
72
+ type: "group",
73
+ label: t.range ?? "Manual axis range",
74
+ collapsible: !0,
75
+ open: !0,
76
+ children: u.map((n) => ({
77
+ key: m(e, n),
78
+ control: {
79
+ type: "number-field",
80
+ label: t[n],
81
+ editorOnly: !0,
82
+ calculateValue: ({ options: t }) => v(t, e)?.[n === "minimum" ? 0 : 1],
83
+ toOptions: ({ options: t, value: r }) => y(t, e, n, r)
84
+ }
85
+ })),
86
+ ...n ? { visibleIf: ({ options: e }) => i(e, n.key) === "manual" } : {}
87
+ }), r;
88
+ }, x = (i, a) => {
89
+ let o = `axis.${i}.color`;
90
+ return {
91
+ key: o,
92
+ control: {
93
+ type: "color-picker",
94
+ label: l(a, "color"),
95
+ default: ({ theme: t }) => e(t),
96
+ extraLabel: ({ options: e, theme: t }) => r(e, t, o),
97
+ extraLabelHasClickAction: ({ options: e, theme: t }) => n(e, t, o),
98
+ extraLabelClickAction: ({ options: e, theme: n }) => t(e, n, o)
99
+ }
100
+ };
101
+ }, S = (e, t) => ({
102
+ key: `${e}AxisLabels`,
103
+ type: "group",
104
+ label: l(t, "label"),
105
+ collapsible: !0,
106
+ open: !0,
107
+ children: [{
108
+ key: `axislabels.${e}.enabled`,
109
+ control: {
110
+ type: "switch",
111
+ label: "Enabled",
112
+ default: !1
113
+ }
114
+ }, {
115
+ key: `axislabels.${e}.position`,
116
+ control: {
117
+ type: "picker",
118
+ label: "Position",
119
+ default: e === "x" ? "center" : "middle",
120
+ enum: e === "x" ? [
121
+ "left",
122
+ "center",
123
+ "right"
124
+ ] : [
125
+ "top",
126
+ "middle",
127
+ "bottom"
128
+ ]
129
+ },
130
+ visibleIf: ({ options: t }) => i(t, `axislabels.${e}.enabled`) === !0
131
+ }]
132
+ }), C = (e) => {
133
+ let { axis: t, role: n } = e, r = `axis.${t}.ticksMode`, a = [];
134
+ if (e.tickDensity && a.push({
135
+ key: `axis.${t}.ticksDensity`,
136
+ control: {
137
+ type: "picker",
138
+ label: "Density",
139
+ default: "normal",
140
+ enum: [
141
+ "compact",
142
+ "normal",
143
+ "sparse"
144
+ ]
145
+ }
146
+ }), e.tickMode && a.push({
147
+ key: r,
148
+ control: {
149
+ type: "picker",
150
+ label: "Display mode",
151
+ default: "ticks",
152
+ enum: e.gridlines ? [
153
+ "ticks",
154
+ "hide",
155
+ "gridlines"
156
+ ] : ["ticks", "hide"],
157
+ ...e.gridlines ? { toOptions: ({ options: e, value: n }) => s(s(o(e), r, n), `grid.${t}.enabled`, n === "gridlines") } : {}
158
+ }
159
+ }), e.gridlines) {
160
+ let e = ({ options: e }) => i(e, r) === "gridlines";
161
+ a.push({
162
+ key: `grid.${t}.style`,
163
+ control: {
164
+ type: "picker",
165
+ label: "Gridline style",
166
+ default: "dotted",
167
+ enum: [
168
+ "solid",
169
+ "dotted",
170
+ "dashed"
171
+ ]
172
+ },
173
+ visibleIf: e
174
+ }, {
175
+ key: `grid.${t}.opacity`,
176
+ control: {
177
+ type: "slider",
178
+ label: "Gridline opacity",
179
+ default: .3,
180
+ min: .1,
181
+ max: 1,
182
+ step: .05
183
+ },
184
+ visibleIf: e
185
+ });
186
+ }
187
+ return e.datetimeTickStyle && a.push({
188
+ key: `axis.${t}.ticksStyle`,
189
+ control: {
190
+ type: "picker",
191
+ label: "Date format",
192
+ default: "auto",
193
+ enum: ["auto", "userDefined"]
194
+ }
195
+ }), {
196
+ key: `${t}AxisTicks`,
197
+ type: "group",
198
+ label: l(n, "ticks"),
199
+ collapsible: !0,
200
+ open: !0,
201
+ children: a
202
+ };
203
+ }, w = (e) => {
204
+ let { axis: t, role: n } = e, r = [];
205
+ if (e.scale) {
206
+ let e = `axis.${t}.scale`, a = `axis.${t}.scaleLogBase`;
207
+ r.push({
208
+ key: e,
209
+ control: {
210
+ type: "picker",
211
+ label: l(n, "type"),
212
+ default: "linear",
213
+ enum: ["linear", "logarithmic"]
214
+ }
215
+ }, {
216
+ key: a,
217
+ control: {
218
+ type: "picker",
219
+ label: "Logarithmic base",
220
+ default: "10",
221
+ enum: [...p],
222
+ calculateValue: ({ options: e }) => {
223
+ let t = String(i(e, a));
224
+ return p.includes(t) ? t : void 0;
225
+ },
226
+ toOptions: ({ options: e, value: t }) => s(o(e), a, Number(t))
227
+ },
228
+ visibleIf: ({ options: t }) => i(t, e) === "logarithmic"
229
+ });
230
+ }
231
+ if (e.manualRange) {
232
+ let { key: t, discriminatorKey: i } = e.manualRange;
233
+ r.push(...b({
234
+ rangeKey: t,
235
+ labels: {
236
+ range: l(n, "range"),
237
+ minimum: l(n, "minimum"),
238
+ maximum: l(n, "maximum")
239
+ },
240
+ ...i ? { discriminator: { key: i } } : {}
241
+ }));
242
+ }
243
+ return e.color && r.push(x(t, n)), e.label && r.push(S(t, n)), (e.tickMode || e.tickDensity || e.datetimeTickStyle) && r.push(C(e)), r;
244
+ }, T = (e, t = []) => ({
245
+ key: "axes",
246
+ type: "group",
247
+ open: !1,
248
+ children: [...t, ...e.flatMap((e) => w(e))]
249
+ });
250
+ //#endregion
251
+ export { T as createAxesOptionsGroup, w as createAxisOptions, b as createManualRangeControls, m as manualRangeBoundKey, u as manualRangeBounds, h as manualRangeGroupKey, g as manualRangeKeys };
252
+
253
+ //# sourceMappingURL=axis-options.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis-options.config.js","names":[],"sources":["../../../../../libs/dashboard-contents-types/src/lib/shared/utils/axis-options.config.ts"],"sourcesContent":["import {\n getThemeAxisColor,\n getThemeAxisColorExtraLabelClickAction,\n getThemeAxisColorExtraLabelHasClickAction,\n getThemeAxisColorResetLabel\n} from '../../helpers';\nimport type { Axis, AxisGridlinesStyle, AxisScaleType, AxisTicksDensity, AxisTicksMode, MeasureAxisType } from '../types/axes';\nimport type { OptionConfig, OptionsConfigContext } from './options-config.types';\n\nexport type AxisRole = 'measure' | 'category' | 'numeric' | 'axis';\n\ntype ContextWithValue<TContext, TValue> = TContext & { value: TValue };\n\nexport interface AxisOptionsCapabilities {\n axis: Axis;\n role: AxisRole;\n color?: boolean;\n label?: boolean;\n scale?: boolean;\n tickDensity?: boolean;\n tickMode?: boolean;\n gridlines?: boolean;\n datetimeTickStyle?: boolean;\n manualRange?: {\n key: string;\n discriminatorKey?: string;\n };\n}\n\nconst getNestedValue = (value: unknown, path: string): unknown => {\n let current = value;\n\n for (const part of path.split('.')) {\n if (typeof current !== 'object' || current === null || Array.isArray(current)) {\n return undefined;\n }\n\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst asRecord = (value: unknown): Record<string, unknown> => (isRecord(value) ? value : {});\n\nconst setNestedValue = (options: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> => {\n const [head, ...rest] = path.split('.');\n\n if (rest.length === 0) {\n return { ...options, [head]: value };\n }\n\n return { ...options, [head]: setNestedValue(asRecord(options[head]), rest.join('.'), value) };\n};\n\nconst deleteNestedValue = (options: Record<string, unknown>, path: string): Record<string, unknown> => {\n const [head, ...rest] = path.split('.');\n\n if (!(head in options)) {\n return options;\n }\n\n if (rest.length > 0) {\n if (!isRecord(options[head])) {\n return options;\n }\n\n const child = deleteNestedValue(options[head], rest.join('.'));\n\n if (Object.keys(child).length > 0) {\n return { ...options, [head]: child };\n }\n }\n\n const remaining = { ...options };\n\n delete remaining[head];\n\n return remaining;\n};\n\nconst roleLabel = (role: AxisRole, suffix: string) =>\n `${role === 'axis' ? 'Axis' : `${role.charAt(0).toUpperCase()}${role.slice(1)} axis`} ${suffix}`;\n\nexport const manualRangeBounds = ['minimum', 'maximum'] as const;\n\nexport type ManualRangeBound = (typeof manualRangeBounds)[number];\n\nconst manualRangeBoundSeparator = ':';\n\nconst defaultManualRange: [number, number] = [0, 100];\n\nconst logarithmicBases = ['2', '10'] as const;\n\ntype LogarithmicBase = (typeof logarithmicBases)[number];\n\n/**\n * A manual range is persisted as one `[minimum, maximum]` tuple but edited with one number\n * field per bound, so each field needs its own option key. The separator keeps these keys\n * distinguishable from real (dot-separated) option paths: they identify controls only, and\n * the tuple is read and written through `calculateValue` / `toOptions`.\n */\nexport const manualRangeBoundKey = (rangeKey: string, bound: ManualRangeBound): string =>\n `${rangeKey}${manualRangeBoundSeparator}${bound}`;\n\n/** Key of the group holding both bounds of the manual range persisted at `rangeKey`. */\nexport const manualRangeGroupKey = (rangeKey: string): string => `${rangeKey}${manualRangeBoundSeparator}bounds`;\n\n/** Manual range keys used across the chart option configs, in the order the charts declare them. */\nexport const manualRangeKeys = [\n 'manualAxesRange',\n 'manualAxesRange.x',\n 'manualAxesRange.y',\n 'axis.y.manualAxesRange',\n 'axis.y2.manualAxesRange',\n 'manualAxisRange'\n] as const;\n\nconst toFiniteNumber = (value: unknown): number | undefined => {\n const parsed = typeof value === 'string' ? Number.parseFloat(value) : value;\n\n return typeof parsed === 'number' && Number.isFinite(parsed) ? parsed : undefined;\n};\n\nconst readManualRange = (options: unknown, rangeKey: string): [number, number] | undefined => {\n const value = getNestedValue(options, rangeKey);\n\n if (!Array.isArray(value) || value.length !== 2) {\n return undefined;\n }\n\n const minimum = toFiniteNumber(value[0]);\n const maximum = toFiniteNumber(value[1]);\n\n return minimum === undefined || maximum === undefined ? undefined : [minimum, maximum];\n};\n\nconst writeManualRangeBound = (\n options: unknown,\n rangeKey: string,\n bound: ManualRangeBound,\n value: unknown\n): Record<string, unknown> => {\n const nextBound = toFiniteNumber(value);\n\n // Clearing a bound returns the axis to its automatic range, like toggling the range off.\n if (nextBound === undefined) {\n return deleteNestedValue(asRecord(options), rangeKey);\n }\n\n const [currentMinimum, currentMaximum] = readManualRange(options, rangeKey) ?? defaultManualRange;\n const minimum = bound === 'minimum' ? nextBound : currentMinimum;\n const maximum = bound === 'maximum' ? nextBound : currentMaximum;\n\n return setNestedValue(asRecord(options), rangeKey, minimum > maximum ? [maximum, minimum] : [minimum, maximum]);\n};\n\nexport interface ManualRangeControlsConfig {\n rangeKey: string;\n labels: {\n minimum: string;\n maximum: string;\n range?: string;\n };\n discriminator?: {\n key: string;\n default?: MeasureAxisType;\n };\n}\n\n/**\n * Builds the controls that edit a manual axis range: an optional range mode picker plus one\n * number field per bound.\n */\nexport const createManualRangeControls = <TContext extends OptionsConfigContext>({\n rangeKey,\n labels,\n discriminator\n}: ManualRangeControlsConfig): OptionConfig<TContext>[] => {\n const controls: OptionConfig<TContext>[] = [];\n\n if (discriminator) {\n controls.push({\n key: discriminator.key,\n control: {\n type: 'picker',\n label: labels.range ?? 'Manual axis range',\n default: discriminator.default ?? 'default',\n enum: ['default', 'manual', 'variable'] satisfies MeasureAxisType[],\n toOptions: ({ options, value }: ContextWithValue<TContext, MeasureAxisType>) => {\n const next = setNestedValue(asRecord(options), discriminator.key, value);\n\n if (value !== 'manual') {\n return deleteNestedValue(next, rangeKey);\n }\n\n // Seed a complete tuple, because a single bound cannot be persisted on its own.\n return readManualRange(options, rangeKey) ? next : setNestedValue(next, rangeKey, [...defaultManualRange]);\n }\n }\n });\n }\n\n // Both bounds share one group so their labels stay unambiguous when a chart has several ranges.\n controls.push({\n key: manualRangeGroupKey(rangeKey),\n type: 'group',\n label: labels.range ?? 'Manual axis range',\n collapsible: true,\n open: true,\n children: manualRangeBounds.map((bound) => ({\n key: manualRangeBoundKey(rangeKey, bound),\n control: {\n type: 'number-field',\n label: labels[bound],\n // The tuple is the persisted option; these bound keys never leave the editor.\n editorOnly: true,\n calculateValue: ({ options }: TContext) => readManualRange(options, rangeKey)?.[bound === 'minimum' ? 0 : 1],\n toOptions: ({ options, value }: ContextWithValue<TContext, unknown>) =>\n writeManualRangeBound(options, rangeKey, bound, value)\n }\n })),\n ...(discriminator\n ? { visibleIf: ({ options }: TContext) => getNestedValue(options, discriminator.key) === 'manual' }\n : {})\n });\n\n return controls;\n};\n\nconst createColorControl = <TContext extends OptionsConfigContext>(axis: Axis, role: AxisRole): OptionConfig<TContext> => {\n const key = `axis.${axis}.color`;\n\n return {\n key,\n control: {\n type: 'color-picker',\n label: roleLabel(role, 'color'),\n default: ({ theme }: TContext) => getThemeAxisColor(theme),\n extraLabel: ({ options, theme }: TContext) => getThemeAxisColorResetLabel(options, theme, key),\n extraLabelHasClickAction: ({ options, theme }: TContext) =>\n getThemeAxisColorExtraLabelHasClickAction(options, theme, key),\n extraLabelClickAction: ({ options, theme }: TContext) =>\n getThemeAxisColorExtraLabelClickAction(options, theme, key)\n }\n };\n};\n\nconst createLabelGroup = <TContext extends OptionsConfigContext>(axis: Axis, role: AxisRole): OptionConfig<TContext> => ({\n key: `${axis}AxisLabels`,\n type: 'group',\n label: roleLabel(role, 'label'),\n collapsible: true,\n open: true,\n children: [\n {\n key: `axislabels.${axis}.enabled`,\n control: {\n type: 'switch',\n label: 'Enabled',\n default: false\n }\n },\n {\n key: `axislabels.${axis}.position`,\n control: {\n type: 'picker',\n label: 'Position',\n default: axis === 'x' ? 'center' : 'middle',\n enum: axis === 'x' ? ['left', 'center', 'right'] : ['top', 'middle', 'bottom']\n },\n visibleIf: ({ options }: TContext) => getNestedValue(options, `axislabels.${axis}.enabled`) === true\n }\n ]\n});\n\nconst createTicksGroup = <TContext extends OptionsConfigContext>(\n capabilities: AxisOptionsCapabilities\n): OptionConfig<TContext> => {\n const { axis, role } = capabilities;\n const ticksModeKey = `axis.${axis}.ticksMode`;\n const children: OptionConfig<TContext>[] = [];\n\n if (capabilities.tickDensity) {\n children.push({\n key: `axis.${axis}.ticksDensity`,\n control: {\n type: 'picker',\n label: 'Density',\n default: 'normal' satisfies AxisTicksDensity,\n enum: ['compact', 'normal', 'sparse'] satisfies AxisTicksDensity[]\n }\n });\n }\n\n if (capabilities.tickMode) {\n children.push({\n key: ticksModeKey,\n control: {\n type: 'picker',\n label: 'Display mode',\n default: 'ticks' satisfies AxisTicksMode,\n enum: capabilities.gridlines\n ? (['ticks', 'hide', 'gridlines'] satisfies AxisTicksMode[])\n : (['ticks', 'hide'] satisfies AxisTicksMode[]),\n // Gridline mode drives the grid itself, so keep both in sync from a single control.\n ...(capabilities.gridlines\n ? {\n toOptions: ({ options, value }: ContextWithValue<TContext, AxisTicksMode>) =>\n setNestedValue(\n setNestedValue(asRecord(options), ticksModeKey, value),\n `grid.${axis}.enabled`,\n value === 'gridlines'\n )\n }\n : {})\n }\n });\n }\n\n if (capabilities.gridlines) {\n const gridlinesVisible = ({ options }: TContext) => getNestedValue(options, ticksModeKey) === 'gridlines';\n\n children.push(\n {\n key: `grid.${axis}.style`,\n control: {\n type: 'picker',\n label: 'Gridline style',\n default: 'dotted' satisfies AxisGridlinesStyle,\n enum: ['solid', 'dotted', 'dashed'] satisfies AxisGridlinesStyle[]\n },\n visibleIf: gridlinesVisible\n },\n {\n key: `grid.${axis}.opacity`,\n control: {\n type: 'slider',\n label: 'Gridline opacity',\n default: 0.3,\n min: 0.1,\n max: 1,\n step: 0.05\n },\n visibleIf: gridlinesVisible\n }\n );\n }\n\n if (capabilities.datetimeTickStyle) {\n children.push({\n key: `axis.${axis}.ticksStyle`,\n control: {\n type: 'picker',\n label: 'Date format',\n default: 'auto',\n enum: ['auto', 'userDefined']\n }\n });\n }\n\n return {\n key: `${axis}AxisTicks`,\n type: 'group',\n label: roleLabel(role, 'ticks'),\n collapsible: true,\n open: true,\n children\n };\n};\n\nexport const createAxisOptions = <TContext extends OptionsConfigContext>(\n capabilities: AxisOptionsCapabilities\n): OptionConfig<TContext>[] => {\n const { axis, role } = capabilities;\n const controls: OptionConfig<TContext>[] = [];\n\n if (capabilities.scale) {\n const scaleKey = `axis.${axis}.scale`;\n const logarithmicBaseKey = `axis.${axis}.scaleLogBase`;\n\n controls.push(\n {\n key: scaleKey,\n control: {\n type: 'picker',\n label: roleLabel(role, 'type'),\n default: 'linear' satisfies AxisScaleType,\n enum: ['linear', 'logarithmic'] satisfies AxisScaleType[]\n }\n },\n {\n key: logarithmicBaseKey,\n control: {\n type: 'picker',\n label: 'Logarithmic base',\n default: '10' satisfies LogarithmicBase,\n enum: [...logarithmicBases],\n calculateValue: ({ options }: TContext) => {\n const value = String(getNestedValue(options, logarithmicBaseKey));\n\n return logarithmicBases.includes(value as LogarithmicBase) ? value : undefined;\n },\n toOptions: ({ options, value }: ContextWithValue<TContext, LogarithmicBase>) =>\n setNestedValue(asRecord(options), logarithmicBaseKey, Number(value))\n },\n visibleIf: ({ options }: TContext) => getNestedValue(options, scaleKey) === 'logarithmic'\n }\n );\n }\n\n if (capabilities.manualRange) {\n const { key, discriminatorKey } = capabilities.manualRange;\n\n controls.push(...createManualRangeControls<TContext>({\n rangeKey: key,\n labels: {\n range: roleLabel(role, 'range'),\n minimum: roleLabel(role, 'minimum'),\n maximum: roleLabel(role, 'maximum')\n },\n ...(discriminatorKey ? { discriminator: { key: discriminatorKey } } : {})\n }));\n }\n\n if (capabilities.color) {\n controls.push(createColorControl<TContext>(axis, role));\n }\n\n if (capabilities.label) {\n controls.push(createLabelGroup<TContext>(axis, role));\n }\n\n if (capabilities.tickMode || capabilities.tickDensity || capabilities.datetimeTickStyle) {\n controls.push(createTicksGroup<TContext>(capabilities));\n }\n\n return controls;\n};\n\nexport const createAxesOptionsGroup = <TContext extends OptionsConfigContext>(\n axes: AxisOptionsCapabilities[],\n additionalControls: OptionConfig<TContext>[] = []\n): OptionConfig<TContext> => ({\n key: 'axes',\n type: 'group',\n open: false,\n children: [...additionalControls, ...axes.flatMap((axis) => createAxisOptions<TContext>(axis))]\n});\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./axis-options.config.cjs");var t={en:{axes:`Axes`,enabled:`Enabled`,position:`Position`,format:`Format`,density:`Density`,displayMode:`Display mode`,gridlineStyle:`Gridline style`,gridlineOpacity:`Gridline opacity`,logarithmicBase:`Logarithmic base`,minimum:`Minimum`,maximum:`Maximum`,labelGroup:{x:`X-axis label`,y:`Y-axis label`,y2:`Right axis label`},ticksGroup:{x:`X-axis ticks`,y:`Y-axis ticks`,y2:`Right axis ticks`},color:{x:`X-axis color`,y:`Y-axis color`,y2:`Right axis color`},scale:{x:`Measure axis type`,y:`Left axis type`,y2:`Right axis type`},ranges:{manualAxesRange:`Measure axis range`,"manualAxesRange.x":`Manual x-axis range`,"manualAxesRange.y":`Manual y-axis range`,"axis.y.manualAxesRange":`Left axis range`,"axis.y2.manualAxesRange":`Right axis range`,manualAxisRange:`Measure axis range`},scales:{linear:`Linear`,logarithmic:`Logarithmic`},logarithmicBases:{2:`Base 2`,10:`Base 10`},positionsX:{left:`Left`,center:`Center`,right:`Right`},positionsY:{top:`Top`,middle:`Middle`,bottom:`Bottom`},densities:{compact:`Compact`,normal:`Normal`,sparse:`Sparse`},ticksModes:{ticks:`Show ticks`,hide:`Hide ticks`,gridlines:`Gridlines`},gridStyles:{solid:`Solid`,dotted:`Dotted`,dashed:`Dashed`},tickStyles:{auto:`Auto`,userDefined:`User defined`},rangeModes:{default:`Default`,manual:`Manual`,variable:`Variable`}},de:{axes:`Achsen`,enabled:`Aktiviert`,position:`Position`,format:`Format`,density:`Dichte`,displayMode:`Anzeigemodus`,gridlineStyle:`Gitternetzlinienstil`,gridlineOpacity:`Gitternetzlinien-Deckkraft`,logarithmicBase:`Logarithmusbasis`,minimum:`Minimum`,maximum:`Maximum`,labelGroup:{x:`Beschriftung der X-Achse`,y:`Beschriftung der Y-Achse`,y2:`Beschriftung der rechten Achse`},ticksGroup:{x:`Teilstriche auf der X-Achse`,y:`Teilstriche auf der Y-Achse`,y2:`Teilstriche auf der rechten Achse`},color:{x:`X-Achsenfarbe`,y:`Y-Achsenfarbe`,y2:`Farbe der rechten Achse`},scale:{x:`Messachsentyp`,y:`Linker Achsentyp`,y2:`Typ der rechten Achse`},ranges:{manualAxesRange:`Messachsenbereich`,"manualAxesRange.x":`Manueller X-Achsenbereich`,"manualAxesRange.y":`Manueller Y-Achsenbereich`,"axis.y.manualAxesRange":`Linker Achsenbereich`,"axis.y2.manualAxesRange":`Rechter Achsenbereich`,manualAxisRange:`Messachsenbereich`},scales:{linear:`Linear`,logarithmic:`Logarithmisch`},logarithmicBases:{2:`Basis 2`,10:`Basis 10`},positionsX:{left:`Links`,center:`Mitte`,right:`Rechts`},positionsY:{top:`Oben`,middle:`Mitte`,bottom:`Unten`},densities:{compact:`Kompakt`,normal:`Normal`,sparse:`Spärlich`},ticksModes:{ticks:`Teilstriche anzeigen`,hide:`Teilstriche ausblenden`,gridlines:`Gitternetzlinien`},gridStyles:{solid:`Durchgezogen`,dotted:`Gepunktet`,dashed:`Gestrichelt`},tickStyles:{auto:`Auto`,userDefined:`Benutzerdefiniert`},rangeModes:{default:`Standard`,manual:`Manuell`,variable:`Variabel`}},fr:{axes:`Axes`,enabled:`Activé`,position:`Position`,format:`Format`,density:`Densité`,displayMode:`Mode d'affichage`,gridlineStyle:`Style de quadrillage`,gridlineOpacity:`Opacité du quadrillage`,logarithmicBase:`Base logarithmique`,minimum:`Minimum`,maximum:`Maximum`,labelGroup:{x:`Étiquette de l'axe X`,y:`Étiquette de l'axe Y`,y2:`Étiquette de l'axe droit`},ticksGroup:{x:`Coches de l'axe X`,y:`Coches de l'axe Y`,y2:`Coches de l'axe droit`},color:{x:`Couleur de l'axe X`,y:`Couleur de l'axe Y`,y2:`Couleur de l'axe droit`},scale:{x:`Type de l'axe de mesure`,y:`Type de l'axe gauche`,y2:`Type de l'axe droit`},ranges:{manualAxesRange:`Plage de l'axe de mesure`,"manualAxesRange.x":`Plage manuelle de l'axe X`,"manualAxesRange.y":`Plage manuelle de l'axe Y`,"axis.y.manualAxesRange":`Plage de l'axe gauche`,"axis.y2.manualAxesRange":`Plage de l'axe droit`,manualAxisRange:`Plage de l'axe de mesure`},scales:{linear:`Linéaire`,logarithmic:`Logarithmique`},logarithmicBases:{2:`Base 2`,10:`Base 10`},positionsX:{left:`Gauche`,center:`Centre`,right:`Droite`},positionsY:{top:`Haut`,middle:`Milieu`,bottom:`Bas`},densities:{compact:`Compact`,normal:`Normal`,sparse:`Clairsemé`},ticksModes:{ticks:`Afficher les coches`,hide:`Masquer les coches`,gridlines:`Quadrillage`},gridStyles:{solid:`Continu`,dotted:`Pointillé`,dashed:`Tirets`},tickStyles:{auto:`Auto`,userDefined:`Défini par l'utilisateur`},rangeModes:{default:`Par défaut`,manual:`Manuel`,variable:`Variable`}},es:{axes:`Ejes`,enabled:`Activado`,position:`Posición`,format:`Formato`,density:`Densidad`,displayMode:`Modo de visualización`,gridlineStyle:`Estilo de línea de cuadrícula`,gridlineOpacity:`Opacidad de la línea de cuadrícula`,logarithmicBase:`Base logarítmica`,minimum:`Mínimo`,maximum:`Máximo`,labelGroup:{x:`Etiqueta del eje X`,y:`Etiqueta del eje Y`,y2:`Etiqueta del eje derecho`},ticksGroup:{x:`Marcas del eje X`,y:`Marcas del eje Y`,y2:`Marcas del eje derecho`},color:{x:`Color del eje X`,y:`Color del eje Y`,y2:`Color del eje derecho`},scale:{x:`Tipo de eje de medida`,y:`Tipo de eje izquierdo`,y2:`Tipo de eje derecho`},ranges:{manualAxesRange:`Rango del eje de medida`,"manualAxesRange.x":`Rango manual del eje X`,"manualAxesRange.y":`Rango manual del eje Y`,"axis.y.manualAxesRange":`Rango del eje izquierdo`,"axis.y2.manualAxesRange":`Rango del eje derecho`,manualAxisRange:`Rango del eje de medida`},scales:{linear:`Lineal`,logarithmic:`Logarítmico`},logarithmicBases:{2:`Base 2`,10:`Base 10`},positionsX:{left:`Izquierda`,center:`Centro`,right:`Derecha`},positionsY:{top:`Superior`,middle:`Medio`,bottom:`Inferior`},densities:{compact:`Compacto`,normal:`Normal`,sparse:`Disperso`},ticksModes:{ticks:`Mostrar marcas`,hide:`Ocultar marcas`,gridlines:`Líneas de cuadrícula`},gridStyles:{solid:`Sólido`,dotted:`Punteado`,dashed:`Discontinuo`},tickStyles:{auto:`Auto`,userDefined:`Definido por el usuario`},rangeModes:{default:`Por defecto`,manual:`Manual`,variable:`Variable`}},nl:{axes:`Assen`,enabled:`Ingeschakeld`,position:`Positie`,format:`Formaat`,density:`Dichtheid`,displayMode:`Weergavemodus`,gridlineStyle:`Rasterlijnstijl`,gridlineOpacity:`Rasterlijndoorzichtigheid`,logarithmicBase:`Logaritmische basis`,minimum:`Minimum`,maximum:`Maximum`,labelGroup:{x:`X-as label`,y:`Y-as label`,y2:`Label rechtse as`},ticksGroup:{x:`X-as ticks`,y:`Y-as ticks`,y2:`Ticks rechtse as`},color:{x:`X-as kleur`,y:`Y-as kleur`,y2:`Kleur rechtse as`},scale:{x:`Type metingsas`,y:`Type linkse as`,y2:`Type rechtse as`},ranges:{manualAxesRange:`Bereik metingsas`,"manualAxesRange.x":`Handmatig x-asbereik`,"manualAxesRange.y":`Handmatig y-asbereik`,"axis.y.manualAxesRange":`Bereik linkse as`,"axis.y2.manualAxesRange":`Bereik rechtse as`,manualAxisRange:`Bereik metingsas`},scales:{linear:`Lineair`,logarithmic:`Logaritmisch`},logarithmicBases:{2:`Basis 2`,10:`Basis 10`},positionsX:{left:`Links`,center:`Midden`,right:`Rechts`},positionsY:{top:`Boven`,middle:`Midden`,bottom:`Onder`},densities:{compact:`Compact`,normal:`Normaal`,sparse:`Schaars`},ticksModes:{ticks:`Ticks tonen`,hide:`Ticks verbergen`,gridlines:`Rasterlijnen`},gridStyles:{solid:`Doorlopend`,dotted:`Gestippeld`,dashed:`Onderbroken`},tickStyles:{auto:`Auto`,userDefined:`Door gebruiker bepaald`},rangeModes:{default:`Standaard`,manual:`Handmatig`,variable:`Variabel`}}},n=[`x`,`y`,`y2`],r={"axis.y.type":`axis.y.manualAxesRange`,"axis.y2.type":`axis.y2.manualAxesRange`,measureAxisType:`manualAxisRange`},i=t=>{let i={axes:{label:t.axes}},a={};for(let e of n)i[`${e}AxisLabels`]={label:t.labelGroup[e]},i[`${e}AxisTicks`]={label:t.ticksGroup[e]},a[`axis.${e}.scale`]={label:t.scale[e],enum:t.scales},a[`axis.${e}.scaleLogBase`]={label:t.logarithmicBase,enum:t.logarithmicBases},a[`axis.${e}.color`]={label:t.color[e]},a[`axislabels.${e}.enabled`]={label:t.enabled},a[`axislabels.${e}.position`]={label:t.position,enum:e===`x`?t.positionsX:t.positionsY},a[`axis.${e}.ticksDensity`]={label:t.density,enum:t.densities},a[`axis.${e}.ticksMode`]={label:t.displayMode,enum:t.ticksModes},a[`axis.${e}.ticksStyle`]={label:t.format,enum:t.tickStyles},a[`grid.${e}.style`]={label:t.gridlineStyle,enum:t.gridStyles},a[`grid.${e}.opacity`]={label:t.gridlineOpacity};for(let n of e.manualRangeKeys)i[e.manualRangeGroupKey(n)]={label:t.ranges[n]},a[e.manualRangeBoundKey(n,`minimum`)]={label:t.minimum},a[e.manualRangeBoundKey(n,`maximum`)]={label:t.maximum};for(let[e,n]of Object.entries(r))a[e]={label:t.ranges[n],enum:t.rangeModes};return{groups:i,options:a}},a=new Map,o=e=>{let n=t[e]?e:`en`,r=a.get(n);if(r)return r;let o=i(t[n]);return a.set(n,o),o};exports.getAxisTranslations=o;
2
+ //# sourceMappingURL=axis-options.i18n.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis-options.i18n.cjs","names":[],"sources":["../../../../../libs/dashboard-contents-types/src/lib/shared/utils/axis-options.i18n.ts"],"sourcesContent":["import type { Axis } from '../types/axes';\nimport { manualRangeBoundKey, manualRangeGroupKey, manualRangeKeys } from './axis-options.config';\nimport type { OptionTranslation, TranslationsFile } from './options-config.types';\n\n/**\n * Translations for the axis controls that every cartesian chart shares through\n * `createAxesOptionsGroup`. Charts keep their own translation files for everything else; an entry\n * in a chart file wins over the shared one, so a chart can still reword a single axis control.\n *\n * Labels are phrased per axis rather than per role, matching how the product names these controls\n * (X-axis, Y-axis, right axis) and keeping them distinct when a chart exposes several axes.\n */\ntype AxisTerms = {\n axes: string;\n enabled: string;\n position: string;\n format: string;\n density: string;\n displayMode: string;\n gridlineStyle: string;\n gridlineOpacity: string;\n logarithmicBase: string;\n minimum: string;\n maximum: string;\n labelGroup: Record<Axis, string>;\n ticksGroup: Record<Axis, string>;\n color: Record<Axis, string>;\n scale: Record<Axis, string>;\n ranges: Record<(typeof manualRangeKeys)[number], string>;\n scales: Record<string, string>;\n logarithmicBases: Record<string, string>;\n positionsX: Record<string, string>;\n positionsY: Record<string, string>;\n densities: Record<string, string>;\n ticksModes: Record<string, string>;\n gridStyles: Record<string, string>;\n tickStyles: Record<string, string>;\n rangeModes: Record<string, string>;\n};\n\nconst axisTermsByLanguage: Record<string, AxisTerms> = {\n en: {\n axes: 'Axes',\n enabled: 'Enabled',\n position: 'Position',\n format: 'Format',\n density: 'Density',\n displayMode: 'Display mode',\n gridlineStyle: 'Gridline style',\n gridlineOpacity: 'Gridline opacity',\n logarithmicBase: 'Logarithmic base',\n minimum: 'Minimum',\n maximum: 'Maximum',\n labelGroup: { x: 'X-axis label', y: 'Y-axis label', y2: 'Right axis label' },\n ticksGroup: { x: 'X-axis ticks', y: 'Y-axis ticks', y2: 'Right axis ticks' },\n color: { x: 'X-axis color', y: 'Y-axis color', y2: 'Right axis color' },\n scale: { x: 'Measure axis type', y: 'Left axis type', y2: 'Right axis type' },\n ranges: {\n manualAxesRange: 'Measure axis range',\n 'manualAxesRange.x': 'Manual x-axis range',\n 'manualAxesRange.y': 'Manual y-axis range',\n 'axis.y.manualAxesRange': 'Left axis range',\n 'axis.y2.manualAxesRange': 'Right axis range',\n manualAxisRange: 'Measure axis range'\n },\n scales: { linear: 'Linear', logarithmic: 'Logarithmic' },\n logarithmicBases: { 2: 'Base 2', 10: 'Base 10' },\n positionsX: { left: 'Left', center: 'Center', right: 'Right' },\n positionsY: { top: 'Top', middle: 'Middle', bottom: 'Bottom' },\n densities: { compact: 'Compact', normal: 'Normal', sparse: 'Sparse' },\n ticksModes: { ticks: 'Show ticks', hide: 'Hide ticks', gridlines: 'Gridlines' },\n gridStyles: { solid: 'Solid', dotted: 'Dotted', dashed: 'Dashed' },\n tickStyles: { auto: 'Auto', userDefined: 'User defined' },\n rangeModes: { default: 'Default', manual: 'Manual', variable: 'Variable' }\n },\n de: {\n axes: 'Achsen',\n enabled: 'Aktiviert',\n position: 'Position',\n format: 'Format',\n density: 'Dichte',\n displayMode: 'Anzeigemodus',\n gridlineStyle: 'Gitternetzlinienstil',\n gridlineOpacity: 'Gitternetzlinien-Deckkraft',\n logarithmicBase: 'Logarithmusbasis',\n minimum: 'Minimum',\n maximum: 'Maximum',\n labelGroup: {\n x: 'Beschriftung der X-Achse',\n y: 'Beschriftung der Y-Achse',\n y2: 'Beschriftung der rechten Achse'\n },\n ticksGroup: {\n x: 'Teilstriche auf der X-Achse',\n y: 'Teilstriche auf der Y-Achse',\n y2: 'Teilstriche auf der rechten Achse'\n },\n color: { x: 'X-Achsenfarbe', y: 'Y-Achsenfarbe', y2: 'Farbe der rechten Achse' },\n scale: { x: 'Messachsentyp', y: 'Linker Achsentyp', y2: 'Typ der rechten Achse' },\n ranges: {\n manualAxesRange: 'Messachsenbereich',\n 'manualAxesRange.x': 'Manueller X-Achsenbereich',\n 'manualAxesRange.y': 'Manueller Y-Achsenbereich',\n 'axis.y.manualAxesRange': 'Linker Achsenbereich',\n 'axis.y2.manualAxesRange': 'Rechter Achsenbereich',\n manualAxisRange: 'Messachsenbereich'\n },\n scales: { linear: 'Linear', logarithmic: 'Logarithmisch' },\n logarithmicBases: { 2: 'Basis 2', 10: 'Basis 10' },\n positionsX: { left: 'Links', center: 'Mitte', right: 'Rechts' },\n positionsY: { top: 'Oben', middle: 'Mitte', bottom: 'Unten' },\n densities: { compact: 'Kompakt', normal: 'Normal', sparse: 'Spärlich' },\n ticksModes: { ticks: 'Teilstriche anzeigen', hide: 'Teilstriche ausblenden', gridlines: 'Gitternetzlinien' },\n gridStyles: { solid: 'Durchgezogen', dotted: 'Gepunktet', dashed: 'Gestrichelt' },\n tickStyles: { auto: 'Auto', userDefined: 'Benutzerdefiniert' },\n rangeModes: { default: 'Standard', manual: 'Manuell', variable: 'Variabel' }\n },\n fr: {\n axes: 'Axes',\n enabled: 'Activé',\n position: 'Position',\n format: 'Format',\n density: 'Densité',\n displayMode: 'Mode d\\'affichage',\n gridlineStyle: 'Style de quadrillage',\n gridlineOpacity: 'Opacité du quadrillage',\n logarithmicBase: 'Base logarithmique',\n minimum: 'Minimum',\n maximum: 'Maximum',\n labelGroup: {\n x: 'Étiquette de l\\'axe X',\n y: 'Étiquette de l\\'axe Y',\n y2: 'Étiquette de l\\'axe droit'\n },\n ticksGroup: {\n x: 'Coches de l\\'axe X',\n y: 'Coches de l\\'axe Y',\n y2: 'Coches de l\\'axe droit'\n },\n color: { x: 'Couleur de l\\'axe X', y: 'Couleur de l\\'axe Y', y2: 'Couleur de l\\'axe droit' },\n scale: { x: 'Type de l\\'axe de mesure', y: 'Type de l\\'axe gauche', y2: 'Type de l\\'axe droit' },\n ranges: {\n manualAxesRange: 'Plage de l\\'axe de mesure',\n 'manualAxesRange.x': 'Plage manuelle de l\\'axe X',\n 'manualAxesRange.y': 'Plage manuelle de l\\'axe Y',\n 'axis.y.manualAxesRange': 'Plage de l\\'axe gauche',\n 'axis.y2.manualAxesRange': 'Plage de l\\'axe droit',\n manualAxisRange: 'Plage de l\\'axe de mesure'\n },\n scales: { linear: 'Linéaire', logarithmic: 'Logarithmique' },\n logarithmicBases: { 2: 'Base 2', 10: 'Base 10' },\n positionsX: { left: 'Gauche', center: 'Centre', right: 'Droite' },\n positionsY: { top: 'Haut', middle: 'Milieu', bottom: 'Bas' },\n densities: { compact: 'Compact', normal: 'Normal', sparse: 'Clairsemé' },\n ticksModes: { ticks: 'Afficher les coches', hide: 'Masquer les coches', gridlines: 'Quadrillage' },\n gridStyles: { solid: 'Continu', dotted: 'Pointillé', dashed: 'Tirets' },\n tickStyles: { auto: 'Auto', userDefined: 'Défini par l\\'utilisateur' },\n rangeModes: { default: 'Par défaut', manual: 'Manuel', variable: 'Variable' }\n },\n es: {\n axes: 'Ejes',\n enabled: 'Activado',\n position: 'Posición',\n format: 'Formato',\n density: 'Densidad',\n displayMode: 'Modo de visualización',\n gridlineStyle: 'Estilo de línea de cuadrícula',\n gridlineOpacity: 'Opacidad de la línea de cuadrícula',\n logarithmicBase: 'Base logarítmica',\n minimum: 'Mínimo',\n maximum: 'Máximo',\n labelGroup: { x: 'Etiqueta del eje X', y: 'Etiqueta del eje Y', y2: 'Etiqueta del eje derecho' },\n ticksGroup: { x: 'Marcas del eje X', y: 'Marcas del eje Y', y2: 'Marcas del eje derecho' },\n color: { x: 'Color del eje X', y: 'Color del eje Y', y2: 'Color del eje derecho' },\n scale: { x: 'Tipo de eje de medida', y: 'Tipo de eje izquierdo', y2: 'Tipo de eje derecho' },\n ranges: {\n manualAxesRange: 'Rango del eje de medida',\n 'manualAxesRange.x': 'Rango manual del eje X',\n 'manualAxesRange.y': 'Rango manual del eje Y',\n 'axis.y.manualAxesRange': 'Rango del eje izquierdo',\n 'axis.y2.manualAxesRange': 'Rango del eje derecho',\n manualAxisRange: 'Rango del eje de medida'\n },\n scales: { linear: 'Lineal', logarithmic: 'Logarítmico' },\n logarithmicBases: { 2: 'Base 2', 10: 'Base 10' },\n positionsX: { left: 'Izquierda', center: 'Centro', right: 'Derecha' },\n positionsY: { top: 'Superior', middle: 'Medio', bottom: 'Inferior' },\n densities: { compact: 'Compacto', normal: 'Normal', sparse: 'Disperso' },\n ticksModes: { ticks: 'Mostrar marcas', hide: 'Ocultar marcas', gridlines: 'Líneas de cuadrícula' },\n gridStyles: { solid: 'Sólido', dotted: 'Punteado', dashed: 'Discontinuo' },\n tickStyles: { auto: 'Auto', userDefined: 'Definido por el usuario' },\n rangeModes: { default: 'Por defecto', manual: 'Manual', variable: 'Variable' }\n },\n nl: {\n axes: 'Assen',\n enabled: 'Ingeschakeld',\n position: 'Positie',\n format: 'Formaat',\n density: 'Dichtheid',\n displayMode: 'Weergavemodus',\n gridlineStyle: 'Rasterlijnstijl',\n gridlineOpacity: 'Rasterlijndoorzichtigheid',\n logarithmicBase: 'Logaritmische basis',\n minimum: 'Minimum',\n maximum: 'Maximum',\n labelGroup: { x: 'X-as label', y: 'Y-as label', y2: 'Label rechtse as' },\n ticksGroup: { x: 'X-as ticks', y: 'Y-as ticks', y2: 'Ticks rechtse as' },\n color: { x: 'X-as kleur', y: 'Y-as kleur', y2: 'Kleur rechtse as' },\n scale: { x: 'Type metingsas', y: 'Type linkse as', y2: 'Type rechtse as' },\n ranges: {\n manualAxesRange: 'Bereik metingsas',\n 'manualAxesRange.x': 'Handmatig x-asbereik',\n 'manualAxesRange.y': 'Handmatig y-asbereik',\n 'axis.y.manualAxesRange': 'Bereik linkse as',\n 'axis.y2.manualAxesRange': 'Bereik rechtse as',\n manualAxisRange: 'Bereik metingsas'\n },\n scales: { linear: 'Lineair', logarithmic: 'Logaritmisch' },\n logarithmicBases: { 2: 'Basis 2', 10: 'Basis 10' },\n positionsX: { left: 'Links', center: 'Midden', right: 'Rechts' },\n positionsY: { top: 'Boven', middle: 'Midden', bottom: 'Onder' },\n densities: { compact: 'Compact', normal: 'Normaal', sparse: 'Schaars' },\n ticksModes: { ticks: 'Ticks tonen', hide: 'Ticks verbergen', gridlines: 'Rasterlijnen' },\n gridStyles: { solid: 'Doorlopend', dotted: 'Gestippeld', dashed: 'Onderbroken' },\n tickStyles: { auto: 'Auto', userDefined: 'Door gebruiker bepaald' },\n rangeModes: { default: 'Standaard', manual: 'Handmatig', variable: 'Variabel' }\n }\n};\n\nconst axes: Axis[] = ['x', 'y', 'y2'];\n\nconst rangeModeKeys: Record<string, (typeof manualRangeKeys)[number]> = {\n 'axis.y.type': 'axis.y.manualAxesRange',\n 'axis.y2.type': 'axis.y2.manualAxesRange',\n measureAxisType: 'manualAxisRange'\n};\n\nconst buildTranslations = (terms: AxisTerms): TranslationsFile => {\n const groups: Record<string, { label?: string }> = { axes: { label: terms.axes } };\n const options: Record<string, OptionTranslation> = {};\n\n for (const axis of axes) {\n groups[`${axis}AxisLabels`] = { label: terms.labelGroup[axis] };\n groups[`${axis}AxisTicks`] = { label: terms.ticksGroup[axis] };\n\n options[`axis.${axis}.scale`] = { label: terms.scale[axis], enum: terms.scales };\n options[`axis.${axis}.scaleLogBase`] = { label: terms.logarithmicBase, enum: terms.logarithmicBases };\n options[`axis.${axis}.color`] = { label: terms.color[axis] };\n options[`axislabels.${axis}.enabled`] = { label: terms.enabled };\n options[`axislabels.${axis}.position`] = {\n label: terms.position,\n enum: axis === 'x' ? terms.positionsX : terms.positionsY\n };\n options[`axis.${axis}.ticksDensity`] = { label: terms.density, enum: terms.densities };\n options[`axis.${axis}.ticksMode`] = { label: terms.displayMode, enum: terms.ticksModes };\n options[`axis.${axis}.ticksStyle`] = { label: terms.format, enum: terms.tickStyles };\n options[`grid.${axis}.style`] = { label: terms.gridlineStyle, enum: terms.gridStyles };\n options[`grid.${axis}.opacity`] = { label: terms.gridlineOpacity };\n }\n\n for (const rangeKey of manualRangeKeys) {\n groups[manualRangeGroupKey(rangeKey)] = { label: terms.ranges[rangeKey] };\n options[manualRangeBoundKey(rangeKey, 'minimum')] = { label: terms.minimum };\n options[manualRangeBoundKey(rangeKey, 'maximum')] = { label: terms.maximum };\n }\n\n for (const [modeKey, rangeKey] of Object.entries(rangeModeKeys)) {\n options[modeKey] = { label: terms.ranges[rangeKey], enum: terms.rangeModes };\n }\n\n return { groups, options };\n};\n\nconst cache = new Map<string, TranslationsFile>();\n\n/** Shared axis translations for a language, falling back to English. */\nexport const getAxisTranslations = (language: string): TranslationsFile => {\n const lang = axisTermsByLanguage[language] ? language : 'en';\n const cached = cache.get(lang);\n\n if (cached) {\n return cached;\n }\n\n const translations = buildTranslations(axisTermsByLanguage[lang]);\n\n cache.set(lang, translations);\n\n return translations;\n};\n"],"mappings":"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"}